Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

forms-extras.js 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /**
  2. * Form Extras
  3. */
  4. 'use strict';
  5. document.addEventListener('DOMContentLoaded', function (e) {
  6. const creditCard = document.querySelector('.credit-card-mask'),
  7. phoneMask = document.querySelector('.phone-number-mask'),
  8. dateMask = document.querySelector('.date-mask'),
  9. timeMask = document.querySelector('.time-mask'),
  10. numeralMask = document.querySelector('.numeral-mask'),
  11. blockMask = document.querySelector('.block-mask'),
  12. delimiterMask = document.querySelector('.delimiter-mask'),
  13. customDelimiter = document.querySelector('.custom-delimiter-mask'),
  14. prefixMask = document.querySelector('.prefix-mask');
  15. // Cleave Zen Input Mask
  16. // --------------------------------------------------------------------
  17. // Credit Card
  18. if (creditCard) {
  19. creditCard.addEventListener('input', event => {
  20. creditCard.value = formatCreditCard(event.target.value);
  21. const cleanValue = event.target.value.replace(/\D/g, '');
  22. let cardType = getCreditCardType(cleanValue);
  23. if (cardType && cardType !== 'unknown' && cardType !== 'general') {
  24. document.querySelector('.card-type').innerHTML =
  25. `<img src="${assetsPath}img/icons/payments/${cardType}-cc.png" height="20"/>`;
  26. } else {
  27. document.querySelector('.card-type').innerHTML = '';
  28. }
  29. });
  30. registerCursorTracker({
  31. input: creditCard,
  32. delimiter: ' '
  33. });
  34. }
  35. // Phone Number
  36. if (phoneMask) {
  37. phoneMask.addEventListener('input', event => {
  38. const cleanValue = event.target.value.replace(/\D/g, '');
  39. phoneMask.value = formatGeneral(cleanValue, {
  40. blocks: [3, 3, 4],
  41. delimiters: [' ', ' ']
  42. });
  43. });
  44. registerCursorTracker({
  45. input: phoneMask,
  46. delimiter: ' '
  47. });
  48. }
  49. // Date
  50. if (dateMask) {
  51. dateMask.addEventListener('input', event => {
  52. dateMask.value = formatDate(event.target.value, {
  53. delimiter: '-',
  54. datePattern: ['Y', 'm', 'd']
  55. });
  56. });
  57. registerCursorTracker({
  58. input: dateMask,
  59. delimiter: '-'
  60. });
  61. }
  62. // Time
  63. if (timeMask) {
  64. timeMask.addEventListener('input', event => {
  65. timeMask.value = formatTime(event.target.value, {
  66. timePattern: ['h', 'm', 's']
  67. });
  68. });
  69. registerCursorTracker({
  70. input: timeMask,
  71. delimiter: ':'
  72. });
  73. }
  74. // Numeral
  75. if (numeralMask) {
  76. numeralMask.addEventListener('input', event => {
  77. numeralMask.value = formatNumeral(event.target.value, {
  78. numeralThousandsGroupStyle: 'thousand'
  79. });
  80. });
  81. }
  82. // Block
  83. if (blockMask) {
  84. blockMask.addEventListener('input', event => {
  85. blockMask.value = formatGeneral(event.target.value, {
  86. blocks: [4, 3, 3],
  87. delimiters: [' ', ' ']
  88. });
  89. });
  90. registerCursorTracker({
  91. input: blockMask,
  92. delimiter: ' '
  93. });
  94. }
  95. // Delimiter
  96. if (delimiterMask) {
  97. delimiterMask.addEventListener('input', event => {
  98. delimiterMask.value = formatGeneral(event.target.value, {
  99. blocks: [3, 3, 3],
  100. delimiter: '·'
  101. });
  102. });
  103. registerCursorTracker({
  104. input: delimiterMask,
  105. delimiter: '.'
  106. });
  107. }
  108. // Custom Delimiter
  109. if (customDelimiter) {
  110. customDelimiter.addEventListener('input', event => {
  111. customDelimiter.value = formatGeneral(event.target.value, {
  112. delimiters: ['.', '.', '-'],
  113. blocks: [3, 3, 3, 2],
  114. uppercase: true
  115. });
  116. });
  117. registerCursorTracker({
  118. input: customDelimiter,
  119. delimiters: ['.', '-']
  120. });
  121. }
  122. // Prefix
  123. if (prefixMask) {
  124. const prefixOption = {
  125. prefix: '+63',
  126. blocks: [3, 3, 3, 4],
  127. delimiter: ' '
  128. };
  129. registerCursorTracker({
  130. input: prefixMask,
  131. delimiter: ' '
  132. });
  133. prefixMask.value = formatGeneral('', prefixOption);
  134. prefixMask.addEventListener('input', event => {
  135. prefixMask.value = formatGeneral(event.target.value, prefixOption);
  136. });
  137. }
  138. const inputMaxLength = document.getElementById('maxLength-example1').getAttribute('maxlength');
  139. const inputInfo = document.getElementById('input-maxlength-info');
  140. const inputElement = document.getElementById('maxLength-example1');
  141. // Set initial character count
  142. window.Helpers.maxLengthCount(inputElement, inputInfo, inputMaxLength);
  143. // Add event listener to update the character count
  144. inputElement.addEventListener('input', function () {
  145. window.Helpers.maxLengthCount(inputElement, inputInfo, inputMaxLength);
  146. });
  147. const textareaMaxLength = document.getElementById('maxLength-example2').getAttribute('maxlength');
  148. const textareaInfo = document.getElementById('textarea-maxlength-info');
  149. const textareaElement = document.getElementById('maxLength-example2');
  150. window.Helpers.maxLengthCount(textareaElement, textareaInfo, textareaMaxLength);
  151. textareaElement.addEventListener('input', function () {
  152. window.Helpers.maxLengthCount(textareaElement, textareaInfo, textareaMaxLength);
  153. });
  154. // Form Repeater
  155. // ! Using jQuery each loop to add dynamic id and class for inputs. You may need to improve it based on form fields.
  156. // -----------------------------------------------------------------------------------------------------------------
  157. const formRepeater = $('.form-repeater');
  158. if (formRepeater.length) {
  159. var row = 2;
  160. var col = 1;
  161. formRepeater.on('submit', function (e) {
  162. e.preventDefault();
  163. });
  164. formRepeater.repeater({
  165. show: function () {
  166. var fromControl = $(this).find('.form-control, .form-select');
  167. var formLabel = $(this).find('.form-label');
  168. fromControl.each(function (i) {
  169. var id = 'form-repeater-' + row + '-' + col;
  170. $(fromControl[i]).attr('id', id);
  171. $(formLabel[i]).attr('for', id);
  172. col++;
  173. });
  174. row++;
  175. $(this).slideDown();
  176. },
  177. hide: function (e) {
  178. confirm('Are you sure you want to delete this element?') && $(this).slideUp(e);
  179. }
  180. });
  181. }
  182. });