Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: Source/devtools/front_end/elements/ElementsTreeOutline.js

Issue 702683003: DevTools: Get rid of representedObject usages in ElementsTreeOutline. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/devtools/front_end/elements/ElementsPanel.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 }, 631 },
632 632
633 _ondragstart: function(event) 633 _ondragstart: function(event)
634 { 634 {
635 if (!window.getSelection().isCollapsed) 635 if (!window.getSelection().isCollapsed)
636 return false; 636 return false;
637 if (event.target.nodeName === "A") 637 if (event.target.nodeName === "A")
638 return false; 638 return false;
639 639
640 var treeElement = this._treeElementFromEvent(event); 640 var treeElement = this._treeElementFromEvent(event);
641 if (!treeElement)
642 return false;
643
644 if (!this._isValidDragSourceOrTarget(treeElement)) 641 if (!this._isValidDragSourceOrTarget(treeElement))
645 return false; 642 return false;
646 643
647 if (treeElement._node.nodeName() === "BODY" || treeElement._node.nodeNam e() === "HEAD") 644 if (treeElement._node.nodeName() === "BODY" || treeElement._node.nodeNam e() === "HEAD")
648 return false; 645 return false;
649 646
650 event.dataTransfer.setData("text/plain", treeElement.listItemElement.tex tContent.replace(/\u200b/g, "")); 647 event.dataTransfer.setData("text/plain", treeElement.listItemElement.tex tContent.replace(/\u200b/g, ""));
651 event.dataTransfer.effectAllowed = "copyMove"; 648 event.dataTransfer.effectAllowed = "copyMove";
652 this._treeElementBeingDragged = treeElement; 649 this._treeElementBeingDragged = treeElement;
653 650
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 686
690 /** 687 /**
691 * @param {?TreeElement} treeElement 688 * @param {?TreeElement} treeElement
692 * @return {boolean} 689 * @return {boolean}
693 */ 690 */
694 _isValidDragSourceOrTarget: function(treeElement) 691 _isValidDragSourceOrTarget: function(treeElement)
695 { 692 {
696 if (!treeElement) 693 if (!treeElement)
697 return false; 694 return false;
698 695
699 var node = treeElement.representedObject; 696 if (!(treeElement instanceof WebInspector.ElementsTreeElement))
700 if (!(node instanceof WebInspector.DOMNode))
701 return false; 697 return false;
698 var elementsTreeElement = /** @type {!WebInspector.ElementsTreeElement} */ (treeElement);
702 699
700 var node = elementsTreeElement._node;
703 if (!node.parentNode || node.parentNode.nodeType() !== Node.ELEMENT_NODE ) 701 if (!node.parentNode || node.parentNode.nodeType() !== Node.ELEMENT_NODE )
704 return false; 702 return false;
705 703
706 return true; 704 return true;
707 }, 705 },
708 706
709 _ondrop: function(event) 707 _ondrop: function(event)
710 { 708 {
711 event.preventDefault(); 709 event.preventDefault();
712 var treeElement = this._treeElementFromEvent(event); 710 var treeElement = this._treeElementFromEvent(event);
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 "area", "base", "basefont", "br", "canvas", "col", "command", "embed", "fram e", 1040 "area", "base", "basefont", "br", "canvas", "col", "command", "embed", "fram e",
1043 "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source ", "track", "wbr" 1041 "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source ", "track", "wbr"
1044 ].keySet(); 1042 ].keySet();
1045 1043
1046 // These tags we do not allow editing their tag name. 1044 // These tags we do not allow editing their tag name.
1047 WebInspector.ElementsTreeElement.EditTagBlacklist = [ 1045 WebInspector.ElementsTreeElement.EditTagBlacklist = [
1048 "html", "head", "body" 1046 "html", "head", "body"
1049 ].keySet(); 1047 ].keySet();
1050 1048
1051 WebInspector.ElementsTreeElement.prototype = { 1049 WebInspector.ElementsTreeElement.prototype = {
1050 /**
1051 * @return {!WebInspector.DOMNode}
1052 */
1053 node: function()
1054 {
1055 return this._node;
1056 },
1057
1058 /**
1059 * @param {string} searchQuery
1060 */
1052 highlightSearchResults: function(searchQuery) 1061 highlightSearchResults: function(searchQuery)
1053 { 1062 {
1054 if (this._searchQuery !== searchQuery) { 1063 if (this._searchQuery !== searchQuery) {
1055 this._updateSearchHighlight(false); 1064 this._updateSearchHighlight(false);
1056 delete this._highlightResult; // A new search query. 1065 delete this._highlightResult; // A new search query.
1057 } 1066 }
1058 1067
1059 this._searchQuery = searchQuery; 1068 this._searchQuery = searchQuery;
1060 this._searchHighlightsVisible = true; 1069 this._searchHighlightsVisible = true;
1061 this.updateTitle(true); 1070 this.updateTitle(true);
1062 }, 1071 },
1063 1072
1064 hideSearchHighlights: function() 1073 hideSearchHighlights: function()
1065 { 1074 {
1066 delete this._searchHighlightsVisible; 1075 delete this._searchHighlightsVisible;
1067 this._updateSearchHighlight(false); 1076 this._updateSearchHighlight(false);
1068 }, 1077 },
1069 1078
1079 /**
1080 * @param {boolean} show
1081 */
1070 _updateSearchHighlight: function(show) 1082 _updateSearchHighlight: function(show)
1071 { 1083 {
1072 if (!this._highlightResult) 1084 if (!this._highlightResult)
1073 return; 1085 return;
1074 1086
1075 function updateEntryShow(entry) 1087 function updateEntryShow(entry)
1076 { 1088 {
1077 switch (entry.type) { 1089 switch (entry.type) {
1078 case "added": 1090 case "added":
1079 entry.parent.insertBefore(entry.node, entry.nextSibling); 1091 entry.parent.insertBefore(entry.node, entry.nextSibling);
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 if (this.hasChildren && !this.expanded) 1568 if (this.hasChildren && !this.expanded)
1557 this.expand(); 1569 this.expand();
1558 return false; 1570 return false;
1559 }, 1571 },
1560 1572
1561 /** 1573 /**
1562 * @return {boolean} 1574 * @return {boolean}
1563 */ 1575 */
1564 hasEditableNode: function() 1576 hasEditableNode: function()
1565 { 1577 {
1566 return !this.representedObject.isShadowRoot() && !this.representedObject .ancestorUserAgentShadowRoot(); 1578 return !this._node.isShadowRoot() && !this._node.ancestorUserAgentShadow Root();
1567 }, 1579 },
1568 1580
1569 _insertInLastAttributePosition: function(tag, node) 1581 _insertInLastAttributePosition: function(tag, node)
1570 { 1582 {
1571 if (tag.getElementsByClassName("webkit-html-attribute").length > 0) 1583 if (tag.getElementsByClassName("webkit-html-attribute").length > 0)
1572 tag.insertBefore(node, tag.lastChild); 1584 tag.insertBefore(node, tag.lastChild);
1573 else { 1585 else {
1574 var nodeName = tag.textContent.match(/^<(.*?)>$/)[1]; 1586 var nodeName = tag.textContent.match(/^<(.*?)>$/)[1];
1575 tag.textContent = ''; 1587 tag.textContent = '';
1576 tag.createTextChild('<' + nodeName); 1588 tag.createTextChild('<' + nodeName);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1662 _populateTextContextMenu: function(contextMenu, textNode) 1674 _populateTextContextMenu: function(contextMenu, textNode)
1663 { 1675 {
1664 if (!this._editing) 1676 if (!this._editing)
1665 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa seMenuTitles() ? "Edit text" : "Edit Text"), this._startEditingTextNode.bind(thi s, textNode)); 1677 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa seMenuTitles() ? "Edit text" : "Edit Text"), this._startEditingTextNode.bind(thi s, textNode));
1666 this._populateNodeContextMenu(contextMenu); 1678 this._populateNodeContextMenu(contextMenu);
1667 }, 1679 },
1668 1680
1669 _populateNodeContextMenu: function(contextMenu) 1681 _populateNodeContextMenu: function(contextMenu)
1670 { 1682 {
1671 // Add free-form node-related actions. 1683 // Add free-form node-related actions.
1672 var openTagElement = this.treeOutline.getCachedTreeElement(this.represen tedObject) || this; 1684 var openTagElement = this.treeOutline.getCachedTreeElement(this._node) | | this;
1673 var isEditable = this.hasEditableNode(); 1685 var isEditable = this.hasEditableNode();
1674 if (isEditable && !this._editing) 1686 if (isEditable && !this._editing)
1675 contextMenu.appendItem(WebInspector.UIString("Edit as HTML"), openTa gElement._editAsHTML.bind(openTagElement)); 1687 contextMenu.appendItem(WebInspector.UIString("Edit as HTML"), openTa gElement._editAsHTML.bind(openTagElement));
1676 var isShadowRoot = this.representedObject.isShadowRoot(); 1688 var isShadowRoot = this._node.isShadowRoot();
1677 1689
1678 // Place it here so that all "Copy"-ing items stick together. 1690 // Place it here so that all "Copy"-ing items stick together.
1679 if (this.representedObject.nodeType() === Node.ELEMENT_NODE) 1691 if (this._node.nodeType() === Node.ELEMENT_NODE)
1680 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa seMenuTitles() ? "Copy CSS path" : "Copy CSS Path"), this._copyCSSPath.bind(this )); 1692 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa seMenuTitles() ? "Copy CSS path" : "Copy CSS Path"), this._copyCSSPath.bind(this ));
1681 if (!isShadowRoot) 1693 if (!isShadowRoot)
1682 contextMenu.appendItem(WebInspector.UIString("Copy XPath"), this._co pyXPath.bind(this)); 1694 contextMenu.appendItem(WebInspector.UIString("Copy XPath"), this._co pyXPath.bind(this));
1683 if (!isShadowRoot) { 1695 if (!isShadowRoot) {
1684 var treeOutline = this.treeOutline; 1696 var treeOutline = this.treeOutline;
1685 contextMenu.appendSeparator(); 1697 contextMenu.appendSeparator();
1686 contextMenu.appendItem(WebInspector.UIString("Cut"), treeOutline._pe rformCopyOrCut.bind(treeOutline, true, this.representedObject), !this.hasEditabl eNode()); 1698 contextMenu.appendItem(WebInspector.UIString("Cut"), treeOutline._pe rformCopyOrCut.bind(treeOutline, true, this._node), !this.hasEditableNode());
1687 contextMenu.appendItem(WebInspector.UIString("Copy"), treeOutline._p erformCopyOrCut.bind(treeOutline, false, this.representedObject)); 1699 contextMenu.appendItem(WebInspector.UIString("Copy"), treeOutline._p erformCopyOrCut.bind(treeOutline, false, this._node));
1688 contextMenu.appendItem(WebInspector.UIString("Paste"), treeOutline._ pasteNode.bind(treeOutline, this.representedObject), !treeOutline._canPaste(this .representedObject)); 1700 contextMenu.appendItem(WebInspector.UIString("Paste"), treeOutline._ pasteNode.bind(treeOutline, this._node), !treeOutline._canPaste(this._node));
1689 } 1701 }
1690 1702
1691 if (isEditable) 1703 if (isEditable)
1692 contextMenu.appendItem(WebInspector.UIString("Delete"), this.remove. bind(this)); 1704 contextMenu.appendItem(WebInspector.UIString("Delete"), this.remove. bind(this));
1693 contextMenu.appendSeparator(); 1705 contextMenu.appendSeparator();
1694 }, 1706 },
1695 1707
1696 _startEditing: function() 1708 _startEditing: function()
1697 { 1709 {
1698 if (this.treeOutline.selectedDOMNode() !== this._node) 1710 if (this.treeOutline.selectedDOMNode() !== this._node)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 1755
1744 if (elem.classList.contains("webkit-html-attribute-value")) 1756 if (elem.classList.contains("webkit-html-attribute-value"))
1745 return this._startEditingAttribute(elem.parentNode, elem ); 1757 return this._startEditingAttribute(elem.parentNode, elem );
1746 } 1758 }
1747 } 1759 }
1748 } 1760 }
1749 }, 1761 },
1750 1762
1751 _startEditingAttribute: function(attribute, elementForSelection) 1763 _startEditingAttribute: function(attribute, elementForSelection)
1752 { 1764 {
1765 console.assert(this.listItemElement.isAncestor(attribute));
1766
1753 if (WebInspector.isBeingEdited(attribute)) 1767 if (WebInspector.isBeingEdited(attribute))
1754 return true; 1768 return true;
1755 1769
1756 var attributeNameElement = attribute.getElementsByClassName("webkit-html -attribute-name")[0]; 1770 var attributeNameElement = attribute.getElementsByClassName("webkit-html -attribute-name")[0];
1757 if (!attributeNameElement) 1771 if (!attributeNameElement)
1758 return false; 1772 return false;
1759 1773
1760 var attributeName = attributeNameElement.textContent; 1774 var attributeName = attributeNameElement.textContent;
1761 var attributeValueElement = attribute.getElementsByClassName("webkit-htm l-attribute-value")[0]; 1775 var attributeValueElement = attribute.getElementsByClassName("webkit-htm l-attribute-value")[0];
1762 1776
1763 function removeZeroWidthSpaceRecursive(node) 1777 function removeZeroWidthSpaceRecursive(node)
1764 { 1778 {
1765 if (node.nodeType === Node.TEXT_NODE) { 1779 if (node.nodeType === Node.TEXT_NODE) {
1766 node.nodeValue = node.nodeValue.replace(/\u200B/g, ""); 1780 node.nodeValue = node.nodeValue.replace(/\u200B/g, "");
1767 return; 1781 return;
1768 } 1782 }
1769 1783
1770 if (node.nodeType !== Node.ELEMENT_NODE) 1784 if (node.nodeType !== Node.ELEMENT_NODE)
1771 return; 1785 return;
1772 1786
1773 for (var child = node.firstChild; child; child = child.nextSibling) 1787 for (var child = node.firstChild; child; child = child.nextSibling)
1774 removeZeroWidthSpaceRecursive(child); 1788 removeZeroWidthSpaceRecursive(child);
1775 } 1789 }
1776 1790
1777 var domNode; 1791 var attributeValue = attributeName && attributeValueElement ? this._node .getAttribute(attributeName) : undefined;
1778 var listItemElement = attribute.enclosingNodeOrSelfWithNodeName("li"); 1792 if (attributeValue !== undefined)
1779 if (attributeName && attributeValueElement && listItemElement && listIte mElement.treeElement)
1780 domNode = listItemElement.treeElement.representedObject;
1781 var attributeValue = domNode ? domNode.getAttribute(attributeName) : und efined;
1782 if (typeof attributeValue !== "undefined")
1783 attributeValueElement.textContent = attributeValue; 1793 attributeValueElement.textContent = attributeValue;
1784 1794
1785 // Remove zero-width spaces that were added by nodeTitleInfo. 1795 // Remove zero-width spaces that were added by nodeTitleInfo.
1786 removeZeroWidthSpaceRecursive(attribute); 1796 removeZeroWidthSpaceRecursive(attribute);
1787 1797
1788 var config = new WebInspector.InplaceEditor.Config(this._attributeEditin gCommitted.bind(this), this._editingCancelled.bind(this), attributeName); 1798 var config = new WebInspector.InplaceEditor.Config(this._attributeEditin gCommitted.bind(this), this._editingCancelled.bind(this), attributeName);
1789 1799
1790 function handleKeyDownEvents(event) 1800 function handleKeyDownEvents(event)
1791 { 1801 {
1792 var isMetaOrCtrl = WebInspector.isMac() ? 1802 var isMetaOrCtrl = WebInspector.isMac() ?
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after
2964 treeOutline.rootDOMNode = node; 2974 treeOutline.rootDOMNode = node;
2965 if (!treeOutline.children[0].hasChildren) 2975 if (!treeOutline.children[0].hasChildren)
2966 treeOutline._element.classList.add("single-node"); 2976 treeOutline._element.classList.add("single-node");
2967 treeOutline.setVisible(true); 2977 treeOutline.setVisible(true);
2968 treeOutline.element.treeElementForTest = treeOutline.children[0] ; 2978 treeOutline.element.treeElementForTest = treeOutline.children[0] ;
2969 resolve(treeOutline.element); 2979 resolve(treeOutline.element);
2970 } 2980 }
2971 } 2981 }
2972 } 2982 }
2973 } 2983 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/elements/ElementsPanel.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698