.deb nightly builds: Make contact e-mail address configurable
[conkeror.git] / modules / extensions / noscript.js
blob170dd37fa3813e73ef0e2463a4f6e957f8e2917b
1 require("window.js");
2 require("utils.js");
4 var noscript_service = Cc["@maone.net/noscript-service;1"] ?
5     Cc["@maone.net/noscript-service;1"].createInstance().wrappedJSObject : null;
7 if (! noscript_service)
8     dumpln("WARNING: noscript wrapper loaded, but extension is not present.");
10 function unique(a) {
11     var r = new Array();
12     o:for(var i = 0, n = a.length; i < n; i++) {
13         for(var x = 0, y = r.length; x < y; x++) {
14             if(r[x]==a[i]) continue o;
15         }
16         r[r.length] = a[i];
17     }
18     return r;
21 function hideObject(p, o) {
22     if (!p.mimeRx.test(o.type)) return;
23     var r = p.document.createElement("object");
24     r.style.width = o.offsetWidth + "px";
25     r.style.height = o.offsetHeight + "px";
26     r.style.display = "inline-block";
27     o.className += " " + p.className;
28     o.parentNode.insertBefore(r, o);
31 function showObject(p, o) {
32     var cs = o.className;
33     cs = cs.replace(p.classRx, '');
34     if (cs != o.className) {
35         o.className = cs;
36         var r = o.previousSibling;
37         if (r instanceof HTMLObjectElement) {
38             r.parentNode.removeChild(r);
39         }
40     }
43 function setObjectVisibility(document, callback) {
44     tags = ["object", "embed"];
45     const ns = noscript_service;
46     var rx = ns.hideOnUnloadRegExp;
47     if (!rx) return;
48     var params = {
49         document: document,
50         mimeRx: rx,
51         classRx: ns.hideObjClassNameRx,
52         className: ns.hideObjClassName
53     };
55     var objects = null;
56     for each(var tag in tags) {
57         dumpln('tag: '+tag);
58         local_objects = document.getElementsByTagName(tag);
59         count = local_objects.count;
60         if (count) {
61             objects = objects || [local_objects[--count]];
62             while(count-- > 0) {
63                 objects.push(local_objects[count]);
64             }
65         }
66     }
67     if(objects) {
68         for (counter = objects.length; counter-- > 0;) {
69             callback(params, objects[counter]);
70         }
71     }
75 function ns_allow_temp(url, buffer, P, allow) {
76     dumpln(url);
77     dumpln(allow);
78     const ns = noscript_service;
79     if (allow == "Y" || allow == "y" || allow == "yes" || allow == "Yes") {
80         enabled = true;
81         temp = ns.getPref("toggle.temp");
82         ns.setTemp(url, enabled && temp);
83         ns.setJSEnabled(url, enabled, false, ns.mustCascadeTrust(url, temp));
84         setObjectVisibility(buffer.document,showObject);
85     } else {
86         enabled = false;
87         temp = ns.getPref("toggle.temp");
88         ns.setTemp(url, enabled && temp);
89         ns.setJSEnabled(url, enabled, false, ns.mustCascadeTrust(url, temp));
90         setObjectVisibility(buffer.document,hideObject);
91     }
94 interactive("ns-toggle-temp", "Allow a site temporary access to javascript",   function(I) {
95     dumpln(I.window);
96     const ns = noscript_service;
97     var urls = new Array();
98     var level = ns.getPref("toolbarToggle", 3);
99     if (!level) level = 3;
100     const url = ns.getQuickSite(I.buffer.document.documentURI, level);
101     if (url){
102         urls.push(url);
103         var scripts = I.buffer.document.getElementsByTagName("script");
104         for(i = 0;i < scripts.length;i++) {
105             if (scripts[i].getAttribute("src")) {
106                 matches = scripts[i].getAttribute("src").split("/");
107                 if (matches[0] == "http:") {
108                     urls.push(matches[2]);
109                 }
110             }
111         }
112         urls = unique(urls);
113         dumpln(urls);
114         while (url2 = urls.pop()) {
115             ns_allow_temp(url2, I.buffer,I.P, (yield I.minibuffer.read ($prompt = "Allow "+url2+"? [Y/[N]]")));
116         }
117         reload(I.buffer, I.P);
118     }