Diff
Modified: trunk/Source/WebCore/ChangeLog (96590 => 96591)
--- trunk/Source/WebCore/ChangeLog 2011-10-04 14:12:19 UTC (rev 96590)
+++ trunk/Source/WebCore/ChangeLog 2011-10-04 14:23:24 UTC (rev 96591)
@@ -1,3 +1,44 @@
+2011-10-04 Pavel Feldman <[email protected]>
+
+ Web Inspector: make DataGrid compile
+ https://bugs.webkit.org/show_bug.cgi?id=69334
+
+ Reviewed by Yury Semikhatsky.
+
+ * inspector/compile-front-end.sh:
+ * inspector/front-end/DataGrid.js:
+ (WebInspector.DataGrid):
+ (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode):
+ (WebInspector.DataGrid.prototype._startEditing):
+ (WebInspector.DataGrid.prototype._startEditingConfig):
+ (WebInspector.DataGrid.prototype._editingCommitted.moveToNextIfNeeded):
+ (WebInspector.DataGrid.prototype._editingCommitted):
+ (WebInspector.DataGrid.prototype._editingCancelled):
+ (WebInspector.DataGrid.prototype.removeChildrenRecursive):
+ (WebInspector.DataGrid.prototype._keyDown):
+ (WebInspector.DataGrid.prototype._startResizerDragging):
+ (WebInspector.DataGrid.prototype._resizerDragging):
+ (WebInspector.DataGrid.prototype._endResizerDragging):
+ (WebInspector.DataGridNode.prototype._attach):
+ * inspector/front-end/UIUtils.js:
+ (WebInspector.isBeingEdited):
+ (WebInspector.markBeingEdited):
+ (WebInspector.isEditingAnyField):
+ (WebInspector.EditingConfig):
+ (WebInspector.startEditing.blurEventListener):
+ (WebInspector.startEditing.getContent):
+ (WebInspector.startEditing.cleanUpAfterEditing):
+ (WebInspector.startEditing.editingCancelled):
+ (WebInspector.startEditing.editingCommitted):
+ (WebInspector.startEditing.defaultFinishHandler):
+ (WebInspector.startEditing):
+ (WebInspector.startEditing.pasteEventListener):
+ (WebInspector.startEditing.keyDownEventListener):
+ * inspector/front-end/externs.js:
+ (Array.prototype.remove):
+ (window.getComputedStyle):
+ * inspector/front-end/inspector.js:
+
2011-10-04 Andrey Kosyakov <[email protected]>
Web Inspector: [Extensions API] extension panel's toolbar icon is incorrect when inspector window is docked
Modified: trunk/Source/WebCore/inspector/compile-front-end.sh (96590 => 96591)
--- trunk/Source/WebCore/inspector/compile-front-end.sh 2011-10-04 14:12:19 UTC (rev 96590)
+++ trunk/Source/WebCore/inspector/compile-front-end.sh 2011-10-04 14:23:24 UTC (rev 96591)
@@ -63,9 +63,10 @@
--js Source/WebCore/inspector/front-end/Resource.js \
--js Source/WebCore/inspector/front-end/NetworkManager.js \
--js Source/WebCore/inspector/front-end/UISourceCode.js \
- --module jsmodule_ui:21:jsmodule_common \
+ --module jsmodule_ui:22:jsmodule_common \
--js Source/WebCore/inspector/front-end/Checkbox.js \
--js Source/WebCore/inspector/front-end/ContextMenu.js \
+ --js Source/WebCore/inspector/front-end/DataGrid.js \
--js Source/WebCore/inspector/front-end/Drawer.js \
--js Source/WebCore/inspector/front-end/EmptyView.js \
--js Source/WebCore/inspector/front-end/HelpScreen.js \
Modified: trunk/Source/WebCore/inspector/front-end/DataGrid.js (96590 => 96591)
--- trunk/Source/WebCore/inspector/front-end/DataGrid.js 2011-10-04 14:12:19 UTC (rev 96590)
+++ trunk/Source/WebCore/inspector/front-end/DataGrid.js 2011-10-04 14:23:24 UTC (rev 96591)
@@ -23,6 +23,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/**
+ * @constructor
+ * @extends {WebInspector.Object}
+ */
WebInspector.DataGrid = function(columns, editCallback, deleteCallback)
{
this.element = document.createElement("div");
@@ -120,9 +124,9 @@
for (var columnIdentifier in columns) {
var column = columns[columnIdentifier];
- var cell = document.createElement("td");
- cell.className = columnIdentifier + "-column";
- fillerRow.appendChild(cell);
+ var td = document.createElement("td");
+ td.className = columnIdentifier + "-column";
+ fillerRow.appendChild(td);
}
this._dataTableColumnGroup = columnGroup.cloneNode(true);
@@ -180,11 +184,7 @@
this._editingNode.select();
var element = this._editingNode._element.children[column];
- WebInspector.startEditing(element, {
- context: element.textContent,
- commitHandler: this._editingCommitted.bind(this),
- cancelHandler: this._editingCancelled.bind(this)
- });
+ WebInspector.startEditing(element, this._startEditingConfig(element));
window.getSelection().setBaseAndExtent(element, 0, element, 1);
},
@@ -206,21 +206,28 @@
return this._startEditingColumnOfDataGridNode(this._editingNode, 0);
this._editing = true;
- WebInspector.startEditing(element, {
- context: element.textContent,
- commitHandler: this._editingCommitted.bind(this),
- cancelHandler: this._editingCancelled.bind(this)
- });
+ WebInspector.startEditing(element, this._startEditingConfig(element));
+
window.getSelection().setBaseAndExtent(element, 0, element, 1);
},
+
+ _startEditingConfig: function(element)
+ {
+ var config = new WebInspector.EditingConfig();
+ config.setContext(element.textContent);
+ config.setCommitHandler(this._editingCommitted.bind(this));
+ config.setCancelHandler(this._editingCancelled.bind(this));
+ return config;
+ },
+
_editingCommitted: function(element, newText, oldText, context, moveDirection)
{
// FIXME: We need more column identifiers here throughout this function.
// Not needed yet since only editable DataGrid is DOM Storage, which is Key - Value.
// FIXME: Better way to do this than regular expressions?
- var columnIdentifier = parseInt(element.className.match(/\b(\d+)-column\b/)[1]);
+ var columnIdentifier = parseInt(element.className.match(/\b(\d+)-column\b/)[1], 10);
var textBeforeEditing = this._editingNode.data[columnIdentifier];
var currentEditingNode = this._editingNode;
@@ -240,7 +247,7 @@
if (nextDataGridNode)
return this._startEditingColumnOfDataGridNode(nextDataGridNode, 0);
if (currentEditingNode.isCreationNode && wasChange) {
- addCreationNode(false);
+ this.addCreationNode(false);
return this._startEditingColumnOfDataGridNode(this.creationNode, 0);
}
return;
@@ -277,7 +284,7 @@
moveToNextIfNeeded.call(this, true);
},
- _editingCancelled: function(element, context)
+ _editingCancelled: function(element)
{
delete this._editing;
this._editingNode = null;
@@ -672,7 +679,7 @@
}
for (var i = 0; i < childrenToRemove.length; ++i) {
- var child = childrenToRemove[i];
+ child = childrenToRemove[i];
child.deselect();
child._detach();
@@ -739,12 +746,12 @@
if (event.keyIdentifier === "Up" && !event.altKey) {
nextSelectedNode = this.selectedNode.traversePreviousNode(true);
while (nextSelectedNode && !nextSelectedNode.selectable)
- nextSelectedNode = nextSelectedNode.traversePreviousNode(!this.expandTreeNodesWhenArrowing);
+ nextSelectedNode = nextSelectedNode.traversePreviousNode(true);
handled = nextSelectedNode ? true : false;
} else if (event.keyIdentifier === "Down" && !event.altKey) {
nextSelectedNode = this.selectedNode.traverseNextNode(true);
while (nextSelectedNode && !nextSelectedNode.selectable)
- nextSelectedNode = nextSelectedNode.traverseNextNode(!this.expandTreeNodesWhenArrowing);
+ nextSelectedNode = nextSelectedNode.traverseNextNode(true);
handled = nextSelectedNode ? true : false;
} else if (event.keyIdentifier === "Left") {
if (this.selectedNode.expanded) {
@@ -950,16 +957,16 @@
_startResizerDragging: function(event)
{
- this.currentResizer = event.target;
- if (!this.currentResizer.rightNeighboringColumnID)
+ this._currentResizer = event.target;
+ if (!this._currentResizer.rightNeighboringColumnID)
return;
- WebInspector.elementDragStart(this.lastResizer, this._resizerDragging.bind(this),
+ WebInspector.elementDragStart(this._currentResizer, this._resizerDragging.bind(this),
this._endResizerDragging.bind(this), event, "col-resize");
},
_resizerDragging: function(event)
{
- var resizer = this.currentResizer;
+ var resizer = this._currentResizer;
if (!resizer)
return;
@@ -1009,7 +1016,7 @@
_endResizerDragging: function(event)
{
WebInspector.elementDragEnd(event);
- this.currentResizer = null;
+ this._currentResizer = null;
this.dispatchEventToListeners("width changed");
},
@@ -1026,6 +1033,10 @@
WebInspector.DataGrid.prototype.__proto__ = WebInspector.Object.prototype;
+/**
+ * @constructor
+ * @extends {WebInspector.Object}
+ */
WebInspector.DataGridNode = function(data, hasChildren)
{
this._expanded = false;
@@ -1342,6 +1353,9 @@
this.dispatchEventToListeners("revealed");
},
+ /**
+ * @param {boolean=} supressSelectedEvent
+ */
select: function(supressSelectedEvent)
{
if (!this.dataGrid || !this.selectable || this.selected)
@@ -1366,6 +1380,9 @@
this.select();
},
+ /**
+ * @param {boolean=} supressDeselectedEvent
+ */
deselect: function(supressDeselectedEvent)
{
if (!this.dataGrid || this.dataGrid.selectedNode !== this || !this.selected)
@@ -1459,7 +1476,7 @@
var nextNode = null;
var previousNode = this.traversePreviousNode(true, true);
if (previousNode && previousNode.element.parentNode && previousNode.element.nextSibling)
- var nextNode = previousNode.element.nextSibling;
+ nextNode = previousNode.element.nextSibling;
if (!nextNode)
nextNode = this.dataGrid.dataTableBody.lastChild;
this.dataGrid.dataTableBody.insertBefore(this.element, nextNode);
@@ -1510,6 +1527,10 @@
WebInspector.DataGridNode.prototype.__proto__ = WebInspector.Object.prototype;
+/**
+ * @constructor
+ * @extends {WebInspector.DataGridNode}
+ */
WebInspector.CreationDataGridNode = function(data, hasChildren)
{
WebInspector.DataGridNode.call(this, data, hasChildren);
Modified: trunk/Source/WebCore/inspector/front-end/UIUtils.js (96590 => 96591)
--- trunk/Source/WebCore/inspector/front-end/UIUtils.js 2011-10-04 14:12:19 UTC (rev 96590)
+++ trunk/Source/WebCore/inspector/front-end/UIUtils.js 2011-10-04 14:23:24 UTC (rev 96591)
@@ -165,3 +165,234 @@
};
}
+WebInspector.isBeingEdited = function(element)
+{
+ return element.__editing;
+}
+
+WebInspector.markBeingEdited = function(element, value)
+{
+ if (value) {
+ if (element.__editing)
+ return false;
+ element.__editing = true;
+ WebInspector.__editingCount = (WebInspector.__editingCount || 0) + 1;
+ } else {
+ if (!element.__editing)
+ return false;
+ delete element.__editing;
+ --WebInspector.__editingCount;
+ }
+ return true;
+}
+
+WebInspector.isEditingAnyField = function()
+{
+ return !!WebInspector.__editingCount;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.EditingConfig = function()
+{
+ /**
+ * Handles editing "commit" outcome
+ * @type {function(Element,string,string,*,string)|undefined}
+ */
+ this.commitHandler;
+
+ /**
+ * Handles editing "cancel" outcome
+ * @type {function(Element,*)|undefined}
+ */
+ this.cancelHandler;
+
+ /**
+ * Handles the "paste" event, return values are the same as those for customFinishHandler
+ * @type {function(Element)|undefined}
+ */
+ this.pasteHandler;
+
+ /**
+ * An arbitrary context object to be passed to the commit and cancel handlers
+ * @type {Object|undefined}
+ */
+ this.context;
+
+ /**
+ * Whether the edited element is multiline
+ * @type {boolean|undefined}
+ */
+ this.multiline;
+
+ /**
+ * Custom finish handler for the editing session (invoked on keydown)
+ * @type {function(Element,*)|undefined}
+ */
+ this.customFinishHandler;
+}
+
+WebInspector.EditingConfig.prototype = {
+ setCommitHandler: function(commitHandler)
+ {
+ this.commitHandler = commitHandler;
+ },
+
+ setCancelHandler: function(cancelHandler)
+ {
+ this.cancelHandler = cancelHandler;
+ },
+
+ setPasteHandler: function(pasteHandler)
+ {
+ this.pasteHandler = pasteHandler;
+ },
+
+ setContext: function(context)
+ {
+ this.context = context;
+ },
+
+ setMultiline: function(multiline)
+ {
+ this.multiline = multiline;
+ },
+
+ setCustomFinishHandler: function(customFinishHandler)
+ {
+ this.customFinishHandler = customFinishHandler;
+ }
+}
+
+/**
+ * @param {Element} element
+ * @param {WebInspector.EditingConfig=} config
+ */
+WebInspector.startEditing = function(element, config)
+{
+ if (!WebInspector.markBeingEdited(element, true))
+ return;
+
+ config = config || new WebInspector.EditingConfig();
+ var committedCallback = config.commitHandler;
+ var cancelledCallback = config.cancelHandler;
+ var pasteCallback = config.pasteHandler;
+ var context = config.context;
+ var oldText = getContent(element);
+ var moveDirection = "";
+
+ element.addStyleClass("editing");
+
+ var oldTabIndex = element.tabIndex;
+ if (element.tabIndex < 0)
+ element.tabIndex = 0;
+
+ function blurEventListener() {
+ editingCommitted.call(element);
+ }
+
+ function getContent(element) {
+ if (element.tagName === "INPUT" && element.type === "text")
+ return element.value;
+ else
+ return element.textContent;
+ }
+
+ /** @this {Element} */
+ function cleanUpAfterEditing()
+ {
+ WebInspector.markBeingEdited(element, false);
+
+ this.removeStyleClass("editing");
+ this.tabIndex = oldTabIndex;
+ this.scrollTop = 0;
+ this.scrollLeft = 0;
+
+ element.removeEventListener("blur", blurEventListener, false);
+ element.removeEventListener("keydown", keyDownEventListener, true);
+ if (pasteCallback)
+ element.removeEventListener("paste", pasteEventListener, true);
+
+ if (element === WebInspector.currentFocusElement || element.isAncestor(WebInspector.currentFocusElement))
+ WebInspector.currentFocusElement = WebInspector.previousFocusElement;
+ }
+
+ /** @this {Element} */
+ function editingCancelled()
+ {
+ if (this.tagName === "INPUT" && this.type === "text")
+ this.value = oldText;
+ else
+ this.textContent = oldText;
+
+ cleanUpAfterEditing.call(this);
+
+ if (cancelledCallback)
+ cancelledCallback(this, context);
+ }
+
+ /** @this {Element} */
+ function editingCommitted()
+ {
+ cleanUpAfterEditing.call(this);
+
+ if (committedCallback)
+ committedCallback(this, getContent(this), oldText, context, moveDirection);
+ }
+
+ function defaultFinishHandler(event)
+ {
+ var isMetaOrCtrl = WebInspector.isMac() ?
+ event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey :
+ event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey;
+ if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !config.multiline || isMetaOrCtrl))
+ return "commit";
+ else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code || event.keyIdentifier === "U+001B")
+ return "cancel";
+ else if (event.keyIdentifier === "U+0009") // Tab key
+ return "move-" + (event.shiftKey ? "backward" : "forward");
+ }
+
+ function handleEditingResult(result, event)
+ {
+ if (result === "commit") {
+ editingCommitted.call(element);
+ event.preventDefault();
+ event.stopPropagation();
+ } else if (result === "cancel") {
+ editingCancelled.call(element);
+ event.preventDefault();
+ event.stopPropagation();
+ } else if (result && result.indexOf("move-") === 0) {
+ moveDirection = result.substring(5);
+ if (event.keyIdentifier !== "U+0009")
+ blurEventListener();
+ }
+ }
+
+ function pasteEventListener(event)
+ {
+ var result = pasteCallback(event);
+ handleEditingResult(result, event);
+ }
+
+ function keyDownEventListener(event)
+ {
+ var handler = config.customFinishHandler || defaultFinishHandler;
+ var result = handler(event);
+ handleEditingResult(result, event);
+ }
+
+ element.addEventListener("blur", blurEventListener, false);
+ element.addEventListener("keydown", keyDownEventListener, true);
+ if (pasteCallback)
+ element.addEventListener("paste", pasteEventListener, true);
+
+ WebInspector.currentFocusElement = element;
+ return {
+ cancel: editingCancelled.bind(element),
+ commit: editingCommitted.bind(element)
+ };
+}
+
Modified: trunk/Source/WebCore/inspector/front-end/externs.js (96590 => 96591)
--- trunk/Source/WebCore/inspector/front-end/externs.js 2011-10-04 14:12:19 UTC (rev 96590)
+++ trunk/Source/WebCore/inspector/front-end/externs.js 2011-10-04 14:23:24 UTC (rev 96591)
@@ -77,7 +77,10 @@
Element.prototype.scrollIntoViewIfNeeded = function() {}
-Array.prototype.remove = function(obj) {}
+/**
+ * @param {boolean=} onlyFirst
+ */
+Array.prototype.remove = function(obj, onlyFirst) {}
WebInspector.extensionServer = {}
WebInspector.extensionServer.notifyResourceContentCommitted = function(resource, content) {}
@@ -178,3 +181,13 @@
* @type {string}
*/
WebInspector.platformFlavor = "";
+
+/** @param {Element} element */
+window.getComputedStyle = function(element)
+{
+}
+
+/**
+ * @type {boolean}
+ */
+Event.prototype.isMetaOrCtrlForTest = false;
Modified: trunk/Source/WebCore/inspector/front-end/inspector.js (96590 => 96591)
--- trunk/Source/WebCore/inspector/front-end/inspector.js 2011-10-04 14:12:19 UTC (rev 96590)
+++ trunk/Source/WebCore/inspector/front-end/inspector.js 2011-10-04 14:23:24 UTC (rev 96591)
@@ -1356,160 +1356,6 @@
return WebInspector.platform === "windows" && Preferences.useLowerCaseMenuTitlesOnWindows;
}
-WebInspector.isBeingEdited = function(element)
-{
- return element.__editing;
-}
-
-WebInspector.markBeingEdited = function(element, value)
-{
- if (value) {
- if (element.__editing)
- return false;
- element.__editing = true;
- WebInspector.__editingCount = (WebInspector.__editingCount || 0) + 1;
- } else {
- if (!element.__editing)
- return false;
- delete element.__editing;
- --WebInspector.__editingCount;
- }
- return true;
-}
-
-WebInspector.isEditingAnyField = function()
-{
- return !!WebInspector.__editingCount;
-}
-
-// Available config fields (all optional):
-// context: Object - an arbitrary context object to be passed to the commit and cancel handlers
-// commitHandler: Function - handles editing "commit" outcome
-// cancelHandler: Function - handles editing "cancel" outcome
-// customFinishHandler: Function - custom finish handler for the editing session (invoked on keydown)
-// pasteHandler: Function - handles the "paste" event, return values are the same as those for customFinishHandler
-// multiline: Boolean - whether the edited element is multiline
-WebInspector.startEditing = function(element, config)
-{
- if (!WebInspector.markBeingEdited(element, true))
- return;
-
- config = config || {};
- var committedCallback = config.commitHandler;
- var cancelledCallback = config.cancelHandler;
- var pasteCallback = config.pasteHandler;
- var context = config.context;
- var oldText = getContent(element);
- var moveDirection = "";
-
- element.addStyleClass("editing");
-
- var oldTabIndex = element.tabIndex;
- if (element.tabIndex < 0)
- element.tabIndex = 0;
-
- function blurEventListener() {
- editingCommitted.call(element);
- }
-
- function getContent(element) {
- if (element.tagName === "INPUT" && element.type === "text")
- return element.value;
- else
- return element.textContent;
- }
-
- function cleanUpAfterEditing() {
- WebInspector.markBeingEdited(element, false);
-
- this.removeStyleClass("editing");
- this.tabIndex = oldTabIndex;
- this.scrollTop = 0;
- this.scrollLeft = 0;
-
- element.removeEventListener("blur", blurEventListener, false);
- element.removeEventListener("keydown", keyDownEventListener, true);
- if (pasteCallback)
- element.removeEventListener("paste", pasteEventListener, true);
-
- if (element === WebInspector.currentFocusElement || element.isAncestor(WebInspector.currentFocusElement))
- WebInspector.currentFocusElement = WebInspector.previousFocusElement;
- }
-
- function editingCancelled() {
- if (this.tagName === "INPUT" && this.type === "text")
- this.value = oldText;
- else
- this.textContent = oldText;
-
- cleanUpAfterEditing.call(this);
-
- if (cancelledCallback)
- cancelledCallback(this, context);
- }
-
- function editingCommitted() {
- cleanUpAfterEditing.call(this);
-
- if (committedCallback)
- committedCallback(this, getContent(this), oldText, context, moveDirection);
- }
-
- function defaultFinishHandler(event)
- {
- var isMetaOrCtrl = WebInspector.isMac() ?
- event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey :
- event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey;
- if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !config.multiline || isMetaOrCtrl))
- return "commit";
- else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code || event.keyIdentifier === "U+001B")
- return "cancel";
- else if (event.keyIdentifier === "U+0009") // Tab key
- return "move-" + (event.shiftKey ? "backward" : "forward");
- }
-
- function handleEditingResult(result, event)
- {
- if (result === "commit") {
- editingCommitted.call(element);
- event.preventDefault();
- event.stopPropagation();
- } else if (result === "cancel") {
- editingCancelled.call(element);
- event.preventDefault();
- event.stopPropagation();
- } else if (result && result.indexOf("move-") === 0) {
- moveDirection = result.substring(5);
- if (event.keyIdentifier !== "U+0009")
- blurEventListener();
- }
- }
-
- function pasteEventListener(event)
- {
- var result = pasteCallback(event);
- handleEditingResult(result, event);
- }
-
- function keyDownEventListener(event)
- {
- var handler = config.customFinishHandler || defaultFinishHandler;
- var result = handler(event);
- handleEditingResult(result, event);
- }
-
- element.addEventListener("blur", blurEventListener, false);
- element.addEventListener("keydown", keyDownEventListener, true);
- if (pasteCallback)
- element.addEventListener("paste", pasteEventListener, true);
-
- WebInspector.currentFocusElement = element;
- return {
- cancel: editingCancelled.bind(element),
- commit: editingCommitted.bind(element)
- };
-}
-
WebInspector._toolbarItemClicked = function(event)
{
var toolbarItem = event.currentTarget;