pushlog-addon/background.js

78 строки
1.9 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
let idUrl = {};
let port = null;
const anchorPat = new RegExp("#[^/]*$");
function menuHandler(info, tab) {
if (idUrl.hasOwnProperty(info.menuItemId)) {
browser.tabs.query({active: true,
windowId: browser.windows.WINDOW_ID_CURRENT})
.then(tabs => browser.tabs.get(tabs[0].id))
.then(tab => {
browser.tabs.create({index: tab.index + 1,
url: idUrl[info.menuItemId]});
});
}
}
function init() {
browser.contextMenus.onClicked.addListener(menuHandler);
browser.runtime.onConnect.addListener(connected);
}
function connected(p) {
if (p.name === "pushlog-port") {
port = p;
port.onMessage.addListener(notify);
}
}
function addMenu(currentUrl) {
currentUrl = currentUrl.replace(anchorPat, "");
let title = "";
if (Object.keys(idUrl).length == 1) {
title = "Pushlog";
}
for (let id in idUrl) {
browser.contextMenus.create({
id: id,
title: title === "" ? id : title,
contexts: ["selection"],
icons: {
"16": "icons/mercurial-16.png",
"32": "icons/mercurial-32.png",
"64": "icons/mercurial-64.png",
},
documentUrlPatterns: [currentUrl]
});
}
}
function notify(msg) {
if (msg.hasOwnProperty("pushlog-data")) {
idUrl = msg["pushlog-data"];
browser.tabs.query({active: true,
windowId: browser.windows.WINDOW_ID_CURRENT})
.then(tabs => browser.tabs.get(tabs[0].id))
.then(tab => {
addMenu(tab.url);
});
} else if (msg === "pushlog-clean") {
clean();
}
}
function clean() {
for (let id in idUrl) {
browser.contextMenus.remove(id);
}
idUrl = {};
}
init();