X-Git-Url: http://git.euphorik.ch/?p=pompage.git;a=blobdiff_plain;f=doc%2Fwebdeveloper%2Ffeatures%2Fview_document_size.js;fp=doc%2Fwebdeveloper%2Ffeatures%2Fview_document_size.js;h=676eaf54f3ccef4cbae93379e15540bf2e3048ad;hp=0000000000000000000000000000000000000000;hb=c3b0deb3d8c9f439739c79806e915c29bc1d4b84;hpb=cff6539539a79e014f6ac8df46716cafce2c8472 diff --git a/doc/webdeveloper/features/view_document_size.js b/doc/webdeveloper/features/view_document_size.js new file mode 100644 index 0000000..676eaf5 --- /dev/null +++ b/doc/webdeveloper/features/view_document_size.js @@ -0,0 +1,594 @@ +// Displays the size of the page +function webdeveloper_viewDocumentSize() +{ + var calculatedFileSize = 0; + var calculatedUncompressedFileSize = 0; + var countCellDataElement = null; + var documentCount = 0; + var documentList = webdeveloper_tidyDocuments(webdeveloper_getDocuments(webdeveloper_getContentWindow())).sort(webdeveloper_sortDocumentsByFileSize); + var documentLength = documentList.length; + var documentURL = null; + var fileSize = 0; + var image = null; + var imageLength = null; + var imageList = new Array(); + var oldTab = getBrowser().selectedTab; + var oldURL = getBrowser().currentURI.spec; + var generatedDocument = webdeveloper_generateDocument(""); + var bodyElement = webdeveloper_getDocumentBodyElement(generatedDocument); + var cellDataElement = generatedDocument.createElement("td"); + var headElement = webdeveloper_getDocumentHeadElement(generatedDocument); + var headerElement = generatedDocument.createElement("h1"); + var linkElement = generatedDocument.createElement("link"); + var object = null; + var objectLength = null; + var objectList = new Array(); + var pageDocument = null; + var scriptElement = null; + var scriptLength = null; + var scriptList = new Array(); + var src = null; + var stringBundle = document.getElementById("webdeveloper-string-bundle"); + var styleSheet = null; + var styleSheetLength = null; + var styleSheetList = new Array(); + var tableElement = generatedDocument.createElement("table"); + var tableRowElement = generatedDocument.createElement("tr"); + var title = stringBundle.getFormattedString("webdeveloper_viewDocumentSizeTitle", [oldURL]); + var totalCellDataElement = null; + var totalFileSize = 0; + var totalUncompressedFileSize = 0; + var uncompressedLabel = stringBundle.getString("webdeveloper_uncompressed").toLowerCase(); + var uncompressedFileSize = 0; + + generatedDocument.title = title; + + webdeveloper_addGeneratedStyles(generatedDocument); + + linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated/view_document_size.css"); + linkElement.setAttribute("rel", "stylesheet"); + linkElement.setAttribute("type", "text/css"); + headElement.appendChild(linkElement); + + headerElement.appendChild(generatedDocument.createTextNode(title)); + bodyElement.appendChild(headerElement); + + cellDataElement.setAttribute("class", "pivot"); + tableRowElement.appendChild(cellDataElement); + + countCellDataElement = generatedDocument.createElement("td"); + + tableRowElement.appendChild(countCellDataElement); + + totalCellDataElement = generatedDocument.createElement("td"); + + totalCellDataElement.setAttribute("class", "size"); + tableRowElement.appendChild(totalCellDataElement); + tableRowElement.setAttribute("class", "collapsed"); + tableElement.appendChild(tableRowElement); + + // Loop through the documents + for(var i = 0; i < documentLength; i++) + { + pageDocument = documentList[i]; + documentURL = pageDocument.documentURI; + imageList = imageList.concat(webdeveloper_getImagesForDocument(pageDocument, true, true)); + objectList = objectList.concat(webdeveloper_getObjectsForDocument(pageDocument)); + scriptList = scriptList.concat(webdeveloper_getScriptsForDocument(pageDocument, false)); + styleSheetList = styleSheetList.concat(webdeveloper_getStyleSheetsForDocument(pageDocument, false, true)); + + // If the document is not in the image and object lists + if(!webdeveloper_mediaArrayContains(imageList, documentURL) && !webdeveloper_mediaArrayContains(objectList, documentURL)) + { + cellDataElement = generatedDocument.createElement("td"); + fileSize = webdeveloper_getFileSize(documentURL); + linkElement = generatedDocument.createElement("a"); + tableRowElement = generatedDocument.createElement("tr"); + uncompressedFileSize = webdeveloper_getUncompressedFileSize(documentURL); + + documentCount++; + + // If the file size is set + if(fileSize) + { + calculatedFileSize += fileSize; + } + + // If the uncompressed file size is set and different from the file size + if(uncompressedFileSize && uncompressedFileSize != fileSize) + { + calculatedUncompressedFileSize += uncompressedFileSize; + } + else + { + calculatedUncompressedFileSize += fileSize; + } + + // If this is an even row + if(i % 2 == 0) + { + tableRowElement.setAttribute("class", "hidden shaded"); + } + else + { + tableRowElement.setAttribute("class", "hidden"); + } + + cellDataElement.setAttribute("class", "indent"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + linkElement.setAttribute("href", documentURL); + linkElement.appendChild(generatedDocument.createTextNode(documentURL)); + cellDataElement.appendChild(linkElement); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.setAttribute("class", "size"); + + // If the uncompressed file size is set and different from the file size + if(uncompressedFileSize && uncompressedFileSize != fileSize) + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize) + " (" + webdeveloper_formatFileSize(uncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize))); + } + + tableRowElement.appendChild(cellDataElement); + tableElement.appendChild(tableRowElement); + } + } + + // If there is one document + if(documentCount == 1) + { + countCellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_documents") + " (" + documentCount + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")")); + } + else + { + countCellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_documents") + " (" + documentCount + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")")); + } + + // If the calculated file size and calculated uncompressed file size are set and different + if(calculatedFileSize && calculatedUncompressedFileSize && calculatedFileSize != calculatedUncompressedFileSize) + { + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize))); + } + + totalFileSize += calculatedFileSize; + totalUncompressedFileSize += calculatedUncompressedFileSize; + + calculatedFileSize = 0; + cellDataElement = generatedDocument.createElement("td"); + imageList = webdeveloper_setImageFileSizes(webdeveloper_tidyImages(imageList)).sort(webdeveloper_sortImagesByFileSize); + imageLength = imageList.length; + tableRowElement = generatedDocument.createElement("tr"); + + cellDataElement.setAttribute("class", "pivot"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + // If there is one image + if(imageLength == 1) + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_images") + " (" + imageLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_images") + " (" + imageLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")")); + } + + tableRowElement.appendChild(cellDataElement); + + totalCellDataElement = generatedDocument.createElement("td"); + + totalCellDataElement.setAttribute("class", "size"); + tableRowElement.appendChild(totalCellDataElement); + tableRowElement.setAttribute("class", "collapsed"); + tableElement.appendChild(tableRowElement); + + // Loop through the images + for(i = 0; i < imageLength; i++) + { + cellDataElement = generatedDocument.createElement("td"); + image = imageList[i]; + linkElement = generatedDocument.createElement("a"); + src = image.src; + fileSize = image.fileSize; + tableRowElement = generatedDocument.createElement("tr"); + + // If the file size is set + if(fileSize) + { + calculatedFileSize += fileSize; + } + + // If this is an even row + if(i % 2 == 0) + { + tableRowElement.setAttribute("class", "hidden shaded"); + } + else + { + tableRowElement.setAttribute("class", "hidden"); + } + + cellDataElement.setAttribute("class", "indent"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + linkElement.setAttribute("href", src); + linkElement.appendChild(generatedDocument.createTextNode(src)); + cellDataElement.appendChild(linkElement); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.setAttribute("class", "size"); + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize))); + tableRowElement.appendChild(cellDataElement); + tableElement.appendChild(tableRowElement); + } + + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize))); + + totalFileSize += calculatedFileSize; + totalUncompressedFileSize += calculatedFileSize; + + calculatedFileSize = 0; + cellDataElement = generatedDocument.createElement("td"); + objectList = webdeveloper_setScriptFileSizes(webdeveloper_tidyScripts(objectList)).sort(webdeveloper_sortScriptsByFileSize); + objectLength = objectList.length; + tableRowElement = generatedDocument.createElement("tr"); + + cellDataElement.setAttribute("class", "pivot"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + // If there is one object + if(objectLength == 1) + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_objects") + " (" + objectLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_objects") + " (" + objectLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")")); + } + + tableRowElement.appendChild(cellDataElement); + + totalCellDataElement = generatedDocument.createElement("td"); + + totalCellDataElement.setAttribute("class", "size"); + tableRowElement.appendChild(totalCellDataElement); + tableRowElement.setAttribute("class", "collapsed"); + tableElement.appendChild(tableRowElement); + + // Loop through the objects + for(i = 0; i < objectLength; i++) + { + cellDataElement = generatedDocument.createElement("td"); + linkElement = generatedDocument.createElement("a"); + object = objectList[i]; + src = object.src; + fileSize = object.fileSize; + tableRowElement = generatedDocument.createElement("tr"); + + // If the file size is set + if(fileSize) + { + calculatedFileSize += fileSize; + } + + // If this is an even row + if(i % 2 == 0) + { + tableRowElement.setAttribute("class", "hidden shaded"); + } + else + { + tableRowElement.setAttribute("class", "hidden"); + } + + cellDataElement.setAttribute("class", "indent"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + linkElement.setAttribute("href", src); + linkElement.appendChild(generatedDocument.createTextNode(src)); + cellDataElement.appendChild(linkElement); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.setAttribute("class", "size"); + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize))); + tableRowElement.appendChild(cellDataElement); + tableElement.appendChild(tableRowElement); + } + + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize))); + + totalFileSize += calculatedFileSize; + totalUncompressedFileSize += calculatedFileSize; + + calculatedFileSize = 0; + calculatedUncompressedFileSize = 0; + cellDataElement = generatedDocument.createElement("td"); + scriptList = webdeveloper_setScriptFileSizes(webdeveloper_tidyScripts(scriptList)).sort(webdeveloper_sortScriptsByFileSize); + scriptLength = scriptList.length; + tableRowElement = generatedDocument.createElement("tr"); + + cellDataElement.setAttribute("class", "pivot"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + // If there is one script + if(scriptLength == 1) + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_scripts") + " (" + scriptLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_scripts") + " (" + scriptLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")")); + } + + tableRowElement.appendChild(cellDataElement); + + totalCellDataElement = generatedDocument.createElement("td"); + + totalCellDataElement.setAttribute("class", "size"); + tableRowElement.appendChild(totalCellDataElement); + tableRowElement.setAttribute("class", "collapsed"); + tableElement.appendChild(tableRowElement); + + // Loop through the scripts + for(i = 0; i < scriptLength; i++) + { + cellDataElement = generatedDocument.createElement("td"); + linkElement = generatedDocument.createElement("a"); + scriptElement = scriptList[i]; + src = scriptElement.src; + fileSize = scriptElement.fileSize; + tableRowElement = generatedDocument.createElement("tr"); + uncompressedFileSize = scriptElement.uncompressedFileSize; + + // If the file size is set + if(fileSize) + { + calculatedFileSize += fileSize; + } + + // If the uncompressed file size is set and different from the file size + if(uncompressedFileSize && uncompressedFileSize != fileSize) + { + calculatedUncompressedFileSize += uncompressedFileSize; + } + else + { + calculatedUncompressedFileSize += fileSize; + } + + // If this is an even row + if(i % 2 == 0) + { + tableRowElement.setAttribute("class", "hidden shaded"); + } + else + { + tableRowElement.setAttribute("class", "hidden"); + } + + cellDataElement.setAttribute("class", "indent"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + linkElement.setAttribute("href", src); + linkElement.appendChild(generatedDocument.createTextNode(src)); + cellDataElement.appendChild(linkElement); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.setAttribute("class", "size"); + + // If the uncompressed file size is set and different from the file size + if(uncompressedFileSize && uncompressedFileSize != fileSize) + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize) + " (" + webdeveloper_formatFileSize(uncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize))); + } + + tableRowElement.appendChild(cellDataElement); + tableElement.appendChild(tableRowElement); + } + + // If the calculated file size and calculated uncompressed file size are set and different + if(calculatedFileSize && calculatedUncompressedFileSize && calculatedFileSize != calculatedUncompressedFileSize) + { + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize))); + } + + totalFileSize += calculatedFileSize; + totalUncompressedFileSize += calculatedUncompressedFileSize; + + calculatedFileSize = 0; + calculatedUncompressedFileSize = 0; + cellDataElement = generatedDocument.createElement("td"); + styleSheetList = webdeveloper_setStyleSheetFileSizes(webdeveloper_tidyStyleSheets(styleSheetList)).sort(webdeveloper_sortStyleSheetsByFileSize); + styleSheetLength = styleSheetList.length; + tableRowElement = generatedDocument.createElement("tr"); + + cellDataElement.setAttribute("class", "pivot"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + // If there is one style sheet + if(styleSheetLength == 1) + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_styleSheets") + " (" + styleSheetLength + " " + stringBundle.getString("webdeveloper_file").toLowerCase() + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_styleSheets") + " (" + styleSheetLength + " " + stringBundle.getString("webdeveloper_files").toLowerCase() + ")")); + } + + tableRowElement.appendChild(cellDataElement); + + totalCellDataElement = generatedDocument.createElement("td"); + + totalCellDataElement.setAttribute("class", "size"); + tableRowElement.appendChild(totalCellDataElement); + tableRowElement.setAttribute("class", "collapsed"); + tableElement.appendChild(tableRowElement); + + // Loop through the style sheets + for(i = 0; i < styleSheetLength; i++) + { + cellDataElement = generatedDocument.createElement("td"); + linkElement = generatedDocument.createElement("a"); + styleSheet = styleSheetList[i]; + src = styleSheet.href; + fileSize = styleSheet.fileSize; + tableRowElement = generatedDocument.createElement("tr"); + uncompressedFileSize = styleSheet.uncompressedFileSize; + + // If the file size is set + if(fileSize) + { + calculatedFileSize += fileSize; + } + + // If the uncompressed file size is set and different from the file size + if(uncompressedFileSize && uncompressedFileSize != fileSize) + { + calculatedUncompressedFileSize += uncompressedFileSize; + } + else + { + calculatedUncompressedFileSize += fileSize; + } + + // If this is an even row + if(i % 2 == 0) + { + tableRowElement.setAttribute("class", "hidden shaded"); + } + else + { + tableRowElement.setAttribute("class", "hidden"); + } + + cellDataElement.setAttribute("class", "indent"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + linkElement.setAttribute("href", src); + linkElement.appendChild(generatedDocument.createTextNode(src)); + cellDataElement.appendChild(linkElement); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.setAttribute("class", "size"); + + // If the uncompressed file size is set and different from the file size + if(uncompressedFileSize && uncompressedFileSize != fileSize) + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize) + " (" + webdeveloper_formatFileSize(uncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(fileSize))); + } + + tableRowElement.appendChild(cellDataElement); + tableElement.appendChild(tableRowElement); + } + + // If the calculated file size and calculated uncompressed file size are set and different + if(calculatedFileSize && calculatedUncompressedFileSize && calculatedFileSize != calculatedUncompressedFileSize) + { + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize) + " (" + webdeveloper_formatFileSize(calculatedUncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + totalCellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(calculatedFileSize))); + } + + totalFileSize += calculatedFileSize; + totalUncompressedFileSize += calculatedUncompressedFileSize; + + cellDataElement = generatedDocument.createElement("td"); + tableRowElement = generatedDocument.createElement("tr"); + + cellDataElement.setAttribute("class", "total-indent"); + tableRowElement.setAttribute("class", "total"); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_total"))); + tableRowElement.appendChild(cellDataElement); + + cellDataElement = generatedDocument.createElement("td"); + + cellDataElement.setAttribute("class", "size"); + + // If the total file size and total uncompressed file size are set and different + if(totalFileSize && totalUncompressedFileSize && totalFileSize != totalUncompressedFileSize) + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(totalFileSize) + " (" + webdeveloper_formatFileSize(totalUncompressedFileSize) + " " + uncompressedLabel + ")")); + } + else + { + cellDataElement.appendChild(generatedDocument.createTextNode(webdeveloper_formatFileSize(totalFileSize))); + } + + tableRowElement.appendChild(cellDataElement); + tableElement.appendChild(tableRowElement); + bodyElement.appendChild(tableElement); + + scriptElement = generatedDocument.createElement("script"); + + scriptElement.setAttribute("defer", "defer"); + scriptElement.setAttribute("src", "chrome://webdeveloper/content/common/xpath.js"); + scriptElement.setAttribute("type", "text/javascript"); + headElement.appendChild(scriptElement); + + scriptElement = generatedDocument.createElement("script"); + + scriptElement.setAttribute("defer", "defer"); + scriptElement.setAttribute("src", "chrome://webdeveloper/content/generated/table_pivot.js"); + scriptElement.setAttribute("type", "text/javascript"); + headElement.appendChild(scriptElement); + + // If the open tabs in background preference is set to true + if(webdeveloper_getBooleanPreference("webdeveloper.open.tabs.background", true)) + { + getBrowser().selectedTab = oldTab; + } +}