From b2972d5707fc427532aa1a22a2c5e0ecf0c679fa Mon Sep 17 00:00:00 2001 From: ClemDee Date: Thu, 20 Jun 2019 10:21:42 +0200 Subject: [PATCH 01/40] Add rename F2 shortcut in drive --- www/drive/inner.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/www/drive/inner.js b/www/drive/inner.js index 1d90beb49..151ef76d2 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -3636,6 +3636,14 @@ define([ APP.hideMenu(); }); + $content.on("keydown", function (e) { + if (e.which === 113) { + var paths = $contextMenu.data('paths'); + if (paths.length !== 1) { return; } + displayRenameInput(paths[0].element, paths[0].path); + } + }); + // Chrome considers the double-click means "select all" in the window $content.on('mousedown', function (e) { $content.focus(); From 0af7824a3ea3bf063ca691764ef0017cfae213ba Mon Sep 17 00:00:00 2001 From: ClemDee Date: Thu, 20 Jun 2019 16:51:04 +0200 Subject: [PATCH 02/40] Add context menu separators --- www/drive/inner.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/www/drive/inner.js b/www/drive/inner.js index 151ef76d2..d7629d52c 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -124,6 +124,7 @@ define([ var $tagsIcon = $('', {"class": "fa " + faTags}); var $passwordIcon = $('', {"class": "fa fa-lock"}); var $expirableIcon = $('', {"class": "fa fa-clock-o"}); + var $separator = $('
', {"class": "dropdown-divider"}); var LS_LAST = "app-drive-lastOpened"; var LS_OPENED = "app-drive-openedFolders"; @@ -311,6 +312,7 @@ define([ 'tabindex': '-1', 'data-icon': faReadOnly, }, Messages.fc_open_ro)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-expandall.dropdown-item', { 'tabindex': '-1', 'data-icon': "expandAll", @@ -319,6 +321,7 @@ define([ 'tabindex': '-1', 'data-icon': "collapseAll", }, Messages.fc_collapseAll)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-color.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', 'data-icon': faColor, @@ -347,6 +350,7 @@ define([ 'tabindex': '-1', 'data-icon': faTags, }, Messages.fc_hashtag)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-newdoc.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', 'data-icon': AppConfig.applicationsIcon.pad, @@ -372,6 +376,7 @@ define([ 'data-icon': AppConfig.applicationsIcon.whiteboard, 'data-type': 'whiteboard' }, Messages.button_newwhiteboard)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-empty.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', 'data-icon': faEmpty, @@ -380,6 +385,7 @@ define([ 'tabindex': '-1', 'data-icon': faRestore, }, Messages.fc_restore)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-rename.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', 'data-icon': faRename, @@ -1238,6 +1244,20 @@ define([ var displayMenu = function (e) { var $menu = $contextMenu; + var showSep = false; + var $lastVisibleSep = null; + $menu.find(".dropdown-menu").children().each(function (i, el) { + var $el = $(el); + if ($el.is(".dropdown-divider")) { + $el.css("display", showSep ? "list-item" : "none"); + if (showSep) { $lastVisibleSep = $el; } + showSep = false; + } + else if ($el.is("li") && $el.css("display") !== "none") { + showSep = true; + } + }); + if (!showSep && $lastVisibleSep) { $lastVisibleSep.css("display", "none"); } // remove last divider if no options after $menu.css({ display: "block" }); if (APP.mobile()) { return; } var h = $menu.outerHeight(); From 7af53cc0e7ccb2706080ae8d42ab17ea75e279ea Mon Sep 17 00:00:00 2001 From: ClemDee Date: Thu, 20 Jun 2019 16:56:37 +0200 Subject: [PATCH 03/40] Remove New Folder option in context menu when clicking on folder --- www/drive/inner.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index d7629d52c..d6669d1c7 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -1059,8 +1059,7 @@ define([ show = ['newfolder', 'newsharedfolder', 'newdoc']; break; case 'tree': - show = ['open', 'openro', 'expandall', 'collapseall', 'color', 'download', 'share', 'rename', 'delete', 'deleteowned', 'removesf', - 'newfolder', 'properties', 'hashtag']; + show = ['open', 'openro', 'expandall', 'collapseall', 'color', 'download', 'share', 'rename', 'delete', 'deleteowned', 'removesf', 'properties', 'hashtag']; break; case 'default': show = ['open', 'openro', 'share', 'openparent', 'delete', 'deleteowned', 'properties', 'hashtag']; From 29b7c2c2955edc60b9b2d0c884f7aa87839d5610 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Thu, 20 Jun 2019 17:17:28 +0200 Subject: [PATCH 04/40] Display "No Action" in context menu when empty --- customize.dist/src/less2/include/contextmenu.less | 6 ++++++ www/drive/inner.js | 7 ++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/customize.dist/src/less2/include/contextmenu.less b/customize.dist/src/less2/include/contextmenu.less index 1a9049b54..e60394bd7 100644 --- a/customize.dist/src/less2/include/contextmenu.less +++ b/customize.dist/src/less2/include/contextmenu.less @@ -15,5 +15,11 @@ cursor: pointer; } } + .cp-app-drive-context-noAction { + font-style: italic; + color: #aaa; + cursor: default; + display: none; + } } } diff --git a/www/drive/inner.js b/www/drive/inner.js index d6669d1c7..94f7d9e5e 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -304,6 +304,7 @@ define([ 'aria-labelledby': 'dropdownMenu', 'style': 'display:block;position:static;margin-bottom:5px;' }, [ + h('span.cp-app-drive-context-noAction.dropdown-item.disabled', Messages.fc_noAction || "No action possible"), h('li', h('a.cp-app-drive-context-open.dropdown-item', { 'tabindex': '-1', 'data-icon': faFolderOpen, @@ -1332,11 +1333,7 @@ define([ displayMenu(e); - if ($contextMenu.find('li:visible').length === 0) { - debug("No visible element in the context menu. Abort."); - $contextMenu.hide(); - return true; - } + $(".cp-app-drive-context-noAction").toggle($contextMenu.find('li:visible').length === 0); $contextMenu.data('paths', paths); return false; From 9b8fed55e976804010e6da6d6ae50e60d5d13a01 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Fri, 21 Jun 2019 17:25:00 +0200 Subject: [PATCH 05/40] Show folders in the results of drive search --- www/common/userObject.js | 34 +++++++++++++++++++++++ www/drive/inner.js | 59 ++++++++++++++++++++++++---------------- 2 files changed, 70 insertions(+), 23 deletions(-) diff --git a/www/common/userObject.js b/www/common/userObject.js index a9068afe6..096cc5057 100644 --- a/www/common/userObject.js +++ b/www/common/userObject.js @@ -514,6 +514,40 @@ define([ data: exp.getFileData(l) }); }); + + // find folders + var resFolders = []; + var findFoldersRec = function (folder, path) { + for (var key in folder) { + if (isFolder(folder[key])) { + if (isSharedFolder(folder[key])) { +// var name = getSharedFolderData(folder[key]).title || ""; +// if (name.toLowerCase().indexOf(lValue) !== -1) { +// resFolders.push(path.concat([key, ROOT])); +// } + findFoldersRec(folder[key], path.concat([key, ROOT])); + } + else { + if (key.toLowerCase().indexOf(lValue) !== -1) { + resFolders.push({ + id: null, + paths: [path.concat(key)], + data: { + title: key + } + }); + } + findFoldersRec(folder[key], path.concat(key)); + } + } + } + }; + findFoldersRec(files[ROOT], [ROOT]); + resFolders = resFolders.sort(function (a, b) { + return a.data.title.toLowerCase() > b.data.title.toLowerCase(); + }); + ret = resFolders.concat(ret); + return ret; }; exp.getRecentPads = function () { diff --git a/www/drive/inner.js b/www/drive/inner.js index 94f7d9e5e..5937b6aed 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -2610,6 +2610,7 @@ define([ var displaySearch = function ($list, value) { var filesList = manager.search(value); filesList.forEach(function (r) { + // if r.id === null, then it's a folder, not a file r.paths.forEach(function (path) { if (!r.inSharedFolder && APP.hideDuplicateOwned && manager.isDuplicateOwned(path)) { return; } @@ -2617,25 +2618,27 @@ define([ var parsed = Hash.parsePadUrl(href); var $table = $(''); var $icon = $('').append($icon).append($title).append($typeName).append($type).appendTo($table); @@ -3208,7 +3221,7 @@ define([ placeholder: Messages.fm_searchPlaceholder }).keyup(function (e) { if (search.to) { window.clearTimeout(search.to); } - if ([38, 39, 40, 41].indexOf(e.which) !== -1) { + if ([37, 38, 39, 40].indexOf(e.which) !== -1) { if (!$input.val()) { $input.blur(); $content.focus(); From d34d517e270d58324567113ffa248df6ff68b164 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Fri, 21 Jun 2019 17:26:32 +0200 Subject: [PATCH 06/40] Fix flex direction in results path of drive search --- www/drive/app-drive.less | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/www/drive/app-drive.less b/www/drive/app-drive.less index ba59e9124..c85cd3c88 100644 --- a/www/drive/app-drive.less +++ b/www/drive/app-drive.less @@ -513,12 +513,18 @@ } .cp-app-drive-search-path { font-style: italic; - display: flex; - flex-flow: row-reverse; - justify-content: right; - .cp-app-drive-path-element { - display: inline-block; - margin-right: 5px; + .cp-app-drive-path-inner { + display: flex; + flex-flow: row-reverse wrap-reverse; + justify-content: flex-end; + .cp-app-drive-path-element { + flex-shrink: 0; + display: inline-block; + margin-right: 5px; + white-space: normal; + word-wrap: break-word; + max-width: 100%; + } } } .cp-app-drive-search-title { From dd62533467c5abe4ba2c38e9e03e5e8b573384f6 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Mon, 24 Jun 2019 10:07:16 +0200 Subject: [PATCH 07/40] Better code for displaying result of search in drive --- www/drive/inner.js | 61 +++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index 5937b6aed..fb2b0bcd9 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -2617,28 +2617,10 @@ define([ var href = r.data.href; var parsed = Hash.parsePadUrl(href); var $table = $('
', {'rowspan': '3', 'class': 'cp-app-drive-search-icon'}) - .append(getFileIcon(r.id)); + .append(r.id ? getFileIcon(r.id) : $folderIcon.clone()); var $title = $('', { 'class': 'cp-app-drive-search-col1 cp-app-drive-search-title' - }).text(r.data.title) - .click(function () { - openFile(null, r.data.href); - }); + }).text(r.data.title); + if (r.id) { + $title.click(function () { + openFile(null, r.data.href); + }); + } var $typeName = $('', {'class': 'cp-app-drive-search-label2'}) .text(Messages.fm_type); var $type = $('', {'class': 'cp-app-drive-search-col2'}) - .text(Messages.type[parsed.type] || parsed.type); + .text(r.id ? Messages.type[parsed.type] || parsed.type : Messages.fm_folder); var $atimeName = $('', {'class': 'cp-app-drive-search-label2'}) - .text(Messages.fm_lastAccess); + .text(r.id ? Messages.fm_lastAccess : ""); var $atime = $('', {'class': 'cp-app-drive-search-col2'}) - .text(new Date(r.data.atime).toLocaleString()); + .text(r.id ? new Date(r.data.atime).toLocaleString() : ""); var $ctimeName = $('', {'class': 'cp-app-drive-search-label2'}) - .text(Messages.fm_creation); + .text(r.id ? Messages.fm_creation : ""); var $ctime = $('', {'class': 'cp-app-drive-search-col2'}) - .text(new Date(r.data.ctime).toLocaleString()); + .text(r.id ? new Date(r.data.ctime).toLocaleString() : ""); if (manager.isPathIn(path, ['hrefArray'])) { path.pop(); path.push(r.data.title); @@ -2646,23 +2649,33 @@ define([ createTitle($path, path, true); var parentPath = path.slice(); var $a; - if (parentPath) { - $a = $('').text(Messages.fm_openParent).click(function (e) { + if (r.id) { + if (parentPath) { + $a = $('').text(Messages.fm_openParent).click(function (e) { + e.preventDefault(); + if (manager.isInTrashRoot(parentPath)) { parentPath = [TRASH]; } + else { parentPath.pop(); } + APP.selectedFiles = [r.id]; + APP.displayDirectory(parentPath); + }); + } + } + else { + $a = $('').text(Messages.fm_OpenFolder || "Open folder").click(function (e) { e.preventDefault(); - if (manager.isInTrashRoot(parentPath)) { parentPath = [TRASH]; } - else { parentPath.pop(); } - APP.selectedFiles = [r.id]; - APP.displayDirectory(parentPath); + APP.displayDirectory(path); }); } var $openDir = $('', {'class': 'cp-app-drive-search-opendir'}).append($a); - $('').text(Messages.fc_prop).click(function () { - APP.getProperties(r.id, function (e, $prop) { - if (e) { return void logError(e); } - UI.alert($prop[0], undefined, true); - }); - }).appendTo($openDir); + if (r.id) { + $('').text(Messages.fc_prop).click(function () { + APP.getProperties(r.id, function (e, $prop) { + if (e) { return void logError(e); } + UI.alert($prop[0], undefined, true); + }); + }).appendTo($openDir); + } // rows 1-3 $('
'); - var $icon = $('').append($icon).append($title).append($typeName).append($type).appendTo($table); From f5858f524d1c40e362dc791b64731cbff849c84a Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 24 Jun 2019 12:17:08 +0200 Subject: [PATCH 08/40] Fix invalid file ID in the drive --- www/common/outer/userObject.js | 5 +++++ www/common/proxy-manager.js | 1 + www/common/userObject.js | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/www/common/outer/userObject.js b/www/common/outer/userObject.js index e67dd5f01..1f8b73da9 100644 --- a/www/common/outer/userObject.js +++ b/www/common/outer/userObject.js @@ -626,6 +626,11 @@ define([ var toClean = []; for (var id in fd) { id = Number(id); + if (!id && id !== 0) { + debug("Invalid file ID in filesData.", id); + toClean.push(id); + continue; + } var el = fd[id]; // Clean corrupted data diff --git a/www/common/proxy-manager.js b/www/common/proxy-manager.js index 017a403bb..8bbf641f6 100644 --- a/www/common/proxy-manager.js +++ b/www/common/proxy-manager.js @@ -729,6 +729,7 @@ define([ if (type === "pin") { return function (fileId) { var data = userObject.getFileData(fileId); + if (!data) { return; } // Don't pin pads owned by someone else if (_ownedByOther(Env, data.owners)) { return; } // Don't push duplicates diff --git a/www/common/userObject.js b/www/common/userObject.js index a9068afe6..f39e80aee 100644 --- a/www/common/userObject.js +++ b/www/common/userObject.js @@ -311,12 +311,12 @@ define([ _getFiles[FILES_DATA] = function () { var ret = []; if (!files[FILES_DATA]) { return ret; } - return Object.keys(files[FILES_DATA]).map(Number); + return Object.keys(files[FILES_DATA]).map(Number).filter(Boolean); }; _getFiles[SHARED_FOLDERS] = function () { var ret = []; if (!files[SHARED_FOLDERS]) { return ret; } - return Object.keys(files[SHARED_FOLDERS]).map(Number); + return Object.keys(files[SHARED_FOLDERS]).map(Number).filter(Boolean); }; var getFiles = exp.getFiles = function (categories) { var ret = []; From bba3e355d00ec3c11e062ee0c6d7c9657df58c36 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 24 Jun 2019 12:28:46 +0200 Subject: [PATCH 09/40] Invalid ID fix --- www/common/outer/userObject.js | 4 ++-- www/common/proxy-manager.js | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/www/common/outer/userObject.js b/www/common/outer/userObject.js index 1f8b73da9..e12883eb5 100644 --- a/www/common/outer/userObject.js +++ b/www/common/outer/userObject.js @@ -625,12 +625,12 @@ define([ var root = exp.find([ROOT]); var toClean = []; for (var id in fd) { - id = Number(id); - if (!id && id !== 0) { + if (String(id) !== String(Number(id))) { debug("Invalid file ID in filesData.", id); toClean.push(id); continue; } + id = Number(id); var el = fd[id]; // Clean corrupted data diff --git a/www/common/proxy-manager.js b/www/common/proxy-manager.js index 8bbf641f6..fdfde9263 100644 --- a/www/common/proxy-manager.js +++ b/www/common/proxy-manager.js @@ -707,6 +707,7 @@ define([ if (type === 'expirable') { return function (fileId) { var data = userObject.getFileData(fileId); + if (!data) { return; } // Don't push duplicates if (result.indexOf(data.channel) !== -1) { return; } // Return pads owned by someone else or expired by time @@ -718,6 +719,7 @@ define([ if (type === 'owned') { return function (fileId) { var data = userObject.getFileData(fileId); + if (!data) { return; } // Don't push duplicates if (result.indexOf(data.channel) !== -1) { return; } // Return owned pads From 905bbef8238017ace07af812cfa50c6803e54158 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 24 Jun 2019 18:15:53 +0200 Subject: [PATCH 10/40] Add FIXME comments --- www/common/common-ui-elements.js | 2 +- www/common/proxy-manager.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index c6668e41f..24e50863f 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -162,7 +162,7 @@ define([ } var parsed = Hash.parsePadUrl(data.href || data.roHref); - if (!data.noEditPassword && owned && parsed.hashData.type === 'pad') { + if (!data.noEditPassword && owned && parsed.hashData.type === 'pad' && parsed.type !== "sheet") { // FIXME SHEET fix password change for sheets var sframeChan = common.getSframeChannel(); var changePwTitle = Messages.properties_changePassword; var changePwConfirm = Messages.properties_confirmChange; diff --git a/www/common/proxy-manager.js b/www/common/proxy-manager.js index fdfde9263..9d8bbe6ba 100644 --- a/www/common/proxy-manager.js +++ b/www/common/proxy-manager.js @@ -342,7 +342,7 @@ define([ }); // Remove the elements from the old location (without unpinning) - Env.user.userObject.delete(resolved.main, waitFor()); + Env.user.userObject.delete(resolved.main, waitFor()); // FIXME waitFor() is called synchronously } } } @@ -369,7 +369,7 @@ define([ if (copy) { return; } // Remove the elements from the old location (without unpinning) - uoFrom.delete(paths, waitFor()); + uoFrom.delete(paths, waitFor()); // FIXME waitFor() is called synchronously } }); } From 59d5723f3e7e7d61d3643205b821007b2f471848 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 24 Jun 2019 18:16:32 +0200 Subject: [PATCH 11/40] Fix read-only spreadsheets --- www/common/onlyoffice/main.js | 7 +++++-- www/common/outer/onlyoffice.js | 29 +++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/www/common/onlyoffice/main.js b/www/common/onlyoffice/main.js index d056cad42..6bd6c7df5 100644 --- a/www/common/onlyoffice/main.js +++ b/www/common/onlyoffice/main.js @@ -102,9 +102,12 @@ define([ Cryptpad.onlyoffice.onEvent.reg(function (obj) { if (obj.ev === 'MESSAGE' && !/^cp\|/.test(obj.data)) { try { + var validateKey = obj.data.validateKey || true; + var skipCheck = validateKey === true; + var msg = obj.data.msg; obj.data = { - msg: JSON.parse(Utils.crypto.decrypt(obj.data, Utils.secret.keys.validateKey)), - hash: obj.data.slice(0,64) + msg: JSON.parse(Utils.crypto.decrypt(msg, validateKey, skipCheck)), + hash: msg.slice(0,64) }; } catch (e) { console.error(e); diff --git a/www/common/outer/onlyoffice.js b/www/common/outer/onlyoffice.js index 3b57b4123..70bc413ec 100644 --- a/www/common/outer/onlyoffice.js +++ b/www/common/outer/onlyoffice.js @@ -26,7 +26,10 @@ define([ if (!c.id) { c.id = chan.wc.myID + '-' + client; } chan.history.forEach(function (msg) { - ctx.emit('MESSAGE', msg, [client]); + ctx.emit('MESSAGE', { + msg: msg, + validateKey: chan.validateKey + }, [client]); }); // ==> And push the new tab to the list @@ -37,7 +40,8 @@ define([ var onOpen = function (wc) { ctx.channels[channel] = ctx.channels[channel] || { - history: [] + history: [], + validateKey: obj.validateKey }; chan = ctx.channels[channel]; @@ -61,7 +65,10 @@ define([ }); wc.on('message', function (msg) { chan.history.push(msg); - ctx.emit('MESSAGE', msg, chan.clients); + ctx.emit('MESSAGE', { + msg: msg, + validateKey: chan.validateKey + }, chan.clients); }); chan.wc = wc; @@ -101,6 +108,7 @@ define([ }; network.on('message', function (msg, sender) { + if (!ctx.channels[channel]) { return; } var hk = network.historyKeeper; if (sender !== hk) { return; } @@ -115,7 +123,12 @@ define([ // Keep only metadata messages for the current channel if (parsed.channel && parsed.channel !== channel) { return; } // Ignore the metadata message - if (parsed.validateKey && parsed.channel) { return; } + if (parsed.validateKey && parsed.channel) { + if (!chan.validateKey) { + chan.validateKey = parsed.validateKey; + } + return; + } // End of history: emit READY if (parsed.state && parsed.state === 1 && parsed.channel) { ctx.emit('READY', '', chan.clients); @@ -132,7 +145,9 @@ define([ if (hash === chan.lastKnownHash || hash === chan.lastCpHash) { return; } chan.lastKnownHash = hash; - ctx.emit('MESSAGE', msg, chan.clients); + ctx.emit('MESSAGE', { + msg: msg, + }, chan.clients); chan.history.push(msg); }); @@ -176,7 +191,9 @@ define([ return void chan.sendMsg(data.isCp, cb); } chan.sendMsg(data.msg, cb); - ctx.emit('MESSAGE', data.msg, chan.clients.filter(function (cl) { + ctx.emit('MESSAGE', { + msg: data.msg + }, chan.clients.filter(function (cl) { return cl !== clientId; })); }; From ba95ad6bf5e94d787b00707b61b369c0b97faffd Mon Sep 17 00:00:00 2001 From: ClemDee Date: Tue, 25 Jun 2019 09:45:30 +0200 Subject: [PATCH 12/40] Do not move folders if destination is one of the moved folders --- www/drive/inner.js | 1 + 1 file changed, 1 insertion(+) diff --git a/www/drive/inner.js b/www/drive/inner.js index fb2b0bcd9..7224d729d 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -1361,6 +1361,7 @@ define([ }); cb(); }; + if (paths.some(function (p) { return manager.comparePath(newPath, p) })) { return void cb(); } manager.move(paths, newPath, newCb, copy); }; // Delete paths from the drive and/or shared folders (without moving them to the trash) From 29a2e3a0ea8ae49f5bb5780f50dd8e9d45ee5fd1 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Tue, 25 Jun 2019 10:43:40 +0200 Subject: [PATCH 13/40] Add icons in context menu --- customize.dist/src/less2/include/colortheme.less | 2 ++ customize.dist/src/less2/include/contextmenu.less | 4 ++++ www/drive/inner.js | 10 ++++++++++ 3 files changed, 16 insertions(+) diff --git a/customize.dist/src/less2/include/colortheme.less b/customize.dist/src/less2/include/colortheme.less index abbe07955..b2076034c 100644 --- a/customize.dist/src/less2/include/colortheme.less +++ b/customize.dist/src/less2/include/colortheme.less @@ -26,6 +26,8 @@ @colortheme_form-warning: #f49842; @colortheme_form-warning-hov: darken(@colortheme_form-warning, 5%); +@colortheme_context-menu-icon-color: #7b7b7b; + @colortheme_modal-bg: @colortheme_form-bg-alt; // TODO Modals bg @colortheme_modal-fg: @colortheme_form-color-alt; @colortheme_modal-link: @colortheme_link-color; diff --git a/customize.dist/src/less2/include/contextmenu.less b/customize.dist/src/less2/include/contextmenu.less index e60394bd7..2063a239e 100644 --- a/customize.dist/src/less2/include/contextmenu.less +++ b/customize.dist/src/less2/include/contextmenu.less @@ -13,6 +13,10 @@ font-size: @colortheme_app-font-size; a { cursor: pointer; + .fa, .cptools { + margin-right: 1rem; + color: @colortheme_context-menu-icon-color; + } } } .cp-app-drive-context-noAction { diff --git a/www/drive/inner.js b/www/drive/inner.js index 7224d729d..fb9bd4063 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -413,6 +413,16 @@ define([ }, Messages.fc_prop)), ]) ]); + $(menu).find("li a.dropdown-item").each(function (i, el) { + var $icon = $(""); + if ($(el).attr('data-icon')) { + var font = $(el).attr('data-icon').indexOf('cptools') === 0 ? 'cptools' : 'fa'; + $icon.addClass(font).addClass($(el).attr('data-icon')); + } else { + $icon.text($(el).text()); + } + $(el).prepend($icon); + }); return $(menu); }; From 2d881caaeba7ef602f6ff504acd4563d1123b989 Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 25 Jun 2019 15:07:43 +0200 Subject: [PATCH 14/40] Fix accounts href in limit popup --- www/common/toolbar3.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/www/common/toolbar3.js b/www/common/toolbar3.js index 303a983e0..2da2fc7d8 100644 --- a/www/common/toolbar3.js +++ b/www/common/toolbar3.js @@ -832,11 +832,17 @@ MessengerUI, Messages) { return $spin; }; - var createLimit = function (toolbar) { + var createLimit = function (toolbar, config) { var $limitIcon = $('', {'class': 'fa fa-exclamation-triangle'}); var $limit = toolbar.$userAdmin.find('.'+LIMIT_CLS).attr({ 'title': Messages.pinLimitReached }).append($limitIcon).hide(); + + var priv = config.metadataMgr.getPrivateData(); + var origin = priv.origin; + var l = document.createElement("a"); + l.href = origin; + var todo = function (e, overLimit) { if (e) { return void console.error("Unable to get the pinned usage", e); } if (overLimit) { @@ -845,7 +851,7 @@ MessengerUI, Messages) { key = 'pinLimitReachedAlertNoAccounts'; } $limit.show().click(function () { - UI.alert(Messages._getKey(key, [encodeURIComponent(window.location.hostname)]), null, true); + UI.alert(Messages._getKey(key, [encodeURIComponent(l.hostname)]), null, true); }); } }; From 9aebeb216e32f4830c31b3cfb00bfbc4a57fe21c Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 1 Jul 2019 18:06:16 +0200 Subject: [PATCH 15/40] Add the password when sharing a pad with a friend --- www/common/common-ui-elements.js | 1 + www/drive/inner.js | 3 +++ www/share/inner.js | 1 + 3 files changed, 5 insertions(+) diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index 3149e4e5d..abe9c7938 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -412,6 +412,7 @@ define([ if (!friend.notifications || !friend.curvePublic) { return; } common.mailbox.sendTo("SHARE_PAD", { href: href, + password: config.password, name: myName, title: title }, { diff --git a/www/drive/inner.js b/www/drive/inner.js index 596465396..c2c0332a4 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -2173,6 +2173,7 @@ define([ pathname: "/drive/", friends: friends, title: data.title, + password: data.password, common: common, hashes: { editHash: parsed.hash @@ -3510,6 +3511,7 @@ define([ friends: friends, title: data.title, common: common, + password: data.password, hashes: { editHash: parsed.hash } @@ -3523,6 +3525,7 @@ define([ origin: APP.origin, pathname: "/" + padType + "/", friends: friends, + password: data.password, hashes: { editHash: parsed.hash, viewHash: roParsed.hash, diff --git a/www/share/inner.js b/www/share/inner.js index fbc1f48cc..d50bb9a9c 100644 --- a/www/share/inner.js +++ b/www/share/inner.js @@ -42,6 +42,7 @@ define([ var modal = f({ origin: origin, pathname: pathname, + password: priv.password, hashes: hashes, common: common, title: data.title, From 7a0f30488cea5c03c7217ee26ac9c796c5ceadc0 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 1 Jul 2019 18:07:40 +0200 Subject: [PATCH 16/40] Hide duplicates when receiving access to a pad via notifications --- www/common/outer/mailbox-handlers.js | 47 +++++++++++++++++++++++++++- www/common/outer/mailbox.js | 10 ++++-- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/www/common/outer/mailbox-handlers.js b/www/common/outer/mailbox-handlers.js index 0ab804dcf..befd0d11f 100644 --- a/www/common/outer/mailbox-handlers.js +++ b/www/common/outer/mailbox-handlers.js @@ -1,6 +1,7 @@ define([ '/common/common-messaging.js', -], function (Messaging) { + '/common/common-hash.js', +], function (Messaging, Hash) { var getRandomTimeout = function (ctx) { var lag = ctx.store.realtime.getLag().lag || 0; @@ -156,6 +157,50 @@ define([ cb(true); }; + // Hide duplicates when receiving a SHARE_PAD notification: + // Keep only one notification per channel: the stronger and more recent one + var channels = {}; + handlers['SHARE_PAD'] = function (ctx, box, data, cb) { + var msg = data.msg; + var hash = data.hash; + var content = msg.content; + // content.name, content.title, content.href, content.password + + var channel = Hash.hrefToHexChannelId(content.href, content.password); + var parsed = Hash.parsePadUrl(content.href); + var mode = parsed.hashData && parsed.hashData.mode || 'n/a'; + + var old = channels[channel]; + var toRemove; + if (old) { + // New hash is weaker, ignore + if (old.mode === 'edit' && mode === 'view') { + return void cb(true); + } + // New hash is not weaker, clear the old one + toRemove = old.data; + } + + // Update the data + channels[channel] = { + mode: mode, + data: { + type: box.type, + hash: hash + } + } + + cb(false, toRemove); + }; + removeHandlers['SHARE_PAD'] = function (ctx, box, data, hash) { + var content = data.content; + var channel = Hash.hrefToHexChannelId(content.href, content.password); + var old = channels[channel]; + if (old && old.data && old.data.hash === hash) { + delete channels[channel]; + } + }; + return { add: function (ctx, box, data, cb) { /** diff --git a/www/common/outer/mailbox.js b/www/common/outer/mailbox.js index 550573411..90d536bc3 100644 --- a/www/common/outer/mailbox.js +++ b/www/common/outer/mailbox.js @@ -157,6 +157,7 @@ proxy.mailboxes = { var openChannel = function (ctx, type, m, onReady) { var box = ctx.boxes[type] = { + type: type, queue: [], // Store the messages to send when the channel is ready history: [], // All the hashes loaded from the server in corretc order content: {}, // Content of the messages that should be displayed @@ -228,8 +229,8 @@ proxy.mailboxes = { msg: msg, hash: hash }; - Handlers.add(ctx, box, message, function (toDismiss) { - if (toDismiss) { + Handlers.add(ctx, box, message, function (dismissed, toDismiss) { + if (dismissed) { // This message should be removed dismiss(ctx, { type: type, hash: hash @@ -238,6 +239,11 @@ proxy.mailboxes = { }); return; } + if (toDismiss) { // List of other messages to remove + dismiss(ctx, toDismiss, '', function () { + console.log('Notification handled automatically'); + }); + } box.content[hash] = msg; showMessage(ctx, type, message); }); From 520655856b4b434755ce816f897f2f898d5bbc64 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 1 Jul 2019 18:19:38 +0200 Subject: [PATCH 17/40] Don't ask for password when receiving a pad from the notifications --- www/common/notifications.js | 7 ++++++- www/common/sframe-common-outer.js | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/www/common/notifications.js b/www/common/notifications.js index 136117c6f..1d7f2921c 100644 --- a/www/common/notifications.js +++ b/www/common/notifications.js @@ -57,7 +57,12 @@ define([ .html(Messages._getKey(key, [msg.content.name || Messages.anonymous, msg.content.title])); $(el).find('.cp-notification-content').addClass("cp-clickable") .click(function () { - common.openURL(msg.content.href); + var todo = function () { common.openURL(msg.content.href); }; + if (!msg.content.password) { return void todo(); } + common.getSframeChannel().query('Q_SESSIONSTORAGE_PUT', { + key: 'newPadPassword', + value: msg.content.password + }, todo); }); $(el).find('.cp-notification-dismiss').css('display', 'flex'); }; diff --git a/www/common/sframe-common-outer.js b/www/common/sframe-common-outer.js index 838f415e4..fba08279a 100644 --- a/www/common/sframe-common-outer.js +++ b/www/common/sframe-common-outer.js @@ -223,6 +223,11 @@ define([ sframeChan.event("EV_PAD_PASSWORD"); }; + if (!val && sessionStorage.newPadPassword) { + val = sessionStorage.newPadPassword; + delete sessionStorage.newPadPassword; + } + if (val) { password = val; Cryptpad.getFileSize(window.location.href, password, waitFor(function (e, size) { From 3f500cfd5ca6957d193b2ee2ed65edef36b29672 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 1 Jul 2019 18:19:54 +0200 Subject: [PATCH 18/40] lint compliance --- www/common/outer/mailbox-handlers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/common/outer/mailbox-handlers.js b/www/common/outer/mailbox-handlers.js index befd0d11f..10e61fb60 100644 --- a/www/common/outer/mailbox-handlers.js +++ b/www/common/outer/mailbox-handlers.js @@ -188,7 +188,7 @@ define([ type: box.type, hash: hash } - } + }; cb(false, toRemove); }; From eead5dab7a3ec48c748833b3e2d742d391604650 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 2 Jul 2019 12:44:06 +0000 Subject: [PATCH 19/40] Translated using Weblate (English) Currently translated at 100.0% (1009 of 1009 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1008 of 1008 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1007 of 1007 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1006 of 1006 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1006 of 1006 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1005 of 1005 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1004 of 1004 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1003 of 1003 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1002 of 1002 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1001 of 1001 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1000 of 1000 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1000 of 1000 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (999 of 999 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (999 of 999 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (998 of 998 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (997 of 997 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (996 of 996 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (995 of 995 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (994 of 994 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (993 of 993 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (992 of 992 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (991 of 991 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (990 of 990 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (989 of 989 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (988 of 988 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (987 of 987 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (986 of 986 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (985 of 985 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (984 of 984 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (983 of 983 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (982 of 982 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ --- www/common/translations/messages.json | 30 ++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index 027e75743..e0885452f 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1075,5 +1075,33 @@ "share_withFriends": "Share", "notifications_dismiss": "Dismiss", "fm_info_sharedFolderHistory": "This is only the history of your shared folder: {0}
Your CryptDrive will stay in read-only mode while you navigate.", - "share_description": "Choose what you'd like to share and either get the link or send it directly to your CryptPad friends." + "share_description": "Choose what you'd like to share and either get the link or send it directly to your CryptPad friends.", + "supportPage": "Support", + "admin_cat_support": "Support", + "admin_supportInitHelp": "Your server is not yet configured to have a support mailbox. If you want a support mailbox to receive messages from your users, you should ask your server administrator to run the script located in \"./scripts/generate-admin-keys.js\", then store the public key in the \"config.js\" file and send you the private key.", + "admin_supportInitPrivate": "Your CryptPad instance is configured to use a support mailbox but your account doesn't have the correct private key to access it. Please use the following form to add or update the private key to your account.", + "admin_supportAddKey": "Add private key", + "admin_supportAddError": "Invalid private key", + "admin_supportInitTitle": "Support mailbox initialization", + "admin_supportInitHint": "You can configure a support mailbox in order to give users of your CryptPad instance a way to contact you securely if they have an issue with their account.", + "admin_supportListTitle": "Support mailbox", + "admin_supportListHint": "Here is the list of tickets sent by the users to the support mailbox. All the administrators can see the messages and the answers. A closed ticket cannot be reopened. You can only remove (hide) closed tickets, and the removed tickets are still visible by the other administrators.", + "support_disabledTitle": "Support is not enabled", + "support_disabledHint": "This CryptPad instance is not yet configured to use a support form.", + "support_cat_new": "New ticket", + "support_formTitle": "Ticket title", + "support_formHint": "This form can be used to create a new support ticket. Using this form, you can contact the administrators to solve issues or ask any question in a secure way. Please don't create a new ticket if you already have an open ticket about the same issue, but use reply button to provide more information.", + "support_formButton": "Send", + "support_formTitleError": "Error: title is empty", + "support_formContentError": "Error: content is empty", + "support_formMessage": "Type your message...", + "support_cat_tickets": "Existing tickets", + "support_listTitle": "Support tickets", + "support_listHint": "Here is the list of tickets sent to the administrators and their answers. A closed ticket cannot be re-opened, you have to make a new one. You can hide tickets that have been closed but they will still be visible by the administrators.", + "support_answer": "Reply", + "support_close": "Close the ticket", + "support_remove": "Remove the ticket", + "support_showData": "Show/hide user data", + "support_from": "From: {0}", + "support_closed": "This ticket has been closed" } From 3d6a09d3c4f7ae3a484a4e9b21b03f44c7e6303a Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 2 Jul 2019 12:44:07 +0000 Subject: [PATCH 20/40] Translated using Weblate (German) Currently translated at 100.0% (981 of 981 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/de/ --- www/common/translations/messages.de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json index f8618fdb9..6125abf5c 100644 --- a/www/common/translations/messages.de.json +++ b/www/common/translations/messages.de.json @@ -565,7 +565,7 @@ "download_step1": "Laden...", "download_step2": "Entschlüsselung...", "todo_title": "CryptTodo", - "todo_newTodoNamePlaceholder": "Beschreibe deine Aufgabe...", + "todo_newTodoNamePlaceholder": "Beschreibe deine Aufgabe…", "todo_newTodoNameTitle": "Diese Aufgabe zu deiner ToDo-Liste hinzufügen", "todo_markAsCompleteTitle": "Diese Aufgabe als erledigt markieren", "todo_markAsIncompleteTitle": "Diese Aufgabe als nicht erledigt markieren", @@ -830,7 +830,7 @@ "generic": { "more": "Erfahre mehr über die Nutzung von CryptPad, indem du unsere FAQ liest", "share": "Benutze das Teilen-Menü (), um Links zu generieren, die Mitarbeiter zum Lesen oder Bearbeiten einladen", - "save": "Alle Änderungen werden automatisch synchronisiert. Du misst sie also nicht speichern" + "save": "Alle Änderungen werden automatisch synchronisiert. Du musst sie also nicht selbst speichern" }, "text": { "formatting": "Du kannst die Werkzeugleiste anzeigen oder verbergen, indem du auf oder klickst", From 7a4895757f1176b967b8f5ded62b2be41492c0ee Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 2 Jul 2019 14:45:50 +0200 Subject: [PATCH 21/40] Remove XXX --- www/admin/inner.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/admin/inner.js b/www/admin/inner.js index e83efd491..e2edb9ad5 100644 --- a/www/admin/inner.js +++ b/www/admin/inner.js @@ -232,11 +232,11 @@ define([ create['support-init'] = function () { var $div = makeBlock('support-init'); if (!supportKey) { - $div.append(h('p', Messages.admin_supportInitHelp || "Your server is not configured to have a support mailbox. If you want a support mailbox to receive messages from your users, you should ask your server administrator to run the script located in './scripts/generate-admin-keys.js', store the public key in the 'config.js' file, and send you the private key.")); // XXX + $div.append(h('p', Messages.admin_supportInitHelp)); return $div; } if (!APP.privateKey || !checkAdminKey(APP.privateKey)) { - $div.append(h('p', Messages.admin_supportInitPrivate || "Your CryptPad instance is configured to use a support mailbox but your account doesn't have the correct private key to access it. Please use the following form to add or update the private key to your account")); // XXX + $div.append(h('p', Messages.admin_supportInitPrivate)); var error = h('div.cp-admin-support-error'); var input = h('input.cp-admin-add-private-key'); From 8da33c3c7218e8776b089846cddf5604de6783ce Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 2 Jul 2019 15:26:34 +0200 Subject: [PATCH 22/40] Fix support UI issues --- www/support/inner.js | 1 + www/support/ui.js | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/www/support/inner.js b/www/support/inner.js index 7e8b60aed..4de6fcb04 100644 --- a/www/support/inner.js +++ b/www/support/inner.js @@ -151,6 +151,7 @@ define([ channel: privateData.support, curvePublic: user.curvePublic }); + id = Util.uid(); if (sent) { $('.cp-sidebarlayout-category[data-category="tickets"]').click(); } diff --git a/www/support/ui.js b/www/support/ui.js index eff9edb50..68c73ed67 100644 --- a/www/support/ui.js +++ b/www/support/ui.js @@ -41,13 +41,13 @@ define([ var $title = $(form).find('.cp-support-form-title'); var $content = $(form).find('.cp-support-form-msg'); - var title = $title.val(); + var title = $title.val().trim(); if (!title) { return void UI.alert(Messages.support_formTitleError); } - var content = $content.val(); + var content = $content.val().trim(); if (!content) { - return void UI.alert(form, Messages.support_formContentError); + return void UI.alert(Messages.support_formContentError); } $content.val(''); $title.val(''); @@ -160,7 +160,7 @@ define([ 'data-hash': hash }, [ h('div.cp-support-message-from' + (fromMe ? '.cp-support-fromme' : ''), [ - h('span', Messages._getKey('support_from', [content.sender.name])), + UI.setHTML(h('span'), Messages._getKey('support_from', [content.sender.name])), h('span.cp-support-message-time', content.time ? new Date(content.time).toLocaleString() : '') ]), h('pre.cp-support-message-content', content.message), @@ -177,7 +177,7 @@ define([ 'data-hash': hash }, [ h('div.cp-support-message-from' + (fromMe ? '.cp-support-fromme' : ''), [ - h('span', Messages._getKey('support_from', [content.sender.name])), + UI.setHTML(h('span'), Messages._getKey('support_from', [content.sender.name])), h('span.cp-support-message-time', content.time ? new Date(content.time).toLocaleString() : '') ]), h('pre.cp-support-message-content', Messages.support_closed) From 91b2b8a77d9bba3bbd119799d5ee63ff11587e5a Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 2 Jul 2019 18:32:25 +0200 Subject: [PATCH 23/40] Remove console.log --- scripts/generate-admin-keys.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/generate-admin-keys.js b/scripts/generate-admin-keys.js index 62fe3e121..26d26537e 100644 --- a/scripts/generate-admin-keys.js +++ b/scripts/generate-admin-keys.js @@ -3,8 +3,6 @@ const Nacl = require('tweetnacl'); const keyPair = Nacl.box.keyPair(); -console.log(keyPair); - console.log("You've just generated a new key pair for your support mailbox."); console.log("The public key should first be added to your config.js file ('supportMailboxPublicKey'), then save and restart the server."); From e62aee7df2ba3edef11722f3828a434d86ac2cc6 Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 2 Jul 2019 18:57:38 +0200 Subject: [PATCH 24/40] Update translation keys --- www/notifications/inner.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/www/notifications/inner.js b/www/notifications/inner.js index 230246d8c..2f959e3d6 100644 --- a/www/notifications/inner.js +++ b/www/notifications/inner.js @@ -55,7 +55,7 @@ define([ var makeNotificationList = function (key, filterTypes) { filterTypes = filterTypes || []; var safeKey = key.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); }); - var categoryName = Messages['notification_cat_' + safeKey] || safeKey; + var categoryName = Messages['notifications_cat_' + safeKey] || safeKey; var notifsData = []; if (key === "all") { @@ -68,7 +68,7 @@ define([ h("span.cp-app-notifications-panel-title", (Messages.notificationsPage || "Notifications") + " - " + categoryName), h("div.cp-app-notifications-panel-titlebar-buttons", [ - dismissAll = h("div.cp-app-notifications-dismissall.cp-clickable", { title: Messages.dismissAll || "Dismiss All" }, h("span.fa.fa-trash")), + dismissAll = h("div.cp-app-notifications-dismissall.cp-clickable", { title: Messages.notifications_dismissAll || "Dismiss All" }, h("span.fa.fa-trash")), ]), ]), notifsList = h("div.cp-app-notifications-panel-list", [ @@ -106,7 +106,7 @@ define([ var loadmore; var lastKnownHash; $(dismissAll).remove(); - loadmore = h("div.cp-app-notification-loadmore.cp-clickable", Messages.loadMore || "Load more ..."); + loadmore = h("div.cp-app-notification-loadmore.cp-clickable", Messages.notifications_loadMore || "Load more ..."); $(loadmore).click(function () { common.mailbox.getNotificationsHistory('notifications', 10, lastKnownHash, function (err, messages, end) { if (!Array.isArray(messages)) { return; } @@ -211,7 +211,7 @@ define([ showCategories(categories[key]); }); - $category.append(Messages['notification_cat_'+key] || key); + $category.append(Messages['notifications_cat_'+key] || key); }); showCategories(categories[active]); }; From bb5104dc0cebe350b5271486d4c1c217db567459 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Wed, 3 Jul 2019 10:54:36 +0200 Subject: [PATCH 25/40] Make sidebar-layout responsive --- customize.dist/src/less2/include/sidebar-layout.less | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/customize.dist/src/less2/include/sidebar-layout.less b/customize.dist/src/less2/include/sidebar-layout.less index 07471183a..566deca16 100644 --- a/customize.dist/src/less2/include/sidebar-layout.less +++ b/customize.dist/src/less2/include/sidebar-layout.less @@ -1,5 +1,6 @@ @import (reference) "/customize/src/less2/include/colortheme-all.less"; @import (reference) "/customize/src/less2/include/leftside-menu.less"; +@import (reference) "./browser.less"; @sidebar_button-width: 400px; @@ -109,4 +110,13 @@ } } +@media screen and (max-width: @browser_media-medium-screen) { + #cp-sidebarlayout-container { + flex-flow: column; + #cp-sidebarlayout-leftside { + width: 100%; + } + } + +} From 9cff6b0f3bbb29d679fd2aab9ce13514289d84e4 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 15:42:32 +0200 Subject: [PATCH 26/40] Fix typo --- www/drive/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index fb9bd4063..21fd44b3c 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -2677,7 +2677,7 @@ define([ else { $icon.append($folderIcon.clone()); $type.text(Messages.fm_folder); - $('').text(Messages.fm_OpenFolder || "Open folder").click(function (e) { + $('').text(Messages.fm_openFolder || "Open folder").click(function (e) { e.preventDefault(); APP.displayDirectory(path); }).appendTo($openDir); From eba32fe994a81c7166424ebfbf984cb460326a70 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 15:54:03 +0200 Subject: [PATCH 27/40] Remove unnecessary code --- www/common/userObject.js | 29 ++++++++++------------------- www/drive/inner.js | 2 +- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/www/common/userObject.js b/www/common/userObject.js index 4cdcc0c46..39b55484a 100644 --- a/www/common/userObject.js +++ b/www/common/userObject.js @@ -519,26 +519,17 @@ define([ var resFolders = []; var findFoldersRec = function (folder, path) { for (var key in folder) { - if (isFolder(folder[key])) { - if (isSharedFolder(folder[key])) { -// var name = getSharedFolderData(folder[key]).title || ""; -// if (name.toLowerCase().indexOf(lValue) !== -1) { -// resFolders.push(path.concat([key, ROOT])); -// } - findFoldersRec(folder[key], path.concat([key, ROOT])); - } - else { - if (key.toLowerCase().indexOf(lValue) !== -1) { - resFolders.push({ - id: null, - paths: [path.concat(key)], - data: { - title: key - } - }); - } - findFoldersRec(folder[key], path.concat(key)); + if (isFolder(folder[key]) && !isSharedFolder(folder[key])) { + if (key.toLowerCase().indexOf(lValue) !== -1) { + resFolders.push({ + id: null, + paths: [path.concat(key)], + data: { + title: key + } + }); } + findFoldersRec(folder[key], path.concat(key)); } } }; diff --git a/www/drive/inner.js b/www/drive/inner.js index c0e67329b..9db0d92a9 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -2684,7 +2684,7 @@ define([ else { $icon.append($folderIcon.clone()); $type.text(Messages.fm_folder); - $('').text(Messages.fm_openFolder || "Open folder").click(function (e) { + $('').text(Messages.fc_open).click(function (e) { e.preventDefault(); APP.displayDirectory(path); }).appendTo($openDir); From c281b3afa6e10a472d05fcb0577a03ca792e896a Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 15:55:24 +0200 Subject: [PATCH 28/40] lint compliance --- www/drive/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index 9db0d92a9..8c35e2300 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -1371,7 +1371,7 @@ define([ }); cb(); }; - if (paths.some(function (p) { return manager.comparePath(newPath, p) })) { return void cb(); } + if (paths.some(function (p) { return manager.comparePath(newPath, p); })) { return void cb(); } manager.move(paths, newPath, newCb, copy); }; // Delete paths from the drive and/or shared folders (without moving them to the trash) From 5bd2f83ebd95a6089148a8e998d424ad6a630c62 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 15:58:06 +0200 Subject: [PATCH 29/40] Revert "Make sidebar-layout responsive" This reverts commit bb5104dc0cebe350b5271486d4c1c217db567459. --- customize.dist/src/less2/include/sidebar-layout.less | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/customize.dist/src/less2/include/sidebar-layout.less b/customize.dist/src/less2/include/sidebar-layout.less index 566deca16..07471183a 100644 --- a/customize.dist/src/less2/include/sidebar-layout.less +++ b/customize.dist/src/less2/include/sidebar-layout.less @@ -1,6 +1,5 @@ @import (reference) "/customize/src/less2/include/colortheme-all.less"; @import (reference) "/customize/src/less2/include/leftside-menu.less"; -@import (reference) "./browser.less"; @sidebar_button-width: 400px; @@ -110,13 +109,4 @@ } } -@media screen and (max-width: @browser_media-medium-screen) { - #cp-sidebarlayout-container { - flex-flow: column; - #cp-sidebarlayout-leftside { - width: 100%; - } - } - -} From 44f9e5ff76483880d037d44f7636752024913dbe Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 3 Jul 2019 14:20:03 +0000 Subject: [PATCH 30/40] Translated using Weblate (English) Currently translated at 100.0% (1017 of 1017 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1017 of 1017 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1016 of 1016 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1015 of 1015 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1014 of 1014 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1013 of 1013 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1012 of 1012 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1011 of 1011 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ Translated using Weblate (English) Currently translated at 100.0% (1010 of 1010 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ --- www/common/translations/messages.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index e0885452f..ca1783b25 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1057,7 +1057,7 @@ "friendRequest_accepted": "{0} accepted your friend request", "friendRequest_received": "{0} would like to be your friend", "friendRequest_notification": "{0} sent you a friend request", - "notifications_empty": "You have no new notifications", + "notifications_empty": "No notifications available", "notifications_title": "You have unread notifications", "profile_addDescription": "Add a description", "profile_editDescription": "Edit your description", @@ -1103,5 +1103,13 @@ "support_remove": "Remove the ticket", "support_showData": "Show/hide user data", "support_from": "From: {0}", - "support_closed": "This ticket has been closed" + "support_closed": "This ticket has been closed", + "fc_noAction": "No action available", + "notificationsPage": "Notifications", + "openNotificationsApp": "Open notifications panel", + "notifications_cat_all": "All", + "notifications_cat_friends": "Friend requests", + "notifications_cat_pads": "Shared with me", + "notifications_cat_archived": "History", + "notifications_dismissAll": "Dismiss all" } From 80437332005fa35943a241665fc4a0718d07360e Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 3 Jul 2019 14:20:04 +0000 Subject: [PATCH 31/40] Translated using Weblate (French) Currently translated at 99.4% (1011 of 1017 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/fr/ --- www/common/translations/messages.fr.json | 34 ++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index a5bd0f946..f9ef1f7e8 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1056,7 +1056,7 @@ "friendRequest_accepted": "{0} a accepté votre demande d'ami", "friendRequest_received": "{0} souhaite être votre ami", "friendRequest_notification": "{0} vous a envoyé une demande d'ami", - "notifications_empty": "Vous n'avez pas de nouvelle notification", + "notifications_empty": "Pas de nouvelle notification", "notifications_title": "Vous avez des notifications non lues", "profile_addDescription": "Ajouter une description", "profile_editDescription": "Modifier votre description", @@ -1075,5 +1075,35 @@ "notifications_dismiss": "Cacher", "fm_info_sharedFolderHistory": "Vous regardez l'historique de votre dossier partagé {0}
Votre CryptDrive restera en lecture seule pendant la navigation.", "share_description": "Choisissez ce que vous souhaitez partager puis obtenez le lien ou envoyez-le directement à vos amis CryptPad.", - "fc_color": "Changer la couleur" + "fc_color": "Changer la couleur", + "supportPage": "Support", + "admin_cat_support": "Support", + "admin_supportAddKey": "Ajouter la clé", + "admin_supportAddError": "Clé privée non valide", + "admin_supportInitTitle": "Initialisation du support", + "admin_supportListTitle": "Messagerie du support", + "support_disabledTitle": "Le support n'est pas activé", + "support_disabledHint": "Cette instance de CryptPad n'est pas encore configurée pour utiliser le formulaire de support.", + "support_cat_new": "Nouveau ticket", + "support_formTitle": "Titre du ticket", + "support_formButton": "Envoyer", + "support_formTitleError": "Erreur : le titre est vide", + "support_formContentError": "Erreur : le contenu est vide", + "support_formMessage": "Taper votre message...", + "support_cat_tickets": "Tickets existants", + "support_listTitle": "Tickets de support", + "support_answer": "Répondre", + "support_close": "Fermer le ticket", + "support_remove": "Supprimer le ticket", + "support_showData": "Afficher/cacher les données de l'utilisateur", + "support_from": "De : {0}", + "support_closed": "Ce ticket a été fermé", + "fc_noAction": "Pas d'action disponible", + "notificationsPage": "Notifications", + "openNotificationsApp": "Ouvrir le panneau de notifications", + "notifications_cat_all": "Toutes", + "notifications_cat_friends": "Demandes d'ami", + "notifications_cat_pads": "Partagé avec moi", + "notifications_cat_archived": "Historique", + "notifications_dismissAll": "Tout cacher" } From df7bca4bbf73dfeadb268aa8b93f00df23a96536 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 3 Jul 2019 14:20:04 +0000 Subject: [PATCH 32/40] Translated using Weblate (German) Currently translated at 96.4% (980 of 1017 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/de/ --- www/common/translations/messages.de.json | 30 +++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json index 6125abf5c..a24c1a9f7 100644 --- a/www/common/translations/messages.de.json +++ b/www/common/translations/messages.de.json @@ -1075,5 +1075,33 @@ "share_description": "Wähle aus, was du teilen möchtest. Dir wird dann ein entsprechender Link anzeigt. Du kannst es auch direkt an deine Freunde in CryptPad senden.", "fc_expandAll": "Alle ausklappen", "fc_collapseAll": "Alle einklappen", - "fc_color": "Farbe ändern" + "fc_color": "Farbe ändern", + "supportPage": "", + "admin_cat_support": "", + "admin_supportInitHelp": "", + "admin_supportInitPrivate": "", + "admin_supportAddKey": "", + "admin_supportAddError": "", + "admin_supportInitTitle": "", + "admin_supportInitHint": "", + "admin_supportListTitle": "", + "admin_supportListHint": "", + "support_disabledTitle": "", + "support_disabledHint": "", + "support_cat_new": "", + "support_formTitle": "", + "support_formHint": "", + "support_formButton": "", + "support_formTitleError": "", + "support_formContentError": "", + "support_formMessage": "", + "support_cat_tickets": "", + "support_listTitle": "", + "support_listHint": "", + "support_answer": "", + "support_close": "", + "support_remove": "", + "support_showData": "", + "support_from": "", + "support_closed": "" } From 087af34004ee68d45d9cebebfcc9b21bbea71902 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 16:20:22 +0200 Subject: [PATCH 33/40] Update translation key --- www/notifications/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/notifications/inner.js b/www/notifications/inner.js index 2f959e3d6..c5e10b761 100644 --- a/www/notifications/inner.js +++ b/www/notifications/inner.js @@ -106,7 +106,7 @@ define([ var loadmore; var lastKnownHash; $(dismissAll).remove(); - loadmore = h("div.cp-app-notification-loadmore.cp-clickable", Messages.notifications_loadMore || "Load more ..."); + loadmore = h("div.cp-app-notification-loadmore.cp-clickable", Messages.history_loadMore); $(loadmore).click(function () { common.mailbox.getNotificationsHistory('notifications', 10, lastKnownHash, function (err, messages, end) { if (!Array.isArray(messages)) { return; } From 8182041526d84ad1a09f3eafbaf141d26f18f48c Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 16:29:45 +0200 Subject: [PATCH 34/40] Remove ES6 code not working on IE --- www/notifications/inner.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/notifications/inner.js b/www/notifications/inner.js index c5e10b761..2d8e382dd 100644 --- a/www/notifications/inner.js +++ b/www/notifications/inner.js @@ -87,9 +87,9 @@ define([ var addArchivedNotification = function (data) { // if the type is allowed if (data.content.archived && notifsAllowedTypes.indexOf(data.content.msg.type) !== -1) { - var isDataUnread = unreadData.findIndex(function (ud) { + var isDataUnread = unreadData.some(function (ud) { return ud.content.hash === data.content.hash; - }) !== -1; + }); notifsData.push(data); var el = common.mailbox.createElement(data); var time = new Date(data.content.time); From 22b2d78a551387562155f92a7fef4c0155930be8 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 16:32:26 +0200 Subject: [PATCH 35/40] Change date format --- www/notifications/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/notifications/inner.js b/www/notifications/inner.js index 2d8e382dd..fd5f69de0 100644 --- a/www/notifications/inner.js +++ b/www/notifications/inner.js @@ -93,7 +93,7 @@ define([ notifsData.push(data); var el = common.mailbox.createElement(data); var time = new Date(data.content.time); - $(el).find(".cp-notification-content").append(h("span.notification-time", time.toLocaleDateString() + " - " + time.toLocaleTimeString())); + $(el).find(".cp-notification-content").append(h("span.notification-time", time.toLocaleString())); $(el).addClass("cp-app-notification-archived"); $(el).toggle(!isDataUnread); $(notifsList).append(el); From 1f384c2a4af4952140e14809af3164e1da098046 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 16:36:04 +0200 Subject: [PATCH 36/40] update version --- customize.dist/pages.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/customize.dist/pages.js b/customize.dist/pages.js index 8a21fa233..3fd5e63bb 100644 --- a/customize.dist/pages.js +++ b/customize.dist/pages.js @@ -103,7 +103,7 @@ define([ ])*/ ]) ]), - h('div.cp-version-footer', "CryptPad v2.24.0 (Yak)") + h('div.cp-version-footer', "CryptPad v2.25.0 (Zebra)") ]); }; diff --git a/package.json b/package.json index 2020d6df4..1a6462d84 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cryptpad", "description": "realtime collaborative visual editor with zero knowlege server", - "version": "2.24.0", + "version": "2.25.0", "license": "AGPL-3.0+", "repository": { "type": "git", From 7e9e7c1aecc67c08ac1d8077b6699409a9182a51 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 3 Jul 2019 16:46:08 +0200 Subject: [PATCH 37/40] Add more metadata to the support messages --- www/support/ui.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/support/ui.js b/www/support/ui.js index 68c73ed67..ef91c56a1 100644 --- a/www/support/ui.js +++ b/www/support/ui.js @@ -21,7 +21,8 @@ define([ name: user.name, channel: privateData.support, curvePublic: user.curvePublic, - edPublic: privateData.edPublic + edPublic: privateData.edPublic, + notifications: user.notifications, }; data.id = id; data.time = +new Date(); From abf8ef6276f59d2dd52aaa61e3b3e488b3c32924 Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 4 Jul 2019 10:37:05 +0200 Subject: [PATCH 38/40] Pin admin mailbox --- www/common/outer/async-store.js | 1 + 1 file changed, 1 insertion(+) diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index 6022c5f37..fb1bcd202 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -1076,6 +1076,7 @@ define([ curvePrivate: priv } }; + Store.pinPads(null, [channel], function () {}); store.mailbox.open('supportadmin', box, function () { console.log('ready'); }); From 9e0fb966bfc983a1d6e4c18a4730881e4e35c526 Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 4 Jul 2019 10:46:55 +0200 Subject: [PATCH 39/40] Fix cyclic object value --- www/common/proxy-manager.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/www/common/proxy-manager.js b/www/common/proxy-manager.js index 9d8bbe6ba..1257f3ad4 100644 --- a/www/common/proxy-manager.js +++ b/www/common/proxy-manager.js @@ -252,6 +252,9 @@ define([ var obj = Env.folders[el].proxy.metadata || {}; if (obj) { key = obj.title; } } else { + try { + el = JSON.parse(JSON.stringify(el)); + } catch (e) { return undefined; } userObject.getFilesRecursively(el, files); } From 9360bed1873b89f6351823ee72a397e33e93a816 Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 4 Jul 2019 11:15:04 +0200 Subject: [PATCH 40/40] Missing trailing slash --- www/common/toolbar3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/common/toolbar3.js b/www/common/toolbar3.js index 4ade9409b..0791d2ea1 100644 --- a/www/common/toolbar3.js +++ b/www/common/toolbar3.js @@ -952,7 +952,7 @@ MessengerUI, Messages) { var $notif = toolbar.$top.find('.'+NOTIFICATIONS_CLS).show(); var openNotifsApp = h('div.cp-notifications-gotoapp', h('p', Messages.openNotificationsApp || "Open notifications App")); $(openNotifsApp).click(function () { - Common.openURL("/notifications"); + Common.openURL("/notifications/"); }); var div = h('div.cp-notifications-container', [ h('div.cp-notifications-empty', Messages.notifications_empty)
', {'rowspan': '3', 'class': 'cp-app-drive-search-icon'}) - .append(r.id ? getFileIcon(r.id) : $folderIcon.clone()); + var $icon = $('', {'rowspan': '3', 'class': 'cp-app-drive-search-icon'}); var $title = $('', { 'class': 'cp-app-drive-search-col1 cp-app-drive-search-title' }).text(r.data.title); - if (r.id) { - $title.click(function () { - openFile(null, r.data.href); - }); - } - var $typeName = $('', {'class': 'cp-app-drive-search-label2'}) - .text(Messages.fm_type); - var $type = $('', {'class': 'cp-app-drive-search-col2'}) - .text(r.id ? Messages.type[parsed.type] || parsed.type : Messages.fm_folder); - var $atimeName = $('', {'class': 'cp-app-drive-search-label2'}) - .text(r.id ? Messages.fm_lastAccess : ""); - var $atime = $('', {'class': 'cp-app-drive-search-col2'}) - .text(r.id ? new Date(r.data.atime).toLocaleString() : ""); - var $ctimeName = $('', {'class': 'cp-app-drive-search-label2'}) - .text(r.id ? Messages.fm_creation : ""); - var $ctime = $('', {'class': 'cp-app-drive-search-col2'}) - .text(r.id ? new Date(r.data.ctime).toLocaleString() : ""); if (manager.isPathIn(path, ['hrefArray'])) { path.pop(); path.push(r.data.title); @@ -2647,28 +2629,33 @@ define([ 'class': 'cp-app-drive-search-col1 cp-app-drive-search-path' }); createTitle($path, path, true); - var parentPath = path.slice(); - var $a; + var $typeName = $('', {'class': 'cp-app-drive-search-label2'}).text(Messages.fm_type); + var $type = $('', {'class': 'cp-app-drive-search-col2'}); + var $atimeName = $('', {'class': 'cp-app-drive-search-label2'}); + var $atime = $('', {'class': 'cp-app-drive-search-col2'}); + var $ctimeName = $('', {'class': 'cp-app-drive-search-label2'}); + var $ctime = $('', {'class': 'cp-app-drive-search-col2'}); + var $openDir = $('', {'class': 'cp-app-drive-search-opendir'}); if (r.id) { + $icon.append(getFileIcon(r.id)); + $type.text(Messages.type[parsed.type] || parsed.type); + $title.click(function () { + openFile(null, r.data.href); + }); + $atimeName.text(Messages.fm_lastAccess); + $atime.text(new Date(r.data.atime).toLocaleString()); + $ctimeName.text(Messages.fm_creation); + $ctime.text(new Date(r.data.ctime).toLocaleString()); + var parentPath = path.slice(); if (parentPath) { - $a = $('').text(Messages.fm_openParent).click(function (e) { + $('').text(Messages.fm_openParent).click(function (e) { e.preventDefault(); if (manager.isInTrashRoot(parentPath)) { parentPath = [TRASH]; } else { parentPath.pop(); } APP.selectedFiles = [r.id]; APP.displayDirectory(parentPath); - }); + }).appendTo($openDir); } - } - else { - $a = $('').text(Messages.fm_OpenFolder || "Open folder").click(function (e) { - e.preventDefault(); - APP.displayDirectory(path); - }); - } - var $openDir = $('', {'class': 'cp-app-drive-search-opendir'}).append($a); - - if (r.id) { $('').text(Messages.fc_prop).click(function () { APP.getProperties(r.id, function (e, $prop) { if (e) { return void logError(e); } @@ -2676,6 +2663,14 @@ define([ }); }).appendTo($openDir); } + else { + $icon.append($folderIcon.clone()); + $type.text(Messages.fm_folder); + $('').text(Messages.fm_OpenFolder || "Open folder").click(function (e) { + e.preventDefault(); + APP.displayDirectory(path); + }).appendTo($openDir); + } // rows 1-3 $('