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.needsNbspFiller= fixThings;
config.disableObjectResizing = true;
config.removeButtons= 'Source,Maximize';
// 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

View File

@ -364,11 +364,10 @@ define([
var copyToClipboard = (content) => {
var button = primary(Messages.copyToClipboard, () => {
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);
} else {
UI.warn(Messages.error);
}
});
});
return button;
};
@ -505,11 +504,10 @@ define([
UI.confirm(table, yes => {
if (!yes) { return; }
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);
} else {
UI.warn(Messages.error);
}
});
}, {
wide: true,
ok: Messages.copyToClipboard,
@ -811,11 +809,10 @@ define([
UI.confirm(tableObj.table, (yes) => {
if (!yes) { return; }
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);
} else {
UI.warn(Messages.error);
}
});
}, {
wide: true,
ok: Messages.copyToClipboard,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -48,11 +48,10 @@ define([
};
var copyToClipboard = function () {
if (Clipboard.copy.multiline(getReportContent())) {
Clipboard.copy(getReportContent(), (err) => {
if (err) { return UI.warn(Messages.error); }
UI.log(Messages.genericCopySuccess);
} else {
UI.warn(Messages.error);
}
});
};
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) {
e.stopPropagation();
var link = privateData.origin + privateData.pathname + '#' + 'support-' + content.id;
var success = Clipboard.copy(link);
if (success) { UI.log(Messages.shareSuccess); }
Clipboard.copy(link, (err) => {
if (!err) { UI.log(Messages.shareSuccess); }
});
});
if (typeof(publicKey) === 'string') {
copyKey = h('button.btn', {
@ -357,11 +358,10 @@ Messages.support_formCategoryError = "Please select a ticket category from the d
]);
$(copyKey).click(e => {
e.stopPropagation();
if (Clipboard.copy(publicKey)) {
UI.log(Messages.shareSuccess);
} else {
Clipboard.copy(publicKey, (err) => {
if (!err) { return UI.log(Messages.shareSuccess); }
UI.warn(Messages.error);
}
});
});
}
}

View File

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