/** * jQuery strength v0.2.5 * https://github.com/amazingSurge/jquery-strength * * Copyright (c) amazingSurge * Released under the LGPL-3.0 license */ (function(global, factory) { if (typeof define === 'function' && define.amd) { define(['jquery', 'password_strength'], factory); } else if (typeof exports !== 'undefined') { factory(require('jquery'), require('password_strength')); } else { var mod = { exports: {} }; factory(global.jQuery, global.PasswordStrength); global.jqueryStrengthEs = mod.exports; } })(this, function(_jquery, _password_strength) { 'use strict'; var _jquery2 = _interopRequireDefault(_jquery); var _password_strength2 = _interopRequireDefault(_password_strength); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _createClass = (function() { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var DEFAULTS = { namespace: 'strength', skin: null, showMeter: true, showToggle: true, usernameField: '', templates: { toggle: '', meter: '
{score}
', score: '', main: '
{input}{toggle}
{meter}
' }, classes: { container: 'strength-container', status: 'strength-{status}', input: 'strength-input', toggle: 'strength-toggle', meter: 'strength-meter', score: 'strength-score', shown: 'strength-shown' }, scoreLables: { empty: 'Empty', invalid: 'Invalid', weak: 'Weak', good: 'Good', strong: 'Strong' }, scoreClasses: { empty: '', invalid: 'label-danger', weak: 'label-warning', good: 'label-info', strong: 'label-success' }, emptyStatus: true, scoreCallback: null, statusCallback: null }; var NAMESPACE$1 = 'strength'; /** * Plugin constructor **/ var Strength = (function() { function Strength(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, Strength); this.element = element; this.$element = (0, _jquery2.default)(element); this.options = _jquery2.default.extend( true, {}, DEFAULTS, options, this.$element.data() ); this.classes = this.options.classes; this.$username = (0, _jquery2.default)(this.options.usernameField); this.score = 0; this.status = null; this.shown = false; this.trigger('init'); this.init(); } _createClass( Strength, [ { key: 'init', value: function init() { this.createHtml(); this.$element.addClass(this.classes.input); this.$toggle = this.$container.find('.' + this.classes.toggle); this.$meter = this.$container.find('.' + this.classes.meter); this.$score = this.$container.find('.' + this.classes.score); this.$input = this.$container.find('.' + this.classes.input); this.bindEvents(); this.initialized = true; this.trigger('ready'); } }, { key: 'bindEvents', value: function bindEvents() { var _this = this; if (this.$toggle.is(':checkbox')) { this.$toggle.on('change', function() { _this.toggle(); }); } else { this.$toggle.on('click', function() { _this.toggle(); }); } this.$input.bind('keyup.strength keydown.strength', function() { _this.check(); }); this.$element.on(NAMESPACE$1 + '::check', function( e, api, score, status ) { _this.$score.html(_this.options.scoreLables[status]); if (status !== _this.status) { var newClass = _this.options.scoreClasses[status]; var oldClass = _this.options.scoreClasses[_this.status]; _this.$score.removeClass(oldClass).addClass(newClass); _this.trigger('statusChange', status, _this.status); } _this.status = status; _this.score = score; }); this.$element.on(NAMESPACE$1 + '::statusChange', function( e, api, current, old ) { _this.$container .removeClass(_this.getStatusClass(old)) .addClass(_this.getStatusClass(current)); }); } }, { key: 'getStatusClass', value: function getStatusClass(status) { return this.options.classes.status.replace('{status}', status); } }, { key: 'createHtml', value: function createHtml() { var output = this.options.templates.main; output = output.replace('{containerClass}', this.classes.container); output = output.replace('{toggle}', this.generateToggle()); output = output.replace('{meter}', this.generateMeter()); output = output.replace('{score}', this.generateScore()); output = output.replace( '{input}', '
' ); this.$container = (0, _jquery2.default)(output); if (this.options.skin) { this.$container.addClass(this.options.skin); } this.$element.before(this.$container); var $holder = this.$container.find('.' + this.classes.input); var el = this.$element.detach(); $holder.before(el); $holder.remove(); } }, { key: 'generateToggle', value: function generateToggle() { if (this.options.showToggle) { var output = this.options.templates.toggle; output = output.replace('{toggleClass}', this.classes.toggle); return output; } return ''; } }, { key: 'generateMeter', value: function generateMeter() { if (this.options.showMeter) { var output = this.options.templates.meter; output = output.replace('{meterClass}', this.classes.meter); return output; } return ''; } }, { key: 'generateScore', value: function generateScore() { var output = this.options.templates.score; output = output.replace('{scoreClass}', this.classes.score); return output; } }, { key: 'check', value: function check() { var score = 0; var status = null; if (_jquery2.default.isFunction(this.options.scoreCallback)) { score = this.options.scoreCallback.call(this); if (_jquery2.default.isFunction(this.options.statusCallback)) { status = this.options.statusCallback.call(this, score); } } else { var check = new _password_strength2.default(); check.username = this.$username.val() || null; check.password = this.$input.val(); score = check.test(); status = check.status; } if ( this.options.emptyStatus && status !== 'invalid' && this.$input.val() === '' ) { status = 'empty'; } this.trigger('check', score, status); } }, { key: 'getScore', value: function getScore() { if (!this.score) { this.check(); } return this.score; } }, { key: 'getStatus', value: function getStatus() { if (!this.status) { this.check(); } return this.status; } }, { key: 'toggle', value: function toggle() { var type = void 0; if (this.$toggle.is(':checkbox')) { type = this.$toggle.is(':checked') ? 'text' : 'password'; } else { type = this.shown === false ? 'text' : 'password'; } this.shown = type === 'text'; if (this.shown) { this.$container.addClass(this.classes.shown); } else { this.$container.removeClass(this.classes.shown); } this.$input.attr('type', type); this.trigger('toggle', type); } }, { key: 'trigger', value: function trigger(eventType) { for ( var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++ ) { params[_key - 1] = arguments[_key]; } var data = [this].concat(params); // event this.$element.trigger(NAMESPACE$1 + '::' + eventType, data); // callback eventType = eventType.replace(/\b\w+\b/g, function(word) { return word.substring(0, 1).toUpperCase() + word.substring(1); }); var onFunction = 'on' + eventType; if (typeof this.options[onFunction] === 'function') { this.options[onFunction].apply(this, params); } } }, { key: 'destroy', value: function destroy() { this.$element.data(NAMESPACE$1, null); this.trigger('destroy'); } } ], [ { key: 'setDefaults', value: function setDefaults(options) { _jquery2.default.extend( true, DEFAULTS, _jquery2.default.isPlainObject(options) && options ); } } ] ); return Strength; })(); var info = { version: '0.2.5' }; var NAMESPACE = 'strength'; var OtherStrength = _jquery2.default.fn.strength; var jQueryStrength = function jQueryStrength(options) { for ( var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++ ) { args[_key2 - 1] = arguments[_key2]; } if (typeof options === 'string') { var method = options; if (/^_/.test(method)) { return false; } else if (/^(get)/.test(method)) { var instance = this.first().data(NAMESPACE); if (instance && typeof instance[method] === 'function') { return instance[method].apply(instance, args); } } else { return this.each(function() { var instance = _jquery2.default.data(this, NAMESPACE); if (instance && typeof instance[method] === 'function') { instance[method].apply(instance, args); } }); } } return this.each(function() { if (!(0, _jquery2.default)(this).data(NAMESPACE)) { (0, _jquery2.default)(this).data( NAMESPACE, new Strength(this, options) ); } }); }; _jquery2.default.fn.strength = jQueryStrength; _jquery2.default.strength = _jquery2.default.extend( { setDefaults: Strength.setDefaults, noConflict: function noConflict() { _jquery2.default.fn.strength = OtherStrength; return jQueryStrength; } }, info ); });