Browse Source

Fix user interaction with showing password feature

Before, the password was hidden again after 2 seconds. Now, the password
is hidden when the mouse is released

Fix https://github.com/FreshRSS/FreshRSS/issues/734
Marien Fressinaud 11 years ago
parent
commit
2d1cb016ab
4 changed files with 21 additions and 17 deletions
  1. 10 7
      app/install.php
  2. 1 1
      app/views/user/manage.phtml
  3. 2 2
      app/views/user/profile.phtml
  4. 8 7
      p/scripts/main.js

+ 10 - 7
app/install.php

@@ -611,23 +611,26 @@ function printStep2() {
 		</div>
 
 		<script>
-			function toggle_password() {
+			function show_password() {
 				var button = this;
 				var passwordField = document.getElementById(button.getAttribute('data-toggle'));
-
 				passwordField.setAttribute('type', 'text');
 				button.className += ' active';
 
-				setTimeout(function() {
-					passwordField.setAttribute('type', 'password');
-					button.className = button.className.replace(/(?:^|\s)active(?!\S)/g , '');
-				}, 2000);
+				return false;
+			}
+			function hide_password() {
+				var button = this;
+				var passwordField = document.getElementById(button.getAttribute('data-toggle'));
+				passwordField.setAttribute('type', 'password');
+				button.className = button.className.replace(/(?:^|\s)active(?!\S)/g , '');
 
 				return false;
 			}
 			toggles = document.getElementsByClassName('toggle-password');
 			for (var i = 0 ; i < toggles.length ; i++) {
-				toggles[i].addEventListener('click', toggle_password);
+				toggles[i].addEventListener('mousedown', show_password);
+				toggles[i].addEventListener('mouseup', hide_password);
 			}
 
 			function auth_type_change(focus) {

+ 1 - 1
app/views/user/manage.phtml

@@ -30,7 +30,7 @@
 			<div class="group-controls">
 				<div class="stick">
 					<input type="password" id="new_user_passwordPlain" name="new_user_passwordPlain" autocomplete="off" pattern=".{7,}" />
-					<a class="btn toggle-password"><?php echo _i('key'); ?></a>
+					<a class="btn toggle-password" data-toggle="new_user_passwordPlain"><?php echo _i('key'); ?></a>
 				</div>
 				<noscript><b><?php echo _t('gen.js.should_be_activated'); ?></b></noscript>
 			</div>

+ 2 - 2
app/views/user/profile.phtml

@@ -22,7 +22,7 @@
 			<div class="group-controls">
 				<div class="stick">
 					<input type="password" id="passwordPlain" name="passwordPlain" autocomplete="off" pattern=".{7,}" <?php echo cryptAvailable() ? '' : 'disabled="disabled" '; ?>/>
-					<a class="btn toggle-password"><?php echo _i('key'); ?></a>
+					<a class="btn toggle-password" data-toggle="passwordPlain"><?php echo _i('key'); ?></a>
 				</div>
 				<noscript><b><?php echo _t('gen.js.should_be_activated'); ?></b></noscript>
 			</div>
@@ -34,7 +34,7 @@
 			<div class="group-controls">
 				<div class="stick">
 					<input type="password" id="apiPasswordPlain" name="apiPasswordPlain" autocomplete="off" pattern=".{7,}" <?php echo cryptAvailable() ? '' : 'disabled="disabled" '; ?>/>
-					<a class="btn toggle-password"><?php echo _i('key'); ?></a>
+					<a class="btn toggle-password" data-toggle="apiPasswordPlain"><?php echo _i('key'); ?></a>
 				</div>
 			</div>
 		</div>

+ 8 - 7
p/scripts/main.js

@@ -1134,17 +1134,18 @@ function init_feed_observers() {
 }
 
 function init_password_observers() {
-	$('input[type="password"] + a.btn.toggle-password').on('click', function(e) {
+	$('.toggle-password').on('mousedown', function(e) {
 		var button = $(this);
-		var passwordField = $(this).siblings('input[type="password"]');
-
+		var passwordField = $('#' + button.attr('data-toggle'));
 		passwordField.attr('type', 'text');
 		button.addClass('active');
 
-		setTimeout(function() {
-			passwordField.attr('type', 'password');
-			button.removeClass('active');
-		}, 2000);
+		return false;
+	}).on('mouseup', function(e) {
+		var button = $(this);
+		var passwordField = $('#' + button.attr('data-toggle'));
+		passwordField.attr('type', 'password');
+		button.removeClass('active');
 
 		return false;
 	});