Use new asynchrnous clipboard API when available

This commit is contained in:
yflory 2023-11-22 12:27:12 +01:00
parent 6f3c8240ad
commit e5a80afee7
11 changed files with 70 additions and 57 deletions

View File

@ -5,6 +5,8 @@ CKEDITOR.editorConfig = function( config ) {
config.needsBrFiller= fixThings; config.needsBrFiller= fixThings;
config.needsNbspFiller= fixThings; config.needsNbspFiller= fixThings;
config.disableObjectResizing = true;
config.removeButtons= 'Source,Maximize'; config.removeButtons= 'Source,Maximize';
// magicline plugin inserts html crap into the document which is not part of the // magicline plugin inserts html crap into the document which is not part of the
// document itself and causes problems when it's sent across the wire and reflected back // document itself and causes problems when it's sent across the wire and reflected back

View File

@ -364,11 +364,10 @@ define([
var copyToClipboard = (content) => { var copyToClipboard = (content) => {
var button = primary(Messages.copyToClipboard, () => { var button = primary(Messages.copyToClipboard, () => {
var toCopy = JSON.stringify(content, null, 2); var toCopy = JSON.stringify(content, null, 2);
if (Clipboard.copy.multiline(toCopy)) { Clipboard.copy(toCopy, (err) => {
if (err) { return UI.warn(Messages.error); }
UI.log(Messages.genericCopySuccess); UI.log(Messages.genericCopySuccess);
} else { });
UI.warn(Messages.error);
}
}); });
return button; return button;
}; };
@ -505,11 +504,10 @@ define([
UI.confirm(table, yes => { UI.confirm(table, yes => {
if (!yes) { return; } if (!yes) { return; }
var content = P.join('\n'); var content = P.join('\n');
if (Clipboard.copy.multiline(content)) { Clipboard.copy(content, (err) => {
if (err) { return UI.warn(Messages.error); }
UI.log(Messages.genericCopySuccess); UI.log(Messages.genericCopySuccess);
} else { });
UI.warn(Messages.error);
}
}, { }, {
wide: true, wide: true,
ok: Messages.copyToClipboard, ok: Messages.copyToClipboard,
@ -811,11 +809,10 @@ define([
UI.confirm(tableObj.table, (yes) => { UI.confirm(tableObj.table, (yes) => {
if (!yes) { return; } if (!yes) { return; }
var content = result.map(line => JSON.stringify(line)).join('\n'); var content = result.map(line => JSON.stringify(line)).join('\n');
if (Clipboard.copy.multiline(content)) { Clipboard.copy(content, (err) => {
if (err) { return UI.warn(Messages.error); }
UI.log(Messages.genericCopySuccess); UI.log(Messages.genericCopySuccess);
} else { });
UI.warn(Messages.error);
}
}, { }, {
wide: true, wide: true,
ok: Messages.copyToClipboard, ok: Messages.copyToClipboard,

View File

@ -1,7 +1,7 @@
define(['jquery'], function ($) { define(['jquery'], function ($) {
var Clipboard = {}; var Clipboard = {};
var copy = function (text, multiline) { var oldCopy = function (text, multiline) {
var $ta = $('<input>', { var $ta = $('<input>', {
type: 'text', type: 'text',
}).val(text); }).val(text);
@ -32,13 +32,20 @@ define(['jquery'], function ($) {
}; };
// copy arbitrary text to the clipboard // copy arbitrary text to the clipboard
// return boolean indicating success // call back boolean indicating success
Clipboard.copy = function (text) { Clipboard.copy = function (text, cb) {
return copy(text); if (!navigator || !navigator.clipboard || !navigator.clipboard.writeText) {
}; return void setTimeout(() => {
var success = oldCopy(text, true);
Clipboard.copy.multiline = function (text) { cb(!success);
return copy(text, true); });
}
navigator.clipboard.writeText(text).then(() => {
cb();
}).catch((err) => {
console.warn(err);
cb(err);
});
}; };
return Clipboard; return Clipboard;

View File

@ -249,8 +249,9 @@ define([
name: Messages.share_copyProfileLink, name: Messages.share_copyProfileLink,
onClick: function () { onClick: function () {
var profile = data.profile ? (origin + '/profile/#' + data.profile) : ''; var profile = data.profile ? (origin + '/profile/#' + data.profile) : '';
var success = Clipboard.copy(profile); Clipboard.copy(profile, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}, },
keys: [13] keys: [13]
}] }]
@ -535,8 +536,9 @@ define([
name: Messages.team_inviteLinkCopy, name: Messages.team_inviteLinkCopy,
onClick: function () { onClick: function () {
if (!href) { return; } if (!href) { return; }
var success = Clipboard.copy(href); Clipboard.copy(href, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}, },
keys: [] keys: []
}]; }];

View File

@ -462,8 +462,9 @@ define([
var v = opts.getLinkValue({ var v = opts.getLinkValue({
embed: Util.isChecked($link.find('#cp-share-embed')) embed: Util.isChecked($link.find('#cp-share-embed'))
}); });
var success = Clipboard.copy(v); Clipboard.copy(v, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}, },
keys: [13] keys: [13]
}, { }, {
@ -569,8 +570,9 @@ define([
onClick: function () { onClick: function () {
Feedback.send('SHARE_EMBED'); Feedback.send('SHARE_EMBED');
var v = opts.getEmbedValue(); var v = opts.getEmbedValue();
var success = Clipboard.copy(v); Clipboard.copy(v, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}, },
keys: [13] keys: [13]
}]; }];
@ -958,11 +960,11 @@ define([
iconClass: '.fa.fa-link', iconClass: '.fa.fa-link',
onClick: function () { onClick: function () {
var v = opts.getLinkValue(); var v = opts.getLinkValue();
var success = Clipboard.copy(v); Clipboard.copy(v, (err) => {
if (success) { UI.log(Messages.shareSuccess); if (!err) { UI.log(Messages.shareSuccess); }
} });
}, },
keys: [13] keys: [13]
} }
]; ];
@ -1004,8 +1006,9 @@ define([
iconClass: '.fa.fa-link', iconClass: '.fa.fa-link',
onClick: function () { onClick: function () {
var v = common.getMediatagFromHref(opts.fileData); var v = common.getMediatagFromHref(opts.fileData);
var success = Clipboard.copy(v); Clipboard.copy(v, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}, },
keys: [13] keys: [13]
}]; }];

View File

@ -1985,8 +1985,9 @@ define([
require(['/common/clipboard.js'], function (Clipboard) { require(['/common/clipboard.js'], function (Clipboard) {
var url = window.location.origin + var url = window.location.origin +
Utils.Hash.hashToHref(hashes.viewHash, 'form'); Utils.Hash.hashToHref(hashes.viewHash, 'form');
var success = Clipboard.copy(url); Clipboard.copy(url, (err) => {
cb(success); cb(!err);
});
}); });
}); });
sframeChan.on('EV_OPEN_VIEW_URL', function () { sframeChan.on('EV_OPEN_VIEW_URL', function () {

View File

@ -114,8 +114,9 @@ define([
}).append(h('i.fa.fa-shhare-alt')) }).append(h('i.fa.fa-shhare-alt'))
.append(h('span', Messages.shareButton)) .append(h('span', Messages.shareButton))
.click(function () { .click(function () {
var success = Clipboard.copy(url); Clipboard.copy(url, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}).appendTo($container); }).appendTo($container);
}; };
@ -521,8 +522,9 @@ define([
var metadataMgr = APP.common.getMetadataMgr(); var metadataMgr = APP.common.getMetadataMgr();
var privateData = metadataMgr.getPrivateData(); var privateData = metadataMgr.getPrivateData();
var url = Hash.getPublicSigningKeyString(privateData.origin, data.name, data.edPublic); var url = Hash.getPublicSigningKeyString(privateData.origin, data.name, data.edPublic);
var success = Clipboard.copy(url); Clipboard.copy(url, (err) => {
if (success) { UI.log(Messages.genericCopySuccess); } if (!err) { UI.log(Messages.genericCopySuccess); }
});
}; };
}; };

View File

@ -82,11 +82,10 @@ define([
$copyProof.click(function () { $copyProof.click(function () {
if (!proofStr) { return; } if (!proofStr) { return; }
if (Clipboard.copy.multiline(proofStr)) { Clipboard.copy(proofStr, (err) => {
UI.log(Messages.genericCopySuccess); if (!err) { return UI.log(Messages.genericCopySuccess); }
} else {
UI.warn(Messages.error); UI.warn(Messages.error);
} });
}); });
var blockKeys, blockHash, uname; var blockKeys, blockHash, uname;

View File

@ -48,11 +48,10 @@ define([
}; };
var copyToClipboard = function () { var copyToClipboard = function () {
if (Clipboard.copy.multiline(getReportContent())) { Clipboard.copy(getReportContent(), (err) => {
if (err) { return UI.warn(Messages.error); }
UI.log(Messages.genericCopySuccess); UI.log(Messages.genericCopySuccess);
} else { });
UI.warn(Messages.error);
}
}; };
var checkCache = function (chan, cb) { var checkCache = function (chan, cb) {

View File

@ -344,8 +344,9 @@ Messages.support_formCategoryError = "Please select a ticket category from the d
$(url).click(function (e) { $(url).click(function (e) {
e.stopPropagation(); e.stopPropagation();
var link = privateData.origin + privateData.pathname + '#' + 'support-' + content.id; var link = privateData.origin + privateData.pathname + '#' + 'support-' + content.id;
var success = Clipboard.copy(link); Clipboard.copy(link, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}); });
if (typeof(publicKey) === 'string') { if (typeof(publicKey) === 'string') {
copyKey = h('button.btn', { copyKey = h('button.btn', {
@ -357,11 +358,10 @@ Messages.support_formCategoryError = "Please select a ticket category from the d
]); ]);
$(copyKey).click(e => { $(copyKey).click(e => {
e.stopPropagation(); e.stopPropagation();
if (Clipboard.copy(publicKey)) { Clipboard.copy(publicKey, (err) => {
UI.log(Messages.shareSuccess); if (!err) { return UI.log(Messages.shareSuccess); }
} else {
UI.warn(Messages.error); UI.warn(Messages.error);
} });
}); });
} }
} }

View File

@ -840,8 +840,9 @@ define([
var privateData = common.getMetadataMgr().getPrivateData(); var privateData = common.getMetadataMgr().getPrivateData();
var origin = privateData.origin; var origin = privateData.origin;
var href = origin + Hash.hashToHref(data.hash, 'teams'); var href = origin + Hash.hashToHref(data.hash, 'teams');
var success = Clipboard.copy(href); Clipboard.copy(href, (err) => {
if (success) { UI.log(Messages.shareSuccess); } if (!err) { UI.log(Messages.shareSuccess); }
});
}).prependTo(actions); }).prependTo(actions);
} }
content = [ content = [