Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

passwordrequirement.js 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. (function ($) {
  2. $.fn.extend({
  3. passwordRequirements: function (options) {
  4. // options for the plugin
  5. var defaults = {
  6. numCharacters: 8,
  7. useLowercase: true,
  8. useUppercase: true,
  9. useNumbers: true,
  10. useSpecial: true,
  11. infoMessage: '',
  12. style: "dark", // Style Options light or dark
  13. fadeTime: 100 // FadeIn / FadeOut in milliseconds
  14. };
  15. options = $.extend(defaults, options);
  16. return this.each(function () {
  17. var o = options;
  18. o.infoMessage = '';
  19. // Add Variables for the li elements
  20. var numCharactersUI = '<li class="pr-numCharacters"><span class="fa fa-times"></span>Min 8 characters in Length</li>',
  21. useLowercaseUI = '',
  22. useUppercaseUI = '',
  23. useNumbersUI = '',
  24. useSpecialUI = '';
  25. // Check if the options are checked
  26. if (o.useLowercase === true) {
  27. useLowercaseUI = '<li class="pr-useLowercase"><span class="fa fa-times"></span>Lowercase letter (a-z)</li>';
  28. }
  29. if (o.useUppercase === true) {
  30. useUppercaseUI = '<li class="pr-useUppercase"><span class="fa fa-times"></span>Uppercase letter (A-Z)</li>';
  31. }
  32. if (o.useNumbers === true) {
  33. useNumbersUI = '<li class="pr-useNumbers"><span class="fa fa-times"></span>Number (i.e. 0-9)</li> ';
  34. }
  35. if (o.useSpecial === true) {
  36. useSpecialUI = '<li class="pr-useSpecial"><span class="fa fa-times"></span>Special character (!,@,#,etc...)</li>';
  37. }
  38. // Append password hint div
  39. var messageDiv = '<div id="pr-box"><i></i><div id="pr-box-inner"><ul>' + numCharactersUI + useLowercaseUI + useUppercaseUI + useNumbersUI + useSpecialUI + '</ul></div></div>';
  40. // Set campletion vatiables
  41. var numCharactersDone = true,
  42. useLowercaseDone = true,
  43. useUppercaseDone = true,
  44. useNumbersDone = true,
  45. useSpecialDone = true;
  46. // Show Message reusable function
  47. var showMessage = function () {
  48. if (numCharactersDone === false || useLowercaseDone === false || useUppercaseDone === false || useNumbersDone === false || useSpecialDone === false) {
  49. $(".pr-password").each(function () {
  50. // Find the position of element
  51. var posH = $(this).offset().top,
  52. itemH = $(this).innerHeight(),
  53. totalH = posH + itemH,
  54. itemL = $(this).offset().left;
  55. // Append info box tho the body
  56. $("body .showpwsdreq").html(messageDiv);
  57. $("#pr-box").addClass(o.style)
  58. .fadeIn(o.fadeTime);
  59. });
  60. }
  61. };
  62. // Show password hint
  63. $(this).on("focus", function () {
  64. showMessage();
  65. });
  66. // Delete Message reusable function
  67. var deleteMessage = function () {
  68. var targetMessage = $("#pr-box");
  69. targetMessage.fadeOut(o.fadeTime, function () {
  70. $(this).remove();
  71. });
  72. };
  73. // Show / Delete Message when completed requirements function
  74. var checkCompleted = function () {
  75. if (numCharactersDone === true && useLowercaseDone === true && useUppercaseDone === true && useNumbersDone === true && useSpecialDone === true) {
  76. deleteMessage();
  77. } else {
  78. showMessage();
  79. }
  80. };
  81. // Show password hint
  82. $(this).on("blur", function () {
  83. deleteMessage();
  84. });
  85. // Show or Hide password hint based on user's event
  86. // Set variables
  87. var lowerCase = new RegExp('[a-z]'),
  88. upperCase = new RegExp('[A-Z]'),
  89. numbers = new RegExp('[0-9]'),
  90. specialCharacter = new RegExp('[!,%,&,@,#,$,^,*,?,_,~]');
  91. // Show or Hide password hint based on keyup
  92. $(this).on("keyup focus", function () {
  93. var thisVal = $(this).val();
  94. checkCompleted();
  95. // Check # of characters
  96. if (thisVal.length >= o.numCharacters) {
  97. // console.log("good numCharacters");
  98. $(".pr-numCharacters span").addClass("pr-ok fa-check").removeClass("fa-times");
  99. $(".pr-numCharacters").addClass("pr-ok");
  100. numCharactersDone = true;
  101. } else {
  102. // console.log("bad numCharacters");
  103. $(".pr-numCharacters span").removeClass("pr-ok fa-check").addClass("fa-times");
  104. $(".pr-numCharacters").removeClass("pr-ok");
  105. numCharactersDone = false;
  106. }
  107. // lowerCase meet requirements
  108. if (o.useLowercase === true) {
  109. if (thisVal.match(lowerCase)) {
  110. // console.log("good lowerCase");
  111. $(".pr-useLowercase span").addClass("pr-ok fa-check").removeClass("fa-times");
  112. $(".pr-useLowercase").addClass("pr-ok");
  113. useLowercaseDone = true;
  114. } else {
  115. // console.log("bad lowerCase");
  116. $(".pr-useLowercase span").removeClass("pr-ok fa-check").addClass("fa-times");
  117. $(".pr-useLowercase").removeClass("pr-ok");
  118. useLowercaseDone = false;
  119. }
  120. }
  121. // upperCase meet requirements
  122. if (o.useUppercase === true) {
  123. if (thisVal.match(upperCase)) {
  124. // console.log("good upperCase");
  125. $(".pr-useUppercase span").addClass("pr-ok fa-check").removeClass("fa-times");
  126. $(".pr-useUppercase").addClass("pr-ok");
  127. useUppercaseDone = true;
  128. } else {
  129. // console.log("bad upperCase");
  130. $(".pr-useUppercase span").removeClass("pr-ok fa-check").addClass("fa-times");
  131. $(".pr-useUppercase").removeClass("pr-ok");
  132. useUppercaseDone = false;
  133. }
  134. }
  135. // upperCase meet requirements
  136. if (o.useNumbers === true) {
  137. if (thisVal.match(numbers)) {
  138. // console.log("good numbers");
  139. $(".pr-useNumbers span").addClass("pr-ok fa-check").removeClass("fa-times");
  140. $(".pr-useNumbers").addClass("pr-ok");
  141. useNumbersDone = true;
  142. } else {
  143. // console.log("bad numbers");
  144. $(".pr-useNumbers span").removeClass("pr-ok fa-check").addClass("fa-times");
  145. $(".pr-useNumbers").removeClass("pr-ok");
  146. useNumbersDone = false;
  147. }
  148. }
  149. // upperCase meet requirements
  150. if (o.useSpecial === true) {
  151. if (thisVal.match(specialCharacter)) {
  152. // console.log("good specialCharacter");
  153. $(".pr-useSpecial span").addClass("pr-ok fa-check").removeClass("fa-times");
  154. $(".pr-useSpecial").addClass("pr-ok");
  155. useSpecialDone = true;
  156. } else {
  157. // console.log("bad specialCharacter");
  158. $(".pr-useSpecial span").removeClass("pr-ok fa-check").addClass("fa-times");
  159. $(".pr-useSpecial").removeClass("pr-ok");
  160. useSpecialDone = false;
  161. }
  162. }
  163. });
  164. });
  165. }
  166. });
  167. })(jQuery);