annotate random-stuff/random-stuff.js @ 22:ecd868a32247

better error logging, streamlined example
author Atul Varma <varmaa@toolness.com>
date Thu, 07 May 2009 15:42:53 -0700
parents e82bff1ef296
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
1 const BG_PROPS = ["backgroundImage",
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2 "backgroundPosition",
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 "backgroundRepeat",
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4 "backgroundColor",
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 "backgroundAttachment"];
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 function copyBackground(fromElement, toElement) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 var window = fromElement.ownerDocument.defaultView;
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 var style = window.getComputedStyle(fromElement, null);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 BG_PROPS.forEach(
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 function(name) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
12 toElement.style[name] = style[name];
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
13 });
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
14 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
15
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
16 function evalFunctionsIntoWindow(functions, window) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 var sandbox = Components.utils.Sandbox(window);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18 var codeLines = [];
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 for (name in functions)
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 if (typeof(functions[name]) == "function")
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22 codeLines.push("window." + name + " = " +
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23 functions[name].toString() + ";");
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
25 sandbox.window = window.wrappedJSObject;
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
26
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
27 Components.utils.evalInSandbox(codeLines.join('\n'), sandbox);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
28 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
29
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
30 function importFunctionsIntoWindow(functions, window) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
31 var sandbox = Components.utils.Sandbox(window);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
32 var codeLines = [];
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
33
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
34 for (name in functions)
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
35 if (typeof(functions[name]) == "function") {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
36 codeLines.push("window." + name + " = " + name + ";");
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 sandbox.importFunction(functions[name]);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
38 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
39
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
40 sandbox.window = window.wrappedJSObject;
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41 Components.utils.evalInSandbox(codeLines.join('\n'), sandbox);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
42 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
43
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
44 function injectPanelWindowFunctions(iframe) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
45 var functions = {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
46 close: function close() {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
47 iframe.parentNode.removeChild(iframe);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
48 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
49 };
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 importFunctionsIntoWindow(functions, iframe.contentWindow);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 function onPanelLoad(evt) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55 if (evt.originalTarget.nodeName == "#document") {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56 var iframe = this;
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
57
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
58 iframe.removeEventListener("DOMContentLoaded", onPanelLoad, true);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
59 injectPanelWindowFunctions(iframe);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 copyBackground(this.parentNode, iframe.contentDocument.body);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64 function addStatusBarPanel(window, url, width) {
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 var document = window.document;
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66 var statusBar = document.getElementById("status-bar");
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 var iframe = document.createElement("iframe");
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 iframe.setAttribute("type", "content");
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69 iframe.setAttribute("src", url);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 iframe.setAttribute("width", width);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 iframe.setAttribute("height", statusBar.boxObject.height);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 iframe.style.overflow = "hidden";
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 iframe.addEventListener("DOMContentLoaded", onPanelLoad, true);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74 statusBar.appendChild(iframe);
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 return iframe;
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 }
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77
21
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
78 function logError(element) {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
79 var window = element.ownerDocument.defaultView;
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
80 var console = window.wrappedJSObject.console;
22
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
81 if (console)
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
82 console.error.apply(console, arguments);
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
83 else {
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
84 var items = ["<" + element.nodeName.toLowerCase() + ">"];
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
85 for (var i = 1; i < arguments.length; i++)
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
86 items.push(arguments[i].toString());
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
87 Components.utils.reportError(items.join(" "));
ecd868a32247 better error logging, streamlined example
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
88 }
21
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
89 }
20
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
90
21
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
91 function absolutifyUrl(document, url) {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
92 var anchor = document.createElement("a");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
93 anchor.setAttribute("href", url);
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
94 document.body.appendChild(anchor);
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
95 var absolute = anchor.href;
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
96 document.body.removeChild(anchor);
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
97 return absolute;
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
98 }
20
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
99
21
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
100 function pageLoad_inject_sidebar_functions(document) {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
101 if (document.body &&
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
102 document.body.firstChild &&
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
103 document.body.firstChild.nodeName == "FEATURE") {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
104 var window = document.defaultView;
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
105 var chromeWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
106 .getInterface(Ci.nsIWebNavigation)
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
107 .QueryInterface(Ci.nsIDocShellTreeItem)
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
108 .rootTreeItem
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
109 .QueryInterface(Ci.nsIInterfaceRequestor)
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
110 .getInterface(Ci.nsIDOMWindow);
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
111 var widgets = document.getElementsByTagName("widget");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
112 for (var i = 0; i < widgets.length; i++) {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
113 var widget = widgets[i];
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
114 var location = widget.getAttribute("location");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
115 if (location == "status-bar") {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
116 var href = widget.getAttribute("href");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
117 if (typeof(href) == "string") {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
118 href = absolutifyUrl(document, href);
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
119 var width = widget.getAttribute("width");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
120 if (width && width.match(/^[0-9]+$/)) {
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
121 var panelIframe = addStatusBarPanel(chromeWindow, href, width);
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
122 window.addEventListener(
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
123 "unload",
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
124 function() { panelIframe.parentNode.removeChild(panelIframe); },
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
125 true
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
126 );
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
127 } else
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
128 logError(widget, "must specify width as integer");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
129 } else
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
130 logError(widget, "must specify href");
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
131 } else
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
132 logError(widget, "has unknown location", location);
20
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
133 }
21
e82bff1ef296 Changed code to be more html-like than JS-ish.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
134 }
20
a07982ba7259 Added random stuff.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
135 }