blob: 3b414b5881cafe0abaaf73f00d4e32f220a9a18a [file] [log] [blame]
Adrià Vilanova Martínez462280f2021-08-07 22:59:02 +02001import {createExtBadge, removeChildNodes} from './utils/common.js';
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +02002
Adrià Vilanova Martínez462280f2021-08-07 22:59:02 +02003export var batchLock = {
4 nodeIsReadToggleBtn(node) {
5 return ('tagName' in node) && node.tagName == 'MATERIAL-BUTTON' &&
6 node.getAttribute('debugid') !== null &&
7 (node.getAttribute('debugid') == 'mark-read-button' ||
8 node.getAttribute('debugid') == 'mark-unread-button') &&
9 ('parentNode' in node) && node.parentNode !== null &&
10 ('parentNode' in node.parentNode) &&
11 node.parentNode.querySelector('[debugid="batchlock"]') === null &&
12 node.parentNode.parentNode !== null &&
13 ('tagName' in node.parentNode.parentNode) &&
14 node.parentNode.parentNode.tagName == 'EC-BULK-ACTIONS';
15 },
16 createDialog() {
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020017 var modal = document.querySelector('.pane[pane-id="default-1"]');
18
19 var dialog = document.createElement('material-dialog');
20 dialog.setAttribute('role', 'dialog');
21 dialog.setAttribute('aria-modal', 'true');
22 dialog.classList.add('TWPT-dialog');
23
24 var header = document.createElement('header');
25 header.setAttribute('role', 'presentation');
26 header.classList.add('TWPT-dialog-header');
27
28 var title = document.createElement('div');
29 title.classList.add('TWPT-dialog-header--title', 'title');
30 title.textContent = chrome.i18n.getMessage('inject_lockbtn');
31
32 header.append(title);
33
34 var main = document.createElement('main');
35 main.setAttribute('role', 'presentation');
36 main.classList.add('TWPT-dialog-main');
37
38 var p = document.createElement('p');
39 p.textContent = chrome.i18n.getMessage('inject_lockdialog_desc');
40
41 main.append(p);
42
43 dialog.append(header, main);
44
45 var footers = [['lock', 'unlock', 'cancel'], ['reload', 'close']];
46
47 for (var i = 0; i < footers.length; ++i) {
48 var footer = document.createElement('footer');
49 footer.setAttribute('role', 'presentation');
50 footer.classList.add('TWPT-dialog-footer');
51 footer.setAttribute('data-footer-id', i);
52
53 if (i > 0) footer.classList.add('is-hidden');
54
55 footers[i].forEach(action => {
56 var btn = document.createElement('material-button');
57 btn.setAttribute('role', 'button');
58 btn.classList.add('TWPT-dialog-footer-btn');
59 if (i == 1) btn.classList.add('is-disabled');
60
61 switch (action) {
62 case 'lock':
63 case 'unlock':
64 btn.addEventListener('click', _ => {
65 if (btn.classList.contains('is-disabled')) return;
66 var message = {
67 action,
68 prefix: 'TWPT-batchlock',
69 };
70 window.postMessage(message, '*');
71 });
72 break;
73
74 case 'cancel':
75 case 'close':
76 btn.addEventListener('click', _ => {
77 if (btn.classList.contains('is-disabled')) return;
78 modal.classList.remove('visible');
79 modal.style.display = 'none';
80 removeChildNodes(modal);
81 });
82 break;
83
84 case 'reload':
85 btn.addEventListener('click', _ => {
86 if (btn.classList.contains('is-disabled')) return;
87 window.location.reload()
88 });
89 break;
90 }
91
92 var content = document.createElement('div');
93 content.classList.add('content', 'TWPT-dialog-footer-btn--content');
94 content.textContent =
95 chrome.i18n.getMessage('inject_lockdialog_btn_' + action);
96
97 btn.append(content);
98 footer.append(btn);
99 });
100
101 var clear = document.createElement('div');
102 clear.style.clear = 'both';
103
104 footer.append(clear);
105 dialog.append(footer);
106 }
107
108 removeChildNodes(modal);
109 modal.append(dialog);
110 modal.classList.add('visible', 'modal');
111 modal.style.display = 'flex';
Adrià Vilanova Martínez462280f2021-08-07 22:59:02 +0200112 },
113 addButton(readToggle) {
114 var clone = readToggle.cloneNode(true);
115 clone.setAttribute('debugid', 'batchlock');
116 clone.classList.add('TWPT-btn--with-badge');
117 clone.setAttribute('title', chrome.i18n.getMessage('inject_lockbtn'));
118 clone.querySelector('material-icon').setAttribute('icon', 'lock');
119 clone.querySelector('i.material-icon-i').textContent = 'lock';
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200120
Adrià Vilanova Martínez462280f2021-08-07 22:59:02 +0200121 var badge = createExtBadge();
122 clone.append(badge);
123
124 clone.addEventListener('click', () => {
125 this.createDialog();
126 });
127
128 var duplicateBtn = readToggle.parentNode.querySelector(
129 '[debugid="mark-duplicate-button"]');
130 if (duplicateBtn)
131 duplicateBtn.parentNode.insertBefore(
132 clone, (duplicateBtn.nextSibling || duplicateBtn));
133 else
134 readToggle.parentNode.insertBefore(
135 clone, (readToggle.nextSibling || readToggle));
136 }
137};