UNPKG

jquery-passforce

Version:

jQuery plugin for password strength calculation

1 lines 1.96 kB
!function(e){var t="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;"function"==typeof define&&define.amd?define(["jquery"],function(t){return e(t)}):"undefined"!=typeof exports?($=require("jquery"),e($)):e(t.jQuery||t.Zepto||t.ender||t.$)}(function(e){var t={minlength:6,objetive:100,badScoreClass:"pass-bad",mediumScoreClass:"pass-medium",goodScoreClass:"pass-god"},s=function(s,o){this._el=e(s),this._options=e.extend({},o,t),this._subscribeEvents()};return s.prototype._subscribeEvents=function(){var e=this,t=null;this.score=0,this._el.keyup(function(){clearTimeout(t),t=setTimeout(function(){e.check()},100)})},s.prototype.getScore=function(){var e=this._el.val();if(e.length<this._options.minlength)return 0!==this.score&&this._el.trigger("scorechange",0,0),0;var t=0,s=0,o=0,i=e.split("").reduce(function(e,t){return-1===e.indexOf(t)&&e.push(t),e},[]).length;if(e.match(/[0-9]/)&&(t+=10,o+=0),e.match(/[a-z]/)&&(t+=26,o+=0),e.match(/[A-Z]/)&&(t+=26,o+=.1),e.match(/[\W]/)&&(t+=10,o+=.2),o+=i/10,s=Math.round(t*e.length*(o+1)/10),s!==this.score){this.score=s;var n=this._options.objetive/s*100;n>100&&(n=100),this._el.trigger("scorechange",s,Math.round(n))}return s},s.prototype.check=function(){var e=this.getScore(),t=this._options.objetive;this._el.removeClass(this._options.badScoreClass),this._el.removeClass(this._options.mediumScoreClass),this._el.removeClass(this._options.goodScoreClass),e>=t?this._el.addClass(this._options.goodScoreClass):e>t/2?this._el.addClass(this._options.mediumScoreClass):this._el.addClass(this._options.badScoreClass)},e.fn.extend({forcepass:function(){var t=arguments;this.each(function(){if(e(this).data("fore-pass-instace")){var o=e(this).data("fore-pass-instace");if(!t.length)return;var i=t.shift();if(i.match(/^_/))throw new Error("Private method");o[i].apply(o,t)}else{var n=t.length?t.shift():{};e(this).data("fore-pass-instace",new s(this,n))}})}}),e});