gui: remove document.execCommand calls

The `document.execCommand` call is deprecated since a few years [0] so I
went ahead and removed it. We only use it to copy stuff to the clipboard
and the recommended way now is to use `navigator.clipboard.writeText`
[1]. `writeText` is kind of new, but I think we'll be alright regarding
compatibility (Compat table is also available at [1]).

Making the handler functions async is okay because extjs executes the
handler and does not expect any result from it, nor does it need to do
some work afterwards.

[0]: https://developer.mozilla.org/en-US/docs/Web/API/document/execCommand
[1]: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/writeText

Signed-off-by: Gabriel Goller <g.goller@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Gabriel Goller 2024-03-14 10:32:23 +01:00 committed by Thomas Lamprecht
parent 5b1f51ffa5
commit e66d75ca2f
4 changed files with 10 additions and 14 deletions

View File

@ -76,11 +76,9 @@ Ext.define('PBS.ServerStatus', {
{
xtype: 'button',
iconCls: 'fa fa-clipboard',
handler: function(button) {
window.getSelection().selectAllChildren(
document.getElementById('pkgversions'),
);
document.execCommand("copy");
handler: async function(button) {
let el = document.getElementById('pkgversions');
await navigator.clipboard.writeText(el.textContent);
},
text: gettext('Copy'),
},

View File

@ -45,10 +45,9 @@ Ext.define('PBS.NodeInfoPanel', {
{
xtype: 'button',
iconCls: 'fa fa-clipboard',
handler: function(b) {
handler: async function(b) {
var el = document.getElementById('fingerprintField');
el.select();
document.execCommand("copy");
await navigator.clipboard.writeText(el.value);
},
text: gettext('Copy'),
},

View File

@ -113,15 +113,14 @@ Ext.define('PBS.form.CopyField', {
iconCls: 'fa fa-clipboard x-btn-icon-el-default-toolbar-small',
baseCls: 'x-btn',
cls: 'x-btn-default-toolbar-small proxmox-inline-button',
handler: function() {
handler: async function() {
let me = this;
let field = me.up('pbsCopyField');
let el = field.getComponent('inputField')?.inputEl;
if (!el?.dom) {
return;
}
el.dom.select();
document.execCommand("copy");
await navigator.clipboard.writeText(el.dom.value);
},
text: gettext('Copy'),
},

View File

@ -203,9 +203,9 @@ Ext.define('PBS.window.TokenShow', {
],
buttons: [
{
handler: function(b) {
document.getElementById('token-secret-value').select();
document.execCommand("copy");
handler: async function(b) {
let el = document.getElementById('token-secret-value');
await navigator.clipboard.writeText(el.value);
},
text: gettext('Copy Secret Value'),
},