blob: 648fae23dcb893d3db6af7797b4a50cd45cbff94 [file] [log] [blame]
Adrià Vilanova Martínez5b3590f2021-12-26 13:05:10 +01001import {MDCTooltip} from '@material/tooltip';
2
avm999632485a3e2021-09-08 22:18:38 +02003import {createPlainTooltip} from '../../../common/tooltip.js';
4
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +02005export function removeChildNodes(node) {
6 while (node.firstChild) {
7 node.removeChild(node.firstChild);
8 }
9}
10
11export function getNParent(node, n) {
12 if (n <= 0) return node;
13 if (!('parentNode' in node)) return null;
14 return getNParent(node.parentNode, n - 1);
15}
16
17export function createExtBadge() {
avm999632485a3e2021-09-08 22:18:38 +020018 let badge = document.createElement('div');
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020019 badge.classList.add('TWPT-badge');
avm999632485a3e2021-09-08 22:18:38 +020020 let badgeTooltip = createPlainTooltip(
21 badge,
22 chrome.i18n.getMessage(
23 'inject_extension_badge_helper', [chrome.i18n.getMessage('appName')]),
24 false);
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020025
avm999632485a3e2021-09-08 22:18:38 +020026 let badgeI = document.createElement('i');
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020027 badgeI.classList.add('material-icon-i', 'material-icons-extended');
28 badgeI.textContent = 'repeat';
29
30 badge.append(badgeI);
avm999632485a3e2021-09-08 22:18:38 +020031 return [badge, badgeTooltip];
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020032}
Adrià Vilanova Martínez5b3590f2021-12-26 13:05:10 +010033
34// Adds a button to the thread list actions bar next to the button given by
35// |originalBtn|. The button will have icon |icon|, when hovered it will display
36// |tooltip|, and will have a debugid attribute with value |debugId|.
37export function addButtonToThreadListActions(originalBtn, icon, debugId, tooltip) {
38 let clone = originalBtn.cloneNode(true);
39 clone.setAttribute('debugid', debugId);
40 clone.classList.add('TWPT-btn--with-badge');
41 clone.querySelector('material-icon').setAttribute('icon', icon);
42 clone.querySelector('i.material-icon-i').textContent = icon;
43
44 let badge, badgeTooltip;
45 [badge, badgeTooltip] = createExtBadge();
46 clone.append(badge);
47
48 var duplicateBtn =
49 originalBtn.parentNode.querySelector('[debugid="mark-duplicate-button"]');
50 if (duplicateBtn)
51 duplicateBtn.parentNode.insertBefore(
52 clone, (duplicateBtn.nextSibling || duplicateBtn));
53 else
54 originalBtn.parentNode.insertBefore(
55 clone, (originalBtn.nextSibling || originalBtn));
56
57 createPlainTooltip(clone, tooltip);
58 new MDCTooltip(badgeTooltip);
59
60 return clone;
61}