Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
| 3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 121 this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerB reakpointsSidebarPane(); | 121 this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerB reakpointsSidebarPane(); |
| 122 | 122 |
| 123 if (Capabilities.canInspectWorkers && !WebInspector.WorkerManager.isWorkerFr ontend()) { | 123 if (Capabilities.canInspectWorkers && !WebInspector.WorkerManager.isWorkerFr ontend()) { |
| 124 WorkerAgent.enable(); | 124 WorkerAgent.enable(); |
| 125 this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane(WebIn spector.workerManager); | 125 this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane(WebIn spector.workerManager); |
| 126 } | 126 } |
| 127 | 127 |
| 128 this.sidebarPanes.callstack.registerShortcuts(this.registerShortcuts.bind(th is)); | 128 this.sidebarPanes.callstack.registerShortcuts(this.registerShortcuts.bind(th is)); |
| 129 this.registerShortcuts(WebInspector.ScriptsPanelDescriptor.ShortcutKeys.GoTo Member, this._showOutlineDialog.bind(this)); | 129 this.registerShortcuts(WebInspector.ScriptsPanelDescriptor.ShortcutKeys.GoTo Member, this._showOutlineDialog.bind(this)); |
| 130 this.registerShortcuts(WebInspector.ScriptsPanelDescriptor.ShortcutKeys.Togg leBreakpoint, this._toggleBreakpoint.bind(this)); | 130 this.registerShortcuts(WebInspector.ScriptsPanelDescriptor.ShortcutKeys.Togg leBreakpoint, this._toggleBreakpoint.bind(this)); |
| 131 this.registerShortcuts(WebInspector.ScriptsPanelDescriptor.ShortcutKeys.Jump ToPreviousPosition, this._previousPosition.bind(this)); | |
| 132 this.registerShortcuts(WebInspector.ScriptsPanelDescriptor.ShortcutKeys.Jump ToNextPosition, this._nextPosition.bind(this)); | |
| 131 | 133 |
| 132 this._pauseOnExceptionButton = new WebInspector.StatusBarButton("", "scripts -pause-on-exceptions-status-bar-item", 3); | 134 this._pauseOnExceptionButton = new WebInspector.StatusBarButton("", "scripts -pause-on-exceptions-status-bar-item", 3); |
| 133 this._pauseOnExceptionButton.addEventListener("click", this._togglePauseOnEx ceptions, this); | 135 this._pauseOnExceptionButton.addEventListener("click", this._togglePauseOnEx ceptions, this); |
| 134 | 136 |
| 135 this._toggleFormatSourceButton = new WebInspector.StatusBarButton(WebInspect or.UIString("Pretty print"), "scripts-toggle-pretty-print-status-bar-item"); | 137 this._toggleFormatSourceButton = new WebInspector.StatusBarButton(WebInspect or.UIString("Pretty print"), "scripts-toggle-pretty-print-status-bar-item"); |
| 136 this._toggleFormatSourceButton.toggled = false; | 138 this._toggleFormatSourceButton.toggled = false; |
| 137 this._toggleFormatSourceButton.addEventListener("click", this._toggleFormatS ource, this); | 139 this._toggleFormatSourceButton.addEventListener("click", this._toggleFormatS ource, this); |
| 138 | 140 |
| 139 this._scriptViewStatusBarItemsContainer = document.createElement("div"); | 141 this._scriptViewStatusBarItemsContainer = document.createElement("div"); |
| 140 this._scriptViewStatusBarItemsContainer.className = "inline-block"; | 142 this._scriptViewStatusBarItemsContainer.className = "inline-block"; |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 170 | 172 |
| 171 this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeA dded, this._uiSourceCodeAdded, this); | 173 this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeA dded, this._uiSourceCodeAdded, this); |
| 172 this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeR emoved, this._uiSourceCodeRemoved, this); | 174 this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeR emoved, this._uiSourceCodeRemoved, this); |
| 173 this._workspace.addEventListener(WebInspector.Workspace.Events.ProjectWillRe set, this._projectWillReset.bind(this), this); | 175 this._workspace.addEventListener(WebInspector.Workspace.Events.ProjectWillRe set, this._projectWillReset.bind(this), this); |
| 174 WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Event s.GlobalObjectCleared, this._debuggerReset, this); | 176 WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Event s.GlobalObjectCleared, this._debuggerReset, this); |
| 175 | 177 |
| 176 WebInspector.advancedSearchController.registerSearchScope(new WebInspector.S criptsSearchScope(this._workspace)); | 178 WebInspector.advancedSearchController.registerSearchScope(new WebInspector.S criptsSearchScope(this._workspace)); |
| 177 | 179 |
| 178 this._boundOnKeyUp = this._onKeyUp.bind(this); | 180 this._boundOnKeyUp = this._onKeyUp.bind(this); |
| 179 this._boundOnKeyDown = this._onKeyDown.bind(this); | 181 this._boundOnKeyDown = this._onKeyDown.bind(this); |
| 182 | |
| 183 this._jumpHistoryManager = new WebInspector.ScriptsPanel.JumpHistoryManager( ); | |
| 180 } | 184 } |
| 181 | 185 |
| 182 WebInspector.ScriptsPanel.prototype = { | 186 WebInspector.ScriptsPanel.prototype = { |
| 183 get statusBarItems() | 187 get statusBarItems() |
| 184 { | 188 { |
| 185 return [this._pauseOnExceptionButton.element, this._toggleFormatSourceBu tton.element, this._scriptViewStatusBarItemsContainer]; | 189 return [this._pauseOnExceptionButton.element, this._toggleFormatSourceBu tton.element, this._scriptViewStatusBarItemsContainer]; |
| 186 }, | 190 }, |
| 187 | 191 |
| 188 /** | 192 /** |
| 189 * @return {?Element} | 193 * @return {?Element} |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 355 this.sidebarPanes.watchExpressions.reset(); | 359 this.sidebarPanes.watchExpressions.reset(); |
| 356 }, | 360 }, |
| 357 | 361 |
| 358 _projectWillReset: function(event) | 362 _projectWillReset: function(event) |
| 359 { | 363 { |
| 360 var project = event.data; | 364 var project = event.data; |
| 361 var uiSourceCodes = project.uiSourceCodes(); | 365 var uiSourceCodes = project.uiSourceCodes(); |
| 362 this._removeUISourceCodes(uiSourceCodes); | 366 this._removeUISourceCodes(uiSourceCodes); |
| 363 if (project.type() === WebInspector.projectTypes.Network) | 367 if (project.type() === WebInspector.projectTypes.Network) |
| 364 this._editorContainer.reset(); | 368 this._editorContainer.reset(); |
| 369 this._jumpHistoryManager.dropHistoryEntries(project.id(), null); | |
|
vsevik
2013/08/29 10:46:16
move this to _removeUISourceCodes
| |
| 365 }, | 370 }, |
| 366 | 371 |
| 367 get visibleView() | 372 get visibleView() |
| 368 { | 373 { |
| 369 return this._editorContainer.visibleView; | 374 return this._editorContainer.visibleView; |
| 370 }, | 375 }, |
| 371 | 376 |
| 372 _updateScriptViewStatusBarItems: function() | 377 _updateScriptViewStatusBarItems: function() |
| 373 { | 378 { |
| 374 this._scriptViewStatusBarItemsContainer.removeChildren(); | 379 this._scriptViewStatusBarItemsContainer.removeChildren(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 455 if (this._currentUISourceCode.project().type() === WebInspector.projectT ypes.Snippets) | 460 if (this._currentUISourceCode.project().type() === WebInspector.projectT ypes.Snippets) |
| 456 this._runSnippetButton.element.removeStyleClass("hidden"); | 461 this._runSnippetButton.element.removeStyleClass("hidden"); |
| 457 else | 462 else |
| 458 this._runSnippetButton.element.addStyleClass("hidden"); | 463 this._runSnippetButton.element.addStyleClass("hidden"); |
| 459 | 464 |
| 460 return sourceFrame; | 465 return sourceFrame; |
| 461 }, | 466 }, |
| 462 | 467 |
| 463 /** | 468 /** |
| 464 * @param {WebInspector.UISourceCode} uiSourceCode | 469 * @param {WebInspector.UISourceCode} uiSourceCode |
| 470 * @param {WebInspector.TextEditorPositionHandler} from | |
| 471 * @param {WebInspector.TextEditorPositionHandler} to | |
| 472 */ | |
| 473 _onJumpToPosition: function(uiSourceCode, from, to) | |
| 474 { | |
| 475 if (this._searchQuery || !WebInspector.experimentsSettings.jumpToPreviou sLocation.isEnabled()) | |
| 476 return; | |
| 477 if (this._muteJumpToPositionEvent) { | |
| 478 if (from) | |
| 479 this._jumpHistoryManager.updateEntry(this._historyEntryToUpdate, uiSourceCode.project().id(), uiSourceCode.path(), from); | |
| 480 return; | |
| 481 } | |
| 482 if (from && !this._jumpHistoryManager.empty()) | |
| 483 this._jumpHistoryManager.updateEntry(this._jumpHistoryManager.curren t(), uiSourceCode.project().id(), uiSourceCode.path(), from); | |
| 484 if (to) | |
| 485 this._jumpHistoryManager.push(uiSourceCode.project().id(), uiSourceC ode.path(), to); | |
| 486 }, | |
| 487 | |
| 488 /** | |
| 489 * @param {?Event=} event | |
| 490 * @return {boolean} | |
| 491 */ | |
| 492 _previousPosition: function(event) | |
| 493 { | |
| 494 var previous = this._jumpHistoryManager.current(); | |
| 495 var entry = this._jumpHistoryManager.rollback(); | |
| 496 if (!entry) | |
| 497 return false; | |
| 498 this._applyHistoryEntry(previous, entry); | |
| 499 return true; | |
| 500 }, | |
| 501 | |
| 502 /** | |
| 503 * @param {?Event=} event | |
| 504 * @return {boolean} | |
| 505 */ | |
| 506 _nextPosition: function(event) | |
| 507 { | |
| 508 var previous = this._jumpHistoryManager.current(); | |
| 509 var entry = this._jumpHistoryManager.rollover(); | |
| 510 if (!entry) | |
| 511 return false; | |
| 512 this._applyHistoryEntry(previous, entry); | |
| 513 return true; | |
| 514 }, | |
| 515 | |
| 516 /** | |
| 517 * @param {WebInspector.ScriptsPanel.JumpHistoryEntry} previousEntry | |
| 518 * @param {WebInspector.ScriptsPanel.JumpHistoryEntry} newEntry | |
| 519 */ | |
| 520 _applyHistoryEntry: function(previousEntry, newEntry) | |
| 521 { | |
| 522 var position = newEntry.position.resolve(); | |
| 523 var uiSourceCode = WebInspector.workspace.project(newEntry.projectId).ui SourceCode(newEntry.path); | |
| 524 this._muteJumpToPositionEvent = true; | |
| 525 this._historyEntryToUpdate = previousEntry; | |
| 526 this._showSourceLocation(uiSourceCode, position.lineNumber, position.col umnNumber); | |
| 527 delete this._historyEntryToUpdate; | |
| 528 delete this._muteJumpToPositionEvent; | |
| 529 }, | |
| 530 | |
| 531 /** | |
| 532 * @param {WebInspector.UISourceCode} uiSourceCode | |
| 465 * @return {WebInspector.SourceFrame} | 533 * @return {WebInspector.SourceFrame} |
| 466 */ | 534 */ |
| 467 _createSourceFrame: function(uiSourceCode) | 535 _createSourceFrame: function(uiSourceCode) |
| 468 { | 536 { |
| 469 var sourceFrame; | 537 var sourceFrame; |
| 470 switch (uiSourceCode.contentType()) { | 538 switch (uiSourceCode.contentType()) { |
| 471 case WebInspector.resourceTypes.Script: | 539 case WebInspector.resourceTypes.Script: |
| 472 sourceFrame = new WebInspector.JavaScriptSourceFrame(this, uiSourceC ode); | 540 sourceFrame = new WebInspector.JavaScriptSourceFrame(this, uiSourceC ode); |
| 473 break; | 541 break; |
| 474 case WebInspector.resourceTypes.Document: | 542 case WebInspector.resourceTypes.Document: |
| 475 sourceFrame = new WebInspector.JavaScriptSourceFrame(this, uiSourceC ode); | 543 sourceFrame = new WebInspector.JavaScriptSourceFrame(this, uiSourceC ode); |
| 476 break; | 544 break; |
| 477 case WebInspector.resourceTypes.Stylesheet: | 545 case WebInspector.resourceTypes.Stylesheet: |
| 478 default: | 546 default: |
| 479 sourceFrame = new WebInspector.UISourceCodeFrame(uiSourceCode); | 547 sourceFrame = new WebInspector.UISourceCodeFrame(uiSourceCode); |
| 480 break; | 548 break; |
| 481 } | 549 } |
| 482 this._sourceFramesByUISourceCode.put(uiSourceCode, sourceFrame); | 550 this._sourceFramesByUISourceCode.put(uiSourceCode, sourceFrame); |
| 551 sourceFrame.setJumpToPositionDelegate(this._onJumpToPosition.bind(this, uiSourceCode)); | |
| 483 return sourceFrame; | 552 return sourceFrame; |
| 484 }, | 553 }, |
| 485 | 554 |
| 486 /** | 555 /** |
| 487 * @param {WebInspector.UISourceCode} uiSourceCode | 556 * @param {WebInspector.UISourceCode} uiSourceCode |
| 488 * @return {WebInspector.SourceFrame} | 557 * @return {WebInspector.SourceFrame} |
| 489 */ | 558 */ |
| 490 _getOrCreateSourceFrame: function(uiSourceCode) | 559 _getOrCreateSourceFrame: function(uiSourceCode) |
| 491 { | 560 { |
| 492 return this._sourceFramesByUISourceCode.get(uiSourceCode) || this._creat eSourceFrame(uiSourceCode); | 561 return this._sourceFramesByUISourceCode.get(uiSourceCode) || this._creat eSourceFrame(uiSourceCode); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 559 }, | 628 }, |
| 560 | 629 |
| 561 _editorClosed: function(event) | 630 _editorClosed: function(event) |
| 562 { | 631 { |
| 563 this._navigatorController.hideNavigatorOverlay(); | 632 this._navigatorController.hideNavigatorOverlay(); |
| 564 var uiSourceCode = /** @type {WebInspector.UISourceCode} */ (event.data) ; | 633 var uiSourceCode = /** @type {WebInspector.UISourceCode} */ (event.data) ; |
| 565 | 634 |
| 566 if (this._currentUISourceCode === uiSourceCode) | 635 if (this._currentUISourceCode === uiSourceCode) |
| 567 delete this._currentUISourceCode; | 636 delete this._currentUISourceCode; |
| 568 | 637 |
| 638 this._jumpHistoryManager.dropHistoryEntries(uiSourceCode.project().id(), uiSourceCode.path()); | |
|
vsevik
2013/08/29 10:46:16
So you don't need to listen for uiSourceCodeRemove
| |
| 569 // ScriptsNavigator does not need to update on EditorClosed. | 639 // ScriptsNavigator does not need to update on EditorClosed. |
| 570 this._updateScriptViewStatusBarItems(); | 640 this._updateScriptViewStatusBarItems(); |
| 571 WebInspector.searchController.resetSearch(); | 641 WebInspector.searchController.resetSearch(); |
| 572 }, | 642 }, |
| 573 | 643 |
| 574 _editorSelected: function(event) | 644 _editorSelected: function(event) |
| 575 { | 645 { |
| 576 var uiSourceCode = /** @type {WebInspector.UISourceCode} */ (event.data) ; | 646 var uiSourceCode = /** @type {WebInspector.UISourceCode} */ (event.data) ; |
| 577 var sourceFrame = this._showFile(uiSourceCode); | 647 var sourceFrame = this._showFile(uiSourceCode); |
| 578 this._navigatorController.hideNavigatorOverlay(); | 648 this._navigatorController.hideNavigatorOverlay(); |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1440 } else { | 1510 } else { |
| 1441 this._editorFooterElement.addStyleClass("hidden"); | 1511 this._editorFooterElement.addStyleClass("hidden"); |
| 1442 this._editorFooterElement.removeChildren(); | 1512 this._editorFooterElement.removeChildren(); |
| 1443 this._editorContentsElement.style.bottom = 0; | 1513 this._editorContentsElement.style.bottom = 0; |
| 1444 } | 1514 } |
| 1445 this.doResize(); | 1515 this.doResize(); |
| 1446 }, | 1516 }, |
| 1447 | 1517 |
| 1448 __proto__: WebInspector.Panel.prototype | 1518 __proto__: WebInspector.Panel.prototype |
| 1449 } | 1519 } |
| 1520 | |
| 1521 /** | |
| 1522 * @constructor | |
| 1523 * @param {string} projectId | |
| 1524 * @param {string} path | |
| 1525 * @param {WebInspector.TextEditorPositionHandler} position | |
| 1526 */ | |
| 1527 WebInspector.ScriptsPanel.JumpHistoryEntry = function(projectId, path, position) | |
| 1528 { | |
| 1529 this.projectId = projectId; | |
| 1530 this.path = path; | |
| 1531 this.position = position; | |
| 1532 } | |
| 1533 | |
| 1534 WebInspector.ScriptsPanel.JumpHistoryDepth = 20; | |
| 1535 | |
| 1536 /** | |
| 1537 * @constructor | |
| 1538 */ | |
| 1539 WebInspector.ScriptsPanel.JumpHistoryManager = function() | |
| 1540 { | |
| 1541 this._history = []; | |
| 1542 this._index = -1; | |
| 1543 } | |
| 1544 | |
| 1545 WebInspector.ScriptsPanel.JumpHistoryManager.prototype = { | |
|
vsevik
2013/08/29 10:46:16
Let's extract it to a separate file and delegate r
| |
| 1546 /** | |
| 1547 * @return {boolean} | |
| 1548 */ | |
| 1549 empty: function() | |
| 1550 { | |
| 1551 return !this._history.length; | |
| 1552 }, | |
| 1553 | |
| 1554 /** | |
| 1555 * @return {WebInspector.ScriptsPanel.JumpHistoryEntry} | |
| 1556 */ | |
| 1557 current: function() | |
| 1558 { | |
| 1559 if (this.empty()) | |
| 1560 return null; | |
| 1561 return this._history[this._index]; | |
| 1562 }, | |
| 1563 | |
| 1564 /** | |
| 1565 * @param {WebInspector.ScriptsPanel.JumpHistoryEntry} entry | |
| 1566 * @param {string} projectId | |
| 1567 * @param {string} path | |
| 1568 * @param {WebInspector.TextEditorPositionHandler} newPosition | |
| 1569 */ | |
| 1570 updateEntry: function(entry, projectId, path, newPosition) | |
| 1571 { | |
| 1572 if (entry.projectId === projectId && entry.path === path) | |
| 1573 entry.position = newPosition; | |
| 1574 }, | |
| 1575 | |
| 1576 /** | |
| 1577 * @param {string} projectId | |
| 1578 * @param {string} path | |
| 1579 * @param {WebInspector.TextEditorPositionHandler} position | |
| 1580 */ | |
| 1581 push: function(projectId, path, position) | |
| 1582 { | |
| 1583 if (this._history.length) { | |
| 1584 var entry = this._history[this._index]; | |
| 1585 if (entry.projectId === projectId && entry.path === path && entry.po sition.equal(position)) | |
| 1586 return; | |
| 1587 } | |
| 1588 this._history.splice(++this._index, Infinity, new WebInspector.ScriptsPa nel.JumpHistoryEntry(projectId, path, position)); | |
| 1589 if (this._history.length > WebInspector.ScriptsPanel.JumpHistoryDepth) { | |
| 1590 this._history.shift(); | |
| 1591 --this._index; | |
| 1592 } | |
| 1593 }, | |
| 1594 | |
| 1595 /** | |
| 1596 * @param {string} projectId | |
| 1597 * @param {?string} path | |
| 1598 */ | |
| 1599 dropHistoryEntries: function(projectId, path) | |
| 1600 { | |
| 1601 for(var i = this._history.length - 1; i >= 0; --i) { | |
| 1602 var entry = this._history[i]; | |
| 1603 if (entry.projectId === projectId && (!path || entry.path === path)) { | |
| 1604 this._history.remove(entry); | |
| 1605 if (this._index >= i) | |
| 1606 --this._index; | |
| 1607 } | |
| 1608 } | |
| 1609 if (this._index < 0 && this._history.length > 0) | |
| 1610 this._index = 0; | |
| 1611 }, | |
| 1612 | |
| 1613 /** | |
| 1614 * @return {?WebInspector.ScriptsPanel.JumpHistoryEntry} | |
| 1615 */ | |
| 1616 rollback: function() { | |
| 1617 if (this.empty()) | |
| 1618 return null; | |
| 1619 for (var validEntryIndex = this._index - 1; validEntryIndex >= 0; --vali dEntryIndex) { | |
| 1620 if (this._history[validEntryIndex].position.resolve()) | |
| 1621 break; | |
| 1622 } | |
| 1623 if (validEntryIndex < 0) { | |
| 1624 this._history.splice(0, this._index); | |
| 1625 this._index = 0; | |
| 1626 return null; | |
| 1627 } | |
| 1628 this._history.splice(validEntryIndex + 1, this._index - validEntryIndex - 1); | |
| 1629 this._index = validEntryIndex; | |
| 1630 return this._history[this._index]; | |
| 1631 }, | |
| 1632 | |
| 1633 /** | |
| 1634 * @return {?WebInspector.ScriptsPanel.JumpHistoryEntry} | |
| 1635 */ | |
| 1636 rollover: function() { | |
|
vsevik
2013/08/29 10:49:29
{ on the next line, here and below and above.
| |
| 1637 if (this.empty()) | |
| 1638 return null; | |
| 1639 for (var validEntryIndex = this._index + 1; validEntryIndex < this._hist ory.length; ++validEntryIndex) { | |
| 1640 if (this._history[validEntryIndex].position.resolve()) | |
| 1641 break; | |
| 1642 } | |
| 1643 if (validEntryIndex >= this._history.length) { | |
| 1644 this._history.splice(this._index + 1); | |
| 1645 return null; | |
| 1646 } | |
| 1647 this._history.splice(this._index + 1, validEntryIndex - this._index - 1) ; | |
| 1648 ++this._index; | |
| 1649 return this._history[this._index]; | |
| 1650 } | |
| 1651 } | |
| OLD | NEW |