Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.View} | 7 * @extends {WebInspector.View} |
| 8 * @implements {WebInspector.TargetManager.Observer} | 8 * @implements {WebInspector.TargetManager.Observer} |
| 9 */ | 9 */ |
| 10 WebInspector.MediaQueryInspector = function() | 10 WebInspector.MediaQueryInspector = function() |
| 11 { | 11 { |
| 12 WebInspector.View.call(this); | 12 WebInspector.View.call(this); |
| 13 this.element.classList.add("media-inspector-view", "media-inspector-view-emp ty"); | 13 this.element.classList.add("media-inspector-view", "media-inspector-view-emp ty"); |
| 14 this.element.addEventListener("click", this._onMediaQueryClicked.bind(this), false); | 14 this.element.addEventListener("click", this._onMediaQueryClicked.bind(this), false); |
| 15 this.element.addEventListener("contextmenu", this._onContextMenu.bind(this), false); | 15 this.element.addEventListener("contextmenu", this._onContextMenu.bind(this), false); |
| 16 this._mediaThrottler = new WebInspector.Throttler(0); | 16 this._mediaThrottler = new WebInspector.Throttler(0); |
| 17 | 17 |
| 18 this._offset = 0; | 18 this._offset = 0; |
| 19 this._scale = 1; | 19 this._scale = 1; |
| 20 this._lastReportedCount = 0; | 20 this._lastReportedCount = 0; |
| 21 this._canRevealSourceLocation = false; | |
|
lushnikov
2015/02/25 15:23:55
сan we have method _canRevealSourceLocation that w
dgozman
2015/02/25 15:51:55
Done.
| |
| 21 | 22 |
| 22 WebInspector.targetManager.observeTargets(this); | 23 WebInspector.targetManager.observeTargets(this); |
| 23 | 24 |
| 24 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo omChanged, this._renderMediaQueries.bind(this), this); | 25 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo omChanged, this._renderMediaQueries.bind(this), this); |
| 25 } | 26 } |
| 26 | 27 |
| 27 /** | 28 /** |
| 28 * @enum {number} | 29 * @enum {number} |
| 29 */ | 30 */ |
| 30 WebInspector.MediaQueryInspector.Section = { | 31 WebInspector.MediaQueryInspector.Section = { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 42 /** | 43 /** |
| 43 * @override | 44 * @override |
| 44 * @param {!WebInspector.Target} target | 45 * @param {!WebInspector.Target} target |
| 45 */ | 46 */ |
| 46 targetAdded: function(target) | 47 targetAdded: function(target) |
| 47 { | 48 { |
| 48 // FIXME: adapt this to multiple targets. | 49 // FIXME: adapt this to multiple targets. |
| 49 if (this._target) | 50 if (this._target) |
| 50 return; | 51 return; |
| 51 this._target = target; | 52 this._target = target; |
| 53 this._canRevealSourceLocation = target.cssModel.isEnabled(); | |
| 52 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Style SheetAdded, this._scheduleMediaQueriesUpdate, this); | 54 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Style SheetAdded, this._scheduleMediaQueriesUpdate, this); |
| 53 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Style SheetRemoved, this._scheduleMediaQueriesUpdate, this); | 55 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Style SheetRemoved, this._scheduleMediaQueriesUpdate, this); |
| 54 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Style SheetChanged, this._scheduleMediaQueriesUpdate, this); | 56 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Style SheetChanged, this._scheduleMediaQueriesUpdate, this); |
| 55 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Media QueryResultChanged, this._scheduleMediaQueriesUpdate, this); | 57 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Media QueryResultChanged, this._scheduleMediaQueriesUpdate, this); |
| 58 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Model WasDisabled, this._cssModelEnabledChanged, this); | |
| 59 target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.Model WasEnabled, this._cssModelEnabledChanged, this); | |
| 56 }, | 60 }, |
| 57 | 61 |
| 58 /** | 62 /** |
| 59 * @override | 63 * @override |
| 60 * @param {!WebInspector.Target} target | 64 * @param {!WebInspector.Target} target |
| 61 */ | 65 */ |
| 62 targetRemoved: function(target) | 66 targetRemoved: function(target) |
| 63 { | 67 { |
| 64 if (target !== this._target) | 68 if (target !== this._target) |
| 65 return; | 69 return; |
| 66 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.St yleSheetAdded, this._scheduleMediaQueriesUpdate, this); | 70 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.St yleSheetAdded, this._scheduleMediaQueriesUpdate, this); |
| 67 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.St yleSheetRemoved, this._scheduleMediaQueriesUpdate, this); | 71 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.St yleSheetRemoved, this._scheduleMediaQueriesUpdate, this); |
| 68 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.St yleSheetChanged, this._scheduleMediaQueriesUpdate, this); | 72 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.St yleSheetChanged, this._scheduleMediaQueriesUpdate, this); |
| 69 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.Me diaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); | 73 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.Me diaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); |
| 74 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.Mo delWasDisabled, this._cssModelEnabledChanged, this); | |
| 75 target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.Mo delWasEnabled, this._cssModelEnabledChanged, this); | |
| 76 this._canRevealSourceLocation = false; | |
| 77 delete this._target; | |
| 70 }, | 78 }, |
| 71 | 79 |
| 72 /** | 80 /** |
| 73 * @param {number} offset | 81 * @param {number} offset |
| 74 * @param {number} scale | 82 * @param {number} scale |
| 75 */ | 83 */ |
| 76 setAxisTransform: function(offset, scale) | 84 setAxisTransform: function(offset, scale) |
| 77 { | 85 { |
| 78 if (this._offset === offset && Math.abs(this._scale - scale) < 1e-8) | 86 if (this._offset === offset && Math.abs(this._scale - scale) < 1e-8) |
| 79 return; | 87 return; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 123 setWidth(model.minWidthExpression().computedLength()); | 131 setWidth(model.minWidthExpression().computedLength()); |
| 124 else | 132 else |
| 125 setWidth(model.maxWidthExpression().computedLength()); | 133 setWidth(model.maxWidthExpression().computedLength()); |
| 126 }, | 134 }, |
| 127 | 135 |
| 128 /** | 136 /** |
| 129 * @param {!Event} event | 137 * @param {!Event} event |
| 130 */ | 138 */ |
| 131 _onContextMenu: function(event) | 139 _onContextMenu: function(event) |
| 132 { | 140 { |
| 141 if (!this._canRevealSourceLocation) | |
| 142 return; | |
| 143 | |
| 133 var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass("media- inspector-marker"); | 144 var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass("media- inspector-marker"); |
| 134 if (!mediaQueryMarker) | 145 if (!mediaQueryMarker) |
| 135 return; | 146 return; |
| 136 | 147 |
| 137 var locations = mediaQueryMarker._locations; | 148 var locations = mediaQueryMarker._locations; |
| 138 var uiLocations = new Map(); | 149 var uiLocations = new Map(); |
| 139 for (var i = 0; i < locations.length; ++i) { | 150 for (var i = 0; i < locations.length; ++i) { |
| 140 var uiLocation = WebInspector.cssWorkspaceBinding.rawLocationToUILoc ation(locations[i]); | 151 var uiLocation = WebInspector.cssWorkspaceBinding.rawLocationToUILoc ation(locations[i]); |
| 141 if (!uiLocation) | 152 if (!uiLocation) |
| 142 continue; | 153 continue; |
| 143 var descriptor = String.sprintf("%s:%d:%d", uiLocation.uiSourceCode. uri(), uiLocation.lineNumber + 1, uiLocation.columnNumber + 1); | 154 var descriptor = String.sprintf("%s:%d:%d", uiLocation.uiSourceCode. uri(), uiLocation.lineNumber + 1, uiLocation.columnNumber + 1); |
| 144 uiLocations.set(descriptor, uiLocation); | 155 uiLocations.set(descriptor, uiLocation); |
| 145 } | 156 } |
| 146 | 157 |
| 147 var contextMenuItems = uiLocations.keysArray().sort(); | 158 var contextMenuItems = uiLocations.keysArray().sort(); |
| 148 var contextMenu = new WebInspector.ContextMenu(event); | 159 var contextMenu = new WebInspector.ContextMenu(event); |
| 149 var subMenuItem = contextMenu.appendSubMenuItem(WebInspector.UIString.ca pitalize("Reveal in ^source ^code")); | 160 var subMenuItem = contextMenu.appendSubMenuItem(WebInspector.UIString.ca pitalize("Reveal in ^source ^code")); |
| 150 for (var i = 0; i < contextMenuItems.length; ++i) { | 161 for (var i = 0; i < contextMenuItems.length; ++i) { |
| 151 var title = contextMenuItems[i]; | 162 var title = contextMenuItems[i]; |
| 152 subMenuItem.appendItem(title, this._revealSourceLocation.bind(this, /** @type {!WebInspector.UILocation} */(uiLocations.get(title)))); | 163 subMenuItem.appendItem(title, this._revealSourceLocation.bind(this, /** @type {!WebInspector.UILocation} */(uiLocations.get(title)))); |
| 153 } | 164 } |
| 154 contextMenu.show(); | 165 contextMenu.show(); |
| 155 }, | 166 }, |
| 156 | 167 |
| 168 _cssModelEnabledChanged: function() | |
| 169 { | |
| 170 if (this._target) | |
| 171 this._canRevealSourceLocation = this._target.cssModel.isEnabled(); | |
|
caseq
2015/02/25 14:58:34
Why not just check the model state upon onContextM
dgozman
2015/02/25 15:51:55
Done.
| |
| 172 }, | |
| 173 | |
| 157 /** | 174 /** |
| 158 * @param {!WebInspector.UILocation} location | 175 * @param {!WebInspector.UILocation} location |
| 159 */ | 176 */ |
| 160 _revealSourceLocation: function(location) | 177 _revealSourceLocation: function(location) |
| 161 { | 178 { |
| 162 WebInspector.Revealer.reveal(location); | 179 WebInspector.Revealer.reveal(location); |
| 163 }, | 180 }, |
| 164 | 181 |
| 165 _scheduleMediaQueriesUpdate: function() | 182 _scheduleMediaQueriesUpdate: function() |
| 166 { | 183 { |
| 167 if (!this._enabled) | 184 if (!this._enabled) |
| 168 return; | 185 return; |
| 169 this._mediaThrottler.schedule(this._refetchMediaQueries.bind(this)); | 186 this._mediaThrottler.schedule(this._refetchMediaQueries.bind(this)); |
| 170 }, | 187 }, |
| 171 | 188 |
| 172 /** | 189 /** |
| 173 * @param {!WebInspector.Throttler.FinishCallback} finishCallback | 190 * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
| 174 */ | 191 */ |
| 175 _refetchMediaQueries: function(finishCallback) | 192 _refetchMediaQueries: function(finishCallback) |
| 176 { | 193 { |
| 177 if (!this._enabled) { | 194 if (!this._enabled || !this._target) { |
| 178 finishCallback(); | 195 finishCallback(); |
| 179 return; | 196 return; |
| 180 } | 197 } |
| 181 | 198 |
| 182 /** | 199 /** |
| 183 * @param {!Array.<!WebInspector.CSSMedia>} cssMedias | 200 * @param {!Array.<!WebInspector.CSSMedia>} cssMedias |
| 184 * @this {!WebInspector.MediaQueryInspector} | 201 * @this {!WebInspector.MediaQueryInspector} |
| 185 */ | 202 */ |
| 186 function callback(cssMedias) | 203 function callback(cssMedias) |
| 187 { | 204 { |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 501 }, | 518 }, |
| 502 | 519 |
| 503 /** | 520 /** |
| 504 * @return {boolean} | 521 * @return {boolean} |
| 505 */ | 522 */ |
| 506 active: function() | 523 active: function() |
| 507 { | 524 { |
| 508 return this._active; | 525 return this._active; |
| 509 } | 526 } |
| 510 } | 527 } |
| OLD | NEW |