Chromium Code Reviews| 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 {WebInspector.ContextFlavorListener} |
| 6 * @unrestricted | 6 * @unrestricted |
| 7 */ | 7 */ |
| 8 WebInspector.JavaScriptBreakpointsSidebarPane = class extends WebInspector.VBox { | 8 WebInspector.JavaScriptBreakpointsSidebarPane = class extends WebInspector.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 = WebInspector.breakpointManager; |
| 14 | 14 this._locationSymbol = Symbol('location'); |
|
lushnikov
2016/11/11 04:24:53
let's make this static
kozy
2016/11/11 17:21:13
Done.
| |
| 15 /** @type {!Map<!WebInspector.UISourceCode, !Map<number, !WebInspector.JavaS criptBreakpointsSidebarPane.BreakpointItem>>} */ | |
| 16 this._items = new Map(); | |
| 15 this._listElement = createElementWithClass('ol', 'breakpoint-list'); | 17 this._listElement = createElementWithClass('ol', 'breakpoint-list'); |
| 18 /** @type {!Map<string, !WebInspector.UILocation>} */ | |
| 19 this._scheduledUpdates = new Map(); | |
| 16 | 20 |
| 17 this.emptyElement = this.element.createChild('div', 'gray-info-message'); | 21 this.emptyElement = this.element.createChild('div', 'gray-info-message'); |
| 18 this.emptyElement.textContent = WebInspector.UIString('No Breakpoints'); | 22 this.emptyElement.textContent = WebInspector.UIString('No Breakpoints'); |
| 23 this.emptyElement.addEventListener('contextmenu', this._emptyElementContextM enu.bind(this), true); | |
| 19 | 24 |
| 20 this._items = new Map(); | 25 this._breakpointManager.addEventListener( |
| 26 WebInspector.BreakpointManager.Events.BreakpointAdded, this._breakpointC hanged.bind(this), this); | |
| 27 this._breakpointManager.addEventListener( | |
| 28 WebInspector.BreakpointManager.Events.BreakpointRemoved, this._breakpoin tChanged.bind(this), this); | |
| 29 this._breakpointManager.addEventListener( | |
| 30 WebInspector.BreakpointManager.Events.BreakpointsActiveStateChanged, thi s._breakpointsActiveStateChanged, this); | |
| 21 | 31 |
| 22 var breakpointLocations = this._breakpointManager.allBreakpointLocations(); | 32 var breakpointLocations = this._breakpointManager.allBreakpointLocations(); |
| 23 for (var i = 0; i < breakpointLocations.length; ++i) | 33 for (var i = 0; i < breakpointLocations.length; ++i) |
| 24 this._addBreakpoint(breakpointLocations[i].breakpoint, breakpointLocations [i].uiLocation); | 34 this._scheduleUpdate(breakpointLocations[i].uiLocation); |
| 25 | 35 |
| 26 this._breakpointManager.addEventListener( | |
| 27 WebInspector.BreakpointManager.Events.BreakpointAdded, this._breakpointA dded, this); | |
| 28 this._breakpointManager.addEventListener( | |
| 29 WebInspector.BreakpointManager.Events.BreakpointRemoved, this._breakpoin tRemoved, this); | |
| 30 | |
| 31 this.emptyElement.addEventListener('contextmenu', this._emptyElementContextM enu.bind(this), true); | |
| 32 this._breakpointManager.addEventListener( | |
| 33 WebInspector.BreakpointManager.Events.BreakpointsActiveStateChanged, thi s._breakpointsActiveStateChanged, this); | |
| 34 this._breakpointsActiveStateChanged(); | 36 this._breakpointsActiveStateChanged(); |
| 35 this._update(); | 37 this._update(); |
| 36 } | 38 } |
| 37 | 39 |
| 38 _emptyElementContextMenu(event) { | 40 _emptyElementContextMenu(event) { |
| 39 var contextMenu = new WebInspector.ContextMenu(event); | 41 var contextMenu = new WebInspector.ContextMenu(event); |
| 40 this._appendBreakpointActiveItem(contextMenu); | 42 this._appendBreakpointActiveItem(contextMenu); |
| 41 contextMenu.show(); | 43 contextMenu.show(); |
| 42 } | 44 } |
| 43 | 45 |
| 44 /** | 46 /** |
| 45 * @param {!WebInspector.ContextMenu} contextMenu | 47 * @param {!WebInspector.ContextMenu} contextMenu |
| 46 */ | 48 */ |
| 47 _appendBreakpointActiveItem(contextMenu) { | 49 _appendBreakpointActiveItem(contextMenu) { |
| 48 var breakpointActive = this._breakpointManager.breakpointsActive(); | 50 var breakpointActive = this._breakpointManager.breakpointsActive(); |
| 49 var breakpointActiveTitle = breakpointActive ? WebInspector.UIString.capital ize('Deactivate ^breakpoints') : | 51 var breakpointActiveTitle = breakpointActive ? WebInspector.UIString.capital ize('Deactivate breakpoints') : |
| 50 WebInspector.UIString.capital ize('Activate ^breakpoints'); | 52 WebInspector.UIString.capital ize('Activate breakpoints'); |
| 51 contextMenu.appendItem( | 53 contextMenu.appendItem( |
| 52 breakpointActiveTitle, | 54 breakpointActiveTitle, |
| 53 this._breakpointManager.setBreakpointsActive.bind(this._breakpointManage r, !breakpointActive)); | 55 this._breakpointManager.setBreakpointsActive.bind(this._breakpointManage r, !breakpointActive)); |
| 54 } | 56 } |
| 55 | 57 |
| 56 /** | 58 /** |
| 57 * @param {!WebInspector.Event} event | 59 * @param {!WebInspector.Event} event |
| 58 */ | 60 */ |
| 59 _breakpointAdded(event) { | 61 _breakpointChanged(event) { |
| 60 this._breakpointRemoved(event); | 62 this._scheduleUpdate(/** @type {!WebInspector.UILocation} */ (event.data.uiL ocation)); |
| 61 | |
| 62 var breakpoint = /** @type {!WebInspector.BreakpointManager.Breakpoint} */ ( event.data.breakpoint); | |
| 63 var uiLocation = /** @type {!WebInspector.UILocation} */ (event.data.uiLocat ion); | |
| 64 this._addBreakpoint(breakpoint, uiLocation); | |
| 65 } | 63 } |
| 66 | 64 |
| 67 /** | 65 /** |
| 68 * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint | |
| 69 * @param {!WebInspector.UILocation} uiLocation | 66 * @param {!WebInspector.UILocation} uiLocation |
| 70 */ | 67 */ |
| 71 _addBreakpoint(breakpoint, uiLocation) { | 68 _scheduleUpdate(uiLocation) { |
| 69 var locationDescriptor = uiLocation.uiSourceCode.url() + ':' + uiLocation.li neNumber; | |
| 70 if (this._scheduledUpdates.has(locationDescriptor)) | |
| 71 return; | |
| 72 if (!this._scheduledUpdates.size) | |
| 73 setImmediate(this._updateBreakpointItems.bind(this)); | |
| 74 this._scheduledUpdates.set(locationDescriptor, uiLocation); | |
| 75 } | |
| 76 | |
| 77 _updateBreakpointItems() { | |
| 78 for (var uiLocation of this._scheduledUpdates.valuesArray()) { | |
| 79 var breakpoints = this._breakpointManager.findBreakpoints(uiLocation.uiSou rceCode, uiLocation.lineNumber); | |
| 80 var hasEnabled = breakpoints.some(breakpoint => breakpoint.enabled()); | |
| 81 var hasDisabled = breakpoints.some(breakpoint => !breakpoint.enabled()); | |
| 82 if (breakpoints.length) | |
| 83 this._addBreakpointItem(uiLocation, hasEnabled, hasDisabled); | |
| 84 else | |
| 85 this._removeBreakpointItem(uiLocation); | |
| 86 } | |
| 87 this._scheduledUpdates.clear(); | |
| 88 this._breakpointsWasUpdatedForTest(); | |
| 89 } | |
| 90 | |
| 91 _breakpointsWasUpdatedForTest() { | |
| 92 } | |
| 93 | |
| 94 /** | |
| 95 * @param {!WebInspector.UILocation} uiLocation | |
| 96 * @param {boolean} hasEnabled | |
| 97 * @param {boolean} hasDisabled | |
| 98 */ | |
| 99 _addBreakpointItem(uiLocation, hasEnabled, hasDisabled) { | |
| 100 if (!this._items.has(uiLocation.uiSourceCode)) | |
| 101 this._items.set(uiLocation.uiSourceCode, new Map()); | |
| 102 var uiSourceCodeItems = this._items.get(uiLocation.uiSourceCode); | |
| 103 if (!uiSourceCodeItems.has(uiLocation.lineNumber)) { | |
| 104 var breakpointItem = this._createBreakpointItem(uiLocation); | |
| 105 | |
| 106 var newElementLocation = breakpointItem.element[this._locationSymbol]; | |
| 107 var currentElement = this._listElement.firstChild; | |
| 108 while (currentElement) { | |
| 109 var currentElementLocation = currentElement[this._locationSymbol]; | |
| 110 if (currentElementLocation && currentElementLocation.compareTo(newElemen tLocation) > 0) | |
| 111 break; | |
| 112 currentElement = currentElement.nextSibling; | |
| 113 } | |
| 114 this._addListElement(breakpointItem.element, currentElement); | |
| 115 | |
| 116 uiSourceCodeItems.set(uiLocation.lineNumber, breakpointItem); | |
| 117 } | |
| 118 var breakpointItem = uiSourceCodeItems.get(uiLocation.lineNumber); | |
| 119 breakpointItem.checkbox.checked = hasEnabled; | |
| 120 breakpointItem.checkbox.indeterminate = hasEnabled && hasDisabled; | |
| 121 } | |
| 122 | |
| 123 /** | |
| 124 * @param {!WebInspector.UILocation} uiLocation | |
| 125 * @return {!WebInspector.JavaScriptBreakpointsSidebarPane.BreakpointItem} | |
| 126 */ | |
| 127 _createBreakpointItem(uiLocation) { | |
| 72 var element = createElementWithClass('li', 'cursor-pointer'); | 128 var element = createElementWithClass('li', 'cursor-pointer'); |
| 73 element.addEventListener('contextmenu', this._breakpointContextMenu.bind(thi s, breakpoint), true); | 129 element.addEventListener('contextmenu', this._breakpointContextMenu.bind(thi s, uiLocation), true); |
| 74 element.addEventListener('click', this._breakpointClicked.bind(this, uiLocat ion), false); | 130 element.addEventListener('click', this._breakpointClicked.bind(this, uiLocat ion), false); |
| 131 element[this._locationSymbol] = uiLocation; | |
| 75 | 132 |
| 76 var checkboxLabel = createCheckboxLabel(uiLocation.linkText(), breakpoint.en abled()); | 133 var checkboxLabel = createCheckboxLabel(uiLocation.linkText(), false); |
| 77 element.appendChild(checkboxLabel); | 134 element.appendChild(checkboxLabel); |
| 78 checkboxLabel.addEventListener('click', this._breakpointCheckboxClicked.bind (this, breakpoint), false); | 135 checkboxLabel.addEventListener('click', this._breakpointCheckboxClicked.bind (this, uiLocation), false); |
| 79 | 136 |
| 80 var snippetElement = element.createChild('div', 'source-text monospace'); | 137 var snippetElement = element.createChild('div', 'source-text monospace'); |
| 138 uiLocation.uiSourceCode.requestContent().then(fillSnippetElement.bind(this, snippetElement)); | |
| 81 | 139 |
| 82 /** | 140 /** |
| 141 * @param {!Element} snippetElement | |
| 83 * @param {?string} content | 142 * @param {?string} content |
| 84 * @this {WebInspector.JavaScriptBreakpointsSidebarPane} | 143 * @this {WebInspector.JavaScriptBreakpointsSidebarPane} |
| 85 */ | 144 */ |
| 86 function didRequestContent(content) { | 145 function fillSnippetElement(snippetElement, content) { |
| 87 var lineNumber = uiLocation.lineNumber; | 146 var lineNumber = uiLocation.lineNumber; |
| 88 var columnNumber = uiLocation.columnNumber; | |
| 89 var text = new WebInspector.Text(content || ''); | 147 var text = new WebInspector.Text(content || ''); |
| 90 if (lineNumber < text.lineCount()) { | 148 if (lineNumber < text.lineCount()) { |
| 91 var lineText = text.lineAt(lineNumber); | 149 var lineText = text.lineAt(lineNumber); |
| 92 var maxSnippetLength = 200; | 150 var maxSnippetLength = 200; |
| 93 var snippetStartIndex = columnNumber > 100 ? columnNumber : 0; | 151 snippetElement.textContent = lineText.substr(0).trimEnd(maxSnippetLength ); |
| 94 snippetElement.textContent = lineText.substr(snippetStartIndex).trimEnd( maxSnippetLength); | |
| 95 } | 152 } |
| 96 this.didReceiveBreakpointLineForTest(uiLocation.uiSourceCode, lineNumber, columnNumber); | 153 this.didReceiveBreakpointLineForTest(uiLocation.uiSourceCode, lineNumber, 0); |
| 97 } | 154 } |
| 98 | 155 |
| 99 uiLocation.uiSourceCode.requestContent().then(didRequestContent.bind(this)); | 156 return { element: element, checkbox: checkboxLabel.checkboxElement }; |
| 100 | |
| 101 element._data = uiLocation; | |
| 102 var currentElement = this._listElement.firstChild; | |
| 103 while (currentElement) { | |
| 104 if (currentElement._data && this._compareBreakpoints(currentElement._data, element._data) > 0) | |
| 105 break; | |
| 106 currentElement = currentElement.nextSibling; | |
| 107 } | |
| 108 this._addListElement(element, currentElement); | |
| 109 | |
| 110 var breakpointItem = {element: element, checkbox: checkboxLabel.checkboxElem ent}; | |
| 111 this._items.set(breakpoint, breakpointItem); | |
| 112 } | 157 } |
| 113 | 158 |
| 114 /** | 159 /** |
| 160 * @param {!WebInspector.UILocation} uiLocation | |
| 161 */ | |
| 162 _removeBreakpointItem(uiLocation) { | |
| 163 var uiSourceCodeItems = this._items.get(uiLocation.uiSourceCode); | |
| 164 if (!uiSourceCodeItems) | |
| 165 return; | |
| 166 var breakpointItem = uiSourceCodeItems.get(uiLocation.lineNumber); | |
| 167 if (!breakpointItem) | |
| 168 return; | |
| 169 uiSourceCodeItems.delete(uiLocation.lineNumber); | |
| 170 if (!uiSourceCodeItems.size) | |
| 171 this._items.delete(uiLocation.uiSourceCode); | |
| 172 this._removeListElement(breakpointItem.element); | |
| 173 } | |
| 174 | |
| 175 /** | |
| 115 * @param {!WebInspector.UISourceCode} uiSourceCode | 176 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 116 * @param {number} lineNumber | 177 * @param {number} lineNumber |
| 117 * @param {number} columnNumber | 178 * @param {number} columnNumber |
| 118 */ | 179 */ |
| 119 didReceiveBreakpointLineForTest(uiSourceCode, lineNumber, columnNumber) { | 180 didReceiveBreakpointLineForTest(uiSourceCode, lineNumber, columnNumber) { |
| 120 } | 181 } |
| 121 | 182 |
| 122 /** | 183 /** |
| 123 * @param {!WebInspector.Event} event | |
| 124 */ | |
| 125 _breakpointRemoved(event) { | |
| 126 var breakpoint = /** @type {!WebInspector.BreakpointManager.Breakpoint} */ ( event.data.breakpoint); | |
| 127 var breakpointItem = this._items.get(breakpoint); | |
| 128 if (!breakpointItem) | |
| 129 return; | |
| 130 this._items.remove(breakpoint); | |
| 131 this._removeListElement(breakpointItem.element); | |
| 132 } | |
| 133 | |
| 134 /** | |
| 135 * @override | 184 * @override |
| 136 * @param {?Object} object | 185 * @param {?Object} object |
| 137 */ | 186 */ |
| 138 flavorChanged(object) { | 187 flavorChanged(object) { |
| 139 this._update(); | 188 this._update(); |
| 140 } | 189 } |
| 141 | 190 |
| 142 _update() { | 191 _update() { |
| 143 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDetails ); | 192 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDetails ); |
| 144 var uiLocation = details && details.callFrames.length ? | 193 var uiLocation = details && details.callFrames.length ? |
| 145 WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(details.ca llFrames[0].location()) : | 194 WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(details.ca llFrames[0].location()) : |
| 146 null; | 195 null; |
| 147 var breakpoint = uiLocation ? | 196 var breakpointItem; |
| 148 this._breakpointManager.findBreakpoint( | 197 if (uiLocation && this._items.has(uiLocation.uiSourceCode)) { |
| 149 uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNum ber) : | 198 var uiSourceCodeItems = this._items.get(uiLocation.uiSourceCode); |
| 150 null; | 199 breakpointItem = uiSourceCodeItems.get(uiLocation.lineNumber) || null; |
| 151 var breakpointItem = this._items.get(breakpoint); | 200 } |
| 152 if (!breakpointItem) { | 201 if (!breakpointItem) { |
| 153 if (this._highlightedBreakpointItem) { | 202 if (this._highlightedBreakpointItem) { |
| 154 this._highlightedBreakpointItem.element.classList.remove('breakpoint-hit '); | 203 this._highlightedBreakpointItem.element.classList.remove('breakpoint-hit '); |
| 155 delete this._highlightedBreakpointItem; | 204 delete this._highlightedBreakpointItem; |
| 156 } | 205 } |
| 157 return; | 206 return; |
| 158 } | 207 } |
| 159 | 208 |
| 160 breakpointItem.element.classList.add('breakpoint-hit'); | 209 breakpointItem.element.classList.add('breakpoint-hit'); |
| 161 this._highlightedBreakpointItem = breakpointItem; | 210 this._highlightedBreakpointItem = breakpointItem; |
| 162 WebInspector.viewManager.showView('sources.jsBreakpoints'); | 211 WebInspector.viewManager.showView('sources.jsBreakpoints'); |
| 163 } | 212 } |
| 164 | 213 |
| 165 _breakpointsActiveStateChanged() { | 214 _breakpointsActiveStateChanged() { |
| 166 this._listElement.classList.toggle('breakpoints-list-deactivated', !this._br eakpointManager.breakpointsActive()); | 215 this._listElement.classList.toggle('breakpoints-list-deactivated', !this._br eakpointManager.breakpointsActive()); |
| 167 } | 216 } |
| 168 | 217 |
| 169 /** | 218 /** |
| 170 * @param {!WebInspector.UILocation} uiLocation | 219 * @param {!WebInspector.UILocation} uiLocation |
| 171 */ | 220 */ |
| 172 _breakpointClicked(uiLocation) { | 221 _breakpointClicked(uiLocation) { |
| 173 WebInspector.Revealer.reveal(uiLocation); | 222 WebInspector.Revealer.reveal(uiLocation); |
| 174 } | 223 } |
| 175 | 224 |
| 176 /** | 225 /** |
| 177 * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint | 226 * @param {!WebInspector.UILocation} uiLocation |
| 178 * @param {!Event} event | 227 * @param {!Event} event |
| 179 */ | 228 */ |
| 180 _breakpointCheckboxClicked(breakpoint, event) { | 229 _breakpointCheckboxClicked(uiLocation, event) { |
| 181 // Breakpoint element has it's own click handler. | 230 // Breakpoint element has it's own click handler. |
| 182 event.consume(); | 231 event.consume(); |
| 183 breakpoint.setEnabled(event.target.checkboxElement.checked); | 232 var breakpoints = this._breakpointManager.findBreakpoints(uiLocation.uiSourc eCode, uiLocation.lineNumber); |
| 233 var newState = event.target.checkboxElement.checked; | |
| 234 for (var breakpoint of breakpoints) | |
| 235 breakpoint.setEnabled(newState); | |
| 184 } | 236 } |
| 185 | 237 |
| 186 /** | 238 /** |
| 187 * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint | 239 * @param {!WebInspector.UILocation} uiLocation |
| 188 * @param {!Event} event | 240 * @param {!Event} event |
| 189 */ | 241 */ |
| 190 _breakpointContextMenu(breakpoint, event) { | 242 _breakpointContextMenu(uiLocation, event) { |
| 191 var breakpoints = this._items.valuesArray(); | 243 var breakpoints = this._breakpointManager.findBreakpoints(uiLocation.uiSourc eCode, uiLocation.lineNumber); |
| 244 | |
| 192 var contextMenu = new WebInspector.ContextMenu(event); | 245 var contextMenu = new WebInspector.ContextMenu(event); |
| 193 contextMenu.appendItem(WebInspector.UIString.capitalize('Remove ^breakpoint' ), breakpoint.remove.bind(breakpoint)); | 246 contextMenu.appendItem(WebInspector.UIString.capitalize('Remove breakpoints in line'), () => breakpoints.map(breakpoint => breakpoint.remove())); |
| 194 if (breakpoints.length > 1) { | 247 |
| 195 var removeAllTitle = WebInspector.UIString.capitalize('Remove ^all ^breakp oints'); | 248 var removeAllTitle = WebInspector.UIString.capitalize('Remove all breakpoint s'); |
| 196 contextMenu.appendItem( | 249 contextMenu.appendItem( |
| 197 removeAllTitle, this._breakpointManager.removeAllBreakpoints.bind(this ._breakpointManager)); | 250 removeAllTitle, this._breakpointManager.removeAllBreakpoints.bind(this._ breakpointManager)); |
| 198 } | |
| 199 | 251 |
| 200 contextMenu.appendSeparator(); | 252 contextMenu.appendSeparator(); |
| 201 this._appendBreakpointActiveItem(contextMenu); | 253 this._appendBreakpointActiveItem(contextMenu); |
| 202 | 254 |
| 203 function enabledBreakpointCount(breakpoints) { | 255 contextMenu.appendSeparator(); |
| 204 var count = 0; | 256 |
| 205 for (var i = 0; i < breakpoints.length; ++i) { | 257 if (breakpoints.some(breakpoint => !breakpoint.enabled())) { |
| 206 if (breakpoints[i].checkbox.checked) | 258 var enableTitle = WebInspector.UIString.capitalize('Enable all breakpoints '); |
| 207 count++; | 259 contextMenu.appendItem( |
| 208 } | 260 enableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._b reakpointManager, true)); |
| 209 return count; | |
| 210 } | 261 } |
| 211 if (breakpoints.length > 1) { | 262 if (breakpoints.some(breakpoint => breakpoint.enabled())) { |
| 212 var enableBreakpointCount = enabledBreakpointCount(breakpoints); | 263 var disableTitle = WebInspector.UIString.capitalize('Disable all breakpoin ts'); |
| 213 var enableTitle = WebInspector.UIString.capitalize('Enable ^all ^breakpoin ts'); | |
| 214 var disableTitle = WebInspector.UIString.capitalize('Disable ^all ^breakpo ints'); | |
| 215 | |
| 216 contextMenu.appendSeparator(); | |
| 217 | |
| 218 contextMenu.appendItem( | 264 contextMenu.appendItem( |
| 219 enableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._b reakpointManager, true), | 265 disableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._ breakpointManager, false)); |
| 220 !(enableBreakpointCount !== breakpoints.length)); | |
| 221 contextMenu.appendItem( | |
| 222 disableTitle, this._breakpointManager.toggleAllBreakpoints.bind(this._ breakpointManager, false), | |
| 223 !(enableBreakpointCount > 1)); | |
| 224 } | 266 } |
| 225 | |
| 226 contextMenu.show(); | 267 contextMenu.show(); |
| 227 } | 268 } |
| 228 | 269 |
| 229 _addListElement(element, beforeElement) { | 270 _addListElement(element, beforeElement) { |
| 230 if (beforeElement) | 271 if (beforeElement) |
| 231 this._listElement.insertBefore(element, beforeElement); | 272 this._listElement.insertBefore(element, beforeElement); |
| 232 else { | 273 else { |
| 233 if (!this._listElement.firstChild) { | 274 if (!this._listElement.firstChild) { |
| 234 this.element.removeChild(this.emptyElement); | 275 this.element.removeChild(this.emptyElement); |
| 235 this.element.appendChild(this._listElement); | 276 this.element.appendChild(this._listElement); |
| 236 } | 277 } |
| 237 this._listElement.appendChild(element); | 278 this._listElement.appendChild(element); |
| 238 } | 279 } |
| 239 } | 280 } |
| 240 | 281 |
| 241 _removeListElement(element) { | 282 _removeListElement(element) { |
| 242 this._listElement.removeChild(element); | 283 this._listElement.removeChild(element); |
| 243 if (!this._listElement.firstChild) { | 284 if (!this._listElement.firstChild) { |
| 244 this.element.removeChild(this._listElement); | 285 this.element.removeChild(this._listElement); |
| 245 this.element.appendChild(this.emptyElement); | 286 this.element.appendChild(this.emptyElement); |
| 246 } | 287 } |
| 247 } | 288 } |
| 248 | 289 |
| 249 _compare(x, y) { | |
| 250 if (x !== y) | |
| 251 return x < y ? -1 : 1; | |
| 252 return 0; | |
| 253 } | |
| 254 | |
| 255 _compareBreakpoints(b1, b2) { | |
| 256 return this._compare(b1.uiSourceCode.url(), b2.uiSourceCode.url()) || this._ compare(b1.lineNumber, b2.lineNumber); | |
| 257 } | |
| 258 | |
| 259 reset() { | 290 reset() { |
| 260 this._listElement.removeChildren(); | 291 this._listElement.removeChildren(); |
| 261 if (this._listElement.parentElement) { | 292 if (this._listElement.parentElement) { |
| 262 this.element.removeChild(this._listElement); | 293 this.element.removeChild(this._listElement); |
| 263 this.element.appendChild(this.emptyElement); | 294 this.element.appendChild(this.emptyElement); |
| 264 } | 295 } |
| 265 this._items.clear(); | 296 this._items.clear(); |
| 266 } | 297 } |
| 267 }; | 298 }; |
| 299 | |
| 300 /** @typedef {{ element: !Element, checkbox: !Element}} */ | |
| 301 WebInspector.JavaScriptBreakpointsSidebarPane.BreakpointItem; | |
| OLD | NEW |