diff --git a/customize.dist/src/less/toolbar.less b/customize.dist/src/less/toolbar.less
index 376cfc8bd..3a01e9a78 100644
--- a/customize.dist/src/less/toolbar.less
+++ b/customize.dist/src/less/toolbar.less
@@ -780,6 +780,9 @@ body {
}
.cryptpad-toolbar-leftside {
height: 32px;
+ &:empty {
+ height: 0;
+ }
float: left;
margin-bottom: -1px;
.cryptpad-dropdown-users {
@@ -812,6 +815,9 @@ body {
}
.cryptpad-toolbar-rightside {
height: 32px;
+ &:empty {
+ height: 0;
+ }
text-align: right;
&> button {
height: 100%;
@@ -825,7 +831,7 @@ body {
.drawer-content {
position: absolute;
right:0px;
- top:96px;
+ margin-top: 32px;
min-width: 50px;
background: white;
border: 1px solid black;
diff --git a/customize.dist/toolbar.css b/customize.dist/toolbar.css
index 7ac73423d..bf075cd51 100644
--- a/customize.dist/toolbar.css
+++ b/customize.dist/toolbar.css
@@ -1303,6 +1303,9 @@ body.app-file .cryptpad-toolbar .dropdown-bar-content p .accountData {
float: left;
margin-bottom: -1px;
}
+.cryptpad-toolbar-leftside:empty {
+ height: 0;
+}
.cryptpad-toolbar-leftside .cryptpad-dropdown-users pre {
/* needed for ckeditor */
white-space: pre;
@@ -1332,6 +1335,9 @@ body.app-file .cryptpad-toolbar .dropdown-bar-content p .accountData {
height: 32px;
text-align: right;
}
+.cryptpad-toolbar-rightside:empty {
+ height: 0;
+}
.cryptpad-toolbar-rightside > button {
height: 100%;
margin: 0;
@@ -1344,7 +1350,7 @@ body.app-file .cryptpad-toolbar .dropdown-bar-content p .accountData {
.cryptpad-toolbar-rightside .drawer-content {
position: absolute;
right: 0px;
- top: 96px;
+ margin-top: 32px;
min-width: 50px;
background: white;
border: 1px solid black;
diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js
index ed5ee0b51..179b96062 100644
--- a/customize.dist/translations/messages.fr.js
+++ b/customize.dist/translations/messages.fr.js
@@ -406,6 +406,7 @@ define(function () {
out.upload_progress = "État";
out.upload_mustLogin = "Vous devez vous connecter pour importer un fichier";
out.download_button = "Déchiffrer et télécharger";
+ out.download_mt_button = "Télécharger";
// general warnings
out.warn_notPinned = "Ce pad n'est stocké dans aucun CryptDrive. Il va expirer après 3 mois d'inactivité. En savoir plus...";
diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js
index f64153742..a82ed052d 100644
--- a/customize.dist/translations/messages.js
+++ b/customize.dist/translations/messages.js
@@ -412,6 +412,7 @@ define(function () {
out.upload_progress = "Progress";
out.upload_mustLogin = "You must be logged in to upload files";
out.download_button = "Decrypt & Download";
+ out.download_mt_button = "Download";
// general warnings
out.warn_notPinned = "This pad is not in anyone's CryptDrive. It will expire after 3 months. Learn more...";
diff --git a/package.json b/package.json
index aa6aad896..f606c8a86 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
"scripts": {
"lint": "jshint --config .jshintrc --exclude-path .jshintignore .",
"test": "node TestSelenium.js",
- "style": "lessc ./customize.dist/src/less/cryptpad.less > ./customize.dist/main.css && lessc ./customize.dist/src/less/toolbar.less > ./customize.dist/toolbar.css && lessc ./www/drive/file.less > ./www/drive/file.css && lessc ./www/settings/main.less > ./www/settings/main.css && lessc ./www/slide/slide.less > ./www/slide/slide.css && lessc ./www/whiteboard/whiteboard.less > ./www/whiteboard/whiteboard.css && lessc ./www/poll/poll.less > ./www/poll/poll.css && lessc ./www/file/file.less > ./www/file/file.css && lessc ./www/code/code.less > ./www/code/code.css",
+ "style": "lessc ./customize.dist/src/less/cryptpad.less > ./customize.dist/main.css && lessc ./customize.dist/src/less/toolbar.less > ./customize.dist/toolbar.css && lessc ./www/drive/file.less > ./www/drive/file.css && lessc ./www/settings/main.less > ./www/settings/main.css && lessc ./www/whiteboard/whiteboard.less > ./www/whiteboard/whiteboard.css && lessc ./www/poll/poll.less > ./www/poll/poll.css && lessc ./www/file/file.less > ./www/file/file.css && lessc ./www/code/code.less > ./www/code/code.css",
"template": "cd customize.dist/src && for page in ../index.html ../privacy.html ../terms.html ../about.html ../contact.html ../../www/login/index.html ../../www/register/index.html ../../www/settings/index.html ../../www/user/index.html;do echo $page; cp template.html $page; done;"
}
}
diff --git a/www/common/common-interface.js b/www/common/common-interface.js
index 5d1e01cc8..8209149c7 100644
--- a/www/common/common-interface.js
+++ b/www/common/common-interface.js
@@ -19,11 +19,11 @@ define([
Alertify._$$alertify.delay = AppConfig.notificationTimeout || 5000;
var findCancelButton = UI.findCancelButton = function () {
- return $('button.cancel');
+ return $('button.cancel').last();
};
var findOKButton = UI.findOKButton = function () {
- return $('button.ok');
+ return $('button.ok').last();
};
var listenForKeys = UI.listenForKeys = function (yes, no) {
@@ -74,14 +74,22 @@ define([
findCancelButton().click();
});
+ // Make sure we don't call both the "yes" and "no" handlers if we use "findOKButton().click()"
+ // in the callback
+ var isClicked = false;
+
Alertify
.defaultValue(def || '')
.okBtn(opt.ok || Messages.okButton || 'OK')
.cancelBtn(opt.cancel || Messages.cancelButton || 'Cancel')
.prompt(msg, function (val, ev) {
+ if (isClicked) { return; }
+ isClicked = true;
cb(val, ev);
stopListening(keyHandler);
}, function (ev) {
+ if (isClicked) { return; }
+ isClicked = true;
cb(null, ev);
stopListening(keyHandler);
});
@@ -98,13 +106,21 @@ define([
findCancelButton().click();
});
+ // Make sure we don't call both the "yes" and "no" handlers if we use "findOKButton().click()"
+ // in the callback
+ var isClicked = false;
+
Alertify
.okBtn(opt.ok || Messages.okButton || 'OK')
.cancelBtn(opt.cancel || Messages.cancelButton || 'Cancel')
.confirm(msg, function () {
+ if (isClicked) { return; }
+ isClicked = true;
cb(true);
stopListening(keyHandler);
}, function () {
+ if (isClicked) { return; }
+ isClicked = true;
cb(false);
stopListening(keyHandler);
});
diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js
index 47b549bb8..81936b14e 100644
--- a/www/common/cryptpad-common.js
+++ b/www/common/cryptpad-common.js
@@ -519,9 +519,9 @@ define([
if (_onDisplayNameChanged.indexOf(h) !== -1) { return; }
_onDisplayNameChanged.push(h);
};
- common.changeDisplayName = function (newName) {
+ common.changeDisplayName = function (newName, isLocal) {
_onDisplayNameChanged.forEach(function (h) {
- h(newName);
+ h(newName, isLocal);
});
};
diff --git a/www/common/toolbar2.js b/www/common/toolbar2.js
index 001eac3b6..f35abf7ba 100644
--- a/www/common/toolbar2.js
+++ b/www/common/toolbar2.js
@@ -736,7 +736,7 @@ define([
Cryptpad.prompt(Messages.changeNamePrompt, lastName || '', function (newName) {
if (newName === null && typeof(lastName) === "string") { return; }
if (newName === null) { newName = ''; }
- Cryptpad.changeDisplayName(newName);
+ Cryptpad.changeDisplayName(newName, true);
});
});
});
diff --git a/www/drive/main.js b/www/drive/main.js
index 8908e3a8c..74ac1bb00 100644
--- a/www/drive/main.js
+++ b/www/drive/main.js
@@ -2714,6 +2714,7 @@ define([
var toolbar = APP.toolbar = Toolbar.create(config);
var $rightside = toolbar.$rightside;
+ $rightside.html(''); // Remove the drawer if we don't use it to hide the toolbar
var $leftside = toolbar.$leftside;
var $userBlock = toolbar.$userAdmin;
APP.$displayName = APP.$bar.find('.' + Toolbar.constants.username);
@@ -2749,8 +2750,7 @@ define([
href: window.location.origin + window.location.pathname + '#' + APP.hash
};
var $hist = Cryptpad.createButton('history', true, {histConfig: histConfig});
- $rightside.append($hist);
- if (!APP.loggedIn) { $hist.hide(); }
+ if (APP.loggedIn) { $rightside.append($hist); }
if (!readOnly && !APP.loggedIn) {
var $backupButton = Cryptpad.createButton('', true).removeClass('fa').removeClass('fa-question').addClass('cryptpad-backup');
diff --git a/www/file/main.js b/www/file/main.js
index 678ef4490..ad1baaad5 100644
--- a/www/file/main.js
+++ b/www/file/main.js
@@ -51,16 +51,9 @@ define([
uploadMode = true;
}
- var getTitle = function () {
- var pad = Cryptpad.getRelativeHref(window.location.href);
- var fo = Cryptpad.getStore().getProxy().fo;
- var data = fo.getFileData(pad);
- return data ? data.title : undefined;
- };
-
Title = Cryptpad.createTitle({}, function(){}, Cryptpad);
- var displayed = ['title', 'useradmin', 'newpad', 'limit', 'upgrade'];
+ var displayed = ['useradmin', 'newpad', 'limit', 'upgrade'];
if (secret && hexFileName) {
displayed.push('fileshare');
}
@@ -69,30 +62,24 @@ define([
displayed: displayed,
ifrw: ifrw,
common: Cryptpad,
- title: Title.getTitleConfig(),
hideDisplayName: true,
$container: $bar
};
var toolbar = APP.toolbar = Toolbar.create(configTb);
+ toolbar.$rightside.html(''); // Remove the drawer if we don't use it to hide the toolbar
- Title.setToolbar(toolbar);
-
- if (uploadMode) { toolbar.title.hide(); }
-
- Title.updateTitle(Cryptpad.initialName || getTitle() || Title.defaultTitle);
if (!uploadMode) {
var src = Cryptpad.getBlobPathFromHex(hexFileName);
var cryptKey = secret.keys && secret.keys.fileKeyStr;
var key = Nacl.util.decodeBase64(cryptKey);
-
FileCrypto.fetchDecryptedMetadata(src, key, function (e, metadata) {
if (e) { return void console.error(e); }
var title = document.title = metadata.name;
Title.updateTitle(title || Title.defaultTitle);
- var displayFile = function (ev) {
+ var displayFile = function (ev, sizeMb) {
var $mt = $dlview.find('media-tag');
var cryptKey = secret.keys && secret.keys.fileKeyStr;
var hexFileName = Cryptpad.base64ToHex(secret.channel);
@@ -112,6 +99,10 @@ define([
$appContainer.css('background', 'white');
}
$dlButton.addClass('btn btn-success');
+ var text = Messages.download_mt_button + '
';
+ text += '' + Cryptpad.fixHTML(title) + '
';
+ text += '' + Messages._getKey('formattedMB', [sizeMb]) + '';
+ $dlButton.html(text);
toolbar.$rightside.append(Cryptpad.createButton('export', true, {}, function () {
saveAs(decrypted.blob, decrypted.metadata.name);
@@ -169,14 +160,14 @@ define([
$dlform.show();
Cryptpad.removeLoadingScreen();
$dllabel.append($('
'));
- $dllabel.append(metadata.name);
+ $dllabel.append(Cryptpad.fixHTML(metadata.name));
$dllabel.append($('
'));
$dllabel.append(Messages._getKey('formattedMB', [sizeMb]));
var decrypting = false;
var onClick = function (ev) {
if (decrypting) { return; }
decrypting = true;
- displayFile(ev);
+ displayFile(ev, sizeMb);
};
if (sizeMb < 5) { return void onClick(); }
$dlform.find('#dl, #progress').click(onClick);