From f74041e00a9b49a099b0c1fa8c491ed18c358839 Mon Sep 17 00:00:00 2001 From: raviks789 <33730024+raviks789@users.noreply.github.com> Date: Thu, 25 May 2023 10:29:52 +0200 Subject: [PATCH] Javascript: Add `copy-to-clipboard` behavior Utilizes `CopyToClipboard.js` from ipl-web --- library/Icinga/Web/JavaScript.php | 3 +- .../js/icinga/behavior/copy-to-clipboard.js | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 public/js/icinga/behavior/copy-to-clipboard.js diff --git a/library/Icinga/Web/JavaScript.php b/library/Icinga/Web/JavaScript.php index 9a6a11b38..7c5eebc2b 100644 --- a/library/Icinga/Web/JavaScript.php +++ b/library/Icinga/Web/JavaScript.php @@ -42,7 +42,8 @@ class JavaScript 'js/icinga/behavior/selectable.js', 'js/icinga/behavior/modal.js', 'js/icinga/behavior/input-enrichment.js', - 'js/icinga/behavior/datetime-picker.js' + 'js/icinga/behavior/datetime-picker.js', + 'js/icinga/behavior/copy-to-clipboard.js' ]; protected static $vendorFiles = []; diff --git a/public/js/icinga/behavior/copy-to-clipboard.js b/public/js/icinga/behavior/copy-to-clipboard.js new file mode 100644 index 000000000..cdd26153c --- /dev/null +++ b/public/js/icinga/behavior/copy-to-clipboard.js @@ -0,0 +1,41 @@ +(function (Icinga) { + + "use strict"; + + try { + var CopyToClipboard = require('icinga/icinga-php-library/widget/CopyToClipboard'); + } catch (e) { + console.warn('Unable to provide copy to clipboard feature. Libraries not available:', e); + return; + } + + class CopyToClipboardBehavior extends Icinga.EventListener { + constructor(icinga) + { + super(icinga); + + this.on('rendered', '#main > .container', this.onRendered, this); + + /** + * Clipboard buttons + * + * @type {WeakMap} + * @private + */ + this._clipboards = new WeakMap(); + } + + onRendered(event) + { + let _this = event.data.self; + + event.currentTarget.querySelectorAll('[data-icinga-clipboard]').forEach(button => { + _this._clipboards.set(button, new CopyToClipboard(button)); + }); + } + } + + Icinga.Behaviors = Icinga.Behaviors || {}; + + Icinga.Behaviors.CopyToClipboardBehavior = CopyToClipboardBehavior; +})(Icinga);