Index: includes/include.preload.js |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/includes/include.preload.js |
@@ -0,0 +1,72 @@ |
+/* |
+ * This Source Code is subject to the terms of the Mozilla Public License |
+ * version 2.0 (the "License"). You can obtain a copy of the License at |
+ * http://mozilla.org/MPL/2.0/. |
+ */ |
+ |
+// ==UserScript== |
+// @include * |
+// ==/UserScript== |
+ |
+var SELECTOR_GROUP_SIZE = 20; |
+ |
+var elemhideElt = null; |
+ |
+// Sets the currently used CSS rules for elemhide filters |
+function setElemhideCSSRules(selectors) |
+{ |
+ if (elemhideElt && elemhideElt.parentNode) |
+ elemhideElt.parentNode.removeChild(elemhideElt); |
+ |
+ if (!selectors) |
+ return; |
+ |
+ elemhideElt = document.createElement("style"); |
+ elemhideElt.setAttribute("type", "text/css"); |
+ document.documentElement.appendChild(elemhideElt); |
+ |
+ var elt = elemhideElt; // Use a local variable to avoid racing conditions |
+ function setRules() |
+ { |
+ if (!elt.sheet) |
+ { |
+ // Stylesheet didn't initialize yet, wait a little longer |
+ window.setTimeout(setRules, 0); |
+ return; |
+ } |
+ |
+ // WebKit apparently chokes when the selector list in a CSS rule is huge. |
+ // So we split the elemhide selectors into groups. |
+ for (var i = 0, j = 0; i < selectors.length; i += SELECTOR_GROUP_SIZE, j++) |
+ { |
+ var selector = selectors.slice(i, i + SELECTOR_GROUP_SIZE).join(", "); |
+ elt.sheet.insertRule(selector + " { display: none !important; }", j); |
+ } |
+ } |
+ setRules(); |
+} |
+ |
+function sendRequests() |
Felix Dahlke
2012/10/10 14:21:42
I'm only reviewing past this point, since everythi
|
+{ |
+ // Make sure this is really an HTML page |
+ if (!(document.documentElement instanceof window.HTMLElement)) |
+ return; |
+ |
+ opera.extension.addEventListener("message", function(event) |
+ { |
+ var request = event.data; |
+ switch (request.reqtype) |
Felix Dahlke
2012/10/10 14:21:42
I'd prefer an if to this switch, since there's onl
|
+ { |
+ case "get-settings-response": |
+ setElemhideCSSRules(request.selectors); |
+ break; |
+ } |
+ }, false); |
+ opera.extension.postMessage({reqtype: "get-settings", frameUrl: window.location.href}); |
+} |
+ |
+// Document might not be initialized yet |
+if (document.documentElement) |
+ sendRequests(); |
+else |
+ window.setTimeout(sendRequests, 0); |