diff --git a/mozilla/browser/base/content/pageInfo.js b/mozilla/browser/base/content/pageInfo.js index 98739d96b55..ec5a89b7b26 100644 --- a/mozilla/browser/base/content/pageInfo.js +++ b/mozilla/browser/base/content/pageInfo.js @@ -177,7 +177,7 @@ const COPYCOL_IMAGE_ADDRESS = 0; var metaView = new pageInfoTreeView(["meta-name","meta-content"], COPYCOL_META_CONTENT); var formView = new pageInfoTreeView(["form-name","form-method","form-action","form-node"], COPYCOL_FORM_ACTION); var fieldView = new pageInfoTreeView(["field-label","field-field","field-type","field-value"], COPYCOL_NONE); -var linkView = new pageInfoTreeView(["link-name","link-address","link-type"], COPYCOL_LINK_ADDRESS); +var linkView = new pageInfoTreeView(["link-name","link-address","link-type","link-accesskey"], COPYCOL_LINK_ADDRESS); var imageView = new pageInfoTreeView(["image-address","image-type","image-alt","image-node", "image-bg"], COPYCOL_IMAGE_ADDRESS); var intervalID = null; @@ -229,6 +229,9 @@ const nsIButtonElement = Components.interfaces.nsIDOMHTMLButtonElement const nsISelectElement = Components.interfaces.nsIDOMHTMLSelectElement const nsITextareaElement = Components.interfaces.nsIDOMHTMLTextAreaElement +// Interface for image loading content +const nsIImageLoadingContent = Components.interfaces.nsIImageLoadingContent; + // namespaces, don't need all of these yet... const XLinkNS = "http://www.w3.org/1999/xlink"; const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; @@ -486,20 +489,21 @@ function makeTabs(aDocument, aWindow) imageTree.treeBoxObject.view = imageView; var iterator = aDocument.createTreeWalker(aDocument, NodeFilter.SHOW_ELEMENT, grabAll, true); - - setTimeout(doGrab, 1, iterator, 0); + setTimeout(doGrab, 1, iterator); } -function doGrab(iterator, i) +function doGrab(iterator) { if (iterator.nextNode()) - setTimeout(doGrab, 1, iterator, i); + { + setTimeout(doGrab, 1, iterator); + } } function ensureSelection(view) { // only select something if nothing is currently selected - // and that there's something to select + // and if there's anything to select if (view.selection.count == 0 && view.rowCount) view.selection.select(0); } @@ -517,7 +521,7 @@ function grabAll(elem) if (elem instanceof nsIAnchorElement) { linktext = getValueText(elem); - linkView.addRow([linktext, getAbsoluteURL(elem.href, elem), gStrings.linkAnchor, elem.target]); + linkView.addRow([linktext, getAbsoluteURL(elem.href, elem), gStrings.linkAnchor, elem.target, elem.accessKey]); } else if (elem instanceof nsIImageElement) { @@ -628,15 +632,18 @@ function onFormSelect() var labels = form.getElementsByTagName("label"); var llength = labels.length; + var label; for (i = 0; i < llength; i++) { - var whatfor = labels[i].hasAttribute("for") ? - theDocument.getElementById(labels[i].getAttribute("for")) : - findFirstControl(labels[i]); + label = labels[i]; + var whatfor = label.hasAttribute("for") ? + theDocument.getElementById(label.getAttribute("for")) : + findFirstControl(label); - if (whatfor && (whatfor.form == form)) { - var labeltext = getValueText(labels[i]); + if (whatfor && (whatfor.form == form)) + { + var labeltext = getValueText(label); for (var j = 0; j < length; j++) if (formfields[j] == whatfor) fieldView.setCellText(j, "field-label", labeltext); @@ -722,9 +729,9 @@ function onBeginLinkDrag(event,urlField,descField) function getSource(item) { // Return the correct source without strict warnings - if (item.href != null) + if ("href" in item && item.href) return item.href; - if (item.src != null) + if ("src" in item && item.src) return item.src; return null; } @@ -848,30 +855,22 @@ function makePreview(row) } } - // find out the mime type, file size and expiration date - var mimeType = gStrings.unknown, httpType; + // find out the file size and expiration date if (cacheEntryDescriptor) { - var headers, match; - pageSize = cacheEntryDescriptor.dataSize; kbSize = pageSize / 1024; sizeText = theBundle.getFormattedString("generalSize", [Math.round(kbSize*100)/100, pageSize]); expirationText = formatDate(cacheEntryDescriptor.expirationTime*1000, gStrings.notSet); - - headers = cacheEntryDescriptor.getMetaDataElement("response-head"); - - match = /^Content-Type:\s*(.*?)\s*(?:\;|$)/mi.exec(headers); - if (match) - httpType = match[1]; } - if (!(item instanceof nsIInputElement)) - mimeType = ("type" in item && item.type) || - ("codeType" in item && item.codeType) || - ("contentType" in item && item.contentType) || - httpType || gStrings.unknown; + var mimeType = ("type" in item && item.type) || + ("codeType" in item && item.codeType) || + ("contentType" in item && item.contentType) || + getContentTypeFromImgRequest(item) || + getContentTypeFromHeaders(cacheEntryDescriptor) || + gStrings.unknown; document.getElementById("imagetypetext").value = mimeType; document.getElementById("imagesourcetext").value = sourceText; @@ -927,24 +926,62 @@ function makePreview(row) imageContainer.appendChild(newImage); } +function getContentTypeFromHeaders(cacheEntryDescriptor) +{ + var headers, match; + + if (cacheEntryDescriptor) + { + headers = cacheEntryDescriptor.getMetaDataElement("response-head"); + match = /^Content-Type:\s*(.*?)\s*(?:\;|$)/mi.exec(headers); + return match[1]; + } +} + +function getContentTypeFromImgRequest(item) +{ + var httpRequest; + + try + { + var imageItem = item.QueryInterface(nsIImageLoadingContent); + var imageRequest = imageItem.getRequest(nsIImageLoadingContent.CURRENT_REQUEST); + if (imageRequest) + httpRequest = imageRequest.mimeType; + } + catch (ex) + { + // This never happened. ;) + } + + return httpRequest; +} //******** Other Misc Stuff // Modified from the Links Panel v2.3, http://segment7.net/mozilla/links/links.html // parse a node to extract the contents of the node -// linkNode doesn't really _have_ to be link -function getValueText(linkNode) +function getValueText(node) { var valueText = ""; - - var length = linkNode.childNodes.length; + + // form input elements don't generally contain information that is useful to our callers, so return nothing + if (node instanceof nsIInputElement || node instanceof nsISelectElement || node instanceof nsITextareaElement) + return valueText; + + // otherwise recurse for each child + var length = node.childNodes.length; for (var i = 0; i < length; i++) { - var childNode = linkNode.childNodes[i]; + var childNode = node.childNodes[i]; var nodeType = childNode.nodeType; + + // text nodes are where the goods are if (nodeType == Node.TEXT_NODE) valueText += " " + childNode.nodeValue; + // and elements can have more text inside them else if (nodeType == Node.ELEMENT_NODE) { + // images are special, we want to capture the alt text as if the image weren't there if (childNode instanceof nsIImageElement) valueText += " " + getAltText(childNode); else diff --git a/mozilla/browser/base/content/pageInfo.xul b/mozilla/browser/base/content/pageInfo.xul index 54ae905dd2e..ab2eea5369e 100644 --- a/mozilla/browser/base/content/pageInfo.xul +++ b/mozilla/browser/base/content/pageInfo.xul @@ -215,6 +215,9 @@