Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/clickToView.xml
diff options
context:
space:
mode:
Diffstat (limited to 'clickToView.xml')
-rw-r--r--clickToView.xml239
1 files changed, 239 insertions, 0 deletions
diff --git a/clickToView.xml b/clickToView.xml
new file mode 100644
index 0000000..6164c73
--- /dev/null
+++ b/clickToView.xml
@@ -0,0 +1,239 @@
+<?xml version="1.0"?>
+<!-- This provides a click-to-view capability to block flash
+ and java content in Firefox. Derived from:
+ http://www.squarefree.com/userstyles/xbl.html
+ and modified to allow different messages for flash and java
+ by Steve Zobell. This can be placed in the rez directory in
+ the Firefox install (e.g. C:\Program Files\Mozilla Firefox\res).
+
+ The blocking capabilities are derived from this description:
+ http://www.wlug.org.nz/MozillaNotes
+
+ Add the following to userContent.css (in the chrome directory
+ in the user profile):
+
+/* Prevent flash animations from playing until you click on them. */
+object[classid$=":D27CDB6E-AE6D-11cf-96B8-444553540000"],
+object[codebase*="swflash.cab"],
+object[type="application/x-shockwave-flash"],
+embed[type="application/x-shockwave-flash"],
+embed[src$=".swf"]
+{ -moz-binding: url("resource:///res/clickToView.xml#flash"); }
+
+/* Block java, with a click to load feature. */
+object[codebase*="java"],
+object[type="application/java"],
+embed[type="application/java"],
+applet[code$=".class"]
+{ -moz-binding: url("resource:///res/clickToView.xml#java"); }
+
+-->
+<bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">
+
+<binding id="flash">
+ <implementation>
+ <constructor>
+ <![CDATA[
+
+
+var doomed = this;
+
+// Check parent too (case of working EMBED inside broken OBJECT)
+if (doomed.overrideCTV || doomed.parentNode.overrideCTV)
+ return;
+doomed.overrideCTV = true;
+
+var placeholder = document.createElement("div");
+
+
+// === Styling ===
+
+var w = parseInt(doomed.width || doomed.style.width);
+var h = parseInt(doomed.height || doomed.style.height);
+
+if (!w || w < 32) w = 32; // !w catches e.g. NaN
+if (!h || h < 32) h = 32;
+
+placeholder.style.width = w + "px";
+placeholder.style.height = h + "px";
+placeholder.style.backgroundColor = "yellow";
+placeholder.style.MozOutline = "1px solid red";
+placeholder.style.textAlign = "center";
+placeholder.style.color = "black";
+placeholder.style.background = "white";
+placeholder.style.opacity = 0.4;
+placeholder.style.cursor = "pointer";
+placeholder.style.overflow = "hidden";
+
+var red = document.createElement("span");
+red.style.fontWeight = "bold";
+red.style.fontStyle = "italic";
+red.style.color = "red";
+red.appendChild(document.createTextNode("Flash"));
+
+var text = document.createTextNode(" [[Click to play]] ");
+
+
+// A button to dismiss the placeholder (instead of playing)
+// Useful for those wonderful flash animations that cover
+// the text on the page at the start.
+var bye = document.createElement("bye");
+bye.style.backgroundColor = "white";
+bye.style.MozOutline = "2px solid red";
+bye.style.textAlign = "center";
+bye.style.color = "red";
+bye.style.background = "white";
+bye.style.cursor = "pointer";
+bye.style.overflow = "hidden";
+bye.appendChild(document.createTextNode("X"));
+
+placeholder.appendChild(red);
+placeholder.appendChild(text);
+placeholder.appendChild(bye);
+
+placeholder.onmouseover = function()
+{
+ this.style.MozOutline='3px outset white';
+ this.style.opacity = 1.0;
+ this.style.background='lightgrey'
+}
+placeholder.onmouseout = function()
+{
+ this.style.background='white';
+ this.style.opacity = 0.4;
+ this.style.MozOutline='1px solid red';
+}
+
+
+// === Replacement ===
+
+var p = doomed.parentNode;
+
+// Do in a timeout to avoid bugginess
+setTimeout ( function ()
+{
+ p.insertBefore(placeholder, doomed);
+ p.removeChild(doomed);
+}, 0);
+
+// I love closures
+placeholder.onclick = function()
+{
+ p.insertBefore(doomed, placeholder);
+ p.removeChild(placeholder);
+}
+
+
+bye.onclick = function()
+{
+ p.removeChild(placeholder);
+}
+
+ ]]>
+ </constructor>
+ </implementation>
+</binding>
+
+
+<binding id="java">
+ <implementation>
+ <constructor>
+ <![CDATA[
+
+
+var doomed = this;
+
+// Check parent too (case of working EMBED inside broken OBJECT)
+if (doomed.overrideCTV || doomed.parentNode.overrideCTV)
+ return;
+doomed.overrideCTV = true;
+
+var placeholder = document.createElement("div");
+
+
+// === Styling ===
+
+var w = parseInt(doomed.width || doomed.style.width);
+var h = parseInt(doomed.height || doomed.style.height);
+
+if (!w || w < 32) w = 32; // !w catches e.g. NaN
+if (!h || h < 32) h = 32;
+
+placeholder.style.width = w + "px";
+placeholder.style.height = h + "px";
+placeholder.style.backgroundColor = "yellow";
+placeholder.style.MozOutline = "1px solid red";
+placeholder.style.textAlign = "center";
+placeholder.style.color = "black";
+placeholder.style.background = "white";
+placeholder.style.opacity = 0.4;
+placeholder.style.cursor = "pointer";
+placeholder.style.overflow = "hidden";
+
+var red = document.createElement("span");
+red.style.fontWeight = "bold";
+red.style.fontStyle = "italic";
+red.style.color = "red";
+red.appendChild(document.createTextNode("Java"))
+
+var text = document.createTextNode(" [[Click to play]] ");
+
+placeholder.appendChild(red);
+placeholder.appendChild(text);
+
+// A button to dismiss the placeholder (instead of playing)
+var bye = document.createElement("span");
+bye.style.backgroundColor = "white";
+bye.style.MozOutline = "2px solid red";
+bye.style.textAlign = "center";
+bye.style.color = "red";
+bye.style.background = "white";
+bye.style.cursor = "pointer";
+bye.style.overflow = "hidden";
+bye.appendChild(document.createTextNode("X"))
+placeholder.appendChild(bye);
+
+placeholder.onmouseover = function()
+{
+ this.style.MozOutline='3px outset white';
+ this.style.opacity = 1.0;
+ this.style.background='lightgrey'
+}
+placeholder.onmouseout = function()
+{
+ this.style.background='white';
+ this.style.opacity = 0.4;
+ this.style.MozOutline='1px solid red';
+}
+
+
+// === Replacement ===
+
+var p = doomed.parentNode;
+
+// Do in a timeout to avoid bugginess
+setTimeout ( function ()
+{
+ p.insertBefore(placeholder, doomed);
+ p.removeChild(doomed);
+}, 0);
+
+// I love closures
+placeholder.onclick = function()
+{
+ p.insertBefore(doomed, placeholder);
+ p.removeChild(placeholder);
+}
+
+
+bye.onclick = function()
+{
+ p.removeChild(placeholder);
+}
+
+ ]]>
+ </constructor>
+ </implementation>
+</binding>
+
+</bindings>