Changeset 96591 in webkit
- Timestamp:
- Oct 4, 2011 7:23:24 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r96589 r96591 1 2011-10-04 Pavel Feldman <pfeldman@chromium.org> 2 3 Web Inspector: make DataGrid compile 4 https://bugs.webkit.org/show_bug.cgi?id=69334 5 6 Reviewed by Yury Semikhatsky. 7 8 * inspector/compile-front-end.sh: 9 * inspector/front-end/DataGrid.js: 10 (WebInspector.DataGrid): 11 (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode): 12 (WebInspector.DataGrid.prototype._startEditing): 13 (WebInspector.DataGrid.prototype._startEditingConfig): 14 (WebInspector.DataGrid.prototype._editingCommitted.moveToNextIfNeeded): 15 (WebInspector.DataGrid.prototype._editingCommitted): 16 (WebInspector.DataGrid.prototype._editingCancelled): 17 (WebInspector.DataGrid.prototype.removeChildrenRecursive): 18 (WebInspector.DataGrid.prototype._keyDown): 19 (WebInspector.DataGrid.prototype._startResizerDragging): 20 (WebInspector.DataGrid.prototype._resizerDragging): 21 (WebInspector.DataGrid.prototype._endResizerDragging): 22 (WebInspector.DataGridNode.prototype._attach): 23 * inspector/front-end/UIUtils.js: 24 (WebInspector.isBeingEdited): 25 (WebInspector.markBeingEdited): 26 (WebInspector.isEditingAnyField): 27 (WebInspector.EditingConfig): 28 (WebInspector.startEditing.blurEventListener): 29 (WebInspector.startEditing.getContent): 30 (WebInspector.startEditing.cleanUpAfterEditing): 31 (WebInspector.startEditing.editingCancelled): 32 (WebInspector.startEditing.editingCommitted): 33 (WebInspector.startEditing.defaultFinishHandler): 34 (WebInspector.startEditing): 35 (WebInspector.startEditing.pasteEventListener): 36 (WebInspector.startEditing.keyDownEventListener): 37 * inspector/front-end/externs.js: 38 (Array.prototype.remove): 39 (window.getComputedStyle): 40 * inspector/front-end/inspector.js: 41 1 42 2011-10-04 Andrey Kosyakov <caseq@chromium.org> 2 43 -
trunk/Source/WebCore/inspector/compile-front-end.sh
r96588 r96591 64 64 --js Source/WebCore/inspector/front-end/NetworkManager.js \ 65 65 --js Source/WebCore/inspector/front-end/UISourceCode.js \ 66 --module jsmodule_ui:2 1:jsmodule_common \66 --module jsmodule_ui:22:jsmodule_common \ 67 67 --js Source/WebCore/inspector/front-end/Checkbox.js \ 68 68 --js Source/WebCore/inspector/front-end/ContextMenu.js \ 69 --js Source/WebCore/inspector/front-end/DataGrid.js \ 69 70 --js Source/WebCore/inspector/front-end/Drawer.js \ 70 71 --js Source/WebCore/inspector/front-end/EmptyView.js \ -
trunk/Source/WebCore/inspector/front-end/DataGrid.js
r94754 r96591 24 24 */ 25 25 26 /** 27 * @constructor 28 * @extends {WebInspector.Object} 29 */ 26 30 WebInspector.DataGrid = function(columns, editCallback, deleteCallback) 27 31 { … … 121 125 for (var columnIdentifier in columns) { 122 126 var column = columns[columnIdentifier]; 123 var cell= document.createElement("td");124 cell.className = columnIdentifier + "-column";125 fillerRow.appendChild( cell);127 var td = document.createElement("td"); 128 td.className = columnIdentifier + "-column"; 129 fillerRow.appendChild(td); 126 130 } 127 131 … … 181 185 182 186 var element = this._editingNode._element.children[column]; 183 WebInspector.startEditing(element, { 184 context: element.textContent, 185 commitHandler: this._editingCommitted.bind(this), 186 cancelHandler: this._editingCancelled.bind(this) 187 }); 187 WebInspector.startEditing(element, this._startEditingConfig(element)); 188 188 window.getSelection().setBaseAndExtent(element, 0, element, 1); 189 189 }, … … 207 207 208 208 this._editing = true; 209 WebInspector.startEditing(element, { 210 context: element.textContent, 211 commitHandler: this._editingCommitted.bind(this), 212 cancelHandler: this._editingCancelled.bind(this) 213 }); 209 WebInspector.startEditing(element, this._startEditingConfig(element)); 210 214 211 window.getSelection().setBaseAndExtent(element, 0, element, 1); 212 }, 213 214 215 _startEditingConfig: function(element) 216 { 217 var config = new WebInspector.EditingConfig(); 218 config.setContext(element.textContent); 219 config.setCommitHandler(this._editingCommitted.bind(this)); 220 config.setCancelHandler(this._editingCancelled.bind(this)); 221 return config; 215 222 }, 216 223 … … 221 228 222 229 // FIXME: Better way to do this than regular expressions? 223 var columnIdentifier = parseInt(element.className.match(/\b(\d+)-column\b/)[1] );230 var columnIdentifier = parseInt(element.className.match(/\b(\d+)-column\b/)[1], 10); 224 231 225 232 var textBeforeEditing = this._editingNode.data[columnIdentifier]; … … 241 248 return this._startEditingColumnOfDataGridNode(nextDataGridNode, 0); 242 249 if (currentEditingNode.isCreationNode && wasChange) { 243 addCreationNode(false);250 this.addCreationNode(false); 244 251 return this._startEditingColumnOfDataGridNode(this.creationNode, 0); 245 252 } … … 278 285 }, 279 286 280 _editingCancelled: function(element , context)287 _editingCancelled: function(element) 281 288 { 282 289 delete this._editing; … … 673 680 674 681 for (var i = 0; i < childrenToRemove.length; ++i) { 675 varchild = childrenToRemove[i];682 child = childrenToRemove[i]; 676 683 child.deselect(); 677 684 child._detach(); … … 740 747 nextSelectedNode = this.selectedNode.traversePreviousNode(true); 741 748 while (nextSelectedNode && !nextSelectedNode.selectable) 742 nextSelectedNode = nextSelectedNode.traversePreviousNode( !this.expandTreeNodesWhenArrowing);749 nextSelectedNode = nextSelectedNode.traversePreviousNode(true); 743 750 handled = nextSelectedNode ? true : false; 744 751 } else if (event.keyIdentifier === "Down" && !event.altKey) { 745 752 nextSelectedNode = this.selectedNode.traverseNextNode(true); 746 753 while (nextSelectedNode && !nextSelectedNode.selectable) 747 nextSelectedNode = nextSelectedNode.traverseNextNode( !this.expandTreeNodesWhenArrowing);754 nextSelectedNode = nextSelectedNode.traverseNextNode(true); 748 755 handled = nextSelectedNode ? true : false; 749 756 } else if (event.keyIdentifier === "Left") { … … 951 958 _startResizerDragging: function(event) 952 959 { 953 this. currentResizer = event.target;954 if (!this. currentResizer.rightNeighboringColumnID)955 return; 956 WebInspector.elementDragStart(this. lastResizer, this._resizerDragging.bind(this),960 this._currentResizer = event.target; 961 if (!this._currentResizer.rightNeighboringColumnID) 962 return; 963 WebInspector.elementDragStart(this._currentResizer, this._resizerDragging.bind(this), 957 964 this._endResizerDragging.bind(this), event, "col-resize"); 958 965 }, … … 960 967 _resizerDragging: function(event) 961 968 { 962 var resizer = this. currentResizer;969 var resizer = this._currentResizer; 963 970 if (!resizer) 964 971 return; … … 1010 1017 { 1011 1018 WebInspector.elementDragEnd(event); 1012 this. currentResizer = null;1019 this._currentResizer = null; 1013 1020 this.dispatchEventToListeners("width changed"); 1014 1021 }, … … 1027 1034 WebInspector.DataGrid.prototype.__proto__ = WebInspector.Object.prototype; 1028 1035 1036 /** 1037 * @constructor 1038 * @extends {WebInspector.Object} 1039 */ 1029 1040 WebInspector.DataGridNode = function(data, hasChildren) 1030 1041 { … … 1343 1354 }, 1344 1355 1356 /** 1357 * @param {boolean=} supressSelectedEvent 1358 */ 1345 1359 select: function(supressSelectedEvent) 1346 1360 { … … 1367 1381 }, 1368 1382 1383 /** 1384 * @param {boolean=} supressDeselectedEvent 1385 */ 1369 1386 deselect: function(supressDeselectedEvent) 1370 1387 { … … 1460 1477 var previousNode = this.traversePreviousNode(true, true); 1461 1478 if (previousNode && previousNode.element.parentNode && previousNode.element.nextSibling) 1462 varnextNode = previousNode.element.nextSibling;1479 nextNode = previousNode.element.nextSibling; 1463 1480 if (!nextNode) 1464 1481 nextNode = this.dataGrid.dataTableBody.lastChild; … … 1511 1528 WebInspector.DataGridNode.prototype.__proto__ = WebInspector.Object.prototype; 1512 1529 1530 /** 1531 * @constructor 1532 * @extends {WebInspector.DataGridNode} 1533 */ 1513 1534 WebInspector.CreationDataGridNode = function(data, hasChildren) 1514 1535 { -
trunk/Source/WebCore/inspector/front-end/UIUtils.js
r96584 r96591 166 166 } 167 167 168 WebInspector.isBeingEdited = function(element) 169 { 170 return element.__editing; 171 } 172 173 WebInspector.markBeingEdited = function(element, value) 174 { 175 if (value) { 176 if (element.__editing) 177 return false; 178 element.__editing = true; 179 WebInspector.__editingCount = (WebInspector.__editingCount || 0) + 1; 180 } else { 181 if (!element.__editing) 182 return false; 183 delete element.__editing; 184 --WebInspector.__editingCount; 185 } 186 return true; 187 } 188 189 WebInspector.isEditingAnyField = function() 190 { 191 return !!WebInspector.__editingCount; 192 } 193 194 /** 195 * @constructor 196 */ 197 WebInspector.EditingConfig = function() 198 { 199 /** 200 * Handles editing "commit" outcome 201 * @type {function(Element,string,string,*,string)|undefined} 202 */ 203 this.commitHandler; 204 205 /** 206 * Handles editing "cancel" outcome 207 * @type {function(Element,*)|undefined} 208 */ 209 this.cancelHandler; 210 211 /** 212 * Handles the "paste" event, return values are the same as those for customFinishHandler 213 * @type {function(Element)|undefined} 214 */ 215 this.pasteHandler; 216 217 /** 218 * An arbitrary context object to be passed to the commit and cancel handlers 219 * @type {Object|undefined} 220 */ 221 this.context; 222 223 /** 224 * Whether the edited element is multiline 225 * @type {boolean|undefined} 226 */ 227 this.multiline; 228 229 /** 230 * Custom finish handler for the editing session (invoked on keydown) 231 * @type {function(Element,*)|undefined} 232 */ 233 this.customFinishHandler; 234 } 235 236 WebInspector.EditingConfig.prototype = { 237 setCommitHandler: function(commitHandler) 238 { 239 this.commitHandler = commitHandler; 240 }, 241 242 setCancelHandler: function(cancelHandler) 243 { 244 this.cancelHandler = cancelHandler; 245 }, 246 247 setPasteHandler: function(pasteHandler) 248 { 249 this.pasteHandler = pasteHandler; 250 }, 251 252 setContext: function(context) 253 { 254 this.context = context; 255 }, 256 257 setMultiline: function(multiline) 258 { 259 this.multiline = multiline; 260 }, 261 262 setCustomFinishHandler: function(customFinishHandler) 263 { 264 this.customFinishHandler = customFinishHandler; 265 } 266 } 267 268 /** 269 * @param {Element} element 270 * @param {WebInspector.EditingConfig=} config 271 */ 272 WebInspector.startEditing = function(element, config) 273 { 274 if (!WebInspector.markBeingEdited(element, true)) 275 return; 276 277 config = config || new WebInspector.EditingConfig(); 278 var committedCallback = config.commitHandler; 279 var cancelledCallback = config.cancelHandler; 280 var pasteCallback = config.pasteHandler; 281 var context = config.context; 282 var oldText = getContent(element); 283 var moveDirection = ""; 284 285 element.addStyleClass("editing"); 286 287 var oldTabIndex = element.tabIndex; 288 if (element.tabIndex < 0) 289 element.tabIndex = 0; 290 291 function blurEventListener() { 292 editingCommitted.call(element); 293 } 294 295 function getContent(element) { 296 if (element.tagName === "INPUT" && element.type === "text") 297 return element.value; 298 else 299 return element.textContent; 300 } 301 302 /** @this {Element} */ 303 function cleanUpAfterEditing() 304 { 305 WebInspector.markBeingEdited(element, false); 306 307 this.removeStyleClass("editing"); 308 this.tabIndex = oldTabIndex; 309 this.scrollTop = 0; 310 this.scrollLeft = 0; 311 312 element.removeEventListener("blur", blurEventListener, false); 313 element.removeEventListener("keydown", keyDownEventListener, true); 314 if (pasteCallback) 315 element.removeEventListener("paste", pasteEventListener, true); 316 317 if (element === WebInspector.currentFocusElement || element.isAncestor(WebInspector.currentFocusElement)) 318 WebInspector.currentFocusElement = WebInspector.previousFocusElement; 319 } 320 321 /** @this {Element} */ 322 function editingCancelled() 323 { 324 if (this.tagName === "INPUT" && this.type === "text") 325 this.value = oldText; 326 else 327 this.textContent = oldText; 328 329 cleanUpAfterEditing.call(this); 330 331 if (cancelledCallback) 332 cancelledCallback(this, context); 333 } 334 335 /** @this {Element} */ 336 function editingCommitted() 337 { 338 cleanUpAfterEditing.call(this); 339 340 if (committedCallback) 341 committedCallback(this, getContent(this), oldText, context, moveDirection); 342 } 343 344 function defaultFinishHandler(event) 345 { 346 var isMetaOrCtrl = WebInspector.isMac() ? 347 event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey : 348 event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey; 349 if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !config.multiline || isMetaOrCtrl)) 350 return "commit"; 351 else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code || event.keyIdentifier === "U+001B") 352 return "cancel"; 353 else if (event.keyIdentifier === "U+0009") // Tab key 354 return "move-" + (event.shiftKey ? "backward" : "forward"); 355 } 356 357 function handleEditingResult(result, event) 358 { 359 if (result === "commit") { 360 editingCommitted.call(element); 361 event.preventDefault(); 362 event.stopPropagation(); 363 } else if (result === "cancel") { 364 editingCancelled.call(element); 365 event.preventDefault(); 366 event.stopPropagation(); 367 } else if (result && result.indexOf("move-") === 0) { 368 moveDirection = result.substring(5); 369 if (event.keyIdentifier !== "U+0009") 370 blurEventListener(); 371 } 372 } 373 374 function pasteEventListener(event) 375 { 376 var result = pasteCallback(event); 377 handleEditingResult(result, event); 378 } 379 380 function keyDownEventListener(event) 381 { 382 var handler = config.customFinishHandler || defaultFinishHandler; 383 var result = handler(event); 384 handleEditingResult(result, event); 385 } 386 387 element.addEventListener("blur", blurEventListener, false); 388 element.addEventListener("keydown", keyDownEventListener, true); 389 if (pasteCallback) 390 element.addEventListener("paste", pasteEventListener, true); 391 392 WebInspector.currentFocusElement = element; 393 return { 394 cancel: editingCancelled.bind(element), 395 commit: editingCommitted.bind(element) 396 }; 397 } 398 -
trunk/Source/WebCore/inspector/front-end/externs.js
r96588 r96591 78 78 Element.prototype.scrollIntoViewIfNeeded = function() {} 79 79 80 Array.prototype.remove = function(obj) {} 80 /** 81 * @param {boolean=} onlyFirst 82 */ 83 Array.prototype.remove = function(obj, onlyFirst) {} 81 84 82 85 WebInspector.extensionServer = {} … … 179 182 */ 180 183 WebInspector.platformFlavor = ""; 184 185 /** @param {Element} element */ 186 window.getComputedStyle = function(element) 187 { 188 } 189 190 /** 191 * @type {boolean} 192 */ 193 Event.prototype.isMetaOrCtrlForTest = false; -
trunk/Source/WebCore/inspector/front-end/inspector.js
r96584 r96591 1357 1357 } 1358 1358 1359 WebInspector.isBeingEdited = function(element)1360 {1361 return element.__editing;1362 }1363 1364 WebInspector.markBeingEdited = function(element, value)1365 {1366 if (value) {1367 if (element.__editing)1368 return false;1369 element.__editing = true;1370 WebInspector.__editingCount = (WebInspector.__editingCount || 0) + 1;1371 } else {1372 if (!element.__editing)1373 return false;1374 delete element.__editing;1375 --WebInspector.__editingCount;1376 }1377 return true;1378 }1379 1380 WebInspector.isEditingAnyField = function()1381 {1382 return !!WebInspector.__editingCount;1383 }1384 1385 // Available config fields (all optional):1386 // context: Object - an arbitrary context object to be passed to the commit and cancel handlers1387 // commitHandler: Function - handles editing "commit" outcome1388 // cancelHandler: Function - handles editing "cancel" outcome1389 // customFinishHandler: Function - custom finish handler for the editing session (invoked on keydown)1390 // pasteHandler: Function - handles the "paste" event, return values are the same as those for customFinishHandler1391 // multiline: Boolean - whether the edited element is multiline1392 WebInspector.startEditing = function(element, config)1393 {1394 if (!WebInspector.markBeingEdited(element, true))1395 return;1396 1397 config = config || {};1398 var committedCallback = config.commitHandler;1399 var cancelledCallback = config.cancelHandler;1400 var pasteCallback = config.pasteHandler;1401 var context = config.context;1402 var oldText = getContent(element);1403 var moveDirection = "";1404 1405 element.addStyleClass("editing");1406 1407 var oldTabIndex = element.tabIndex;1408 if (element.tabIndex < 0)1409 element.tabIndex = 0;1410 1411 function blurEventListener() {1412 editingCommitted.call(element);1413 }1414 1415 function getContent(element) {1416 if (element.tagName === "INPUT" && element.type === "text")1417 return element.value;1418 else1419 return element.textContent;1420 }1421 1422 function cleanUpAfterEditing() {1423 WebInspector.markBeingEdited(element, false);1424 1425 this.removeStyleClass("editing");1426 this.tabIndex = oldTabIndex;1427 this.scrollTop = 0;1428 this.scrollLeft = 0;1429 1430 element.removeEventListener("blur", blurEventListener, false);1431 element.removeEventListener("keydown", keyDownEventListener, true);1432 if (pasteCallback)1433 element.removeEventListener("paste", pasteEventListener, true);1434 1435 if (element === WebInspector.currentFocusElement || element.isAncestor(WebInspector.currentFocusElement))1436 WebInspector.currentFocusElement = WebInspector.previousFocusElement;1437 }1438 1439 function editingCancelled() {1440 if (this.tagName === "INPUT" && this.type === "text")1441 this.value = oldText;1442 else1443 this.textContent = oldText;1444 1445 cleanUpAfterEditing.call(this);1446 1447 if (cancelledCallback)1448 cancelledCallback(this, context);1449 }1450 1451 function editingCommitted() {1452 cleanUpAfterEditing.call(this);1453 1454 if (committedCallback)1455 committedCallback(this, getContent(this), oldText, context, moveDirection);1456 }1457 1458 function defaultFinishHandler(event)1459 {1460 var isMetaOrCtrl = WebInspector.isMac() ?1461 event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey :1462 event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey;1463 if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !config.multiline || isMetaOrCtrl))1464 return "commit";1465 else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code || event.keyIdentifier === "U+001B")1466 return "cancel";1467 else if (event.keyIdentifier === "U+0009") // Tab key1468 return "move-" + (event.shiftKey ? "backward" : "forward");1469 }1470 1471 function handleEditingResult(result, event)1472 {1473 if (result === "commit") {1474 editingCommitted.call(element);1475 event.preventDefault();1476 event.stopPropagation();1477 } else if (result === "cancel") {1478 editingCancelled.call(element);1479 event.preventDefault();1480 event.stopPropagation();1481 } else if (result && result.indexOf("move-") === 0) {1482 moveDirection = result.substring(5);1483 if (event.keyIdentifier !== "U+0009")1484 blurEventListener();1485 }1486 }1487 1488 function pasteEventListener(event)1489 {1490 var result = pasteCallback(event);1491 handleEditingResult(result, event);1492 }1493 1494 function keyDownEventListener(event)1495 {1496 var handler = config.customFinishHandler || defaultFinishHandler;1497 var result = handler(event);1498 handleEditingResult(result, event);1499 }1500 1501 element.addEventListener("blur", blurEventListener, false);1502 element.addEventListener("keydown", keyDownEventListener, true);1503 if (pasteCallback)1504 element.addEventListener("paste", pasteEventListener, true);1505 1506 WebInspector.currentFocusElement = element;1507 return {1508 cancel: editingCancelled.bind(element),1509 commit: editingCommitted.bind(element)1510 };1511 }1512 1513 1359 WebInspector._toolbarItemClicked = function(event) 1514 1360 {
Note: See TracChangeset
for help on using the changeset viewer.