Title: [107217] trunk
Revision
107217
Author
[email protected]
Date
2012-02-09 04:24:27 -0800 (Thu, 09 Feb 2012)

Log Message

Web Inspector: toggle Edit as HTML on F2, drag nodes up / down upon Ctrl(Cmd) Up / Down.
https://bugs.webkit.org/show_bug.cgi?id=78123

Reviewed by Yury Semikhatsky.

Source/WebCore:

* English.lproj/localizedStrings.js:
* inspector/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::SetOuterHTMLAction::SetOuterHTMLAction):
(WebCore::InspectorDOMAgent::SetOuterHTMLAction::undo):
(InspectorDOMAgent::SetOuterHTMLAction):
* inspector/front-end/ElementsPanel.js:
(WebInspector.ElementsPanel.prototype._registerShortcuts):
(WebInspector.ElementsPanel.prototype.handleShortcut):
* inspector/front-end/ElementsTreeOutline.js:
(WebInspector.ElementsTreeOutline.prototype._ondragstart):
(WebInspector.ElementsTreeOutline.prototype._ondragover):
(WebInspector.ElementsTreeOutline.prototype._doMove):
(WebInspector.ElementsTreeOutline.prototype._ondragend):
(WebInspector.ElementsTreeOutline.prototype._populateContextMenu):
(WebInspector.ElementsTreeOutline.prototype.handleShortcut):
(WebInspector.ElementsTreeOutline.prototype._toggleEditAsHTML):
(WebInspector.ElementsTreeOutline.prototype._selectNodeAfterEdit):
(WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.commit):
(WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.changeTagNameCallback):
(WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
* inspector/front-end/UIUtils.js:

LayoutTests:

* inspector/elements/move-node.html:
* inspector/elements/undo-dom-edits-expected.txt:
* inspector/elements/undo-dom-edits.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (107216 => 107217)


--- trunk/LayoutTests/ChangeLog	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/LayoutTests/ChangeLog	2012-02-09 12:24:27 UTC (rev 107217)
@@ -1,3 +1,14 @@
+2012-02-08  Pavel Feldman  <[email protected]>
+
+        Web Inspector: toggle Edit as HTML on F2, drag nodes up / down upon Ctrl(Cmd) Up / Down.
+        https://bugs.webkit.org/show_bug.cgi?id=78123
+
+        Reviewed by Yury Semikhatsky.
+
+        * inspector/elements/move-node.html:
+        * inspector/elements/undo-dom-edits-expected.txt:
+        * inspector/elements/undo-dom-edits.html:
+
 2012-02-09  Nikolas Zimmermann  <[email protected]>
 
         Not reviewed. Rebaseline some Qt svg results.

Modified: trunk/LayoutTests/inspector/elements/move-node.html (107216 => 107217)


--- trunk/LayoutTests/inspector/elements/move-node.html	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/LayoutTests/inspector/elements/move-node.html	2012-02-09 12:24:27 UTC (rev 107217)
@@ -35,7 +35,7 @@
                 next();
             }
 
-            treeOutline._nodeBeingDragged = InspectorTest.expandedNodeWithId("child2");
+            treeOutline._treeElementBeingDragged = treeOutline.getCachedTreeElement(InspectorTest.expandedNodeWithId("child2"));
             var treeElementToDropOn = treeOutline.getCachedTreeElement(InspectorTest.expandedNodeWithId("child4"));
             treeOutline._doMove(treeElementToDropOn);
         }

Modified: trunk/LayoutTests/inspector/elements/undo-dom-edits-expected.txt (107216 => 107217)


--- trunk/LayoutTests/inspector/elements/undo-dom-edits-expected.txt	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/LayoutTests/inspector/elements/undo-dom-edits-expected.txt	2012-02-09 12:24:27 UTC (rev 107217)
@@ -53,14 +53,11 @@
   </div>
 Post-action:
 - <div id="testEditAsHTML">
-    - <div id="node-to-edit-as-html">
-          <div id="span2">Text2</div>
-      </div>
+    + <div id="node-to-edit-as-html">…</div>
+      <span>Second node</span>
   </div>
 Post-undo (initial):
 - <div id="testEditAsHTML">
-    - <div id="node-to-edit-as-html">
-          <span id="span">Text</span>
-      </div>
+    + <div id="node-to-edit-as-html"></div>
   </div>
 

Modified: trunk/LayoutTests/inspector/elements/undo-dom-edits.html (107216 => 107217)


--- trunk/LayoutTests/inspector/elements/undo-dom-edits.html	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/LayoutTests/inspector/elements/undo-dom-edits.html	2012-02-09 12:24:27 UTC (rev 107217)
@@ -41,11 +41,10 @@
     function testEditAsHTML(callback)
     {
         var node = InspectorTest.expandedNodeWithId("node-to-edit-as-html"); 
-        node.setOuterHTML("<div id=\"node-to-edit-as-html\"><div id=\"span2\">Text2</div></div>", callback);
+        node.setOuterHTML("<div id=\"node-to-edit-as-html\"><div id=\"span2\">Text2</div></div><span>Second node</span>", callback);
     }
     testSuite.push(InspectorTest.generateUndoTest(testEditAsHTML));
 
-
     InspectorTest.runTestSuite(testSuite);
 }
 

Modified: trunk/Source/WebCore/ChangeLog (107216 => 107217)


--- trunk/Source/WebCore/ChangeLog	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/Source/WebCore/ChangeLog	2012-02-09 12:24:27 UTC (rev 107217)
@@ -1,3 +1,32 @@
+2012-02-08  Pavel Feldman  <[email protected]>
+
+        Web Inspector: toggle Edit as HTML on F2, drag nodes up / down upon Ctrl(Cmd) Up / Down.
+        https://bugs.webkit.org/show_bug.cgi?id=78123
+
+        Reviewed by Yury Semikhatsky.
+
+        * English.lproj/localizedStrings.js:
+        * inspector/InspectorDOMAgent.cpp:
+        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::SetOuterHTMLAction):
+        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::undo):
+        (InspectorDOMAgent::SetOuterHTMLAction):
+        * inspector/front-end/ElementsPanel.js:
+        (WebInspector.ElementsPanel.prototype._registerShortcuts):
+        (WebInspector.ElementsPanel.prototype.handleShortcut):
+        * inspector/front-end/ElementsTreeOutline.js:
+        (WebInspector.ElementsTreeOutline.prototype._ondragstart):
+        (WebInspector.ElementsTreeOutline.prototype._ondragover):
+        (WebInspector.ElementsTreeOutline.prototype._doMove):
+        (WebInspector.ElementsTreeOutline.prototype._ondragend):
+        (WebInspector.ElementsTreeOutline.prototype._populateContextMenu):
+        (WebInspector.ElementsTreeOutline.prototype.handleShortcut):
+        (WebInspector.ElementsTreeOutline.prototype._toggleEditAsHTML):
+        (WebInspector.ElementsTreeOutline.prototype._selectNodeAfterEdit):
+        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.commit):
+        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.changeTagNameCallback):
+        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
+        * inspector/front-end/UIUtils.js:
+
 2012-02-09  Roland Steiner  <[email protected]>
 
         SelectorChecker::checkSelector: move parameters into a struct

Modified: trunk/Source/WebCore/English.lproj/localizedStrings.js


(Binary files differ)

Modified: trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp (107216 => 107217)


--- trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2012-02-09 12:24:27 UTC (rev 107217)
@@ -349,6 +349,7 @@
     SetOuterHTMLAction(Node* node, const String& html)
         : InspectorDOMAgent::DOMAction("SetOuterHTML")
         , m_node(node)
+        , m_nextSibling(node->nextSibling())
         , m_html(html)
         , m_newNode(0)
     {
@@ -364,8 +365,18 @@
 
     virtual bool undo(ExceptionCode& ec)
     {
-        DOMEditor domEditor(m_node->ownerDocument());
-        domEditor.patchNode(m_node.get(), m_oldHTML, ec);
+        DOMEditor domEditor(m_newNode->ownerDocument());
+        Node* node = domEditor.patchNode(m_newNode, m_oldHTML, ec);
+        if (ec || !node)
+            return false;
+        // HTML editing could have produced extra nodes. Remove them if necessary.
+        node = node->nextSibling();
+
+        while (!ec && node && node != m_nextSibling.get()) {
+            Node* nodeToRemove = node;
+            node = node->nextSibling();
+            nodeToRemove->remove(ec);
+        }
         return !ec;
     }
 
@@ -376,6 +387,7 @@
 
 private:
     RefPtr<Node> m_node;
+    RefPtr<Node> m_nextSibling;
     String m_html;
     String m_oldHTML;
     Node* m_newNode;

Modified: trunk/Source/WebCore/inspector/front-end/ElementsPanel.js (107216 => 107217)


--- trunk/Source/WebCore/inspector/front-end/ElementsPanel.js	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/Source/WebCore/inspector/front-end/ElementsPanel.js	2012-02-09 12:24:27 UTC (rev 107217)
@@ -904,6 +904,7 @@
         ];
         section.addRelatedKeys(keys, WebInspector.UIString("Expand/collapse"));
         section.addKey(shortcut.shortcutToString(shortcut.Keys.Enter), WebInspector.UIString("Edit attribute"));
+        section.addKey(shortcut.shortcutToString(shortcut.Keys.F2), WebInspector.UIString("Toggle edit as HTML"));
 
         this.sidebarPanes.styles.registerShortcuts();
     },
@@ -925,8 +926,13 @@
             }
             return;
         }
-        if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) && event.keyIdentifier === "U+005A")  // Z key
+
+        if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) && event.keyIdentifier === "U+005A") { // Z key
             DOMAgent.undo(this._updateSidebars.bind(this));
+            return;
+        }
+
+        this.treeOutline.handleShortcut(event);
     },
 
     handleCopyEvent: function(event)

Modified: trunk/Source/WebCore/inspector/front-end/ElementsTreeOutline.js (107216 => 107217)


--- trunk/Source/WebCore/inspector/front-end/ElementsTreeOutline.js	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/Source/WebCore/inspector/front-end/ElementsTreeOutline.js	2012-02-09 12:24:27 UTC (rev 107217)
@@ -329,7 +329,7 @@
 
         event.dataTransfer.setData("text/plain", treeElement.listItemElement.textContent);
         event.dataTransfer.effectAllowed = "copyMove";
-        this._nodeBeingDragged = treeElement.representedObject;
+        this._treeElementBeingDragged = treeElement;
 
         WebInspector.domAgent.hideDOMNodeHighlight();
 
@@ -338,7 +338,7 @@
 
     _ondragover: function(event)
     {
-        if (!this._nodeBeingDragged)
+        if (!this._treeElementBeingDragged)
             return false;
 
         var treeElement = this._treeElementFromEvent(event);
@@ -347,7 +347,7 @@
 
         var node = treeElement.representedObject;
         while (node) {
-            if (node === this._nodeBeingDragged)
+            if (node === this._treeElementBeingDragged.representedObject)
                 return false;
             node = node.parentNode;
         }
@@ -392,7 +392,7 @@
 
     _doMove: function(treeElement)
     {
-        if (!this._nodeBeingDragged)
+        if (!this._treeElementBeingDragged)
             return;
 
         var parentNode;
@@ -407,27 +407,17 @@
             anchorNode = dragTargetNode;
         }
 
-        function callback(error, newNodeId)
-        {
-            if (error)
-                return;
+        var wasExpanded = this._treeElementBeingDragged.expanded;
+        this._treeElementBeingDragged.representedObject.moveTo(parentNode, anchorNode, this._selectNodeAfterEdit.bind(this, null, wasExpanded));
 
-            this._updateModifiedNodes();
-            var newNode = WebInspector.domAgent.nodeForId(newNodeId);
-            if (newNode)
-                this.selectDOMNode(newNode, true);
-        }
-
-        this._nodeBeingDragged.moveTo(parentNode, anchorNode, callback.bind(this));
-
-        delete this._nodeBeingDragged;
+        delete this._treeElementBeingDragged;
     },
 
     _ondragend: function(event)
     {
         event.preventDefault();
         this._clearDragOverTreeElementMarker();
-        delete this._nodeBeingDragged;
+        delete this._treeElementBeingDragged;
     },
 
     _clearDragOverTreeElementMarker: function()
@@ -501,6 +491,65 @@
     {
         if (this._contextMenuCallback)
             this._contextMenuCallback(contextMenu, node);
+    },
+
+    handleShortcut: function(event)
+    {
+        var node = this.selectedDOMNode();
+        var treeElement = this.getCachedTreeElement(node);
+        if (!node || !treeElement)
+            return;
+
+        if (event.keyIdentifier === "F2") {
+            this._toggleEditAsHTML(node);
+            return;
+        }
+
+        if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) && node.parentNode) {
+            if (event.keyIdentifier === "Up" && node.previousSibling) {
+                node.moveTo(node.parentNode, node.previousSibling, this._selectNodeAfterEdit.bind(this, null, treeElement.expanded));
+                return;
+            }
+            if (event.keyIdentifier === "Down" && node.nextSibling) {
+                node.moveTo(node.parentNode, node.nextSibling.nextSibling, this._selectNodeAfterEdit.bind(this, null, treeElement.expanded));
+                return;
+            }
+        }
+
+    },
+
+    _toggleEditAsHTML: function(node)
+    {
+        var treeElement = this.getCachedTreeElement(node);
+        if (!treeElement)
+            return;
+
+        if (treeElement._editing && treeElement._htmlEditElement && WebInspector.isBeingEdited(treeElement._htmlEditElement))
+            treeElement._editing.commit();
+        else
+            treeElement._editAsHTML();
+    },
+
+    _selectNodeAfterEdit: function(fallbackNode, wasExpanded, error, nodeId)
+    {
+        if (error)
+            return;
+
+        // Select it and expand if necessary. We force tree update so that it processes dom events and is up to date.
+        this._updateModifiedNodes();
+
+        var newNode = WebInspector.domAgent.nodeForId(nodeId) || fallbackNode;
+        if (!newNode)
+            return;
+
+        this.selectDOMNode(newNode, true);
+
+        var newTreeItem = this.findTreeElement(newNode);
+        if (wasExpanded) {
+            if (newTreeItem)
+                newTreeItem.expand();
+        }
+        return newTreeItem;
     }
 }
 
@@ -1263,7 +1312,7 @@
 
         function commit()
         {
-            commitCallback(this._htmlEditElement.textContent);
+            commitCallback(initialValue, this._htmlEditElement.textContent);
             dispose.call(this);
         }
 
@@ -1399,17 +1448,7 @@
                 cancel();
                 return;
             }
-
-            var node = WebInspector.domAgent.nodeForId(nodeId);
-
-            // Select it and expand if necessary. We force tree update so that it processes dom events and is up to date.
-            treeOutline._updateModifiedNodes();
-            treeOutline.selectDOMNode(node, true);
-
-            var newTreeItem = treeOutline.findTreeElement(node);
-            if (wasExpanded)
-                newTreeItem.expand();
-
+            var newTreeItem = treeOutline._selectNodeAfterEdit(null, wasExpanded, error, nodeId);
             moveToNextAttributeIfNeeded.call(newTreeItem);
         }
 
@@ -1685,6 +1724,8 @@
             parentElement.adjustCollapsedRange();
         }
 
+        if (!this.representedObject.parentNode || this.representedObject.parentNode.nodeType() === Node.DOCUMENT_NODE)
+            return;
         this.representedObject.removeNode(removeNodeCallback);
     },
 
@@ -1717,9 +1758,12 @@
             }
         }
 
-        function commitChange(value)
+        function commitChange(initialValue, value)
         {
-            node.setOuterHTML(value, selectNode);
+            if (initialValue !== value)
+                node.setOuterHTML(value, selectNode);
+            else
+                return;
         }
 
         node.getOuterHTML(this._startEditingAsHTML.bind(this, commitChange));

Modified: trunk/Source/WebCore/inspector/front-end/UIUtils.js (107216 => 107217)


--- trunk/Source/WebCore/inspector/front-end/UIUtils.js	2012-02-09 12:02:56 UTC (rev 107216)
+++ trunk/Source/WebCore/inspector/front-end/UIUtils.js	2012-02-09 12:24:27 UTC (rev 107217)
@@ -268,7 +268,7 @@
 WebInspector.startEditing = function(element, config)
 {
     if (!WebInspector.markBeingEdited(element, true))
-        return;
+        return null;
 
     config = config || new WebInspector.EditingConfig(function() {}, function() {});
     var committedCallback = config.commitHandler;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to