OLD | NEW |
---|---|
(Empty) | |
1 | |
Evan Stade
2011/05/26 16:13:13
license header
tzik
2011/05/27 14:53:59
Done.
| |
2 document.addEventListener("DOMContentLoaded",function(){ | |
Evan Stade
2011/05/26 16:13:13
please don't inline this function. Follow the cr.d
| |
3 | |
4 function LOG() { | |
Evan Stade
2011/05/26 16:13:13
every function in this file needs a comment
| |
5 if(window.console && console.log) | |
6 console.log.apply(console, arguments); | |
7 } | |
8 | |
9 function forEach(xs, f) { | |
10 for(var i=0; i < xs.length; ++i) | |
11 f(xs[i]); | |
12 } | |
13 | |
14 function lift(f) { | |
15 return function(xs) { | |
16 if(xs) | |
17 forEach(xs, f); | |
18 }; | |
19 } | |
20 | |
21 function clear_child(element) { | |
22 while (element.hasChildNodes()) | |
23 element.removeChild(element.firstChild); | |
24 return element; | |
25 } | |
26 | |
27 function make_elem(tag, text) { | |
28 var elem = document.createElement(tag); | |
29 if (text) | |
30 elem.appendChild(document.createTextNode(text)); | |
31 return elem; | |
32 } | |
33 | |
34 function print_text(text) { | |
35 if (text === undefined) | |
36 return "N/A"; | |
37 return text; | |
38 } | |
39 | |
40 function print_byte_number(num_text) { | |
41 if (num_text === undefined) | |
42 return "N/A"; | |
43 var prefix = ["", "K", "M", "G", "T"]; | |
44 var len = Math.floor((num_text.length-1)/3); | |
45 return num_text.substring(0, num_text.length - 3 * len) + prefix[len] + "B"; | |
46 } | |
47 | |
48 function print_date(date_text) { | |
49 if (date_text === undefined) | |
50 return "N/A"; | |
51 var d = new Date(date_text); | |
52 return d.toString(); | |
53 } | |
54 | |
55 function print_bool(b) { | |
56 if (b === undefined) return "N/A"; | |
57 return b ? "true" : "false"; | |
58 } | |
59 | |
60 function print_int(i) { | |
61 return i === undefined ? "N/A" : i.toString(); | |
62 } | |
63 | |
64 if(!window.chrome || !chrome.send) { | |
65 document.title += " (test mode)"; | |
66 LOG("Entering Test Mode..."); | |
67 | |
68 var AvailableSpace = "100000000"; | |
69 var GlobalData = {type: "temporary", usage: "10", quota: "10000"}; | |
70 var HostData = [ | |
71 {host: "example.com", type: "temporary", usage: "0", quota: "0"}]; | |
72 var OriginData = [ | |
73 {origin: "http://example.com/", type: "temporary", host: "example.com", | |
74 in_use: true, used_count: 1, last_access: Date.now()}]; | |
75 | |
76 if(!window.chrome) | |
77 window.chrome = {}; | |
78 window.chrome.send = function(msg, param) { | |
79 switch(msg) { | |
80 case "requestData": | |
81 OnRecvAvailableSpace(AvailableSpace); | |
82 OnRecvGlobalData(GlobalData); | |
83 OnRecvHostData(HostData); | |
84 OnRecvOriginData(OriginData); | |
85 break; | |
86 default: | |
87 LOG("unknown message: " + msg); | |
88 break; | |
89 } | |
90 }; | |
91 } | |
92 | |
93 // Chrome Callback | |
94 OnRecvAvailableSpace = function(avail_space) { | |
95 var local = arguments.callee; | |
96 if (avail_space !== undefined) | |
97 local.avail_space = avail_space; | |
98 | |
99 var o = document.getElementById("diskspace-entry"); | |
100 clear_child(o); | |
101 o.appendChild(document.createTextNode( | |
102 print_byte_number(avail_space))); | |
103 }; | |
104 | |
105 OnRecvGlobalData = function(data){ | |
106 var local = arguments.callee; | |
107 if (!local.map) local.map = {}; | |
108 | |
109 var entry = local.map[data.type]; | |
110 if (entry) { | |
111 if (data.type !== undefined) | |
112 entry.type = data.type; | |
113 if (data.usage !== undefined) | |
114 entry.usage = data.usage; | |
115 if (data.quota !== undefined) | |
116 entry.quota = data.quota; | |
117 clear_child(entry.element); | |
118 } else{ | |
119 entry = { | |
120 type: data.type, | |
121 usage: data.usage, | |
122 quota: data.quota, | |
123 element: document.createElement("tr") | |
124 }; | |
125 local.map[data.type] = entry; | |
126 document.getElementById("globaldata-entries") | |
127 .appendChild(entry.element); | |
128 } | |
129 | |
130 entry.element.appendChild( | |
131 make_elem("td", print_text(entry.type))); | |
132 entry.element.appendChild( | |
133 make_elem("td", print_byte_number(entry.usage))); | |
134 entry.element.appendChild( | |
135 make_elem("td", print_byte_number(entry.quota))); | |
136 }; | |
137 | |
138 OnRecvHostData = lift(function(data) { | |
139 var local = arguments.callee; | |
140 if (!local.map) local.map = {}; | |
141 | |
142 var entry = local.map[data.host + "/" + data.type]; | |
143 if (entry) { | |
144 if (data.host !== undefined) | |
145 entry.host = data.host; | |
146 if (data.type !== undefined) | |
147 entry.type = data.type; | |
148 if (data.usage !== undefined) | |
149 entry.usage = data.usage; | |
150 if (data.quota !== undefined) | |
151 entry.quota = data.quota; | |
152 clear_child(entry.element); | |
153 } else { | |
154 entry = { | |
155 host: data.host, | |
156 type: data.type, | |
157 quota: data.quota, | |
158 usage: data.usage, | |
159 element: document.createElement("tr") | |
160 }; | |
161 local.map[data.host + "/" + data.type] = entry; | |
162 document.getElementById("host-entries") | |
163 .appendChild(entry.element); | |
164 } | |
165 | |
166 entry.element.appendChild( | |
167 make_elem("td", print_text(entry.host))); | |
168 entry.element.appendChild( | |
169 make_elem("td", print_text(entry.type))); | |
170 entry.element.appendChild( | |
171 make_elem("td", print_byte_number(entry.usage))); | |
172 entry.element.appendChild( | |
173 make_elem("td", print_byte_number(entry.quota))); | |
174 }); | |
175 | |
176 OnRecvOriginData = lift(function(data) { | |
177 var local = arguments.callee; | |
178 if (!local.map) local.map = {}; | |
179 | |
180 var entry = local.map[data.origin + data.type]; | |
181 if (entry) { | |
182 if (data.origin !== undefined) | |
183 entry.origin = data.origin; | |
184 if (data.type !== undefined) | |
185 entry.type = data.type; | |
186 if (data.host !== undefined) | |
187 entry.host = data.host; | |
188 if (data.in_use !== undefined) | |
189 entry.in_use = data.in_use; | |
190 if (data.last_access !== undefined) | |
191 entry.last_access = data.last_access; | |
192 clear_child(entry.element); | |
193 } else { | |
194 entry = { | |
195 origin: data.origin, | |
196 type: data.type, | |
197 host: data.host, | |
198 in_use: data.in_use, | |
199 used_count: data.used_count, | |
200 last_access: data.last_access, | |
201 element: document.createElement("tr") | |
202 }; | |
203 local.map[data.origin + data.type] = entry; | |
204 document.getElementById("origin-entries") | |
205 .appendChild(entry.element); | |
206 } | |
207 | |
208 entry.element.appendChild( | |
209 make_elem("td", print_text(entry.origin))); | |
210 entry.element.appendChild( | |
211 make_elem("td", print_text(entry.type))); | |
212 entry.element.appendChild( | |
213 make_elem("td", print_text(entry.host))); | |
214 entry.element.appendChild( | |
215 make_elem("td", print_bool(entry.in_use))); | |
216 entry.element.appendChild( | |
217 make_elem("td", print_int(entry.used_count))); | |
218 entry.element.appendChild( | |
219 make_elem("td", print_date(entry.last_access))); | |
220 }); | |
221 | |
222 /* | |
Evan Stade
2011/05/26 16:13:13
commented out code?
tzik
2011/05/27 14:53:59
Done.
| |
223 function parse_query(query) { | |
224 var entries = hash.substring(1).split("&"); | |
225 var params = {}; | |
226 for(var i = 0; i < entries.length; ++i) { | |
227 var pair = entries[i].match(/(\w+)=(.*)/); | |
228 if(pair && pair.length == 3) | |
229 params[pair[1]] = decodeURL(pair[2]); | |
230 } | |
231 return params; | |
232 } | |
233 | |
234 function make_query(params) { | |
235 var query = []; | |
236 for(var i in params) | |
237 query.push(i+"="+encodeURL(params[i])); | |
238 return "#" + query.join("&"); | |
239 } | |
240 | |
241 var switches = document.getElementsByClassName("sort-switches"); | |
242 for (var i=0; i < switches.length;++i) { | |
243 switches[i].addEventListener("click",function() { | |
244 var params = parse_query(location.hash); | |
245 params["sort"] = i; | |
246 location.hash = make_query(params); | |
247 },false); | |
248 } | |
249 | |
250 document.addEventListener("hashchange",function() { | |
251 var query = parse_query(location.hash); | |
252 },false); | |
253 | |
254 function sort_entries(i) { | |
255 var origins = []; | |
256 for (var j in origin_map) | |
257 origins.push(j); | |
258 origins.sort(function(x,y){ | |
259 var xs = origin_map[x][i]; | |
260 var ys = origin_map[y][i]; | |
261 return xs<ys?-1:xs>ys?1:0; | |
262 }); | |
263 } | |
264 */ | |
265 | |
266 chrome.send("requestData"); | |
267 | |
268 },false); | |
269 | |
270 // Chrome Event Handler | |
271 | |
272 function NOTREADY() { | |
273 console.log("Recieved some data but page is not in ready"); | |
274 } | |
275 | |
276 var OnRecvAvailableSpace = NOTREADY; | |
277 var OnRecvGlobalData = NOTREADY; | |
278 var OnRecvHostData = NOTREADY; | |
279 var OnRecvOriginData = NOTREADY; | |
OLD | NEW |