blob: 0d939fa79ffb4ab9f790077edd443d443005ee8c [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
Adrià Vilanova Martínezd4736092021-08-07 23:43:58 +020045 var footers = [['lock', 'unlock', 'cancel'], ['close']];
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020046
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
Adrià Vilanova Martínezbddf1232021-08-31 23:23:41 +020074 case 'cancel':
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020075 case 'close':
76 btn.addEventListener('click', _ => {
77 if (btn.classList.contains('is-disabled')) return;
Adrià Vilanova Martínezbddf1232021-08-31 23:23:41 +020078
79 if (action == 'close') {
80 var refreshButton = document.querySelector('.app-title-button');
81 if (refreshButton == null)
82 window.location.reload();
83 else
84 refreshButton.click();
85 }
86
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020087 modal.classList.remove('visible');
88 modal.style.display = 'none';
89 removeChildNodes(modal);
90 });
91 break;
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020092 }
93
94 var content = document.createElement('div');
95 content.classList.add('content', 'TWPT-dialog-footer-btn--content');
96 content.textContent =
97 chrome.i18n.getMessage('inject_lockdialog_btn_' + action);
98
99 btn.append(content);
100 footer.append(btn);
101 });
102
103 var clear = document.createElement('div');
104 clear.style.clear = 'both';
105
106 footer.append(clear);
107 dialog.append(footer);
108 }
109
110 removeChildNodes(modal);
111 modal.append(dialog);
112 modal.classList.add('visible', 'modal');
113 modal.style.display = 'flex';
Adrià Vilanova Martínez462280f2021-08-07 22:59:02 +0200114 },
115 addButton(readToggle) {
116 var clone = readToggle.cloneNode(true);
117 clone.setAttribute('debugid', 'batchlock');
118 clone.classList.add('TWPT-btn--with-badge');
119 clone.setAttribute('title', chrome.i18n.getMessage('inject_lockbtn'));
120 clone.querySelector('material-icon').setAttribute('icon', 'lock');
121 clone.querySelector('i.material-icon-i').textContent = 'lock';
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200122
Adrià Vilanova Martínez462280f2021-08-07 22:59:02 +0200123 var badge = createExtBadge();
124 clone.append(badge);
125
126 clone.addEventListener('click', () => {
127 this.createDialog();
128 });
129
130 var duplicateBtn = readToggle.parentNode.querySelector(
131 '[debugid="mark-duplicate-button"]');
132 if (duplicateBtn)
133 duplicateBtn.parentNode.insertBefore(
134 clone, (duplicateBtn.nextSibling || duplicateBtn));
135 else
136 readToggle.parentNode.insertBefore(
137 clone, (readToggle.nextSibling || readToggle));
138 }
139};