Closed Bug 201129 Opened 22 years ago Closed 6 years ago

DOM Node viewer doesn't support all node types

Categories

(Other Applications :: DOM Inspector, defect)

x86
Windows 98
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED INCOMPLETE

People

(Reporter: WeirdAl, Unassigned)

References

()

Details

Attachments

(1 file, 7 obsolete files)

While examining issues for bug 156072, I discovered the DOM Node viewer doesn't handle the various node types very well. It has a panel for Element nodes, and dumps every other node type into a Text node panel. This works for several node types, but not all. ELEMENT_NODE ok ATTRIBUTE_NODE n/a TEXT_NODE ok CDATA_SECTION_NODE ok ENTITY_REFERENCE_NODE n/a ENTITY_NODE n/a PROCESSING_INSTRUCTION_NODE broken COMMENT_NODE ok DOCUMENT_NODE broken DOCUMENT_TYPE_NODE broken DOCUMENT_FRAGMENT_NODE n/a (probably) NOTATION_NODE n/a The fix will be fairly simple, and will convert to using deck.selectedPanel instead of deck.selectedIndex to set the correct node type display.
Attached patch patch, v1 (obsolete) — Splinter Review
Lots of new views, particularly for Document and DocumentType. For Document, I specifically added the option of HTMLDocument, NSHTMLDocument, and XULDocument-specific information. Should be nice. About the only consideration I'm unsure of what to put in the panel when I have an XMLDocument with no doctype (typical for XUL documents). Right now it just shows a blank panel.
Attachment #120148 - Flags: superreview?(bzbarsky)
Attachment #120148 - Flags: review?(timeless)
Alex tells me this patch makes it so the "Node Type" textbox only appears for Element nodes. It should either be removed from Element's DOM Node panel, or it should be added to the other DOM Node panels. I think it would be best to add "Node Type" to all DOM Node panels, even though the left panel uses different colors for different node types, because * Not everyone knows that the colors indicate different node types. * Not everyone knows what each color means. * Accessibility (don't rely on color alone). * It would make it clear why the rest of the panel looks so different for Text nodes and Element nodes. The textbox should show a name ("ELEMENT_NODE", etc) in addition to or instead of a number ("1", etc).
Attached patch patch, v2 (obsolete) — Splinter Review
bz came up with nsINSHTMLDocument for a few features for generic documents. Included here. I disagree with jruderman in his suggestion for adding node type entries to each field; there's a node type column available in the left panel under DOM Nodes (dom.xul). I simply removed the node type and node value fields for Element (elements have null node values).
Attachment #120148 - Attachment is obsolete: true
Attachment #121603 - Flags: superreview?(bzbarsky)
Attachment #121603 - Flags: review?(caillon)
Attachment #120148 - Flags: superreview?(bzbarsky)
Attachment #120148 - Flags: review?(timeless)
Alex: the nodeType column is not shown by default and shows a number rather than a name. Also, showing multiple columns in a deeply nested tree tends to suck (cf bug 201832). An ugly, non-default option is not a good excuse for lack of clarity in the default setup.
Note that I've always been opposed to displaying integers in the nodeType column. See bug 113793 to which I finally caved in. I might retract that now since I do agree that the constants are much more usable than integers. Maybe a new bug for that would be in order?
Comment on attachment 121603 [details] [diff] [review] patch, v2 Alex, can you please clean this patch up by actually removing stuff you are commenting out? You have quite a few places with that stuff going on. I also agree with jesse in that we should be consistent. Either show it or not for all elements. I lean toward showing because whether or not they are null, all nodes are expected to have a nodeValue.
Attachment #121603 - Flags: superreview?(bzbarsky)
Attachment #121603 - Flags: review?(caillon)
Attached patch patch, v2.1 (obsolete) — Splinter Review
answering caillon's and jruderman's concerns.
Attachment #121603 - Attachment is obsolete: true
Attachment #122329 - Flags: superreview?(bryner)
Attachment #122329 - Flags: review?(caillon)
Comment on attachment 122329 [details] [diff] [review] patch, v2.1 For some reason, the text of the caption elements isn't showing through. Oops. >+ <vbox id="bxDocument" scroll="vertical"> >+ <groupbox id="document_doctype"> >+ <caption>Document Type</caption> + <caption label="Document Type"/> >+ </groupbox> >+ >+ <groupbox id="document_all"> >+ <caption>Basic Document Information</caption> + <caption label="Basic Document Information"/> ... >+ <groupbox id="document_HTML" display="none"> >+ <caption>HTML Document Features</caption> + <caption label="HTML Document Features"/> ... >+ <groupbox id="document_XUL" display="none"> >+ <caption>XUL Document Features</caption> + <caption label="XUL Document Features"/>
I'm not clear on what your last comment means -- did you find a problem with your most recent patch, or is it ready for review?
Just a tiny boo-boo. The patch is ready for review; the amendment above is minor enough where I didn't think it appropriate to post another attachment. (Chris has lectured me about bugs I am assigned to, with several attachments.)
Comment on attachment 122329 [details] [diff] [review] patch, v2.1 This needs to be localized
Attachment #122329 - Flags: superreview?(bryner)
Attachment #122329 - Flags: review?(caillon)
Attachment #122329 - Flags: review-
Attached patch patch, v2.2 (obsolete) — Splinter Review
Localized. Also a couple minor tweaks.
Attachment #122329 - Attachment is obsolete: true
Attachment #125982 - Flags: review?(caillon)
Attached patch patch, v2.3 (obsolete) — Splinter Review
CVS-compatible patch from Patch Maker 2.0.
Attachment #125982 - Attachment is obsolete: true
Comment on attachment 126337 [details] [diff] [review] patch, v2.3 Due to fix for bug 156072, this bug now has high visibility.
Attachment #126337 - Flags: review?(caillon)
Attachment #125982 - Flags: review?(caillon)
Comment on attachment 126337 [details] [diff] [review] patch, v2.3 Breakage switching from one #document node to another (made possible by bug 201585). Caused by bug 197427. Workaround coming up.
Attachment #126337 - Attachment is obsolete: true
Attachment #126337 - Flags: review?(caillon)
Attached patch patch, v2.4 (obsolete) — Splinter Review
Fixed bustage switching from one #document to another #document, and from #documentType to #documentType.
Attachment #126340 - Flags: review?(caillon)
Comment on attachment 126340 [details] [diff] [review] patch, v2.4 Per discussion with caillon, I've made a few changes to my patch to date: >+ this.setTextValue("nodeName", aObject.nodeName ? aObject.nodeName : "(null)"); >+ this.setTextValue("namespace", aObject.namespaceURI ? aObject.namespaceURI : "(null)"); >+ this.setTextValue("nodeType", nodeTypeToText(this.mSubject.nodeType)); >+ this.setTextValue("nodeValue", aObject.nodeValue ? aObject.nodeValue : "(null)"); I've removed the possibility for (null) entries; this now shows the current nodeValue converted to a string. >+ <vbox id="bxDocument" scroll="vertical"> + <vbox id="bxDocument" style="overflow: -moz-scrollbars-vertical;"> >+ if (this.documentHTMLNames[i] in aObject) { >+ node.removeAttribute("display"); >+ this.setTextValue("document_" + this.documentHTMLNames[i], aObject[this.documentHTMLNames[i]]); >+ } else { >+ node.setAttribute("display", "none"); >+ } Now, I use node.removeAttribute("style"); and node.setAttribute("style", "display:none;"). >+ >+*[display="none"] { >+ display: none; >+} >+ >+*[scroll="vertical"] { >+ overflow: -moz-scrollbars-vertical; >+} This part is gone. inspector.css is no longer part of my patch. caillon asked me not to post a new patch just yet.
Comment on attachment 126340 [details] [diff] [review] patch, v2.4 Looks like I bitrotted this :-) >+ this.setTextValue("nodeName", aObject.nodeName ? aObject.nodeName : "(null)"); Could use aObject.nodeName || "(null)" etc. here. >+ if (this.documentHTMLNames[i] in aObject) { >+ node.removeAttribute("display"); >+ this.setTextValue("document_" + this.documentHTMLNames[i], aObject[this.documentHTMLNames[i]]); >+ } else { >+ node.setAttribute("display", "none"); >+ } We have a boolean property, no less, called node.hidden, to do this.
Target Milestone: --- → mozilla1.5beta
Attachment #126340 - Attachment is obsolete: true
Attachment #126340 - Flags: review?(caillon)
Attached patch patch, v2.5 (obsolete) — Splinter Review
Bitrot fixed. neil: caillon rejected the ?: "(null)" bit, so that has been removed. As for the hidden property... I see it in JSObject panel, and a quick check shows we apparently inherit it from nsXULElement. Setting it to true means the C++ code uses DOM to set a "hidden" attribute's value to "true", which in turn calls on the global XUL CSS stylesheet to set display:none. Logically speaking, that is the same as what I tried to do in patch v2.4, but using the inspector.css stylesheet instead. The only difference is the attribute is set from C++ instead of JS. I think I'm better off just setting the style attribute as appropriate.
Attachment #127641 - Flags: review?(caillon)
Comment on attachment 127641 [details] [diff] [review] patch, v2.5 rejected by caillon based on screenshot.
Attachment #127641 - Attachment is obsolete: true
Attachment #127641 - Flags: review?(caillon)
Attached patch patch, v2.6Splinter Review
addressing comments by caillon
Attachment #128806 - Flags: review?(caillon)
The advantage of setting .hidden is that XPConnect doesn't have to convert a JS string to the right sort of C++ string (twice for setAttribute, because the attribute's name and value are both strings), only for it to get looked up in an atom table, when the C++ can statically refer to the "hidden" atom. Also, setting the style attribute just causes added CSS parsing.
Comment on attachment 128806 [details] [diff] [review] patch, v2.6 >@@ -40,20 +41,21 @@ > * DOMNodeViewer -------------------------------------------- > * The default viewer for DOM Nodes > ****************************************************************/ > > //////////// global variables ///////////////////// > > var viewer; >- >+var deck; I'd rather see this as an object property. > var gPromptService; > > //////////// global constants //////////////////// > > const kDOMViewCID = "@mozilla.org/inspector/dom-view;1"; >+const nsIDOMNode = Components.interfaces.nsIDOMNode; Don't intermingle contract ids with classes. Group them separately. > const kPromptServiceCID = "@mozilla.org/embedcomp/prompt-service;1"; > > ////////////////////////////////////////////////// > > window.addEventListener("load", DOMNodeViewer_initialize, false); > > function DOMNodeViewer_initialize() >@@ -83,14 +85,16 @@ > //////////////////////////////////////////////////////////////////////////// > //// Initialization > > mDOMView: null, > mSubject: null, > mPanel: null, > >+ documentHTMLNames: ["aLinkColor", "vLinkColor", "linkColor", "bgColor", "fgColor", "title", "URL"], >+ This really, really (yes, really) sucks that we have to be so HTML centric here in a generic DOM node viewer panel. I am not really sure what a better solution would be though. Perhaps a pref as to what properties for specific things users want to get, but I don't really like that solution either. Feel free to come up with a better one. In any case, this list does need to be dynamic. Ping me on IRC sometime and let's rehash things.
Attachment #128806 - Flags: review?(caillon) → review-
Product: Core → Other Applications
Comment on attachment 128806 [details] [diff] [review] patch, v2.6 caillon: what about: var aPproperty; for (aProperty in Components.interfaces.nsIDOMNSHTMLDocument) { if (typeof aDocument[aProperty] != "function") this.setTextValue("document_" + property, aDocument[aProperty].toString()); } for (aProperty in Components.interfaces.nsIDOMHTMLDocument) { if (typeof aDocument[aProperty] != "function") this.setTextValue("document_" + property, aDocument[aProperty].toString()); this.setTextValue("document_" + property, aDocument[aProperty].toString()); } Or something like that? That would let us replace most of this: >+ case nsIDOMNode.DOCUMENT_NODE: >+ deck.selectedPanel = deck.bxDocumentPanel; >+ >+ if (aObject instanceof Components.interfaces.nsIDOMHTMLDocument) { >+ // set HTMLDocument information >+ deck.bxDocumentPanel.HTMLFields.removeAttribute("style"); >+ for (i = 0; i < this.documentHTMLNames.length; i++) { >+ node = document.getElementById("tx_document_"+this.documentHTMLNames[i]).parentNode; >+ if (this.documentHTMLNames[i] in aObject) { >+ this.setTextValue("document_" + this.documentHTMLNames[i], aObject[this.documentHTMLNames[i]]); >+ } else { >+ this.setTextValue("document_" + this.documentHTMLNames[i], ""); >+ } >+ } >+ } else { >+ deck.bxDocumentPanel.HTMLFields.setAttribute("style", "display:none;"); >+ } >+ break;
Reassigning DOM-I bugs which have stagnated in my buglist back to default owner. Hopefully someone will pick up some of these bugs and work on them. I'll continue to follow them.
Assignee: ajvincent → dom-inspector
Target Milestone: mozilla1.5beta → ---
Assignee: dom-inspector → nobody
QA Contact: timeless → dom-inspector
Bulk close. This component is no longer supported or maintained. https://bugzilla.mozilla.org/show_bug.cgi?id=1499023
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → INCOMPLETE
Bulk close. This component is no longer supported or maintained. https://bugzilla.mozilla.org/show_bug.cgi?id=1499023
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: