Skip to content

Commit b926dcc

Browse files
committed
refactor: Updating copy to clipboard functionality
1 parent 4dc567b commit b926dcc

1 file changed

Lines changed: 47 additions & 32 deletions

File tree

Dist/Functional/CopyToClipboard.js

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,55 @@
1-
'use strict'
2-
3-
const UpdateTriggerDisplay = (_txt, _target, _trigger, _class ) => {
4-
if (_txt){
5-
if(_target) _target.innerText = _txt;
6-
else _trigger.innerHTML = _txt;
7-
}
8-
if (_class) _trigger.classList.toggle(_class);
9-
}
10-
11-
const SetCopyToClipboard = () => {
12-
const copyTriggers = document.querySelectorAll('[wt-copycb-element^="trigger-"], [wt-copycb-element="trigger"]');
1+
class CopyToClipboard {
2+
constructor(_trigger) {
3+
this.triggerSelector = _trigger;
4+
this.initialize();
5+
}
136

14-
if(!copyTriggers || copyTriggers.length === 0) return;
7+
initialize() {
8+
let _triggerAttr = this.triggerSelector.getAttribute('wt-copycb-element');
9+
let index = _triggerAttr.replace('trigger', '');
10+
let _target = document.querySelector(`[wt-copycb-element="target${index}"]`);
11+
if (_target) {
12+
this.triggerSelector.addEventListener('click', () => {
13+
this.copyTextToClipboard(this.triggerSelector, _target, index);
14+
});
15+
}
16+
}
1517

16-
for(let _trigger of copyTriggers) {
17-
let _triggerAttr = _trigger.getAttribute(`wt-copycb-element`);
18-
let index = _triggerAttr.replace('trigger','');
19-
let _target = document.querySelector(`[wt-copycb-element="target${index}"]`);
18+
copyTextToClipboard(_trigger, _target, index) {
19+
let textToCopy = _target.innerText;
20+
let copiedTxt = _trigger.getAttribute("wt-copycb-message");
21+
let activeClass = _trigger.getAttribute('wt-copycb-active');
22+
let timeOut = _trigger.getAttribute('wt-copycb-timeout') || 2000;
23+
let _defaultTxt = _trigger.innerText;
24+
let textTarget = document.querySelector(`[wt-copycb-element="text-target${index}"]`);
2025

21-
if(_target) {
22-
_trigger.addEventListener('click', () => {
23-
let textToCopy = _target.innerText;
24-
let copiedTxt = _trigger.getAttribute("wt-copycb-message");
25-
let activeClass = _trigger.getAttribute('wt-copycb-active');
26-
let timeOut = _trigger.getAttribute('wt-copycb-timeout') || 2000;
27-
let _defaultTxt = _trigger.innerText;
28-
let textTarget = document.querySelector(`[wt-copycb-element="text-target${index}"]`);
26+
this.updateTriggerDisplay(copiedTxt, textTarget, _trigger, activeClass);
27+
setTimeout(() => {
28+
this.updateTriggerDisplay(_defaultTxt, textTarget, _trigger, activeClass);
29+
}, timeOut);
30+
navigator.clipboard.writeText(textToCopy);
31+
}
2932

30-
UpdateTriggerDisplay(copiedTxt, textTarget, _trigger, activeClass);
31-
setTimeout(() => {
32-
UpdateTriggerDisplay(_defaultTxt, textTarget, _trigger, activeClass);
33-
}, timeOut);
34-
navigator.clipboard.writeText(textToCopy);
35-
});
33+
updateTriggerDisplay(_txt, _target, _trigger, _class) {
34+
if (_txt) {
35+
if (_target) _target.innerText = _txt;
36+
else _trigger.innerHTML = _txt;
3637
}
38+
if (_class) _trigger.classList.toggle(_class);
3739
}
3840
}
3941

40-
window.addEventListener('DOMContentLoaded', SetCopyToClipboard());
42+
const initializeCopyToClipboard = () => {
43+
window.trickeries = window.trickeries || [];
44+
const triggers = document.querySelectorAll('[wt-copycb-element^="trigger-"], [wt-copycb-element="trigger"]');
45+
triggers.forEach(trigger => {
46+
let instance = new CopyToClipboard(trigger);
47+
window.trickeries.push({'copyToClipboard': instance});
48+
});
49+
}
50+
51+
if (/complete|interactive|loaded/.test(document.readyState)) {
52+
initializeCopyToClipboard();
53+
} else {
54+
window.addEventListener('DOMContentLoaded', initializeCopyToClipboard);
55+
}

0 commit comments

Comments
 (0)