@@ -252,6 +252,17 @@ $.fn.form = function(parameters) {
252252 bracketedRule : function ( rule ) {
253253 return ( rule . type && rule . type . match ( settings . regExp . bracket ) ) ;
254254 } ,
255+ shorthandFields : function ( fields ) {
256+ var
257+ fieldKeys = Object . keys ( fields ) ,
258+ firstRule = fields [ fieldKeys [ 0 ] ]
259+ ;
260+ return module . is . shorthandRules ( firstRule ) ;
261+ } ,
262+ // duck type rule test
263+ shorthandRules : function ( rules ) {
264+ return ( typeof rules == 'string' || $ . isArray ( rules ) ) ;
265+ } ,
255266 empty : function ( $field ) {
256267 if ( ! $field || $field . length === 0 ) {
257268 return true ;
@@ -403,6 +414,23 @@ $.fn.form = function(parameters) {
403414 : 'keyup'
404415 ;
405416 } ,
417+ fieldsFromShorthand : function ( fields ) {
418+ var
419+ fullFields = { }
420+ ;
421+ $ . each ( fields , function ( name , rules ) {
422+ if ( typeof rules == 'string' ) {
423+ rules = [ rules ] ;
424+ }
425+ fullFields [ name ] = {
426+ rules : [ ]
427+ } ;
428+ $ . each ( rules , function ( index , rule ) {
429+ fullFields [ name ] . rules . push ( { type : rule } ) ;
430+ } ) ;
431+ } ) ;
432+ return fullFields ;
433+ } ,
406434 prompt : function ( rule , field ) {
407435 var
408436 ruleName = module . get . ruleName ( rule ) ,
@@ -453,23 +481,9 @@ $.fn.form = function(parameters) {
453481 }
454482 else {
455483 // 2.x
456- if ( parameters . fields ) {
457- ruleKeys = Object . keys ( parameters . fields ) ;
458- if ( typeof parameters . fields [ ruleKeys [ 0 ] ] == 'string' || $ . isArray ( parameters . fields [ ruleKeys [ 0 ] ] ) ) {
459- $ . each ( parameters . fields , function ( name , rules ) {
460- if ( typeof rules == 'string' ) {
461- rules = [ rules ] ;
462- }
463- parameters . fields [ name ] = {
464- rules : [ ]
465- } ;
466- $ . each ( rules , function ( index , rule ) {
467- parameters . fields [ name ] . rules . push ( { type : rule } ) ;
468- } ) ;
469- } ) ;
470- }
484+ if ( parameters . fields && module . is . shorthandFields ( parameters . fields ) ) {
485+ parameters . fields = module . get . fieldsFromShorthand ( parameters . fields ) ;
471486 }
472-
473487 settings = $ . extend ( true , { } , $ . fn . form . settings , parameters ) ;
474488 validation = $ . extend ( { } , $ . fn . form . settings . defaults , settings . fields ) ;
475489 module . verbose ( 'Extending settings' , validation , settings ) ;
@@ -589,8 +603,11 @@ $.fn.form = function(parameters) {
589603 }
590604 else {
591605 if ( isRadio ) {
592- if ( isChecked ) {
593- values [ name ] = value ;
606+ if ( values [ name ] === undefined ) {
607+ values [ name ] = ( isChecked )
608+ ? true
609+ : false
610+ ;
594611 }
595612 }
596613 else if ( isCheckbox ) {
@@ -641,6 +658,44 @@ $.fn.form = function(parameters) {
641658 } ,
642659
643660 add : {
661+ // alias
662+ rule : function ( name , rules ) {
663+ module . add . field ( name , rules ) ;
664+ } ,
665+ field : function ( name , rules ) {
666+ var
667+ newValidation = { }
668+ ;
669+ if ( module . is . shorthandRules ( rules ) ) {
670+ rules = $ . isArray ( rules )
671+ ? rules
672+ : [ rules ]
673+ ;
674+ newValidation [ name ] = {
675+ rules : [ ]
676+ } ;
677+ $ . each ( rules , function ( index , rule ) {
678+ newValidation [ name ] . rules . push ( { type : rule } ) ;
679+ } ) ;
680+ }
681+ else {
682+ newValidation [ name ] = rules ;
683+ }
684+ validation = $ . extend ( { } , validation , newValidation ) ;
685+ module . debug ( 'Adding rules' , newValidation , validation ) ;
686+ } ,
687+ fields : function ( fields ) {
688+ var
689+ newValidation
690+ ;
691+ if ( fields && module . is . shorthandFields ( fields ) ) {
692+ newValidation = module . get . fieldsFromShorthand ( fields ) ;
693+ }
694+ else {
695+ newValidation = fields ;
696+ }
697+ validation = $ . extend ( { } , validation , newValidation ) ;
698+ } ,
644699 prompt : function ( identifier , errors ) {
645700 var
646701 $field = module . get . field ( identifier ) ,
@@ -693,6 +748,51 @@ $.fn.form = function(parameters) {
693748 } ,
694749
695750 remove : {
751+ rule : function ( field , rule ) {
752+ var
753+ rules = $ . isArray ( rule )
754+ ? rule
755+ : [ rule ]
756+ ;
757+ if ( rule == undefined ) {
758+ module . debug ( 'Removed all rules' ) ;
759+ validation [ field ] . rules = [ ] ;
760+ return ;
761+ }
762+ if ( validation [ field ] == undefined || ! $ . isArray ( validation [ field ] . rules ) ) {
763+ return ;
764+ }
765+ $ . each ( validation [ field ] . rules , function ( index , rule ) {
766+ if ( rules . indexOf ( rule . type ) !== - 1 ) {
767+ module . debug ( 'Removed rule' , rule . type ) ;
768+ validation [ field ] . rules . splice ( index , 1 ) ;
769+ }
770+ } ) ;
771+ } ,
772+ field : function ( field ) {
773+ var
774+ fields = $ . isArray ( field )
775+ ? field
776+ : [ field ]
777+ ;
778+ $ . each ( fields , function ( index , field ) {
779+ module . remove . rule ( field ) ;
780+ } ) ;
781+ } ,
782+ // alias
783+ rules : function ( field , rules ) {
784+ if ( $ . isArray ( field ) ) {
785+ $ . each ( fields , function ( index , field ) {
786+ module . remove . rule ( field , rules ) ;
787+ } ) ;
788+ }
789+ else {
790+ module . remove . rule ( field , rules ) ;
791+ }
792+ } ,
793+ fields : function ( fields ) {
794+ module . remove . field ( fields ) ;
795+ } ,
696796 prompt : function ( identifier ) {
697797 var
698798 $field = module . get . field ( identifier ) ,
@@ -857,7 +957,7 @@ $.fn.form = function(parameters) {
857957 if ( typeof field == 'string' ) {
858958 module . verbose ( 'Validating field' , field ) ;
859959 fieldName = field ;
860- field = validation [ field ] ;
960+ field = validation [ field ] ;
861961 }
862962 var
863963 identifier = field . identifier || fieldName ,
0 commit comments