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;