validation.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. (function (factory) {
  6. 'use strict';
  7. if (typeof define === 'function' && define.amd) {
  8. define([
  9. 'jquery',
  10. 'mage/validation',
  11. 'mage/translate'
  12. ], factory);
  13. } else {
  14. factory(jQuery);
  15. }
  16. }(function ($) {
  17. 'use strict';
  18. $.each({
  19. 'validate-grouped-qty': [
  20. function (value, element, params) {
  21. var result = false,
  22. total = 0;
  23. $(params).find('input[data-validate*="validate-grouped-qty"]').each(function (i, e) {
  24. var val = $(e).val(),
  25. valInt;
  26. if (val && val.length > 0) {
  27. result = true;
  28. valInt = parseFloat(val) || 0;
  29. if (valInt >= 0) {
  30. total += valInt;
  31. } else {
  32. result = false;
  33. return result;
  34. }
  35. }
  36. });
  37. return result && total > 0;
  38. },
  39. $.mage.__('Please specify the quantity of product(s).')
  40. ],
  41. 'validate-one-checkbox-required-by-name': [
  42. function (value, element, params) {
  43. var checkedCount = 0,
  44. container;
  45. if (element.type === 'checkbox') {
  46. $('[name="' + element.name + '"]').each(function () {
  47. if ($(this).is(':checked')) {
  48. checkedCount += 1;
  49. return false;
  50. }
  51. });
  52. }
  53. container = '#' + params;
  54. if (checkedCount > 0) {
  55. $(container).removeClass('validation-failed');
  56. $(container).addClass('validation-passed');
  57. return true;
  58. }
  59. $(container).addClass('validation-failed');
  60. $(container).removeClass('validation-passed');
  61. return false;
  62. },
  63. $.mage.__('Please select one of the options.')
  64. ],
  65. 'validate-date-between': [
  66. function (value, element, params) {
  67. var minDate = new Date(params[0]),
  68. maxDate = new Date(params[1]),
  69. inputDate = new Date(element.value),
  70. message;
  71. minDate.setHours(0);
  72. maxDate.setHours(0);
  73. if (inputDate >= minDate && inputDate <= maxDate) {
  74. return true;
  75. }
  76. message = $.mage.__('Please enter a date between %min and %max.');
  77. this.dateBetweenErrorMessage = message.replace('%min', minDate).replace('%max', maxDate);
  78. return false;
  79. },
  80. function () {
  81. return this.dateBetweenErrorMessage;
  82. }
  83. ],
  84. 'validate-dob': [
  85. function (val, element, params) {
  86. var dob = $(element).parents('.customer-dob'),
  87. dayVal, monthVal, yearVal, dobLength, day, month, year, curYear,
  88. validYearMessage, validateDayInMonth, validDateMessage, today, dateEntered;
  89. $(dob).find('.' + this.settings.errorClass).removeClass(this.settings.errorClass);
  90. dayVal = $(dob).find(params[0]).find('input:text').val();
  91. monthVal = $(dob).find(params[1]).find('input:text').val();
  92. yearVal = $(dob).find(params[2]).find('input:text').val();
  93. dobLength = dayVal.length + monthVal.length + yearVal.length;
  94. if (params[3] && dobLength === 0) {
  95. this.dobErrorMessage = $.mage.__('This is a required field.');
  96. return false;
  97. }
  98. if (!params[3] && dobLength === 0) {
  99. return true;
  100. }
  101. day = parseInt(dayVal, 10) || 0;
  102. month = parseInt(monthVal, 10) || 0;
  103. year = parseInt(yearVal, 10) || 0;
  104. curYear = (new Date()).getFullYear();
  105. if (!day || !month || !year) {
  106. this.dobErrorMessage = $.mage.__('Please enter a valid full date.');
  107. return false;
  108. }
  109. if (month < 1 || month > 12) {
  110. this.dobErrorMessage = $.mage.__('Please enter a valid month (1-12).');
  111. return false;
  112. }
  113. if (year < 1900 || year > curYear) {
  114. validYearMessage = $.mage.__('Please enter a valid year (1900-%1).');
  115. this.dobErrorMessage = validYearMessage.replace('%1', curYear.toString());
  116. return false;
  117. }
  118. validateDayInMonth = new Date(year, month, 0).getDate();
  119. if (day < 1 || day > validateDayInMonth) {
  120. validDateMessage = $.mage.__('Please enter a valid day (1-%1).');
  121. this.dobErrorMessage = validDateMessage.replace('%1', validateDayInMonth.toString());
  122. return false;
  123. }
  124. today = new Date();
  125. dateEntered = new Date();
  126. dateEntered.setFullYear(year, month - 1, day);
  127. if (dateEntered > today) {
  128. this.dobErrorMessage = $.mage.__('Please enter a date from the past.');
  129. return false;
  130. }
  131. day = day % 10 === day ? '0' + day : day;
  132. month = month % 10 === month ? '0' + month : month;
  133. $(element).val(month + '/' + day + '/' + year);
  134. return true;
  135. },
  136. function () {
  137. return this.dobErrorMessage;
  138. }
  139. ]
  140. }, function (i, rule) {
  141. rule.unshift(i);
  142. $.validator.addMethod.apply($.validator, rule);
  143. });
  144. }));