[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "#################\n## Eclipse\n#################\n\n*.pydevproject\n.project\n.metadata\nbin/\ntmp/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n#################\n## Visual Studio\n#################\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n\n[Dd]ebug/\n[Rr]elease/\nx64/\nbuild/\n[Bb]in/\n[Oo]bj/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.log\n*.scc\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.Publish.xml\n*.pubxml\n\n# NuGet Packages Directory\n## TODO: If you have NuGet Package Restore enabled, uncomment the next line\n#packages/\n\n# Windows Azure Build Output\ncsx\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.[Pp]ublish.xml\n*.pfx\n*.publishsettings\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\nApp_Data/*.mdf\nApp_Data/*.ldf\n\n#############\n## Windows detritus\n#############\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Mac crap\n.DS_Store\n\n\n#############\n## Python\n#############\n\n*.py[co]\n\n# Packages\n*.egg\n*.egg-info\ndist/\nbuild/\neggs/\nparts/\nvar/\nsdist/\ndevelop-eggs/\n.installed.cfg\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\n\n#Translations\n*.mo\n\n#Mr Developer\n.mr.developer.cfg\n"
  },
  {
    "path": "README.md",
    "content": "Strength.js\n===========\n\nThe ultimate jQuery password input plugin. Featuring secure strength indicator and hide/show password\n\n### Documentation\n\nStrength.js provides a toggle feature for password input fields that allows the user to view or asterisk the password. It also features a strength indicator to show how secure a users password is.\n\nThe password secuirty indicator is marked on 4 scores. These are\n\n*   Password must contain 8 characters or more\n*   Password must contain 1 lowercase letter\n*   Password must contain 1 uppercase letter\n*   Password must contain 1 number\n\n#### ..:: Getting Started\n\n##### Include the relevant files\n\nFirstly include jQuery and the strength.css and strength.js files. Place these before `&lt;/head&gt;` section\n\n\t<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"strength.js\"></script>\n\t<script type=\"text/javascript\" src=\"js.js\"></script>\n\t\t\t\t\t\n\n##### Create a password input field\n\nYou must give your password input a unique ID.\n\n\t<input id=\"myPassword\" type=\"password\" name=\"\" value=\"\">\n\n##### Initiate the plugin\n\nOnce you have created your password input field you will need to initiate the plugin.\n\nAt its most basic level you can initiate the plugin like:\n\n\t\t\t\t\t\t\n\t$(document).ready(function ($) {\n\n        $(\"#myPassword\").strength();\n\n    });\n\t\t\t\t\t\n\nIf you want to initiate the plugin with options then you can do so like:\n\n\t\t\t\t\t\t\t\t\n\t$('#myPassword').strength({\n            strengthClass: 'strength',\n            strengthMeterClass: 'strength_meter',\n            strengthButtonClass: 'button_strength',\n            strengthButtonText: 'Show password',\n            strengthButtonTextToggle: 'Hide Password'\n        });\t\t\n\n#### ..:: Options\n\n<table>\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<th>Variable</th>\n\t\t\t\t\t\t\t\t\t<th>Default Value</th>\n\t\t\t\t\t\t\t\t\t<th>Description</th>\n\t\t\t\t\t\t\t\t\t<th>Valid Options</th>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>strengthClass</td>\n\t\t\t\t\t\t\t\t\t<td>strength</td>\n\t\t\t\t\t\t\t\t\t<td>The CSS class that you want your input field to have</td>\n\t\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>strengthMeterClass</td>\n\t\t\t\t\t\t\t\t\t<td>strength_meter</td>\n\t\t\t\t\t\t\t\t\t<td>The CSS class that you want your input field to have</td>\n\t\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>strengthButtonClass</td>\n\t\t\t\t\t\t\t\t\t<td>button_strength</td>\n\t\t\t\t\t\t\t\t\t<td>The CSS class that you want the toggle button to have</td>\n\t\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>strengthButtonText</td>\n\t\t\t\t\t\t\t\t\t<td>Show Password</td>\n\t\t\t\t\t\t\t\t\t<td>The text that you want to show for the toggle button</td>\n\t\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>strengthButtonTextToggle</td>\n\t\t\t\t\t\t\t\t\t<td>Hide Password</td>\n\t\t\t\t\t\t\t\t\t<td>The toggled text that you want to show for the toggle button</td>\n\t\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t</tr>\n\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n"
  },
  {
    "path": "demo/simple_example/index.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>Untitled Document</title>\n\n\n<link rel=\"stylesheet\" type=\"text/css\" href=\"strength.css\">\n\n\n\n</head>\n\n<body>\n\n\t<form action=\"\" method=\"get\" accept-charset=\"utf-8\">\n\n\t\t<input id=\"myPassword\" type=\"password\" name=\"\" value=\"\">\n\n\n\n\n\t\t\n\n\t</form>\n\n\n\n<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n<script type=\"text/javascript\" src=\"strength.js\"></script>\n<script type=\"text/javascript\" src=\"js.js\"></script>\n\n<script>\n\n\n\n\n$(document).ready(function($) {\n\t\n$('#myPassword').strength({\n            strengthClass: 'strength',\n            strengthMeterClass: 'strength_meter',\n            strengthButtonClass: 'button_strength',\n            strengthButtonText: 'Show Password',\n            strengthButtonTextToggle: 'Hide Password'\n        });\n\n});\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/simple_example/js.js",
    "content": ""
  },
  {
    "path": "demo/simple_example/strength.css",
    "content": "@charset \"utf-8\";\n/* CSS Document */\n\n.strength_meter{\n\theight:23px;\nwidth: 154px;\n\tbackground:silver;\n\t\n}\n.strength_meter div{\n\theight:23px;\n\twidth:100%;\n\theight:23px;\n\ttext-align:center;\n\tcolor:black;\n\tfont-weight:bold;\n\tline-height:23px;\n}\n.veryweak{\n\tbackground-color: #FFA0A0;\nborder-color: #F04040!important\n}\n.weak{\nbackground-color: #FFB78C;\nborder-color: #FF853C!important;\n}\n.medium{\nbackground-color: #FFEC8B;\nborder-color: #FC0!important;\n}\n.strong{\nbackground-color: #C3FF88;\nborder-color: #8DFF1C!important;\n}"
  },
  {
    "path": "demo/simple_example/strength.js",
    "content": "/*!\n * strength.js\n * Original author: @aaronlumsden\n * Further changes, comments: @aaronlumsden\n * Licensed under the MIT license\n */\n;(function ( $, window, document, undefined ) {\n\n    var pluginName = \"strength\",\n        defaults = {\n            strengthClass: 'strength',\n            strengthMeterClass: 'strength_meter',\n            strengthButtonClass: 'button_strength',\n            strengthButtonText: 'Show Password',\n            strengthButtonTextToggle: 'Hide Password'\n        };\n\n       // $('<style>body { background-color: red; color: white; }</style>').appendTo('head');\n\n    function Plugin( element, options ) {\n        this.element = element;\n        this.$elem = $(this.element);\n        this.options = $.extend( {}, defaults, options );\n        this._defaults = defaults;\n        this._name = pluginName;\n        this.init();\n    }\n\n    Plugin.prototype = {\n\n        init: function() {\n\n\n            var characters = 0;\n            var capitalletters = 0;\n            var loweletters = 0;\n            var number = 0;\n            var special = 0;\n\n            var upperCase= new RegExp('[A-Z]');\n            var lowerCase= new RegExp('[a-z]');\n            var numbers = new RegExp('[0-9]');\n            var specialchars = new RegExp('([!,%,&,@,#,$,^,*,?,_,~])');\n\n            function GetPercentage(a, b) {\n                    return ((b / a) * 100);\n                }\n\n                function check_strength(thisval,thisid){\n                     if (thisval.length > 8) { characters = 1; } else { characters = 0; };\n                    if (thisval.match(upperCase)) { capitalletters = 1} else { capitalletters = 0; };\n                    if (thisval.match(lowerCase)) { loweletters = 1}  else { loweletters = 0; };\n                    if (thisval.match(numbers)) { number = 1}  else { number = 0; };\n\n                    var total = characters + capitalletters + loweletters + number + special;\n                    var totalpercent = GetPercentage(7, total).toFixed(0);\n\n                  \n\n                    get_total(total,thisid);\n                }\n\n            function get_total(total,thisid){\n\n                  var thismeter = $('div[data-meter=\"'+thisid+'\"]');\n                if(total == 0){\n                      thismeter.removeClass().html('');\n                }else if (total <= 1) {\n                   thismeter.removeClass();\n                   thismeter.addClass('veryweak').html('<p>Strength: very weak</p>');\n                } else if (total == 2){\n                    thismeter.removeClass();\n                   thismeter.addClass('weak').html('<p>Strength: weak</p>');\n                } else if(total == 3){\n                    thismeter.removeClass();\n                   thismeter.addClass('medium').html('<p>Strength: medium</p>');\n\n                } else {\n                     thismeter.removeClass();\n                   thismeter.addClass('strong').html('<p>Strength: strong</p>');\n                } \n                console.log(total);\n            }\n\n\n\n\n\n            var isShown = false;\n            var strengthButtonText = this.options.strengthButtonText;\n            var strengthButtonTextToggle = this.options.strengthButtonTextToggle;\n\n\n            thisid = this.$elem.attr('id');\n\n            this.$elem.addClass(this.options.strengthClass).attr('data-password',thisid).after('<input style=\"display:none\" class=\"'+this.options.strengthClass+'\" data-password=\"'+thisid+'\" type=\"text\" name=\"\" value=\"\"><a data-password-button=\"'+thisid+'\" href=\"\" class=\"'+this.options.strengthButtonClass+'\">'+this.options.strengthButtonText+'</a><div class=\"'+this.options.strengthMeterClass+'\"><div data-meter=\"'+thisid+'\"><p></p></div></div>');\n             \n            this.$elem.bind('keyup keydown', function(event) {\n                thisval = $('#'+thisid).val();\n                $('input[type=\"text\"][data-password=\"'+thisid+'\"]').val(thisval);\n                check_strength(thisval,thisid);\n                \n            });\n\n             $('input[type=\"text\"][data-password=\"'+thisid+'\"]').bind('keyup keydown', function(event) {\n                thisval = $('input[type=\"text\"][data-password=\"'+thisid+'\"]').val();\n                console.log(thisval);\n                $('input[type=\"password\"][data-password=\"'+thisid+'\"]').val(thisval);\n                check_strength(thisval,thisid);\n                \n            });\n\n\n\n            $(document.body).on('click', '.'+this.options.strengthButtonClass, function(e) {\n                e.preventDefault();\n\n               thisclass = 'hide_'+$(this).attr('class');\n\n\n\n\n                if (isShown) {\n                    $('input[type=\"text\"][data-password=\"'+thisid+'\"]').hide();\n                    $('input[type=\"password\"][data-password=\"'+thisid+'\"]').show().focus();\n                    $('a[data-password-button=\"'+thisid+'\"]').removeClass(thisclass).html(strengthButtonText);\n                    isShown = false;\n\n                } else {\n                    $('input[type=\"text\"][data-password=\"'+thisid+'\"]').show().focus();\n                    $('input[type=\"password\"][data-password=\"'+thisid+'\"]').hide();\n                    $('a[data-password-button=\"'+thisid+'\"]').addClass(thisclass).html(strengthButtonTextToggle);\n                    isShown = true;\n   \n                }\n\n\n               \n            });\n\n\n         \n            \n        },\n\n        yourOtherFunction: function(el, options) {\n            // some logic\n        }\n    };\n\n    // A really lightweight plugin wrapper around the constructor,\n    // preventing against multiple instantiations\n    $.fn[pluginName] = function ( options ) {\n        return this.each(function () {\n            if (!$.data(this, \"plugin_\" + pluginName)) {\n                $.data(this, \"plugin_\" + pluginName, new Plugin( this, options ));\n            }\n        });\n    };\n\n})( jQuery, window, document );\n\n\n"
  },
  {
    "path": "demo/styled_example/index.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>Untitled Document</title>\n\n\n<link href='http://fonts.googleapis.com/css?family=Lato:400,700' rel='stylesheet' type='text/css'>\n\n\n<style>\n/*SITE STYLING*/\nhtml{\n    background:#4EC094;\n    font-family: 'Lato', sans-serif;\n    color:white;\n}\n#myform input[type=\"password\"],#myform input[type=\"text\"]{\n        background:transparent;\n    border: 2px solid #46AC84;\ncolor: #777;\nfont-family: \"Lato\", sans-serif;\nfont-size: 14px;\npadding: 9px 5px;\nheight: 21px;\ntext-indent: 6px;\n-webkit-appearance: none;\n-webkit-border-radius: 6px;\n-moz-border-radius: 6px;\nborder-radius: 6px;\n-webkit-box-shadow: none;\n-moz-box-shadow: none;\nbox-shadow: none;\n-webkit-transition: border .25s linear, color .25s linear;\n-moz-transition: border .25s linear, color .25s linear;\n-o-transition: border .25s linear, color .25s linear;\ntransition: border .25s linear, color .25s linear;\n-webkit-backface-visibility: hidden;\nwidth:100%;\n}\n#myform input[type=\"password\"]:focus,#myform input[type=\"text\"]:focus{\noutline:0;\n}\n#myform{\nwidth: 500px;\nmargin: 0 auto;\nposition: relative;\nmargin-bottom:60px;\n}\n.strength_meter{\nposition: absolute;\nleft: 0px;\ntop: 0px;\nwidth: 100%;\nheight: 43px;\nz-index:-1;\nborder-radius:5px;\npadding-right:13px;\n}\n.button_strength {\ntext-decoration: none;\ncolor: #FFF;\nfont-size: 13px;\n}\n.strength_meter div{\n    width:0%;\nheight: 43px;\ntext-align: right;\ncolor: #000;\nline-height: 43px;\n-webkit-transition: all .3s ease-in-out;\n-moz-transition: all .3s ease-in-out;\n-o-transition: all .3s ease-in-out;\n-ms-transition: all .3s ease-in-out;\ntransition: all .3s ease-in-out;\npadding-right: 12px;\nborder-radius:5px;\n}\n.strength_meter div p{\nposition: absolute;\ntop: 22px;\nright: 0px;\ncolor: #FFF;\nfont-size:13px;\n}\n\n.veryweak{\n    background-color: #FFA0A0;\nborder-color: #F04040!important;\nwidth:25%!important;\n}\n.weak{\nbackground-color: #FFB78C;\nborder-color: #FF853C!important;\nwidth:50%!important;\n}\n.medium{\nbackground-color: #FFEC8B;\nborder-color: #FC0!important;\nwidth:75%!important;\n}\n.strong{\nbackground-color: #C3FF88;\nborder-color: #8DFF1C!important;\nwidth:100%!important;\n}\nh1{\n    color:white;\n    font-size:50px;\n    text-align:center;\n    padding-top:30px;\n    margin-bottom:20px;\n}\nh1 span{\n    font-weight:bold;\n    color:white;\n    opacity:.3;\n}\n\n</style>\n\n</head>\n\n<body>\n<br><br><br><br>\n\n<h1><span>Strength</span>.js</h1>\n\t<form id=\"myform\" action=\"\" method=\"get\" accept-charset=\"utf-8\">\n\n\t\t<input id=\"myPassword\" type=\"password\" name=\"\" value=\"\">\n\n\n\n\n\t\t\n\n\t</form>\n\n\n\n<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n<script type=\"text/javascript\" src=\"strength.js\"></script>\n<script type=\"text/javascript\" src=\"js.js\"></script>\n\n<script>\n\n\n\n\n$(document).ready(function($) {\n\t\n$('#myPassword').strength({\n            strengthClass: 'strength',\n            strengthMeterClass: 'strength_meter',\n            strengthButtonClass: 'button_strength',\n            strengthButtonText: 'Show Password',\n            strengthButtonTextToggle: 'Hide Password'\n        });\n\n});\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/styled_example/js.js",
    "content": ""
  },
  {
    "path": "demo/styled_example/strength.js",
    "content": "/*!\n * strength.js\n * Original author: @aaronlumsden\n * Further changes, comments: @aaronlumsden\n * Licensed under the MIT license\n */\n;(function ( $, window, document, undefined ) {\n\n    var pluginName = \"strength\",\n        defaults = {\n            strengthClass: 'strength',\n            strengthMeterClass: 'strength_meter',\n            strengthButtonClass: 'button_strength',\n            strengthButtonText: 'Show Password',\n            strengthButtonTextToggle: 'Hide Password'\n        };\n\n       // $('<style>body { background-color: red; color: white; }</style>').appendTo('head');\n\n    function Plugin( element, options ) {\n        this.element = element;\n        this.$elem = $(this.element);\n        this.options = $.extend( {}, defaults, options );\n        this._defaults = defaults;\n        this._name = pluginName;\n        this.init();\n    }\n\n    Plugin.prototype = {\n\n        init: function() {\n\n\n            var characters = 0;\n            var capitalletters = 0;\n            var loweletters = 0;\n            var number = 0;\n            var special = 0;\n\n            var upperCase= new RegExp('[A-Z]');\n            var lowerCase= new RegExp('[a-z]');\n            var numbers = new RegExp('[0-9]');\n            var specialchars = new RegExp('([!,%,&,@,#,$,^,*,?,_,~])');\n\n            function GetPercentage(a, b) {\n                    return ((b / a) * 100);\n                }\n\n                function check_strength(thisval,thisid){\n                     if (thisval.length > 8) { characters = 1; } else { characters = 0; };\n                    if (thisval.match(upperCase)) { capitalletters = 1} else { capitalletters = 0; };\n                    if (thisval.match(lowerCase)) { loweletters = 1}  else { loweletters = 0; };\n                    if (thisval.match(numbers)) { number = 1}  else { number = 0; };\n\n                    var total = characters + capitalletters + loweletters + number + special;\n                    var totalpercent = GetPercentage(7, total).toFixed(0);\n\n                  \n\n                    get_total(total,thisid);\n                }\n\n            function get_total(total,thisid){\n\n                  var thismeter = $('div[data-meter=\"'+thisid+'\"]');\n                if(total == 0){\n                      thismeter.removeClass().html('');\n                }else if (total <= 1) {\n                   thismeter.removeClass();\n                   thismeter.addClass('veryweak').html('<p>Strength: very weak</p>');\n                } else if (total == 2){\n                    thismeter.removeClass();\n                   thismeter.addClass('weak').html('<p>Strength: weak</p>');\n                } else if(total == 3){\n                    thismeter.removeClass();\n                   thismeter.addClass('medium').html('<p>Strength: medium</p>');\n\n                } else {\n                     thismeter.removeClass();\n                   thismeter.addClass('strong').html('<p>Strength: strong</p>');\n                } \n                console.log(total);\n            }\n\n\n\n\n\n            var isShown = false;\n            var strengthButtonText = this.options.strengthButtonText;\n            var strengthButtonTextToggle = this.options.strengthButtonTextToggle;\n\n\n            thisid = this.$elem.attr('id');\n\n            this.$elem.addClass(this.options.strengthClass).attr('data-password',thisid).after('<input style=\"display:none\" class=\"'+this.options.strengthClass+'\" data-password=\"'+thisid+'\" type=\"text\" name=\"\" value=\"\"><a data-password-button=\"'+thisid+'\" href=\"\" class=\"'+this.options.strengthButtonClass+'\">'+this.options.strengthButtonText+'</a><div class=\"'+this.options.strengthMeterClass+'\"><div data-meter=\"'+thisid+'\"><p></p></div></div>');\n             \n            this.$elem.bind('keyup keydown', function(event) {\n                thisval = $('#'+thisid).val();\n                $('input[type=\"text\"][data-password=\"'+thisid+'\"]').val(thisval);\n                check_strength(thisval,thisid);\n                \n            });\n\n             $('input[type=\"text\"][data-password=\"'+thisid+'\"]').bind('keyup keydown', function(event) {\n                thisval = $('input[type=\"text\"][data-password=\"'+thisid+'\"]').val();\n                console.log(thisval);\n                $('input[type=\"password\"][data-password=\"'+thisid+'\"]').val(thisval);\n                check_strength(thisval,thisid);\n                \n            });\n\n\n\n            $(document.body).on('click', '.'+this.options.strengthButtonClass, function(e) {\n                e.preventDefault();\n\n               thisclass = 'hide_'+$(this).attr('class');\n\n\n\n\n                if (isShown) {\n                    $('input[type=\"text\"][data-password=\"'+thisid+'\"]').hide();\n                    $('input[type=\"password\"][data-password=\"'+thisid+'\"]').show().focus();\n                    $('a[data-password-button=\"'+thisid+'\"]').removeClass(thisclass).html(strengthButtonText);\n                    isShown = false;\n\n                } else {\n                    $('input[type=\"text\"][data-password=\"'+thisid+'\"]').show().focus();\n                    $('input[type=\"password\"][data-password=\"'+thisid+'\"]').hide();\n                    $('a[data-password-button=\"'+thisid+'\"]').addClass(thisclass).html(strengthButtonTextToggle);\n                    isShown = true;\n   \n                }\n\n\n               \n            });\n\n\n         \n            \n        },\n\n        yourOtherFunction: function(el, options) {\n            // some logic\n        }\n    };\n\n    // A really lightweight plugin wrapper around the constructor,\n    // preventing against multiple instantiations\n    $.fn[pluginName] = function ( options ) {\n        return this.each(function () {\n            if (!$.data(this, \"plugin_\" + pluginName)) {\n                $.data(this, \"plugin_\" + pluginName, new Plugin( this, options ));\n            }\n        });\n    };\n\n})( jQuery, window, document );\n\n\n"
  },
  {
    "path": "src/strength.css",
    "content": "@charset \"utf-8\";\n/* CSS Document */\n\n.strength_meter{\n\theight:23px;\nwidth: 154px;\n\tbackground:silver;\n\t\n}\n.strength_meter div{\n\theight:23px;\n\twidth:100%;\n\theight:23px;\n\ttext-align:center;\n\tcolor:black;\n\tfont-weight:bold;\n\tline-height:23px;\n}\n.veryweak{\n\tbackground-color: #FFA0A0;\nborder-color: #F04040!important\n}\n.weak{\nbackground-color: #FFB78C;\nborder-color: #FF853C!important;\n}\n.medium{\nbackground-color: #FFEC8B;\nborder-color: #FC0!important;\n}\n.strong{\nbackground-color: #C3FF88;\nborder-color: #8DFF1C!important;\n}"
  },
  {
    "path": "src/strength.js",
    "content": "/*!\n * strength.js\n * Original author: @aaronlumsden\n * Further changes, comments: @aaronlumsden\n * Licensed under the MIT license\n */\n;(function ( $, window, document, undefined ) {\n\n    var pluginName = \"strength\",\n        defaults = {\n            strengthClass: 'strength',\n            strengthMeterClass: 'strength_meter',\n            strengthButtonClass: 'button_strength',\n            strengthButtonText: 'Show Password',\n            strengthButtonTextToggle: 'Hide Password'\n        };\n\n       // $('<style>body { background-color: red; color: white; }</style>').appendTo('head');\n\n    function Plugin( element, options ) {\n        this.element = element;\n        this.$elem = $(this.element);\n        this.options = $.extend( {}, defaults, options );\n        this._defaults = defaults;\n        this._name = pluginName;\n        this.init();\n    }\n\n    Plugin.prototype = {\n\n        init: function() {\n\n\n            var characters = 0;\n            var capitalletters = 0;\n            var loweletters = 0;\n            var number = 0;\n            var special = 0;\n\n            var upperCase= new RegExp('[A-Z]');\n            var lowerCase= new RegExp('[a-z]');\n            var numbers = new RegExp('[0-9]');\n            var specialchars = new RegExp('([!,%,&,@,#,$,^,*,?,_,~])');\n\n            function GetPercentage(a, b) {\n                    return ((b / a) * 100);\n                }\n\n                function check_strength(thisval,thisid){\n                    if (thisval.length > 8) { characters = 1; } else { characters = -1; };\n                    if (thisval.match(upperCase)) { capitalletters = 1} else { capitalletters = 0; };\n                    if (thisval.match(lowerCase)) { loweletters = 1}  else { loweletters = 0; };\n                    if (thisval.match(numbers)) { number = 1}  else { number = 0; };\n\n                    var total = characters + capitalletters + loweletters + number + special;\n                    var totalpercent = GetPercentage(7, total).toFixed(0);\n\n                    if (!thisval.length) {total = -1;}\n\n                    get_total(total,thisid);\n                }\n\n            function get_total(total,thisid){\n\n                var thismeter = $('div[data-meter=\"'+thisid+'\"]');\n                    if (total <= 1) {\n                   thismeter.removeClass();\n                   thismeter.addClass('veryweak').html('very weak');\n                } else if (total == 2){\n                    thismeter.removeClass();\n                   thismeter.addClass('weak').html('weak');\n                } else if(total == 3){\n                    thismeter.removeClass();\n                   thismeter.addClass('medium').html('medium');\n\n                } else {\n                     thismeter.removeClass();\n                   thismeter.addClass('strong').html('strong');\n                }\n                \n                if (total == -1) { thismeter.removeClass().html('Strength'); }\n            }\n\n\n\n\n\n            var isShown = false;\n            var strengthButtonText = this.options.strengthButtonText;\n            var strengthButtonTextToggle = this.options.strengthButtonTextToggle;\n\n\n            thisid = this.$elem.attr('id');\n\n            this.$elem.addClass(this.options.strengthClass).attr('data-password',thisid).after('<input style=\"display:none\" class=\"'+this.options.strengthClass+'\" data-password=\"'+thisid+'\" type=\"text\" name=\"\" value=\"\"><a data-password-button=\"'+thisid+'\" href=\"\" class=\"'+this.options.strengthButtonClass+'\">'+this.options.strengthButtonText+'</a><div class=\"'+this.options.strengthMeterClass+'\"><div data-meter=\"'+thisid+'\">Strength</div></div>');\n             \n            this.$elem.bind('keyup keydown', function(event) {\n                thisval = $('#'+thisid).val();\n                $('input[type=\"text\"][data-password=\"'+thisid+'\"]').val(thisval);\n                check_strength(thisval,thisid);\n                \n            });\n\n             $('input[type=\"text\"][data-password=\"'+thisid+'\"]').bind('keyup keydown', function(event) {\n                thisval = $('input[type=\"text\"][data-password=\"'+thisid+'\"]').val();\n                console.log(thisval);\n                $('input[type=\"password\"][data-password=\"'+thisid+'\"]').val(thisval);\n                check_strength(thisval,thisid);\n                \n            });\n\n\n\n            $(document.body).on('click', '.'+this.options.strengthButtonClass, function(e) {\n                e.preventDefault();\n\n               thisclass = 'hide_'+$(this).attr('class');\n\n\n\n\n                if (isShown) {\n                    $('input[type=\"text\"][data-password=\"'+thisid+'\"]').hide();\n                    $('input[type=\"password\"][data-password=\"'+thisid+'\"]').show().focus();\n                    $('a[data-password-button=\"'+thisid+'\"]').removeClass(thisclass).html(strengthButtonText);\n                    isShown = false;\n\n                } else {\n                    $('input[type=\"text\"][data-password=\"'+thisid+'\"]').show().focus();\n                    $('input[type=\"password\"][data-password=\"'+thisid+'\"]').hide();\n                    $('a[data-password-button=\"'+thisid+'\"]').addClass(thisclass).html(strengthButtonTextToggle);\n                    isShown = true;\n   \n                }\n\n\n               \n            });\n\n\n         \n            \n        },\n\n        yourOtherFunction: function(el, options) {\n            // some logic\n        }\n    };\n\n    // A really lightweight plugin wrapper around the constructor,\n    // preventing against multiple instantiations\n    $.fn[pluginName] = function ( options ) {\n        return this.each(function () {\n            if (!$.data(this, \"plugin_\" + pluginName)) {\n                $.data(this, \"plugin_\" + pluginName, new Plugin( this, options ));\n            }\n        });\n    };\n\n})( jQuery, window, document );\n\n\n"
  }
]