Blame view

sources/core/js/jquery-showpassword.js 3.05 KB
03e52840d   Kload   Init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  /*
  *	@name							Show Password
  *	@descripton						
  *	@version						1.3
  *	@requires						Jquery 1.5
  *
  *	@author							Jan Jarfalk
  *	@author-email					jan.jarfalk@unwrongest.com
  *	@author-website					http://www.unwrongest.com
  *
  *	@special-thanks					Michel Gratton
  *
  *	@licens							MIT License - http://www.opensource.org/licenses/mit-license.php
  */
  (function($){
       $.fn.extend({
           showPassword: function(c) {	
              
              // Setup callback object
  			var callback 	= {'fn':null,'args':{}}
  				callback.fn = c;
  			
  			// Clones passwords and turn the clones into text inputs
  			var cloneElement = function( element ) {
  				
  				var $element = $(element);
  					
  				$clone = $("<input />");
  					
  				// Name added for JQuery Validation compatibility
  				// Element name is required to avoid script warning.
  				$clone.attr({
  					'type'		:	'text',
  					'class'		:	$element.attr('class'),
  					'style'		:	$element.attr('style'),
  					'size'		:	$element.attr('size'),
  					'name'		:	$element.attr('name')+'-clone',
  					'tabindex' 	:	$element.attr('tabindex'),
  					'autocomplete'	:	'off'
  				});
  					
  				return $clone;
  			
  			};
  			
  			// Transfers values between two elements
  			var update = function(a,b){
  				b.val(a.val());
  			};
  			
  			// Shows a or b depending on checkbox
  			var setState = function( checkbox, a, b ){
  			
  				if(checkbox.is(':checked')){
  					update(a,b);
  					b.show();
  					a.hide();
  				} else {
  					update(b,a);
  					b.hide();
  					a.show();
  				}
  				
  			};
              
              return this.each(function() {
              	
              	var $input					= $(this),
              		$checkbox 				= $($input.data('typetoggle'));
              	
              	// Create clone
  				var $clone = cloneElement($input);
  					$clone.insertAfter($input);
  				
  				// Set callback arguments
              	if(callback.fn){	
              		callback.args.input		= $input;
              		callback.args.checkbox	= $checkbox;
  					callback.args.clone 	= $clone;
              	}
  				
  
  				
  				$checkbox.bind('click', function() {
  					setState( $checkbox, $input, $clone );
  				});
  				
  				$input.bind('keyup', function() {
  					update( $input, $clone )
  				});
  				
  				$clone.bind('keyup', function(){ 
  					update( $clone, $input );
  					
  					// Added for JQuery Validation compatibility
  					// This will trigger validation if it's ON for keyup event
  					$input.trigger('keyup');
  					
  				});
  				
  				// Added for JQuery Validation compatibility
  				// This will trigger validation if it's ON for blur event
  				$clone.bind('blur', function() { $input.trigger('focusout'); });
  				
  				setState( $checkbox, $input, $clone );
  
  				// set type of password field clone (type=text) to password right on submit
  				// to prevent browser save the value of this field
  				$clone.closest('form').submit(function(e) {
  					// .prop has to be used, because .attr throws
  					// an error while changing a type of an input
  					// element
  					$clone.prop('type', 'password');
  				});
  
  				if( callback.fn ){
  					callback.fn( callback.args );
  				}
  
              });
          }
      });
  })(jQuery);