forked from jobisoft/HtmlSourceEditor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground.js
81 lines (70 loc) · 2.52 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
let openEditors = new Map();
async function setEditorStatus(tabId) {
let composeDetails = await browser.compose.getComposeDetails(tabId);
if (composeDetails.isPlainText) {
browser.composeAction.disable(tabId);
browser.menus.update("edithtml", { enabled: false });
} else {
browser.composeAction.enable(tabId);
browser.menus.update("edithtml", { enabled: true });
}
}
async function openHtmlEditor(tab) {
// Check if we have an editor for this tab already.
if (openEditors.has(tab.id)) {
browser.windows.update(openEditors.get(tab.id), { focused: true })
return;
};
let sourceEditWindow = await browser.windows.create({
type: "popup",
url: `editor/html-source-editor.html?tabId=${tab.id}`,
allowScriptsToClose: true,
});
openEditors.set(tab.id, sourceEditWindow.id);
await new Promise(resolve => {
let listener = windowId => {
if (windowId != sourceEditWindow.id) {
return;
}
browser.windows.onRemoved.removeListener(listener);
openEditors.delete(tab.id);
resolve();
}
browser.windows.onRemoved.addListener(listener);
});
}
async function closeHtmlEditor(tabId, tabRemoveInfo) {
if (openEditors.has(tabId)) {
browser.windows.remove(openEditors.get(tabId));
// onRemoved listener added in openHtmlEditor() will delete window from openEditors
}
}
async function init() {
browser.composeAction.setTitle({ title: browser.i18n.getMessage("sourceHTML") });
let composeTabs = await browser.tabs.query({ type: "messageCompose" });
for (let composeTab of composeTabs) {
setEditorStatus(composeTab.id);
}
browser.tabs.onCreated.addListener(async tab => {
if (tab.type == "messageCompose") {
setEditorStatus(tab.id);
}
})
let info = await browser.runtime.getBrowserInfo();
try {
let major = parseInt(info.version.split(".").shift());
if (major > 114) {
browser.menus.create({
id: "edithtml",
contexts: ["compose_body"],
onclick: (info, tab) => openHtmlEditor(tab),
title: browser.i18n.getMessage("sourceHTML")
})
}
} catch (ex) {
// Uups.
}
browser.composeAction.onClicked.addListener((tab, info) => openHtmlEditor(tab));
browser.tabs.onRemoved.addListener((tabId, tabRemoveInfo) => closeHtmlEditor(tabId, tabRemoveInfo));
}
init();