diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2019-01-29 10:15:46 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2019-01-29 11:07:48 +0100 |
commit | 3ced9cd83db38731a1e82dafc0dcbdfe7db6cc2b (patch) | |
tree | 3da933724684a709f6afa2a8cbaa1fae10baa575 /core/src/jquery/showpassword.js | |
parent | 2682d672d8076302da61fef3cc15e4d647d50be5 (diff) | |
download | nextcloud-server-3ced9cd83db38731a1e82dafc0dcbdfe7db6cc2b.tar.gz nextcloud-server-3ced9cd83db38731a1e82dafc0dcbdfe7db6cc2b.zip |
Move jQuery plugins into modules and add them to the bundle
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'core/src/jquery/showpassword.js')
-rw-r--r-- | core/src/jquery/showpassword.js | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/core/src/jquery/showpassword.js b/core/src/jquery/showpassword.js new file mode 100644 index 00000000000..4dc39340e76 --- /dev/null +++ b/core/src/jquery/showpassword.js @@ -0,0 +1,149 @@ +/* + * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * @author 2018 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import $ from 'jquery' + +/* +* @name Show Password +* @description +* @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 +*/ +$.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); + + var $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' + }); + + if ($element.attr('placeholder') !== undefined) { + $clone.attr('placeholder', $element.attr('placeholder')); + } + + 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); + } + + }); + } +}); |