diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 38befb21..24d3985e 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -181,6 +181,10 @@ "message": "Stylish", "description": "Title for the manage page" }, + "menuShowBadge": { + "message": "Show active style count", + "description": "Label (must be very short) for the checkbox in the toolbar button context menu controlling toolbar badge text." + }, "noStylesForSite": { "message": "No styles installed for this site.", "description": "Text displayed when no styles are installed for the current site" diff --git a/background.js b/background.js index 1c386919..1284d5a5 100644 --- a/background.js +++ b/background.js @@ -37,9 +37,54 @@ chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { case "openURL": openURL(request); break; + case "styleDisableAll": + chrome.contextMenus.update("disableAll", {checked: request.disableAll}); + break; + case "prefChanged": + if (request.prefName == "show-badge") { + chrome.contextMenus.update("show-badge", {checked: request.value}); + } + break; } }); +chrome.commands.onCommand.addListener(function(command) { + switch (command) { + case "openManage": + openURL({url: chrome.extension.getURL("manage.html")}); + break; + case "styleDisableAll": + disableAllStylesToggle(); + chrome.contextMenus.update("disableAll", {checked: prefs.getPref("disableAll")}); + break; + } +}); + +chrome.contextMenus.create({ + id: "show-badge", title: chrome.i18n.getMessage("menuShowBadge"), + type: "checkbox", contexts: ["browser_action"], checked: prefs.getPref("show-badge") +}); +chrome.contextMenus.create({ + id: "disableAll", title: chrome.i18n.getMessage("disableAllStyles"), + type: "checkbox", contexts: ["browser_action"], checked: prefs.getPref("disableAll") +}); +chrome.contextMenus.onClicked.addListener(function(info, tab) { + if (info.menuItemId == "disableAll") { + disableAllStylesToggle(info.checked); + } else { + prefs.setPref(info.menuItemId, info.checked); + } +}); + +function disableAllStylesToggle(newState) { + if (newState === undefined || newState === null) { + newState = !prefs.getPref("disableAll"); + } + prefs.setPref("disableAll", newState); + notifyAllTabs({method: "styleDisableAll", disableAll: newState}); + chrome.extension.sendMessage({method: "updatePopup", reason: "styleDisableAll", disableAll: newState}); +} + function getStyles(options, callback) { var enabled = fixBoolean(options.enabled); diff --git a/edit.js b/edit.js index 8b2f5006..855be306 100644 --- a/edit.js +++ b/edit.js @@ -683,6 +683,7 @@ function saveComplete(style) { } else { updateTitle(); } + chrome.extension.sendMessage({method: "updatePopup", reason: "styleUpdated", style: style}); } function showMozillaFormat() { diff --git a/manifest.json b/manifest.json index ef89c118..be1b0632 100644 --- a/manifest.json +++ b/manifest.json @@ -12,12 +12,21 @@ "permissions": [ "tabs", "webNavigation", + "contextMenus", "http://userstyles.org/", "https://userstyles.org/" ], "background": { "page": "background.html" }, + "commands": { + "openManage": { + "description": "__MSG_openManage__" + }, + "styleDisableAll": { + "description": "__MSG_disableAllStyles__" + } + }, "content_scripts": [ { "matches": ["http://*/*", "https://*/*", "file:///*"], diff --git a/popup.js b/popup.js index 6eee1f49..72bcd745 100644 --- a/popup.js +++ b/popup.js @@ -4,8 +4,10 @@ styleTemplate.innerHTML = "