| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 /** | 4 /** |
| 5 * @implements {WebInspector.ContextFlavorListener} | 5 * @implements {UI.ContextFlavorListener} |
| 6 * @unrestricted | 6 * @unrestricted |
| 7 */ | 7 */ |
| 8 WebInspector.JavaScriptBreakpointsSidebarPane = class extends WebInspector.VBox
{ | 8 Sources.JavaScriptBreakpointsSidebarPane = class extends UI.VBox { |
| 9 constructor() { | 9 constructor() { |
| 10 super(); | 10 super(); |
| 11 this.registerRequiredCSS('components/breakpointsList.css'); | 11 this.registerRequiredCSS('components/breakpointsList.css'); |
| 12 | 12 |
| 13 this._breakpointManager = WebInspector.breakpointManager; | 13 this._breakpointManager = Bindings.breakpointManager; |
| 14 | 14 |
| 15 this._listElement = createElementWithClass('ol', 'breakpoint-list'); | 15 this._listElement = createElementWithClass('ol', 'breakpoint-list'); |
| 16 | 16 |
| 17 this.emptyElement = this.element.createChild('div', 'gray-info-message'); | 17 this.emptyElement = this.element.createChild('div', 'gray-info-message'); |
| 18 this.emptyElement.textContent = WebInspector.UIString('No Breakpoints'); | 18 this.emptyElement.textContent = Common.UIString('No Breakpoints'); |
| 19 | 19 |
| 20 this._items = new Map(); | 20 this._items = new Map(); |
| 21 | 21 |
| 22 var breakpointLocations = this._breakpointManager.allBreakpointLocations(); | 22 var breakpointLocations = this._breakpointManager.allBreakpointLocations(); |
| 23 for (var i = 0; i < breakpointLocations.length; ++i) | 23 for (var i = 0; i < breakpointLocations.length; ++i) |
| 24 this._addBreakpoint(breakpointLocations[i].breakpoint, breakpointLocations
[i].uiLocation); | 24 this._addBreakpoint(breakpointLocations[i].breakpoint, breakpointLocations
[i].uiLocation); |
| 25 | 25 |
| 26 this._breakpointManager.addEventListener( | 26 this._breakpointManager.addEventListener( |
| 27 WebInspector.BreakpointManager.Events.BreakpointAdded, this._breakpointA
dded, this); | 27 Bindings.BreakpointManager.Events.BreakpointAdded, this._breakpointAdded
, this); |
| 28 this._breakpointManager.addEventListener( | 28 this._breakpointManager.addEventListener( |
| 29 WebInspector.BreakpointManager.Events.BreakpointRemoved, this._breakpoin
tRemoved, this); | 29 Bindings.BreakpointManager.Events.BreakpointRemoved, this._breakpointRem
oved, this); |
| 30 | 30 |
| 31 this.emptyElement.addEventListener('contextmenu', this._emptyElementContextM
enu.bind(this), true); | 31 this.emptyElement.addEventListener('contextmenu', this._emptyElementContextM
enu.bind(this), true); |
| 32 this._breakpointManager.addEventListener( | 32 this._breakpointManager.addEventListener( |
| 33 WebInspector.BreakpointManager.Events.BreakpointsActiveStateChanged, thi
s._breakpointsActiveStateChanged, this); | 33 Bindings.BreakpointManager.Events.BreakpointsActiveStateChanged, this._b
reakpointsActiveStateChanged, this); |
| 34 this._breakpointsActiveStateChanged(); | 34 this._breakpointsActiveStateChanged(); |
| 35 this._update(); | 35 this._update(); |
| 36 } | 36 } |
| 37 | 37 |
| 38 _emptyElementContextMenu(event) { | 38 _emptyElementContextMenu(event) { |
| 39 var contextMenu = new WebInspector.ContextMenu(event); | 39 var contextMenu = new UI.ContextMenu(event); |
| 40 this._appendBreakpointActiveItem(contextMenu); | 40 this._appendBreakpointActiveItem(contextMenu); |
| 41 contextMenu.show(); | 41 contextMenu.show(); |
| 42 } | 42 } |
| 43 | 43 |
| 44 /** | 44 /** |
| 45 * @param {!WebInspector.ContextMenu} contextMenu | 45 * @param {!UI.ContextMenu} contextMenu |
| 46 */ | 46 */ |
| 47 _appendBreakpointActiveItem(contextMenu) { | 47 _appendBreakpointActiveItem(contextMenu) { |
| 48 var breakpointActive = this._breakpointManager.breakpointsActive(); | 48 var breakpointActive = this._breakpointManager.breakpointsActive(); |
| 49 var breakpointActiveTitle = breakpointActive ? WebInspector.UIString.capital
ize('Deactivate ^breakpoints') : | 49 var breakpointActiveTitle = breakpointActive ? Common.UIString.capitalize('D
eactivate ^breakpoints') : |
| 50 WebInspector.UIString.capital
ize('Activate ^breakpoints'); | 50 Common.UIString.capitalize('A
ctivate ^breakpoints'); |
| 51 contextMenu.appendItem( | 51 contextMenu.appendItem( |
| 52 breakpointActiveTitle, | 52 breakpointActiveTitle, |
| 53 this._breakpointManager.setBreakpointsActive.bind(this._breakpointManage
r, !breakpointActive)); | 53 this._breakpointManager.setBreakpointsActive.bind(this._breakpointManage
r, !breakpointActive)); |
| 54 } | 54 } |
| 55 | 55 |
| 56 /** | 56 /** |
| 57 * @param {!WebInspector.Event} event | 57 * @param {!Common.Event} event |
| 58 */ | 58 */ |
| 59 _breakpointAdded(event) { | 59 _breakpointAdded(event) { |
| 60 this._breakpointRemoved(event); | 60 this._breakpointRemoved(event); |
| 61 | 61 |
| 62 var breakpoint = /** @type {!WebInspector.BreakpointManager.Breakpoint} */ (
event.data.breakpoint); | 62 var breakpoint = /** @type {!Bindings.BreakpointManager.Breakpoint} */ (even
t.data.breakpoint); |
| 63 var uiLocation = /** @type {!WebInspector.UILocation} */ (event.data.uiLocat
ion); | 63 var uiLocation = /** @type {!Workspace.UILocation} */ (event.data.uiLocation
); |
| 64 this._addBreakpoint(breakpoint, uiLocation); | 64 this._addBreakpoint(breakpoint, uiLocation); |
| 65 } | 65 } |
| 66 | 66 |
| 67 /** | 67 /** |
| 68 * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint | 68 * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint |
| 69 * @param {!WebInspector.UILocation} uiLocation | 69 * @param {!Workspace.UILocation} uiLocation |
| 70 */ | 70 */ |
| 71 _addBreakpoint(breakpoint, uiLocation) { | 71 _addBreakpoint(breakpoint, uiLocation) { |
| 72 var element = createElementWithClass('li', 'cursor-pointer'); | 72 var element = createElementWithClass('li', 'cursor-pointer'); |
| 73 element.addEventListener('contextmenu', this._breakpointContextMenu.bind(thi
s, breakpoint), true); | 73 element.addEventListener('contextmenu', this._breakpointContextMenu.bind(thi
s, breakpoint), true); |
| 74 element.addEventListener('click', this._breakpointClicked.bind(this, uiLocat
ion), false); | 74 element.addEventListener('click', this._breakpointClicked.bind(this, uiLocat
ion), false); |
| 75 | 75 |
| 76 var checkboxLabel = createCheckboxLabel(uiLocation.linkText(), breakpoint.en
abled()); | 76 var checkboxLabel = createCheckboxLabel(uiLocation.linkText(), breakpoint.en
abled()); |
| 77 element.appendChild(checkboxLabel); | 77 element.appendChild(checkboxLabel); |
| 78 checkboxLabel.addEventListener('click', this._breakpointCheckboxClicked.bind
(this, breakpoint), false); | 78 checkboxLabel.addEventListener('click', this._breakpointCheckboxClicked.bind
(this, breakpoint), false); |
| 79 | 79 |
| 80 var snippetElement = element.createChild('div', 'source-text monospace'); | 80 var snippetElement = element.createChild('div', 'source-text monospace'); |
| 81 | 81 |
| 82 /** | 82 /** |
| 83 * @param {?string} content | 83 * @param {?string} content |
| 84 * @this {WebInspector.JavaScriptBreakpointsSidebarPane} | 84 * @this {Sources.JavaScriptBreakpointsSidebarPane} |
| 85 */ | 85 */ |
| 86 function didRequestContent(content) { | 86 function didRequestContent(content) { |
| 87 var lineNumber = uiLocation.lineNumber; | 87 var lineNumber = uiLocation.lineNumber; |
| 88 var columnNumber = uiLocation.columnNumber; | 88 var columnNumber = uiLocation.columnNumber; |
| 89 var text = new WebInspector.Text(content || ''); | 89 var text = new Common.Text(content || ''); |
| 90 if (lineNumber < text.lineCount()) { | 90 if (lineNumber < text.lineCount()) { |
| 91 var lineText = text.lineAt(lineNumber); | 91 var lineText = text.lineAt(lineNumber); |
| 92 var maxSnippetLength = 200; | 92 var maxSnippetLength = 200; |
| 93 var snippetStartIndex = columnNumber > 100 ? columnNumber : 0; | 93 var snippetStartIndex = columnNumber > 100 ? columnNumber : 0; |
| 94 snippetElement.textContent = lineText.substr(snippetStartIndex).trimEnd(
maxSnippetLength); | 94 snippetElement.textContent = lineText.substr(snippetStartIndex).trimEnd(
maxSnippetLength); |
| 95 } | 95 } |
| 96 this.didReceiveBreakpointLineForTest(uiLocation.uiSourceCode, lineNumber,
columnNumber); | 96 this.didReceiveBreakpointLineForTest(uiLocation.uiSourceCode, lineNumber,
columnNumber); |
| 97 } | 97 } |
| 98 | 98 |
| 99 uiLocation.uiSourceCode.requestContent().then(didRequestContent.bind(this)); | 99 uiLocation.uiSourceCode.requestContent().then(didRequestContent.bind(this)); |
| 100 | 100 |
| 101 element._data = uiLocation; | 101 element._data = uiLocation; |
| 102 var currentElement = this._listElement.firstChild; | 102 var currentElement = this._listElement.firstChild; |
| 103 while (currentElement) { | 103 while (currentElement) { |
| 104 if (currentElement._data && this._compareBreakpoints(currentElement._data,
element._data) > 0) | 104 if (currentElement._data && this._compareBreakpoints(currentElement._data,
element._data) > 0) |
| 105 break; | 105 break; |
| 106 currentElement = currentElement.nextSibling; | 106 currentElement = currentElement.nextSibling; |
| 107 } | 107 } |
| 108 this._addListElement(element, currentElement); | 108 this._addListElement(element, currentElement); |
| 109 | 109 |
| 110 var breakpointItem = {element: element, checkbox: checkboxLabel.checkboxElem
ent}; | 110 var breakpointItem = {element: element, checkbox: checkboxLabel.checkboxElem
ent}; |
| 111 this._items.set(breakpoint, breakpointItem); | 111 this._items.set(breakpoint, breakpointItem); |
| 112 } | 112 } |
| 113 | 113 |
| 114 /** | 114 /** |
| 115 * @param {!WebInspector.UISourceCode} uiSourceCode | 115 * @param {!Workspace.UISourceCode} uiSourceCode |
| 116 * @param {number} lineNumber | 116 * @param {number} lineNumber |
| 117 * @param {number} columnNumber | 117 * @param {number} columnNumber |
| 118 */ | 118 */ |
| 119 didReceiveBreakpointLineForTest(uiSourceCode, lineNumber, columnNumber) { | 119 didReceiveBreakpointLineForTest(uiSourceCode, lineNumber, columnNumber) { |
| 120 } | 120 } |
| 121 | 121 |
| 122 /** | 122 /** |
| 123 * @param {!WebInspector.Event} event | 123 * @param {!Common.Event} event |
| 124 */ | 124 */ |
| 125 _breakpointRemoved(event) { | 125 _breakpointRemoved(event) { |
| 126 var breakpoint = /** @type {!WebInspector.BreakpointManager.Breakpoint} */ (
event.data.breakpoint); | 126 var breakpoint = /** @type {!Bindings.BreakpointManager.Breakpoint} */ (even
t.data.breakpoint); |
| 127 var breakpointItem = this._items.get(breakpoint); | 127 var breakpointItem = this._items.get(breakpoint); |
| 128 if (!breakpointItem) | 128 if (!breakpointItem) |
| 129 return; | 129 return; |
| 130 this._items.remove(breakpoint); | 130 this._items.remove(breakpoint); |
| 131 this._removeListElement(breakpointItem.element); | 131 this._removeListElement(breakpointItem.element); |
| 132 } | 132 } |
| 133 | 133 |
| 134 /** | 134 /** |
| 135 * @override | 135 * @override |
| 136 * @param {?Object} object | 136 * @param {?Object} object |
| 137 */ | 137 */ |
| 138 flavorChanged(object) { | 138 flavorChanged(object) { |
| 139 this._update(); | 139 this._update(); |
| 140 } | 140 } |
| 141 | 141 |
| 142 _update() { | 142 _update() { |
| 143 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDetails
); | 143 var details = UI.context.flavor(SDK.DebuggerPausedDetails); |
| 144 var uiLocation = details && details.callFrames.length ? | 144 var uiLocation = details && details.callFrames.length ? |
| 145 WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(details.ca
llFrames[0].location()) : | 145 Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(details.callFr
ames[0].location()) : |
| 146 null; | 146 null; |
| 147 var breakpoint = uiLocation ? | 147 var breakpoint = uiLocation ? |
| 148 this._breakpointManager.findBreakpoint( | 148 this._breakpointManager.findBreakpoint( |
| 149 uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNum
ber) : | 149 uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNum
ber) : |
| 150 null; | 150 null; |
| 151 var breakpointItem = this._items.get(breakpoint); | 151 var breakpointItem = this._items.get(breakpoint); |
| 152 if (!breakpointItem) { | 152 if (!breakpointItem) { |
| 153 if (this._highlightedBreakpointItem) { | 153 if (this._highlightedBreakpointItem) { |
| 154 this._highlightedBreakpointItem.element.classList.remove('breakpoint-hit
'); | 154 this._highlightedBreakpointItem.element.classList.remove('breakpoint-hit
'); |
| 155 delete this._highlightedBreakpointItem; | 155 delete this._highlightedBreakpointItem; |
| 156 } | 156 } |
| 157 return; | 157 return; |
| 158 } | 158 } |
| 159 | 159 |
| 160 breakpointItem.element.classList.add('breakpoint-hit'); | 160 breakpointItem.element.classList.add('breakpoint-hit'); |
| 161 this._highlightedBreakpointItem = breakpointItem; | 161 this._highlightedBreakpointItem = breakpointItem; |
| 162 WebInspector.viewManager.showView('sources.jsBreakpoints'); | 162 UI.viewManager.showView('sources.jsBreakpoints'); |
| 163 } | 163 } |
| 164 | 164 |
| 165 _breakpointsActiveStateChanged() { | 165 _breakpointsActiveStateChanged() { |
| 166 this._listElement.classList.toggle('breakpoints-list-deactivated', !this._br
eakpointManager.breakpointsActive()); | 166 this._listElement.classList.toggle('breakpoints-list-deactivated', !this._br
eakpointManager.breakpointsActive()); |
| 167 } | 167 } |
| 168 | 168 |
| 169 /** | 169 /** |
| 170 * @param {!WebInspector.UILocation} uiLocation | 170 * @param {!Workspace.UILocation} uiLocation |
| 171 */ | 171 */ |
| 172 _breakpointClicked(uiLocation) { | 172 _breakpointClicked(uiLocation) { |
| 173 WebInspector.Revealer.reveal(uiLocation); | 173 Common.Revealer.reveal(uiLocation); |
| 174 } | 174 } |
| 175 | 175 |
| 176 /** | 176 /** |
| 177 * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint | 177 * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint |
| 178 * @param {!Event} event | 178 * @param {!Event} event |
| 179 */ | 179 */ |
| 180 _breakpointCheckboxClicked(breakpoint, event) { | 180 _breakpointCheckboxClicked(breakpoint, event) { |
| 181 // Breakpoint element has it's own click handler. | 181 // Breakpoint element has it's own click handler. |
| 182 event.consume(); | 182 event.consume(); |
| 183 breakpoint.setEnabled(event.target.checkboxElement.checked); | 183 breakpoint.setEnabled(event.target.checkboxElement.checked); |
| 184 } | 184 } |
| 185 | 185 |
| 186 /** | 186 /** |
| 187 * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint | 187 * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint |
| 188 * @param {!Event} event | 188 * @param {!Event} event |
| 189 */ | 189 */ |
| 190 _breakpointContextMenu(breakpoint, event) { | 190 _breakpointContextMenu(breakpoint, event) { |
| 191 var breakpoints = this._items.valuesArray(); | 191 var breakpoints = this._items.valuesArray(); |
| 192 var contextMenu = new WebInspector.ContextMenu(event); | 192 var contextMenu = new UI.ContextMenu(event); |
| 193 contextMenu.appendItem(WebInspector.UIString.capitalize('Remove ^breakpoint'
), breakpoint.remove.bind(breakpoint)); | 193 contextMenu.appendItem(Common.UIString.capitalize('Remove ^breakpoint'), bre
akpoint.remove.bind(breakpoint)); |
| 194 if (breakpoints.length > 1) { | 194 if (breakpoints.length > 1) { |
| 195 var removeAllTitle = WebInspector.UIString.capitalize('Remove ^all ^breakp
oints'); | 195 var removeAllTitle = Common.UIString.capitalize('Remove ^all ^breakpoints'
); |
| 196 contextMenu.appendItem( | 196 contextMenu.appendItem( |
| 197 removeAllTitle, this._breakpointManager.removeAllBreakpoints.bind(this
._breakpointManager)); | 197 removeAllTitle, this._breakpointManager.removeAllBreakpoints.bind(this
._breakpointManager)); |
| 198 } | 198 } |
| 199 | 199 |
| 200 contextMenu.appendSeparator(); | 200 contextMenu.appendSeparator(); |
| 201 this._appendBreakpointActiveItem(contextMenu); | 201 this._appendBreakpointActiveItem(contextMenu); |
| 202 | 202 |
| 203 function enabledBreakpointCount(breakpoints) { | 203 function enabledBreakpointCount(breakpoints) { |
| 204 var count = 0; | 204 var count = 0; |
| 205 for (var i = 0; i < breakpoints.length; ++i) { | 205 for (var i = 0; i < breakpoints.length; ++i) { |
| 206 if (breakpoints[i].checkbox.checked) | 206 if (breakpoints[i].checkbox.checked) |
| 207 count++; | 207 count++; |
| 208 } | 208 } |
| 209 return count; | 209 return count; |
| 210 } | 210 } |
| 211 if (breakpoints.length > 1) { | 211 if (breakpoints.length > 1) { |
| 212 var enableBreakpointCount = enabledBreakpointCount(breakpoints); | 212 var enableBreakpointCount = enabledBreakpointCount(breakpoints); |
| 213 var enableTitle = WebInspector.UIString.capitalize('Enable ^all ^breakpoin
ts'); | 213 var enableTitle = Common.UIString.capitalize('Enable ^all ^breakpoints'); |
| 214 var disableTitle = WebInspector.UIString.capitalize('Disable ^all ^breakpo
ints'); | 214 var disableTitle = Common.UIString.capitalize('Disable ^all ^breakpoints')
; |
| 215 | 215 |
| 216 contextMenu.appendSeparator(); | 216 contextMenu.appendSeparator(); |
| 217 | 217 |
| 218 contextMenu.appendItem( | 218 contextMenu.appendItem( |
| 219 enableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._b
reakpointManager, true), | 219 enableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._b
reakpointManager, true), |
| 220 !(enableBreakpointCount !== breakpoints.length)); | 220 !(enableBreakpointCount !== breakpoints.length)); |
| 221 contextMenu.appendItem( | 221 contextMenu.appendItem( |
| 222 disableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._
breakpointManager, false), | 222 disableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._
breakpointManager, false), |
| 223 !(enableBreakpointCount > 1)); | 223 !(enableBreakpointCount > 1)); |
| 224 } | 224 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 | 258 |
| 259 reset() { | 259 reset() { |
| 260 this._listElement.removeChildren(); | 260 this._listElement.removeChildren(); |
| 261 if (this._listElement.parentElement) { | 261 if (this._listElement.parentElement) { |
| 262 this.element.removeChild(this._listElement); | 262 this.element.removeChild(this._listElement); |
| 263 this.element.appendChild(this.emptyElement); | 263 this.element.appendChild(this.emptyElement); |
| 264 } | 264 } |
| 265 this._items.clear(); | 265 this._items.clear(); |
| 266 } | 266 } |
| 267 }; | 267 }; |
| OLD | NEW |