@@ -14,19 +14,21 @@ const logger = logging.getLogger("pat-validation");
1414
1515export const parser = new Parser ( "validation" ) ;
1616parser . addArgument ( "disable-selector" , "[type=submit], button:not([type=button])" ) ; // Elements which must be disabled if there are errors
17- parser . addArgument ( "message-date" , "" ) ; // "This value must be a valid date");
18- parser . addArgument ( "message-datetime" , "" ) ; // "This value must be a valid date and time");
19- parser . addArgument ( "message-email" , "" ) ; // "This value must be a valid email address");
20- parser . addArgument ( "message-max" , "" ) ; // "This value must be less than or equal to %{count}");
21- parser . addArgument ( "message-min" , "" ) ; // "This value must be greater than or equal to %{count}"); // prettier-ignore
22- parser . addArgument ( "message-number" , "" ) ; // "This value must be a number");
23- parser . addArgument ( "message-required" , "" ) ; // "This field is required");
17+ parser . addArgument ( "message-date" , "" ) ; // "This value must be a valid date"
18+ parser . addArgument ( "message-datetime" , "" ) ; // "This value must be a valid date and time"
19+ parser . addArgument ( "message-email" , "" ) ; // "This value must be a valid email address"
20+ parser . addArgument ( "message-max" , "" ) ; // "This value must be less than or equal to %{count}"
21+ parser . addArgument ( "message-min" , "" ) ; // "This value must be greater than or equal to %{count}"
22+ parser . addArgument ( "message-number" , "" ) ; // "This value must be a number"
23+ parser . addArgument ( "message-required" , "" ) ; // "This field is required"
2424parser . addArgument ( "message-equality" , "is not equal to %{attribute}." ) ;
25+ parser . addArgument ( "message-min-values" , "You need to select at least ${min} item(s)." ) ;
26+ parser . addArgument ( "message-max-values" , "You need to select at most ${max} item(s)." ) ;
2527parser . addArgument ( "not-after" , null ) ;
2628parser . addArgument ( "not-before" , null ) ;
2729parser . addArgument ( "equality" , null ) ;
28- parser . addArgument ( "min-selection " , null ) ;
29- parser . addArgument ( "max-selection " , null ) ;
30+ parser . addArgument ( "min-values " , null ) ;
31+ parser . addArgument ( "max-values " , null ) ;
3032parser . addArgument ( "delay" , 100 ) ; // Delay before validation is done to avoid validating while typing.
3133
3234// BBB
@@ -257,7 +259,11 @@ class Pattern extends BasePattern {
257259 logger . debug ( "Check `no-before` input." , not_after_el ) ;
258260 this . check_input ( { input : not_before_el , stop : true } ) ;
259261 }
260- } else if ( input_options . minSelection || input_options . maxSelection )
262+ } else if ( input_options . minValues || input_options . maxValues ) {
263+
264+ const min_values = input_options . minValues !== null && parseInt ( input_options . minValues , 10 )
265+ const max_values = input_options . maxValues !== null && parseInt ( input_options . maxValues , 10 )
266+
261267 // This makes only sense for inputs with the same name.
262268 const valued_siblings = [ ...this . el . elements ] . filter ( ( el ) => {
263269 // Filter for siblings with same name.
@@ -274,16 +280,18 @@ class Pattern extends BasePattern {
274280 return el . value !== undefined ;
275281 } ) ;
276282
277- if ( valued_siblings > input_options . maxSelection ) {
283+ if ( max_values !== null && valued_siblings . length > max_values ) {
278284 this . set_error ( {
279285 input : input ,
280- msg : "You have exceeded the maximum number of selections."
286+ msg : input_options . message [ "max-values" ] ,
287+ max : max_values ,
281288 } )
282289 }
283- if ( valued_siblings < input_options . minSelection ) {
290+ if ( min_values !== null && valued_siblings . length < min_values ) {
284291 this . set_error ( {
285292 input : input ,
286- msg : "You need to select at least..."
293+ msg : input_options . message [ "min-values" ] ,
294+ min : min_values ,
287295 } )
288296 }
289297 }
0 commit comments