git-svn-id: svn://euphorik.ch/pompage@45 02bbb61a-6d21-0410-aba0-cb053bdfd66a
[pompage.git] / doc / webdeveloper / features / view_document_size.js
1 // Displays the size of the page
2 function webdeveloper_viewDocumentSize()
3 {
4 var calculatedFileSize = 0;
5 var calculatedUncompressedFileSize = 0;
6 var countCellDataElement = null;
7 var documentCount = 0;
8 var documentList = webdeveloper_tidyDocuments(webdeveloper_getDocuments(webdeveloper_getContentWindow())).sort(webdeveloper_sortDocumentsByFileSize);
9 var documentLength = documentList.length;
10 var documentURL = null;
11 var fileSize = 0;
12 var image = null;
13 var imageLength = null;
14 var imageList = new Array();
15 var oldTab = getBrowser().selectedTab;
16 var oldURL = getBrowser().currentURI.spec;
17 var generatedDocument = webdeveloper_generateDocument("");
18 var bodyElement = webdeveloper_getDocumentBodyElement(generatedDocument);
19 var cellDataElement = generatedDocument.createElement("td");
20 var headElement = webdeveloper_getDocumentHeadElement(generatedDocument);
21 var headerElement = generatedDocument.createElement("h1");
22 var linkElement = generatedDocument.createElement("link");
23 var object = null;
24 var objectLength = null;
25 var objectList = new Array();
26 var pageDocument = null;
27 var scriptElement = null;
28 var scriptLength = null;
29 var scriptList = new Array();
30 var src = null;
31 var stringBundle = document.getElementById("webdeveloper-string-bundle");
32 var styleSheet = null;
33 var styleSheetLength = null;
34 var styleSheetList = new Array();
35 var tableElement = generatedDocument.createElement("table");
36 var tableRowElement = generatedDocument.createElement("tr");
37 var title = stringBundle.getFormattedString("webdeveloper_viewDocumentSizeTitle", [oldURL]);
38 var totalCellDataElement = null;
39 var totalFileSize = 0;
40 var totalUncompressedFileSize = 0;
41 var uncompressedLabel = stringBundle.getString("webdeveloper_uncompressed").toLowerCase();
42 var uncompressedFileSize = 0;
43
44 generatedDocument.title = title;
45
46 webdeveloper_addGeneratedStyles(generatedDocument);
47
48 linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated/view_document_size.css");
49 linkElement.setAttribute("rel", "stylesheet");
50 linkElement.setAttribute("type", "text/css");
51 headElement.appendChild(linkElement);
52
53 headerElement.appendChild(generatedDocument.createTextNode(title));
54 bodyElement.appendChild(headerElement);
55
56 cellDataElement.setAttribute("class", "pivot");
57 tableRowElement.appendChild(cellDataElement);
58
59 countCellDataElement = generatedDocument.createElement("td");
60
61 tableRowElement.appendChild(countCellDataElement);
62
63 totalCellDataElement = generatedDocument.createElement("td");
64
65 totalCellDataElement.setAttribute("class", "size");
66 tableRowElement.appendChild(totalCellDataElement);
67 tableRowElement.setAttribute("class", "collapsed");
68 tableElement.appendChild(tableRowElement);
69
70 // Loop through the documents
71 for(var i = 0; i < documentLength; i++)
72 {
73 pageDocument = documentList[i];
74 documentURL = pageDocument.documentURI;
75 imageList = imageList.concat(webdeveloper_getImagesForDocument(pageDocument, true, true));
76 objectList = objectList.concat(webdeveloper_getObjectsForDocument(pageDocument));
77 scriptList = scriptList.concat(webdeveloper_getScriptsForDocument(pageDocument, false));
78 styleSheetList = styleSheetList.concat(webdeveloper_getStyleSheetsForDocument(pageDocument, false, true));
79
80 // If the document is not in the image and object lists
81 if(!webdeveloper_mediaArrayContains(imageList, documentURL) && !webdeveloper_mediaArrayContains(objectList, documentURL))
82 {
83 cellDataElement = generatedDocument.createElement("td");
84 fileSize = webdeveloper_getFileSize(documentURL);
85 linkElement = generatedDocument.createElement("a");
86 tableRowElement = generatedDocument.createElement("tr");
87 uncompressedFileSize = webdeveloper_getUncompressedFileSize(documentURL);
88
89 documentCount++;
90
91 // If the file size is set
92 if(fileSize)
93 {
94 calculatedFileSize += fileSize;
95 }
96
97 // If the uncompressed file size is set and different from the file size
98 if(uncompressedFileSize && uncompressedFileSize != fileSize)
99 {
100 calculatedUncompressedFileSize += uncompressedFileSize;
101 }
102 else
103 {
104 calculatedUncompressedFileSize += fileSize;
105 }
106
107 // If this is an even row
108 if(i % 2 == 0)
109 {
110 tableRowElement.setAttribute("class", "hidden shaded");
111 }
112 else
113 {
114 tableRowElement.setAttribute("class", "hidden");
115 }
116
117 cellDataElement.setAttribute("class", "indent");
118 tableRowElement.appendChild(cellDataElement);
119
120 cellDataElement = generatedDocument.createElement("td");
121
122 linkElement.setAttribute("href", documentURL);
123 linkElement.appendChild(generatedDocument.createTextNode(documentURL));
124 cellDataElement.appendChild(linkElement);
125 tableRowElement.appendChild(cellDataElement);
126
127 cellDataElement = generatedDocument.createElement("td");
128
129 cellDataElement.setAttribute("class", "size");
130
131 // If the uncompressed file size is set and different from the file size
132 if(uncompressedFileSize && uncompressedFileSize != fileSize)
133 {
134 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize) + " (" + webdeveloper_formatFileSize(uncompressedFileSize) + " " + uncompressedLabel + ")"));
135 }
136 else
137 {
138 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize)));
139 }
140
141 tableRowElement.appendChild(cellDataElement);
142 tableElement.appendChild(tableRowElement);
143 }
144 }
145
146 // If there is one document
147 if(documentCount == 1)
148 {
149 countCellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_documents") + " (" + documentCount + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")"));
150 }
151 else
152 {
153 countCellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_documents") + " (" + documentCount + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")"));
154 }
155
156 // If the calculated file size and calculated uncompressed file size are set and different
157 if(calculatedFileSize && calculatedUncompressedFileSize && calculatedFileSize != calculatedUncompressedFileSize)
158 {
159 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize) + " " + uncompressedLabel + ")"));
160 }
161 else
162 {
163 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize)));
164 }
165
166 totalFileSize += calculatedFileSize;
167 totalUncompressedFileSize += calculatedUncompressedFileSize;
168
169 calculatedFileSize = 0;
170 cellDataElement = generatedDocument.createElement("td");
171 imageList = webdeveloper_setImageFileSizes(webdeveloper_tidyImages(imageList)).sort(webdeveloper_sortImagesByFileSize);
172 imageLength = imageList.length;
173 tableRowElement = generatedDocument.createElement("tr");
174
175 cellDataElement.setAttribute("class", "pivot");
176 tableRowElement.appendChild(cellDataElement);
177
178 cellDataElement = generatedDocument.createElement("td");
179
180 // If there is one image
181 if(imageLength == 1)
182 {
183 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_images") + " (" + imageLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")"));
184 }
185 else
186 {
187 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_images") + " (" + imageLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")"));
188 }
189
190 tableRowElement.appendChild(cellDataElement);
191
192 totalCellDataElement = generatedDocument.createElement("td");
193
194 totalCellDataElement.setAttribute("class", "size");
195 tableRowElement.appendChild(totalCellDataElement);
196 tableRowElement.setAttribute("class", "collapsed");
197 tableElement.appendChild(tableRowElement);
198
199 // Loop through the images
200 for(i = 0; i < imageLength; i++)
201 {
202 cellDataElement = generatedDocument.createElement("td");
203 image = imageList[i];
204 linkElement = generatedDocument.createElement("a");
205 src = image.src;
206 fileSize = image.fileSize;
207 tableRowElement = generatedDocument.createElement("tr");
208
209 // If the file size is set
210 if(fileSize)
211 {
212 calculatedFileSize += fileSize;
213 }
214
215 // If this is an even row
216 if(i % 2 == 0)
217 {
218 tableRowElement.setAttribute("class", "hidden shaded");
219 }
220 else
221 {
222 tableRowElement.setAttribute("class", "hidden");
223 }
224
225 cellDataElement.setAttribute("class", "indent");
226 tableRowElement.appendChild(cellDataElement);
227
228 cellDataElement = generatedDocument.createElement("td");
229
230 linkElement.setAttribute("href", src);
231 linkElement.appendChild(generatedDocument.createTextNode(src));
232 cellDataElement.appendChild(linkElement);
233 tableRowElement.appendChild(cellDataElement);
234
235 cellDataElement = generatedDocument.createElement("td");
236
237 cellDataElement.setAttribute("class", "size");
238 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize)));
239 tableRowElement.appendChild(cellDataElement);
240 tableElement.appendChild(tableRowElement);
241 }
242
243 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize)));
244
245 totalFileSize += calculatedFileSize;
246 totalUncompressedFileSize += calculatedFileSize;
247
248 calculatedFileSize = 0;
249 cellDataElement = generatedDocument.createElement("td");
250 objectList = webdeveloper_setScriptFileSizes(webdeveloper_tidyScripts(objectList)).sort(webdeveloper_sortScriptsByFileSize);
251 objectLength = objectList.length;
252 tableRowElement = generatedDocument.createElement("tr");
253
254 cellDataElement.setAttribute("class", "pivot");
255 tableRowElement.appendChild(cellDataElement);
256
257 cellDataElement = generatedDocument.createElement("td");
258
259 // If there is one object
260 if(objectLength == 1)
261 {
262 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_objects") + " (" + objectLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")"));
263 }
264 else
265 {
266 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_objects") + " (" + objectLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")"));
267 }
268
269 tableRowElement.appendChild(cellDataElement);
270
271 totalCellDataElement = generatedDocument.createElement("td");
272
273 totalCellDataElement.setAttribute("class", "size");
274 tableRowElement.appendChild(totalCellDataElement);
275 tableRowElement.setAttribute("class", "collapsed");
276 tableElement.appendChild(tableRowElement);
277
278 // Loop through the objects
279 for(i = 0; i < objectLength; i++)
280 {
281 cellDataElement = generatedDocument.createElement("td");
282 linkElement = generatedDocument.createElement("a");
283 object = objectList[i];
284 src = object.src;
285 fileSize = object.fileSize;
286 tableRowElement = generatedDocument.createElement("tr");
287
288 // If the file size is set
289 if(fileSize)
290 {
291 calculatedFileSize += fileSize;
292 }
293
294 // If this is an even row
295 if(i % 2 == 0)
296 {
297 tableRowElement.setAttribute("class", "hidden shaded");
298 }
299 else
300 {
301 tableRowElement.setAttribute("class", "hidden");
302 }
303
304 cellDataElement.setAttribute("class", "indent");
305 tableRowElement.appendChild(cellDataElement);
306
307 cellDataElement = generatedDocument.createElement("td");
308
309 linkElement.setAttribute("href", src);
310 linkElement.appendChild(generatedDocument.createTextNode(src));
311 cellDataElement.appendChild(linkElement);
312 tableRowElement.appendChild(cellDataElement);
313
314 cellDataElement = generatedDocument.createElement("td");
315
316 cellDataElement.setAttribute("class", "size");
317 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize)));
318 tableRowElement.appendChild(cellDataElement);
319 tableElement.appendChild(tableRowElement);
320 }
321
322 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize)));
323
324 totalFileSize += calculatedFileSize;
325 totalUncompressedFileSize += calculatedFileSize;
326
327 calculatedFileSize = 0;
328 calculatedUncompressedFileSize = 0;
329 cellDataElement = generatedDocument.createElement("td");
330 scriptList = webdeveloper_setScriptFileSizes(webdeveloper_tidyScripts(scriptList)).sort(webdeveloper_sortScriptsByFileSize);
331 scriptLength = scriptList.length;
332 tableRowElement = generatedDocument.createElement("tr");
333
334 cellDataElement.setAttribute("class", "pivot");
335 tableRowElement.appendChild(cellDataElement);
336
337 cellDataElement = generatedDocument.createElement("td");
338
339 // If there is one script
340 if(scriptLength == 1)
341 {
342 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_scripts") + " (" + scriptLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")"));
343 }
344 else
345 {
346 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_scripts") + " (" + scriptLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")"));
347 }
348
349 tableRowElement.appendChild(cellDataElement);
350
351 totalCellDataElement = generatedDocument.createElement("td");
352
353 totalCellDataElement.setAttribute("class", "size");
354 tableRowElement.appendChild(totalCellDataElement);
355 tableRowElement.setAttribute("class", "collapsed");
356 tableElement.appendChild(tableRowElement);
357
358 // Loop through the scripts
359 for(i = 0; i < scriptLength; i++)
360 {
361 cellDataElement = generatedDocument.createElement("td");
362 linkElement = generatedDocument.createElement("a");
363 scriptElement = scriptList[i];
364 src = scriptElement.src;
365 fileSize = scriptElement.fileSize;
366 tableRowElement = generatedDocument.createElement("tr");
367 uncompressedFileSize = scriptElement.uncompressedFileSize;
368
369 // If the file size is set
370 if(fileSize)
371 {
372 calculatedFileSize += fileSize;
373 }
374
375 // If the uncompressed file size is set and different from the file size
376 if(uncompressedFileSize && uncompressedFileSize != fileSize)
377 {
378 calculatedUncompressedFileSize += uncompressedFileSize;
379 }
380 else
381 {
382 calculatedUncompressedFileSize += fileSize;
383 }
384
385 // If this is an even row
386 if(i % 2 == 0)
387 {
388 tableRowElement.setAttribute("class", "hidden shaded");
389 }
390 else
391 {
392 tableRowElement.setAttribute("class", "hidden");
393 }
394
395 cellDataElement.setAttribute("class", "indent");
396 tableRowElement.appendChild(cellDataElement);
397
398 cellDataElement = generatedDocument.createElement("td");
399
400 linkElement.setAttribute("href", src);
401 linkElement.appendChild(generatedDocument.createTextNode(src));
402 cellDataElement.appendChild(linkElement);
403 tableRowElement.appendChild(cellDataElement);
404
405 cellDataElement = generatedDocument.createElement("td");
406
407 cellDataElement.setAttribute("class", "size");
408
409 // If the uncompressed file size is set and different from the file size
410 if(uncompressedFileSize && uncompressedFileSize != fileSize)
411 {
412 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize) + " (" + webdeveloper_formatFileSize(uncompressedFileSize) + " " + uncompressedLabel + ")"));
413 }
414 else
415 {
416 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize)));
417 }
418
419 tableRowElement.appendChild(cellDataElement);
420 tableElement.appendChild(tableRowElement);
421 }
422
423 // If the calculated file size and calculated uncompressed file size are set and different
424 if(calculatedFileSize && calculatedUncompressedFileSize && calculatedFileSize != calculatedUncompressedFileSize)
425 {
426 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize) + " " + uncompressedLabel + ")"));
427 }
428 else
429 {
430 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize)));
431 }
432
433 totalFileSize += calculatedFileSize;
434 totalUncompressedFileSize += calculatedUncompressedFileSize;
435
436 calculatedFileSize = 0;
437 calculatedUncompressedFileSize = 0;
438 cellDataElement = generatedDocument.createElement("td");
439 styleSheetList = webdeveloper_setStyleSheetFileSizes(webdeveloper_tidyStyleSheets(styleSheetList)).sort(webdeveloper_sortStyleSheetsByFileSize);
440 styleSheetLength = styleSheetList.length;
441 tableRowElement = generatedDocument.createElement("tr");
442
443 cellDataElement.setAttribute("class", "pivot");
444 tableRowElement.appendChild(cellDataElement);
445
446 cellDataElement = generatedDocument.createElement("td");
447
448 // If there is one style sheet
449 if(styleSheetLength == 1)
450 {
451 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_styleSheets") + " (" + styleSheetLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")"));
452 }
453 else
454 {
455 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_styleSheets") + " (" + styleSheetLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")"));
456 }
457
458 tableRowElement.appendChild(cellDataElement);
459
460 totalCellDataElement = generatedDocument.createElement("td");
461
462 totalCellDataElement.setAttribute("class", "size");
463 tableRowElement.appendChild(totalCellDataElement);
464 tableRowElement.setAttribute("class", "collapsed");
465 tableElement.appendChild(tableRowElement);
466
467 // Loop through the style sheets
468 for(i = 0; i < styleSheetLength; i++)
469 {
470 cellDataElement = generatedDocument.createElement("td");
471 linkElement = generatedDocument.createElement("a");
472 styleSheet = styleSheetList[i];
473 src = styleSheet.href;
474 fileSize = styleSheet.fileSize;
475 tableRowElement = generatedDocument.createElement("tr");
476 uncompressedFileSize = styleSheet.uncompressedFileSize;
477
478 // If the file size is set
479 if(fileSize)
480 {
481 calculatedFileSize += fileSize;
482 }
483
484 // If the uncompressed file size is set and different from the file size
485 if(uncompressedFileSize && uncompressedFileSize != fileSize)
486 {
487 calculatedUncompressedFileSize += uncompressedFileSize;
488 }
489 else
490 {
491 calculatedUncompressedFileSize += fileSize;
492 }
493
494 // If this is an even row
495 if(i % 2 == 0)
496 {
497 tableRowElement.setAttribute("class", "hidden shaded");
498 }
499 else
500 {
501 tableRowElement.setAttribute("class", "hidden");
502 }
503
504 cellDataElement.setAttribute("class", "indent");
505 tableRowElement.appendChild(cellDataElement);
506
507 cellDataElement = generatedDocument.createElement("td");
508
509 linkElement.setAttribute("href", src);
510 linkElement.appendChild(generatedDocument.createTextNode(src));
511 cellDataElement.appendChild(linkElement);
512 tableRowElement.appendChild(cellDataElement);
513
514 cellDataElement = generatedDocument.createElement("td");
515
516 cellDataElement.setAttribute("class", "size");
517
518 // If the uncompressed file size is set and different from the file size
519 if(uncompressedFileSize && uncompressedFileSize != fileSize)
520 {
521 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize) + " (" + webdeveloper_formatFileSize(uncompressedFileSize) + " " + uncompressedLabel + ")"));
522 }
523 else
524 {
525 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize)));
526 }
527
528 tableRowElement.appendChild(cellDataElement);
529 tableElement.appendChild(tableRowElement);
530 }
531
532 // If the calculated file size and calculated uncompressed file size are set and different
533 if(calculatedFileSize && calculatedUncompressedFileSize && calculatedFileSize != calculatedUncompressedFileSize)
534 {
535 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize) + " " + uncompressedLabel + ")"));
536 }
537 else
538 {
539 totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize)));
540 }
541
542 totalFileSize += calculatedFileSize;
543 totalUncompressedFileSize += calculatedUncompressedFileSize;
544
545 cellDataElement = generatedDocument.createElement("td");
546 tableRowElement = generatedDocument.createElement("tr");
547
548 cellDataElement.setAttribute("class", "total-indent");
549 tableRowElement.setAttribute("class", "total");
550 tableRowElement.appendChild(cellDataElement);
551
552 cellDataElement = generatedDocument.createElement("td");
553
554 cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_total")));
555 tableRowElement.appendChild(cellDataElement);
556
557 cellDataElement = generatedDocument.createElement("td");
558
559 cellDataElement.setAttribute("class", "size");
560
561 // If the total file size and total uncompressed file size are set and different
562 if(totalFileSize && totalUncompressedFileSize && totalFileSize != totalUncompressedFileSize)
563 {
564 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(totalFileSize) + " (" + webdeveloper_formatFileSize(totalUncompressedFileSize) + " " + uncompressedLabel + ")"));
565 }
566 else
567 {
568 cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(totalFileSize)));
569 }
570
571 tableRowElement.appendChild(cellDataElement);
572 tableElement.appendChild(tableRowElement);
573 bodyElement.appendChild(tableElement);
574
575 scriptElement = generatedDocument.createElement("script");
576
577 scriptElement.setAttribute("defer", "defer");
578 scriptElement.setAttribute("src", "chrome://webdeveloper/content/common/xpath.js");
579 scriptElement.setAttribute("type", "text/javascript");
580 headElement.appendChild(scriptElement);
581
582 scriptElement = generatedDocument.createElement("script");
583
584 scriptElement.setAttribute("defer", "defer");
585 scriptElement.setAttribute("src", "chrome://webdeveloper/content/generated/table_pivot.js");
586 scriptElement.setAttribute("type", "text/javascript");
587 headElement.appendChild(scriptElement);
588
589 // If the open tabs in background preference is set to true
590 if(webdeveloper_getBooleanPreference("webdeveloper.open.tabs.background", true))
591 {
592 getBrowser().selectedTab = oldTab;
593 }
594 }