PageRenderTime 20ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/public/assets/pages/scripts/components-form-tools.js

https://gitlab.com/SFMSP/Hagape
JavaScript | 253 lines | 204 code | 42 blank | 7 comment | 11 complexity | ce34c9582cb799a5fd4b21a09d7b423f MD5 | raw file
  1. var ComponentsFormTools = function () {
  2. var handleBootstrapMaxlength = function() {
  3. $('#maxlength_defaultconfig').maxlength({
  4. limitReachedClass: "label label-danger",
  5. })
  6. $('#maxlength_thresholdconfig').maxlength({
  7. limitReachedClass: "label label-danger",
  8. threshold: 20
  9. });
  10. $('#maxlength_alloptions').maxlength({
  11. alwaysShow: true,
  12. warningClass: "label label-success",
  13. limitReachedClass: "label label-danger",
  14. separator: ' out of ',
  15. preText: 'You typed ',
  16. postText: ' chars available.',
  17. validate: true
  18. });
  19. $('#maxlength_textarea').maxlength({
  20. limitReachedClass: "label label-danger",
  21. alwaysShow: true
  22. });
  23. $('#maxlength_placement').maxlength({
  24. limitReachedClass: "label label-danger",
  25. alwaysShow: true,
  26. placement: App.isRTL() ? 'top-right' : 'top-left'
  27. });
  28. }
  29. var handleInputMasks = function () {
  30. $("#mask_date").inputmask("d/m/y", {
  31. autoUnmask: true
  32. }); //direct mask
  33. $("#mask_date1").inputmask("d/m/y", {
  34. "placeholder": "*"
  35. }); //change the placeholder
  36. $("#mask_date2").inputmask("d/m/y", {
  37. "placeholder": "dd/mm/yyyy"
  38. }); //multi-char placeholder
  39. $("#mask_phone").inputmask("mask", {
  40. "mask": "(999) 999-9999"
  41. }); //specifying fn & options
  42. $("#mask_tin").inputmask({
  43. "mask": "99-9999999",
  44. placeholder: "" // remove underscores from the input mask
  45. }); //specifying options only
  46. $("#mask_number").inputmask({
  47. "mask": "9",
  48. "repeat": 10,
  49. "greedy": false
  50. }); // ~ mask "9" or mask "99" or ... mask "9999999999"
  51. $("#mask_decimal").inputmask('decimal', {
  52. rightAlignNumerics: false
  53. }); //disables the right alignment of the decimal input
  54. $("#mask_currency").inputmask('€ 999.999.999,99', {
  55. numericInput: true
  56. }); //123456 => € ___.__1.234,56
  57. $("#mask_currency2").inputmask('€ 999,999,999.99', {
  58. numericInput: true,
  59. rightAlignNumerics: false,
  60. greedy: false
  61. }); //123456 => € ___.__1.234,56
  62. $("#mask_ssn").inputmask("999-99-9999", {
  63. placeholder: " ",
  64. clearMaskOnLostFocus: true
  65. }); //default
  66. }
  67. var handleIPAddressInput = function () {
  68. $('#input_ipv4').ipAddress();
  69. $('#input_ipv6').ipAddress({
  70. v: 6
  71. });
  72. }
  73. var handlePasswordStrengthChecker = function () {
  74. var initialized = false;
  75. var input = $("#password_strength");
  76. input.keydown(function () {
  77. if (initialized === false) {
  78. // set base options
  79. input.pwstrength({
  80. raisePower: 1.4,
  81. minChar: 8,
  82. verdicts: ["Weak", "Normal", "Medium", "Strong", "Very Strong"],
  83. scores: [17, 26, 40, 50, 60]
  84. });
  85. // add your own rule to calculate the password strength
  86. input.pwstrength("addRule", "demoRule", function (options, word, score) {
  87. return word.match(/[a-z].[0-9]/) && score;
  88. }, 10, true);
  89. // set as initialized
  90. initialized = true;
  91. }
  92. });
  93. }
  94. var handleUsernameAvailabilityChecker1 = function () {
  95. var input = $("#username1_input");
  96. $("#username1_checker").click(function (e) {
  97. var pop = $(this);
  98. if (input.val() === "") {
  99. input.closest('.form-group').removeClass('has-success').addClass('has-error');
  100. pop.popover('destroy');
  101. pop.popover({
  102. 'placement': (App.isRTL() ? 'left' : 'right'),
  103. 'html': true,
  104. 'container': 'body',
  105. 'content': 'Please enter a username to check its availability.',
  106. });
  107. // add error class to the popover
  108. pop.data('bs.popover').tip().addClass('error');
  109. // set last poped popover to be closed on click(see App.js => handlePopovers function)
  110. App.setLastPopedPopover(pop);
  111. pop.popover('show');
  112. e.stopPropagation(); // prevent closing the popover
  113. return;
  114. }
  115. var btn = $(this);
  116. btn.attr('disabled', true);
  117. input.attr("readonly", true).
  118. attr("disabled", true).
  119. addClass("spinner");
  120. $.post('../demo/username_checker.php', {
  121. username: input.val()
  122. }, function (res) {
  123. btn.attr('disabled', false);
  124. input.attr("readonly", false).
  125. attr("disabled", false).
  126. removeClass("spinner");
  127. if (res.status == 'OK') {
  128. input.closest('.form-group').removeClass('has-error').addClass('has-success');
  129. pop.popover('destroy');
  130. pop.popover({
  131. 'html': true,
  132. 'placement': (App.isRTL() ? 'left' : 'right'),
  133. 'container': 'body',
  134. 'content': res.message,
  135. });
  136. pop.popover('show');
  137. pop.data('bs.popover').tip().removeClass('error').addClass('success');
  138. } else {
  139. input.closest('.form-group').removeClass('has-success').addClass('has-error');
  140. pop.popover('destroy');
  141. pop.popover({
  142. 'html': true,
  143. 'placement': (App.isRTL() ? 'left' : 'right'),
  144. 'container': 'body',
  145. 'content': res.message,
  146. });
  147. pop.popover('show');
  148. pop.data('bs.popover').tip().removeClass('success').addClass('error');
  149. App.setLastPopedPopover(pop);
  150. }
  151. }, 'json');
  152. });
  153. }
  154. var handleUsernameAvailabilityChecker2 = function () {
  155. $("#username2_input").change(function () {
  156. var input = $(this);
  157. if (input.val() === "") {
  158. input.closest('.form-group').removeClass('has-error').removeClass('has-success');
  159. $('.fa-check, fa-warning', input.closest('.form-group')).remove();
  160. return;
  161. }
  162. input.attr("readonly", true).
  163. attr("disabled", true).
  164. addClass("spinner");
  165. $.post('../demo/username_checker.php', {
  166. username: input.val()
  167. }, function (res) {
  168. input.attr("readonly", false).
  169. attr("disabled", false).
  170. removeClass("spinner");
  171. // change popover font color based on the result
  172. if (res.status == 'OK') {
  173. input.closest('.form-group').removeClass('has-error').addClass('has-success');
  174. $('.fa-warning', input.closest('.form-group')).remove();
  175. input.before('<i class="fa fa-check"></i>');
  176. input.data('bs.popover').tip().removeClass('error').addClass('success');
  177. } else {
  178. input.closest('.form-group').removeClass('has-success').addClass('has-error');
  179. $('.fa-check', input.closest('.form-group')).remove();
  180. input.before('<i class="fa fa-warning"></i>');
  181. input.popover('destroy');
  182. input.popover({
  183. 'html': true,
  184. 'placement': (App.isRTL() ? 'left' : 'right'),
  185. 'container': 'body',
  186. 'content': res.message,
  187. });
  188. input.popover('show');
  189. input.data('bs.popover').tip().removeClass('success').addClass('error');
  190. App.setLastPopedPopover(input);
  191. }
  192. }, 'json');
  193. });
  194. }
  195. return {
  196. //main function to initiate the module
  197. init: function () {
  198. handleBootstrapMaxlength();
  199. handleIPAddressInput();
  200. handlePasswordStrengthChecker();
  201. handleUsernameAvailabilityChecker1();
  202. handleUsernameAvailabilityChecker2();
  203. handleInputMasks();
  204. }
  205. };
  206. }();
  207. if (App.isAngularJsApp() === false) {
  208. jQuery(document).ready(function() {
  209. ComponentsFormTools.init(); // init metronic core componets
  210. });
  211. }