Add revealable password input to display or prompt the password
This commit is contained in:
parent
447230d42e
commit
2b8e734cae
@ -97,15 +97,20 @@ define([], function () {
|
|||||||
#cp-loading-password-prompt .cp-password-form {
|
#cp-loading-password-prompt .cp-password-form {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
#cp-loading-password-prompt .cp-password-form * {
|
#cp-loading-password-prompt .cp-password-form button,
|
||||||
|
#cp-loading-password-prompt .cp-password-form .cp-password-input {
|
||||||
background-color: #4591c4;
|
background-color: #4591c4;
|
||||||
color: white;
|
color: white;
|
||||||
border: 1px solid #4591c4;
|
border: 1px solid #4591c4;
|
||||||
}
|
}
|
||||||
|
#cp-loading-password-prompt .cp-password-form .cp-password-container {
|
||||||
|
flex-shrink: 1;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
#cp-loading-password-prompt .cp-password-form input {
|
#cp-loading-password-prompt .cp-password-form input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-right: 15px;
|
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
|||||||
@ -177,16 +177,15 @@
|
|||||||
.cp-creation-password {
|
.cp-creation-password {
|
||||||
.cp-creation-password-picker {
|
.cp-creation-password-picker {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
input {
|
width: 100%;
|
||||||
width: 150px;
|
.cp-password-container {
|
||||||
}
|
input {
|
||||||
}
|
width: 150px;
|
||||||
&.active {
|
padding: 0 5px;
|
||||||
label {
|
}
|
||||||
flex: unset;
|
label {
|
||||||
}
|
flex: unset;
|
||||||
.cp-creation-slider {
|
}
|
||||||
flex: 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -335,7 +334,7 @@
|
|||||||
width: 95%;
|
width: 95%;
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
}
|
}
|
||||||
.cp-creation-expire, .cp-creation-password {
|
.cp-creation-expire{
|
||||||
&.active {
|
&.active {
|
||||||
label {
|
label {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
@import (once) './creation.less';
|
@import (once) './creation.less';
|
||||||
@import (once) './tippy.less';
|
@import (once) './tippy.less';
|
||||||
@import (once) "./checkmark.less";
|
@import (once) "./checkmark.less";
|
||||||
|
@import (once) "./password-input.less";
|
||||||
|
|
||||||
.framework_main(@bg-color, @warn-color, @color) {
|
.framework_main(@bg-color, @warn-color, @color) {
|
||||||
.toolbar_main(
|
.toolbar_main(
|
||||||
@ -18,6 +19,7 @@
|
|||||||
.tokenfield_main();
|
.tokenfield_main();
|
||||||
.tippy_main();
|
.tippy_main();
|
||||||
.checkmark_main(20px);
|
.checkmark_main(20px);
|
||||||
|
.password_main();
|
||||||
.creation_main(
|
.creation_main(
|
||||||
@bg-color: @bg-color,
|
@bg-color: @bg-color,
|
||||||
@warn-color: @warn-color,
|
@warn-color: @warn-color,
|
||||||
@ -39,6 +41,7 @@
|
|||||||
.alertify_main();
|
.alertify_main();
|
||||||
.tippy_main();
|
.tippy_main();
|
||||||
.checkmark_main(20px);
|
.checkmark_main(20px);
|
||||||
|
.password_main();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1093,6 +1093,7 @@ define(function () {
|
|||||||
out.creation_ownedByOther = "Appartient à un autre utilisateur";
|
out.creation_ownedByOther = "Appartient à un autre utilisateur";
|
||||||
out.creation_noOwner = "Pas de propriétaire";
|
out.creation_noOwner = "Pas de propriétaire";
|
||||||
out.creation_expiration = "Date d'expiration";
|
out.creation_expiration = "Date d'expiration";
|
||||||
|
out.creation_passwordValue = "Mot de passe";
|
||||||
out.creation_propertiesTitle = "Disponibilité";
|
out.creation_propertiesTitle = "Disponibilité";
|
||||||
out.creation_appMenuName = "Mode avancé (Ctrl + E)";
|
out.creation_appMenuName = "Mode avancé (Ctrl + E)";
|
||||||
out.creation_newPadModalDescription = "Cliquez sur un type de pad pour le créer. Vous pouvez aussi appuyer sur <b>Tab</b> pour sélectionner un type et appuyer sur <b>Entrée</b> pour valider.";
|
out.creation_newPadModalDescription = "Cliquez sur un type de pad pour le créer. Vous pouvez aussi appuyer sur <b>Tab</b> pour sélectionner un type et appuyer sur <b>Entrée</b> pour valider.";
|
||||||
@ -1104,6 +1105,7 @@ define(function () {
|
|||||||
out.password_error = "Pad introuvable !<br>Cette erreur peut provenir de deux facteurs. Soit le mot de passe est faux, soit le pad a été supprimé du serveur.";
|
out.password_error = "Pad introuvable !<br>Cette erreur peut provenir de deux facteurs. Soit le mot de passe est faux, soit le pad a été supprimé du serveur.";
|
||||||
out.password_placeholder = "Tapez le mot de passe ici...";
|
out.password_placeholder = "Tapez le mot de passe ici...";
|
||||||
out.password_submit = "Valider";
|
out.password_submit = "Valider";
|
||||||
|
out.password_show = "Afficher";
|
||||||
|
|
||||||
// New share modal
|
// New share modal
|
||||||
out.share_linkCategory = "Partage";
|
out.share_linkCategory = "Partage";
|
||||||
|
|||||||
@ -1139,6 +1139,7 @@ define(function () {
|
|||||||
out.creation_ownedByOther = "Owned by another user";
|
out.creation_ownedByOther = "Owned by another user";
|
||||||
out.creation_noOwner = "No owner";
|
out.creation_noOwner = "No owner";
|
||||||
out.creation_expiration = "Expiration time";
|
out.creation_expiration = "Expiration time";
|
||||||
|
out.creation_passwordValue = "Password";
|
||||||
out.creation_propertiesTitle = "Availability";
|
out.creation_propertiesTitle = "Availability";
|
||||||
out.creation_appMenuName = "Advanced mode (Ctrl + E)";
|
out.creation_appMenuName = "Advanced mode (Ctrl + E)";
|
||||||
out.creation_newPadModalDescription = "Click on a pad type to create it. You can also press <b>Tab</b> to select the type and press <b>Enter</b> to confirm.";
|
out.creation_newPadModalDescription = "Click on a pad type to create it. You can also press <b>Tab</b> to select the type and press <b>Enter</b> to confirm.";
|
||||||
@ -1150,6 +1151,7 @@ define(function () {
|
|||||||
out.password_error = "Pad not found!<br>This error can be caused by two factors: either the password in invalid, or the pad has been deleted from the server.";
|
out.password_error = "Pad not found!<br>This error can be caused by two factors: either the password in invalid, or the pad has been deleted from the server.";
|
||||||
out.password_placeholder = "Type the password here...";
|
out.password_placeholder = "Type the password here...";
|
||||||
out.password_submit = "Submit";
|
out.password_submit = "Submit";
|
||||||
|
out.password_show = "Show";
|
||||||
|
|
||||||
// New share modal
|
// New share modal
|
||||||
out.share_linkCategory = "Share link";
|
out.share_linkCategory = "Share link";
|
||||||
|
|||||||
@ -513,6 +513,50 @@ define([
|
|||||||
Alertify.error(Util.fixHTML(msg));
|
Alertify.error(Util.fixHTML(msg));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
UI.passwordInput = function (opts, displayEye) {
|
||||||
|
opts = opts || {};
|
||||||
|
var attributes = merge({
|
||||||
|
type: 'password'
|
||||||
|
}, opts);
|
||||||
|
|
||||||
|
var input = h('input.cp-password-input', attributes);
|
||||||
|
var reveal = UI.createCheckbox('cp-password-reveal', Messages.password_show);
|
||||||
|
var eye = h('span.fa.fa-eye.cp-password-reveal');
|
||||||
|
|
||||||
|
$(reveal).find('input').on('change', function () {
|
||||||
|
if($(this).is(':checked')) {
|
||||||
|
$(input).prop('type', 'text');
|
||||||
|
$(input).focus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$(input).prop('type', 'password');
|
||||||
|
$(input).focus();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(eye).mousedown(function () {
|
||||||
|
$(input).prop('type', 'text');
|
||||||
|
$(input).focus();
|
||||||
|
}).mouseup(function(){
|
||||||
|
$(input).prop('type', 'password');
|
||||||
|
$(input).focus();
|
||||||
|
}).mouseout(function(){
|
||||||
|
$(input).prop('type', 'password');
|
||||||
|
$(input).focus();
|
||||||
|
});
|
||||||
|
if (displayEye) {
|
||||||
|
$(reveal).hide();
|
||||||
|
} else {
|
||||||
|
$(eye).hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
return h('span.cp-password-container', [
|
||||||
|
input,
|
||||||
|
reveal,
|
||||||
|
eye
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* spinner
|
* spinner
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -143,6 +143,22 @@ define([
|
|||||||
$d.append(UI.dialog.selectable(expire, {
|
$d.append(UI.dialog.selectable(expire, {
|
||||||
id: 'cp-app-prop-expire',
|
id: 'cp-app-prop-expire',
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
if (typeof data.password !== "undefined") {
|
||||||
|
$('<label>', {'for': 'cp-app-prop-password'}).text(Messages.creation_passwordValue)
|
||||||
|
.appendTo($d);
|
||||||
|
var password = UI.passwordInput({
|
||||||
|
id: 'cp-app-prop-expire',
|
||||||
|
readonly: 'readonly'
|
||||||
|
});
|
||||||
|
var $pwInput = $(password).find('.cp-password-input');
|
||||||
|
$pwInput.val(data.password).click(function () {
|
||||||
|
$pwInput[0].select();
|
||||||
|
});
|
||||||
|
$(password).find('.cp-checkmark').css('margin-bottom', '15px');
|
||||||
|
$d.append(password);
|
||||||
|
}
|
||||||
|
|
||||||
cb(void 0, $d);
|
cb(void 0, $d);
|
||||||
};
|
};
|
||||||
var getPadProperties = function (common, data, cb) {
|
var getPadProperties = function (common, data, cb) {
|
||||||
@ -1920,9 +1936,10 @@ define([
|
|||||||
var password = h('div.cp-creation-password', [
|
var password = h('div.cp-creation-password', [
|
||||||
UI.createCheckbox('cp-creation-password', Messages.creation_password, false),
|
UI.createCheckbox('cp-creation-password', Messages.creation_password, false),
|
||||||
h('span.cp-creation-password-picker.cp-creation-slider', [
|
h('span.cp-creation-password-picker.cp-creation-slider', [
|
||||||
h('input#cp-creation-password-val', {
|
UI.passwordInput({id: 'cp-creation-password-val'})
|
||||||
|
/*h('input#cp-creation-password-val', {
|
||||||
type: "text" // TODO type password with click to show
|
type: "text" // TODO type password with click to show
|
||||||
}),
|
}),*/
|
||||||
]),
|
]),
|
||||||
//createHelper('#', "TODO: password protection adds another layer of security ........") // TODO
|
//createHelper('#', "TODO: password protection adds another layer of security ........") // TODO
|
||||||
]);
|
]);
|
||||||
@ -2207,14 +2224,11 @@ define([
|
|||||||
var error;
|
var error;
|
||||||
if (isError) { error = setHTML(h('p.cp-password-error'), Messages.password_error); }
|
if (isError) { error = setHTML(h('p.cp-password-error'), Messages.password_error); }
|
||||||
var info = h('p.cp-password-info', Messages.password_info);
|
var info = h('p.cp-password-info', Messages.password_info);
|
||||||
var input = h('input', {
|
var password = UI.passwordInput({placeholder: Messages.password_placeholder});
|
||||||
type: "password",
|
|
||||||
placeholder: Messages.password_placeholder
|
|
||||||
});
|
|
||||||
var button = h('button', Messages.password_submit);
|
var button = h('button', Messages.password_submit);
|
||||||
|
|
||||||
var submit = function () {
|
var submit = function () {
|
||||||
var value = $(input).val();
|
var value = $(password).find('.cp-password-input').val();
|
||||||
UI.addLoadingScreen();
|
UI.addLoadingScreen();
|
||||||
common.getSframeChannel().query('Q_PAD_PASSWORD_VALUE', value, function (err, data) {
|
common.getSframeChannel().query('Q_PAD_PASSWORD_VALUE', value, function (err, data) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
@ -2222,7 +2236,7 @@ define([
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
$(input).on('keydown', function (e) { if (e.which === 13) { submit(); } });
|
$(password).find('.cp-password-input').on('keydown', function (e) { if (e.which === 13) { submit(); } });
|
||||||
$(button).on('click', function () { submit(); });
|
$(button).on('click', function () { submit(); });
|
||||||
|
|
||||||
|
|
||||||
@ -2230,11 +2244,13 @@ define([
|
|||||||
error,
|
error,
|
||||||
info,
|
info,
|
||||||
h('p.cp-password-form', [
|
h('p.cp-password-form', [
|
||||||
input,
|
password,
|
||||||
button
|
button
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
UI.errorLoadingScreen(block);
|
UI.errorLoadingScreen(block);
|
||||||
|
|
||||||
|
$(password).find('.cp-password-input').focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
return UIElements;
|
return UIElements;
|
||||||
|
|||||||
@ -379,7 +379,6 @@ define([
|
|||||||
Object.freeze(funcs);
|
Object.freeze(funcs);
|
||||||
return { create: function (cb) {
|
return { create: function (cb) {
|
||||||
|
|
||||||
console.log('create');
|
|
||||||
if (window.CryptPad_sframe_common) {
|
if (window.CryptPad_sframe_common) {
|
||||||
throw new Error("Sframe-common should only be created once");
|
throw new Error("Sframe-common should only be created once");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user