1 // Displays the size of the page
2 function webdeveloper_viewDocumentSize()
4 var calculatedFileSize
= 0;
5 var calculatedUncompressedFileSize
= 0;
6 var countCellDataElement
= null;
8 var documentList
= webdeveloper_tidyDocuments(webdeveloper_getDocuments(webdeveloper_getContentWindow())).sort(webdeveloper_sortDocumentsByFileSize
);
9 var documentLength
= documentList
.length
;
10 var documentURL
= 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");
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();
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;
44 generatedDocument
.title
= title
;
46 webdeveloper_addGeneratedStyles(generatedDocument
);
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
);
53 headerElement
.appendChild(generatedDocument
.createTextNode(title
));
54 bodyElement
.appendChild(headerElement
);
56 cellDataElement
.setAttribute("class", "pivot");
57 tableRowElement
.appendChild(cellDataElement
);
59 countCellDataElement
= generatedDocument
.createElement("td");
61 tableRowElement
.appendChild(countCellDataElement
);
63 totalCellDataElement
= generatedDocument
.createElement("td");
65 totalCellDataElement
.setAttribute("class", "size");
66 tableRowElement
.appendChild(totalCellDataElement
);
67 tableRowElement
.setAttribute("class", "collapsed");
68 tableElement
.appendChild(tableRowElement
);
70 // Loop through the documents
71 for(var i
= 0; i
< documentLength
; i
++)
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));
80 // If the document is not in the image and object lists
81 if(!webdeveloper_mediaArrayContains(imageList
, documentURL
) && !webdeveloper_mediaArrayContains(objectList
, documentURL
))
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
);
91 // If the file size is set
94 calculatedFileSize
+= fileSize
;
97 // If the uncompressed file size is set and different from the file size
98 if(uncompressedFileSize
&& uncompressedFileSize
!= fileSize
)
100 calculatedUncompressedFileSize
+= uncompressedFileSize
;
104 calculatedUncompressedFileSize
+= fileSize
;
107 // If this is an even row
110 tableRowElement
.setAttribute("class", "hidden shaded");
114 tableRowElement
.setAttribute("class", "hidden");
117 cellDataElement
.setAttribute("class", "indent");
118 tableRowElement
.appendChild(cellDataElement
);
120 cellDataElement
= generatedDocument
.createElement("td");
122 linkElement
.setAttribute("href", documentURL
);
123 linkElement
.appendChild(generatedDocument
.createTextNode(documentURL
));
124 cellDataElement
.appendChild(linkElement
);
125 tableRowElement
.appendChild(cellDataElement
);
127 cellDataElement
= generatedDocument
.createElement("td");
129 cellDataElement
.setAttribute("class", "size");
131 // If the uncompressed file size is set and different from the file size
132 if(uncompressedFileSize
&& uncompressedFileSize
!= fileSize
)
134 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
) + " (" + webdeveloper_formatFileSize(uncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
138 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
)));
141 tableRowElement
.appendChild(cellDataElement
);
142 tableElement
.appendChild(tableRowElement
);
146 // If there is one document
147 if(documentCount
== 1)
149 countCellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_documents") + " (" + documentCount
+ " " + stringBundle
.getString("webdeveloper_file").toLowerCase() + ")"));
153 countCellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_documents") + " (" + documentCount
+ " " + stringBundle
.getString("webdeveloper_files").toLowerCase() + ")"));
156 // If the calculated file size and calculated uncompressed file size are set and different
157 if(calculatedFileSize
&& calculatedUncompressedFileSize
&& calculatedFileSize
!= calculatedUncompressedFileSize
)
159 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
163 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
)));
166 totalFileSize
+= calculatedFileSize
;
167 totalUncompressedFileSize
+= calculatedUncompressedFileSize
;
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");
175 cellDataElement
.setAttribute("class", "pivot");
176 tableRowElement
.appendChild(cellDataElement
);
178 cellDataElement
= generatedDocument
.createElement("td");
180 // If there is one image
183 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_images") + " (" + imageLength
+ " " + stringBundle
.getString("webdeveloper_file").toLowerCase() + ")"));
187 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_images") + " (" + imageLength
+ " " + stringBundle
.getString("webdeveloper_files").toLowerCase() + ")"));
190 tableRowElement
.appendChild(cellDataElement
);
192 totalCellDataElement
= generatedDocument
.createElement("td");
194 totalCellDataElement
.setAttribute("class", "size");
195 tableRowElement
.appendChild(totalCellDataElement
);
196 tableRowElement
.setAttribute("class", "collapsed");
197 tableElement
.appendChild(tableRowElement
);
199 // Loop through the images
200 for(i
= 0; i
< imageLength
; i
++)
202 cellDataElement
= generatedDocument
.createElement("td");
203 image
= imageList
[i
];
204 linkElement
= generatedDocument
.createElement("a");
206 fileSize
= image
.fileSize
;
207 tableRowElement
= generatedDocument
.createElement("tr");
209 // If the file size is set
212 calculatedFileSize
+= fileSize
;
215 // If this is an even row
218 tableRowElement
.setAttribute("class", "hidden shaded");
222 tableRowElement
.setAttribute("class", "hidden");
225 cellDataElement
.setAttribute("class", "indent");
226 tableRowElement
.appendChild(cellDataElement
);
228 cellDataElement
= generatedDocument
.createElement("td");
230 linkElement
.setAttribute("href", src
);
231 linkElement
.appendChild(generatedDocument
.createTextNode(src
));
232 cellDataElement
.appendChild(linkElement
);
233 tableRowElement
.appendChild(cellDataElement
);
235 cellDataElement
= generatedDocument
.createElement("td");
237 cellDataElement
.setAttribute("class", "size");
238 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
)));
239 tableRowElement
.appendChild(cellDataElement
);
240 tableElement
.appendChild(tableRowElement
);
243 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
)));
245 totalFileSize
+= calculatedFileSize
;
246 totalUncompressedFileSize
+= calculatedFileSize
;
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");
254 cellDataElement
.setAttribute("class", "pivot");
255 tableRowElement
.appendChild(cellDataElement
);
257 cellDataElement
= generatedDocument
.createElement("td");
259 // If there is one object
260 if(objectLength
== 1)
262 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_objects") + " (" + objectLength
+ " " + stringBundle
.getString("webdeveloper_file").toLowerCase() + ")"));
266 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_objects") + " (" + objectLength
+ " " + stringBundle
.getString("webdeveloper_files").toLowerCase() + ")"));
269 tableRowElement
.appendChild(cellDataElement
);
271 totalCellDataElement
= generatedDocument
.createElement("td");
273 totalCellDataElement
.setAttribute("class", "size");
274 tableRowElement
.appendChild(totalCellDataElement
);
275 tableRowElement
.setAttribute("class", "collapsed");
276 tableElement
.appendChild(tableRowElement
);
278 // Loop through the objects
279 for(i
= 0; i
< objectLength
; i
++)
281 cellDataElement
= generatedDocument
.createElement("td");
282 linkElement
= generatedDocument
.createElement("a");
283 object
= objectList
[i
];
285 fileSize
= object
.fileSize
;
286 tableRowElement
= generatedDocument
.createElement("tr");
288 // If the file size is set
291 calculatedFileSize
+= fileSize
;
294 // If this is an even row
297 tableRowElement
.setAttribute("class", "hidden shaded");
301 tableRowElement
.setAttribute("class", "hidden");
304 cellDataElement
.setAttribute("class", "indent");
305 tableRowElement
.appendChild(cellDataElement
);
307 cellDataElement
= generatedDocument
.createElement("td");
309 linkElement
.setAttribute("href", src
);
310 linkElement
.appendChild(generatedDocument
.createTextNode(src
));
311 cellDataElement
.appendChild(linkElement
);
312 tableRowElement
.appendChild(cellDataElement
);
314 cellDataElement
= generatedDocument
.createElement("td");
316 cellDataElement
.setAttribute("class", "size");
317 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
)));
318 tableRowElement
.appendChild(cellDataElement
);
319 tableElement
.appendChild(tableRowElement
);
322 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
)));
324 totalFileSize
+= calculatedFileSize
;
325 totalUncompressedFileSize
+= calculatedFileSize
;
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");
334 cellDataElement
.setAttribute("class", "pivot");
335 tableRowElement
.appendChild(cellDataElement
);
337 cellDataElement
= generatedDocument
.createElement("td");
339 // If there is one script
340 if(scriptLength
== 1)
342 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_scripts") + " (" + scriptLength
+ " " + stringBundle
.getString("webdeveloper_file").toLowerCase() + ")"));
346 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_scripts") + " (" + scriptLength
+ " " + stringBundle
.getString("webdeveloper_files").toLowerCase() + ")"));
349 tableRowElement
.appendChild(cellDataElement
);
351 totalCellDataElement
= generatedDocument
.createElement("td");
353 totalCellDataElement
.setAttribute("class", "size");
354 tableRowElement
.appendChild(totalCellDataElement
);
355 tableRowElement
.setAttribute("class", "collapsed");
356 tableElement
.appendChild(tableRowElement
);
358 // Loop through the scripts
359 for(i
= 0; i
< scriptLength
; i
++)
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
;
369 // If the file size is set
372 calculatedFileSize
+= fileSize
;
375 // If the uncompressed file size is set and different from the file size
376 if(uncompressedFileSize
&& uncompressedFileSize
!= fileSize
)
378 calculatedUncompressedFileSize
+= uncompressedFileSize
;
382 calculatedUncompressedFileSize
+= fileSize
;
385 // If this is an even row
388 tableRowElement
.setAttribute("class", "hidden shaded");
392 tableRowElement
.setAttribute("class", "hidden");
395 cellDataElement
.setAttribute("class", "indent");
396 tableRowElement
.appendChild(cellDataElement
);
398 cellDataElement
= generatedDocument
.createElement("td");
400 linkElement
.setAttribute("href", src
);
401 linkElement
.appendChild(generatedDocument
.createTextNode(src
));
402 cellDataElement
.appendChild(linkElement
);
403 tableRowElement
.appendChild(cellDataElement
);
405 cellDataElement
= generatedDocument
.createElement("td");
407 cellDataElement
.setAttribute("class", "size");
409 // If the uncompressed file size is set and different from the file size
410 if(uncompressedFileSize
&& uncompressedFileSize
!= fileSize
)
412 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
) + " (" + webdeveloper_formatFileSize(uncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
416 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
)));
419 tableRowElement
.appendChild(cellDataElement
);
420 tableElement
.appendChild(tableRowElement
);
423 // If the calculated file size and calculated uncompressed file size are set and different
424 if(calculatedFileSize
&& calculatedUncompressedFileSize
&& calculatedFileSize
!= calculatedUncompressedFileSize
)
426 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
430 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
)));
433 totalFileSize
+= calculatedFileSize
;
434 totalUncompressedFileSize
+= calculatedUncompressedFileSize
;
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");
443 cellDataElement
.setAttribute("class", "pivot");
444 tableRowElement
.appendChild(cellDataElement
);
446 cellDataElement
= generatedDocument
.createElement("td");
448 // If there is one style sheet
449 if(styleSheetLength
== 1)
451 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_styleSheets") + " (" + styleSheetLength
+ " " + stringBundle
.getString("webdeveloper_file").toLowerCase() + ")"));
455 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_styleSheets") + " (" + styleSheetLength
+ " " + stringBundle
.getString("webdeveloper_files").toLowerCase() + ")"));
458 tableRowElement
.appendChild(cellDataElement
);
460 totalCellDataElement
= generatedDocument
.createElement("td");
462 totalCellDataElement
.setAttribute("class", "size");
463 tableRowElement
.appendChild(totalCellDataElement
);
464 tableRowElement
.setAttribute("class", "collapsed");
465 tableElement
.appendChild(tableRowElement
);
467 // Loop through the style sheets
468 for(i
= 0; i
< styleSheetLength
; i
++)
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
;
478 // If the file size is set
481 calculatedFileSize
+= fileSize
;
484 // If the uncompressed file size is set and different from the file size
485 if(uncompressedFileSize
&& uncompressedFileSize
!= fileSize
)
487 calculatedUncompressedFileSize
+= uncompressedFileSize
;
491 calculatedUncompressedFileSize
+= fileSize
;
494 // If this is an even row
497 tableRowElement
.setAttribute("class", "hidden shaded");
501 tableRowElement
.setAttribute("class", "hidden");
504 cellDataElement
.setAttribute("class", "indent");
505 tableRowElement
.appendChild(cellDataElement
);
507 cellDataElement
= generatedDocument
.createElement("td");
509 linkElement
.setAttribute("href", src
);
510 linkElement
.appendChild(generatedDocument
.createTextNode(src
));
511 cellDataElement
.appendChild(linkElement
);
512 tableRowElement
.appendChild(cellDataElement
);
514 cellDataElement
= generatedDocument
.createElement("td");
516 cellDataElement
.setAttribute("class", "size");
518 // If the uncompressed file size is set and different from the file size
519 if(uncompressedFileSize
&& uncompressedFileSize
!= fileSize
)
521 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
) + " (" + webdeveloper_formatFileSize(uncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
525 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(fileSize
)));
528 tableRowElement
.appendChild(cellDataElement
);
529 tableElement
.appendChild(tableRowElement
);
532 // If the calculated file size and calculated uncompressed file size are set and different
533 if(calculatedFileSize
&& calculatedUncompressedFileSize
&& calculatedFileSize
!= calculatedUncompressedFileSize
)
535 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
539 totalCellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(calculatedFileSize
)));
542 totalFileSize
+= calculatedFileSize
;
543 totalUncompressedFileSize
+= calculatedUncompressedFileSize
;
545 cellDataElement
= generatedDocument
.createElement("td");
546 tableRowElement
= generatedDocument
.createElement("tr");
548 cellDataElement
.setAttribute("class", "total-indent");
549 tableRowElement
.setAttribute("class", "total");
550 tableRowElement
.appendChild(cellDataElement
);
552 cellDataElement
= generatedDocument
.createElement("td");
554 cellDataElement
.appendChild(generatedDocument
.createTextNode(stringBundle
.getString("webdeveloper_total")));
555 tableRowElement
.appendChild(cellDataElement
);
557 cellDataElement
= generatedDocument
.createElement("td");
559 cellDataElement
.setAttribute("class", "size");
561 // If the total file size and total uncompressed file size are set and different
562 if(totalFileSize
&& totalUncompressedFileSize
&& totalFileSize
!= totalUncompressedFileSize
)
564 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(totalFileSize
) + " (" + webdeveloper_formatFileSize(totalUncompressedFileSize
) + " " + uncompressedLabel
+ ")"));
568 cellDataElement
.appendChild(generatedDocument
.createTextNode(webdeveloper_formatFileSize(totalFileSize
)));
571 tableRowElement
.appendChild(cellDataElement
);
572 tableElement
.appendChild(tableRowElement
);
573 bodyElement
.appendChild(tableElement
);
575 scriptElement
= generatedDocument
.createElement("script");
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
);
582 scriptElement
= generatedDocument
.createElement("script");
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
);
589 // If the open tabs in background preference is set to true
590 if(webdeveloper_getBooleanPreference("webdeveloper.open.tabs.background", true))
592 getBrowser().selectedTab
= oldTab
;