diff --git a/background.js b/background.js
index 1c386919..980f776a 100644
--- a/background.js
+++ b/background.js
@@ -40,6 +40,20 @@ chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
}
});
+chrome.commands.onCommand.addListener(function(command) {
+ switch (command) {
+ case "openManage":
+ openURL({url: chrome.extension.getURL("manage.html")});
+ break;
+ case "styleDisableAll":
+ var newState = !prefs.getPref("disableAll");
+ prefs.setPref("disableAll", newState);
+ notifyAllTabs({method: "styleDisableAll", disableAll: newState});
+ chrome.extension.sendMessage({method: "updatePopup", reason: "styleDisableAll", disableAll: newState});
+ break;
+ }
+});
+
function getStyles(options, callback) {
var enabled = fixBoolean(options.enabled);
diff --git a/edit.js b/edit.js
index 941135a5..e1fbd732 100644
--- a/edit.js
+++ b/edit.js
@@ -619,6 +619,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..2a92bce5 100644
--- a/manifest.json
+++ b/manifest.json
@@ -18,6 +18,14 @@
"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 = "
" + t('noStylesForSite') + "
";
}
@@ -173,15 +174,40 @@ function openLink(event) {
}
function handleUpdate(style) {
- var installed = document.getElementById("installed");
- installed.replaceChild(createStyleElement(style), installed.querySelector("[style-id='" + style.id + "']"));
+ var styleElement = installed.querySelector("[style-id='" + style.id + "']");
+ if (styleElement) {
+ installed.replaceChild(createStyleElement(style), styleElement);
+ }
}
function handleDelete(id) {
- var installed = document.getElementById("installed");
- installed.removeChild(installed.querySelector("[style-id='" + id + "']"));
+ var styleElement = installed.querySelector("[style-id='" + id + "']");
+ if (styleElement) {
+ installed.removeChild(styleElement);
+ }
}
+function handleDisableAll(disableAll) {
+ installed.classList.toggle("disabled", disableAll);
+}
+
+chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
+ if (request.method == "updatePopup") {
+ switch (request.reason) {
+ case "styleUpdated":
+ handleUpdate(request.style);
+ break;
+ case "styleDeleted":
+ handleDelete(request.id);
+ break;
+ case "styleDisableAll":
+ document.getElementById("disableAll").checked = request.disableAll;
+ handleDisableAll(request.disableAll);
+ break;
+ }
+ }
+});
+
tE("open-manage-link", "openManage");
tE("write-style-for", "writeStyleFor");
tE("find-styles-link", "findStylesForSite");
@@ -191,8 +217,9 @@ tE("disableAll-label", "disableAllStyles");
document.getElementById(id).addEventListener("click", openLink, false);
});
-loadPrefs({"disableAll": false})
+loadPrefs({"disableAll": false});
+handleDisableAll(prefs.getPref("disableAll"));
document.getElementById("disableAll").addEventListener("change", function(event) {
- document.getElementById("installed").classList.toggle("disabled", event.target.checked);
notifyAllTabs({method: "styleDisableAll", disableAll: event.target.checked});
+ chrome.extension.sendMessage({method: "updatePopup", reason: "styleDisableAll", disableAll: event.target.checked});
});
diff --git a/storage.js b/storage.js
index c4b75689..e22a5937 100644
--- a/storage.js
+++ b/storage.js
@@ -80,7 +80,8 @@ function enableStyle(id, enabled) {
chrome.extension.sendMessage({method: "styleChanged"});
chrome.extension.sendMessage({method: "getStyles", id: id}, function(styles) {
handleUpdate(styles[0]);
- notifyAllTabs({method:"styleUpdated", style: styles[0]});
+ notifyAllTabs({method: "styleUpdated", style: styles[0]});
+ chrome.extension.sendMessage({method: "updatePopup", reason: "styleUpdated", style: styles[0]});
});
});
});
@@ -94,6 +95,7 @@ function deleteStyle(id) {
t.executeSql("DELETE FROM styles WHERE id = ?;", [id]);
}, reportError, function() {
chrome.extension.sendMessage({method: "styleChanged"});
+ chrome.extension.sendMessage({method: "updatePopup", reason: "styleDeleted", id: id});
handleDelete(id);
notifyAllTabs({method: "styleDeleted", id: id});
});