1(function ($) { 2 3 $.fn.passwordRulesValidator = function (aOptions) { 4 5 6 // Define default's parameters 7 var aDefauts = 8 { 9 'rules': { 10 'length': { 11 'regex': '.{6,}', 12 'name': 'length', 13 'message': '6 Characters', 14 'enable': true 15 }, 16 'uppercase': { 17 'regex': '[A-Z]{1,}', 18 'name': 'uppercase', 19 'message': '1 Uppercase Letter', 20 'enable': true 21 }, 22 'specialChar': { 23 'regex': '[^a-zA-Z0-9]{1,}', 24 'name': 'special-char', 25 'message': '1 Special Character', 26 'enable': true 27 }, 28 'number': { 29 'regex': "[0-9]{1,}", 30 'name': "number", 31 'message': "1 Number", 32 'enable': !0 33 }, 34 }, 35 'msgRules': 'Your password must contain:', 36 'container': $("#pwdInfoContainer"), 37 'containerClass': null, 38 'containerId': 'pwdInfoContainer', 39 'okClass': null, 40 'koClass': null, 41 'onLoad': undefined 42 }; 43 44 /** 45 * @param {object} oRegex 46 * @param {string} sVal 47 * @param {string} sName 48 * @param {string} sIdContainer 49 */ 50 function validateRule(oRegex, sVal, sName, sIdContainer) { 51 if (oRegex.test(sVal)) { 52 $('#' + sIdContainer + ' li.' + sName).removeClass('ko ' + aParameters.koClass).addClass('ok ' + aParameters.okClass); 53 } else { 54 $('#' + sIdContainer + ' li.' + sName).removeClass('ok ' + aParameters.okClass).addClass('ko ' + aParameters.koClass); 55 } 56 } 57 58 /** 59 * @param {array} aParemeters 60 * @param {string} sVal 61 * @param {string} sIdContainer 62 */ 63 function checkRules(aParemeters, sVal, sIdContainer) { 64 $.each(aParameters.rules, function (iKey, aRule) { 65 if (aRule.enable) { 66 validateRule(new RegExp(aRule.regex, 'g'), sVal, aRule.name, sIdContainer); 67 } 68 }); 69 70 } 71 72 var aParameters = $.extend(true, aDefauts, aOptions); 73 74 return this.each(function () { 75 76 // Execute onLoad fonction 77 if ($.isFunction(aParameters.onLoad)) { 78 aParameters.onLoad(); 79 } 80 81 // Build rules check list 82 oRulesBuilder = '<span class="rules">' + aParameters.msgRules + '</span>'; 83 oRulesBuilder += '<ul class="rules">'; 84 85 // Build lists 86 $.each(aParameters.rules, function (iKey, aRule) { 87 if (aRule.enable) { 88 oRulesBuilder += '<li class="ko ' + aParameters.koClass + ' ' + aRule.name + '">' + aRule.message + '</li>'; 89 } 90 }); 91 92 oRulesBuilder += '</ul>'; 93 94 // Create or populate container 95 if (typeof (aParameters.container) === 'undefined') { 96 $(this).after('<div class="rules-list ' + aParameters.containerClass + '" id="' + aParameters.containerId + '"></div>'); 97 $(oRulesBuilder).appendTo('#' + aParameters.containerId); 98 } else { 99 aParameters.container.addClass('rules-list'); 100 $(oRulesBuilder).appendTo(aParameters.container); 101 } 102 103 var sIdContainer = typeof (aParameters.container) === 'undefined' ? aParameters.containerId : aParameters.container.attr('id'); 104 105 // Execute checkRules on load 106 checkRules(aParameters, $(this).val(), sIdContainer); 107 108 // Execute checkRules fonction 109 $(this).keyup(function () { 110 checkRules(aParameters, $(this).val(), sIdContainer); 111 }); 112 113 $(this).on('paste', function () { 114 checkRules(aParameters, $(this).val(), sIdContainer); 115 }); 116 117 $(this).change(function () { 118 checkRules(aParameters, $(this).val(), sIdContainer); 119 }); 120 }); 121 }; 122})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.