[Libreoffice-commits] online.git: Branch 'distro/collabora/co-4-2' - loleaflet/src
Pranam Lashkari (via logerrit)
logerrit at kemper.freedesktop.org
Tue Sep 1 19:56:31 UTC 2020
loleaflet/src/core/Util.js | 17 ++++++++++++
loleaflet/src/map/Clipboard.js | 41 ++++++++++++++++--------------
loleaflet/src/map/handler/Map.Keyboard.js | 25 ++++++++++++++++++
3 files changed, 65 insertions(+), 18 deletions(-)
New commits:
commit 8f509a4b509e3e870bdcc121086b25104e72d706
Author: Pranam Lashkari <lpranam at collabora.com>
AuthorDate: Tue Aug 18 19:33:13 2020 +0530
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Tue Sep 1 21:56:13 2020 +0200
clipboard: leaflet: unformatted paste shortcut changed
Problems:
1: Browsers hard-code ctrl+shift+v as "paste without formatting" - ie. plain text
We need access to the clipboard to get the rich data needed for paste-special,
which we can only get security context / access to with a ctrl-v keypress
2: we cannot directly access the clipboard data with ctrl+shift+alt+v
Solution:
Externally copied data could not be pasted directly with paste special
and unformatted paste due to no access to the clipboard data
To access the data copied externally we rely on user to trigger paste event
We use default browser shortcut for unformatted paste(ctrl+shift+v)
this triggers a paste event
for paste special we ask user to press ctrl+v with a popup and then
if that popup is open and paste event is triggered we trigger paste special
New shortcuts:
Paste: ctrl+v
unformatted Paste: ctrl+shift+v
Paste special: ctrl+shift+alt+v
Change-Id: Ib15c701f5e03123cb91e36d1c1d64f0c12aa9cfb
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/100927
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
(cherry picked from commit 457fc3d538aed7bc2bc41fd022399749f4c5a3e4)
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/101861
Reviewed-by: Andras Timar <andras.timar at collabora.com>
diff --git a/loleaflet/src/core/Util.js b/loleaflet/src/core/Util.js
index 596dfa756..b2900b62b 100644
--- a/loleaflet/src/core/Util.js
+++ b/loleaflet/src/core/Util.js
@@ -207,6 +207,23 @@ L.Util = {
context.font = font;
var metrics = context.measureText(text);
return Math.floor(metrics.width);
+ },
+
+ replaceCtrlInMac: function(msg) {
+ if (navigator.appVersion.indexOf('Mac') != -1 || navigator.userAgent.indexOf('Mac') != -1) {
+ var ctrl = /Ctrl/g;
+ if (String.locale.startsWith('de') || String.locale.startsWith('dsb') || String.locale.startsWith('hsb')) {
+ ctrl = /Strg/g;
+ }
+ if (String.locale.startsWith('lt')) {
+ ctrl = /Vald/g;
+ }
+ if (String.locale.startsWith('sl')) {
+ ctrl = /Krmilka/g;
+ }
+ return msg.replace(ctrl, '⌘');
+ }
+ return msg;
}
};
diff --git a/loleaflet/src/map/Clipboard.js b/loleaflet/src/map/Clipboard.js
index 8043a1a98..c0204266a 100644
--- a/loleaflet/src/map/Clipboard.js
+++ b/loleaflet/src/map/Clipboard.js
@@ -264,8 +264,15 @@ L.Clipboard = L.Class.extend({
that._doAsyncDownload(
'POST', dest, formData,
function() {
- console.log('up-load done, now paste');
- that._map._socket.sendMessage('uno .uno:Paste');
+ if (this.pasteSpecialVex && this.pasteSpecialVex.isOpen) {
+ vex.close(this.pasteSpecialVex);
+ console.log('up-load done, now paste special');
+ that.map._socket.sendMessage('uno .uno:PasteSpecial');
+ } else {
+ console.log('up-load done, now paste');
+ that._map._socket.sendMessage('uno .uno:Paste');
+ }
+
},
function(progress) { return 50 + progress/2; }
);
@@ -292,8 +299,15 @@ L.Clipboard = L.Class.extend({
that._doAsyncDownload(
'POST', dest, formData,
function() {
- console.log('up-load of fallback done, now paste');
- that._map._socket.sendMessage('uno .uno:Paste');
+ if (this.pasteSpecialVex && this.pasteSpecialVex.isOpen) {
+ vex.close(this.pasteSpecialVex);
+ console.log('up-load of fallback done, now paste special');
+ that.map._socket.sendMessage('uno .uno:PasteSpecial');
+ } else {
+ console.log('up-load of fallback done, now paste');
+ that._map._socket.sendMessage('uno .uno:Paste');
+ }
+
},
function(progress) { return 50 + progress/2; },
function() {
@@ -665,6 +679,9 @@ L.Clipboard = L.Class.extend({
// paste into dialog
var KEY_PASTE = 1299;
map._textInput._sendKeyEvent(0, KEY_PASTE);
+ } else if (this.pasteSpecialVex && this.pasteSpecialVex.isOpen) {
+ this.pasteSpecialVex.close();
+ map._socket.sendMessage('uno .uno:PasteSpecial');
} else {
// paste into document
map._socket.sendMessage('uno .uno:Paste');
@@ -678,7 +695,7 @@ L.Clipboard = L.Class.extend({
paste: function(ev) {
console.log('Paste');
- if (isAnyVexDialogActive() && !this._map.hasFocus())
+ if (isAnyVexDialogActive() && !(this.pasteSpecialVex && this.pasteSpecialVex.isOpen))
return;
if ($('.annotation-active').length > 0 && !this._map.hasFocus())
@@ -821,19 +838,7 @@ L.Clipboard = L.Class.extend({
msg = _('<p>Please use the copy/paste buttons on your on-screen keyboard.</p>');
} else {
msg = _('<p>Your browser has very limited access to the clipboard, so use these keyboard shortcuts:<ul><li><b>Ctrl+C</b>: For copying.</li><li><b>Ctrl+X</b>: For cutting.</li><li><b>Ctrl+V</b>: For pasting.</li></ul></p>');
- if (navigator.appVersion.indexOf('Mac') != -1 || navigator.userAgent.indexOf('Mac') != -1) {
- var ctrl = /Ctrl/g;
- if (String.locale.startsWith('de') || String.locale.startsWith('dsb') || String.locale.startsWith('hsb')) {
- ctrl = /Strg/g;
- }
- if (String.locale.startsWith('lt')) {
- ctrl = /Vald/g;
- }
- if (String.locale.startsWith('sl')) {
- ctrl = /Krmilka/g;
- }
- msg = msg.replace(ctrl, '⌘');
- }
+ msg = L.Util.replaceCtrlInMac(msg);
}
vex.dialog.alert({
unsafeMessage: msg,
diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js
index 405b73995..0155cd1a2 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -7,6 +7,8 @@
* at TextInput.
*/
+ /* global vex _ */
+
L.Map.mergeOptions({
keyboard: true,
keyboardPanOffset: 20,
@@ -416,6 +418,29 @@ L.Map.Keyboard = L.Handler.extend({
return true;
}
+ // Handles paste special
+ if (e.ctrlKey && e.shiftKey && e.altKey && (e.key === 'v' || e.key === 'V')) {
+ var map = this._map;
+ var msg = _('<p>Your browser has very limited access to the clipboard, so now press:</li><li><b>Ctrl+V</b>: To open paste special menu.</li></ul></p><p>Close popup to ignore paste special</p>');
+ msg = L.Util.replaceCtrlInMac(msg);
+ this._map._clip.pasteSpecialVex = vex.open({
+ unsafeContent: msg,
+ showCloseButton: true,
+ escapeButtonCloses: true,
+ overlayClosesOnClick: false,
+ buttons: {},
+ afterOpen: function() {
+ map.focus();
+ }
+ });
+ return true;
+ }
+
+ // Handles unformatted paste
+ if (e.ctrlKey && e.shiftKey && (e.key === 'v' || e.key === 'V')) {
+ return true;
+ }
+
if (e.ctrlKey && (e.key === 'k' || e.key === 'K')) {
this._map.showHyperlinkDialog();
e.preventDefault();
More information about the Libreoffice-commits
mailing list