Index: third_party/WebKit/Source/devtools/front_end/emulation/MediaQueryInspector.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/MediaQueryInspector.js b/third_party/WebKit/Source/devtools/front_end/emulation/MediaQueryInspector.js |
index 8eb27345170eeebdb9510675a663ed098a4e5458..08810834dce8cec7d24b53867470e24a34a106c4 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/emulation/MediaQueryInspector.js |
+++ b/third_party/WebKit/Source/devtools/front_end/emulation/MediaQueryInspector.js |
@@ -1,21 +1,21 @@ |
// Copyright 2014 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
/** |
- * @constructor |
- * @extends {WebInspector.Widget} |
* @implements {WebInspector.TargetManager.Observer} |
- * @param {function():number} getWidthCallback |
- * @param {function(number)} setWidthCallback |
+ * @unrestricted |
*/ |
-WebInspector.MediaQueryInspector = function(getWidthCallback, setWidthCallback) |
-{ |
- WebInspector.Widget.call(this, true); |
- this.registerRequiredCSS("emulation/mediaQueryInspector.css"); |
- this.contentElement.classList.add("media-inspector-view"); |
- this.contentElement.addEventListener("click", this._onMediaQueryClicked.bind(this), false); |
- this.contentElement.addEventListener("contextmenu", this._onContextMenu.bind(this), false); |
+WebInspector.MediaQueryInspector = class extends WebInspector.Widget { |
+ /** |
+ * @param {function():number} getWidthCallback |
+ * @param {function(number)} setWidthCallback |
+ */ |
+ constructor(getWidthCallback, setWidthCallback) { |
+ super(true); |
+ this.registerRequiredCSS('emulation/mediaQueryInspector.css'); |
+ this.contentElement.classList.add('media-inspector-view'); |
+ this.contentElement.addEventListener('click', this._onMediaQueryClicked.bind(this), false); |
+ this.contentElement.addEventListener('contextmenu', this._onContextMenu.bind(this), false); |
this._mediaThrottler = new WebInspector.Throttler(0); |
this._getWidthCallback = getWidthCallback; |
@@ -23,457 +23,454 @@ WebInspector.MediaQueryInspector = function(getWidthCallback, setWidthCallback) |
this._scale = 1; |
WebInspector.targetManager.observeTargets(this); |
- WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._renderMediaQueries.bind(this), this); |
-}; |
- |
-/** |
- * @enum {number} |
- */ |
-WebInspector.MediaQueryInspector.Section = { |
- Max: 0, |
- MinMax: 1, |
- Min: 2 |
-}; |
- |
-WebInspector.MediaQueryInspector.prototype = { |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) |
- { |
- // FIXME: adapt this to multiple targets. |
- if (this._cssModel) |
- return; |
- this._cssModel = WebInspector.CSSModel.fromTarget(target); |
- if (!this._cssModel) |
- return; |
- this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetAdded, this._scheduleMediaQueriesUpdate, this); |
- this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetRemoved, this._scheduleMediaQueriesUpdate, this); |
- this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetChanged, this._scheduleMediaQueriesUpdate, this); |
- this._cssModel.addEventListener(WebInspector.CSSModel.Events.MediaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) |
- { |
- if (WebInspector.CSSModel.fromTarget(target) !== this._cssModel) |
- return; |
- this._cssModel.removeEventListener(WebInspector.CSSModel.Events.StyleSheetAdded, this._scheduleMediaQueriesUpdate, this); |
- this._cssModel.removeEventListener(WebInspector.CSSModel.Events.StyleSheetRemoved, this._scheduleMediaQueriesUpdate, this); |
- this._cssModel.removeEventListener(WebInspector.CSSModel.Events.StyleSheetChanged, this._scheduleMediaQueriesUpdate, this); |
- this._cssModel.removeEventListener(WebInspector.CSSModel.Events.MediaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); |
- delete this._cssModel; |
- }, |
+ WebInspector.zoomManager.addEventListener( |
+ WebInspector.ZoomManager.Events.ZoomChanged, this._renderMediaQueries.bind(this), this); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetAdded(target) { |
+ // FIXME: adapt this to multiple targets. |
+ if (this._cssModel) |
+ return; |
+ this._cssModel = WebInspector.CSSModel.fromTarget(target); |
+ if (!this._cssModel) |
+ return; |
+ this._cssModel.addEventListener( |
+ WebInspector.CSSModel.Events.StyleSheetAdded, this._scheduleMediaQueriesUpdate, this); |
+ this._cssModel.addEventListener( |
+ WebInspector.CSSModel.Events.StyleSheetRemoved, this._scheduleMediaQueriesUpdate, this); |
+ this._cssModel.addEventListener( |
+ WebInspector.CSSModel.Events.StyleSheetChanged, this._scheduleMediaQueriesUpdate, this); |
+ this._cssModel.addEventListener( |
+ WebInspector.CSSModel.Events.MediaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetRemoved(target) { |
+ if (WebInspector.CSSModel.fromTarget(target) !== this._cssModel) |
+ return; |
+ this._cssModel.removeEventListener( |
+ WebInspector.CSSModel.Events.StyleSheetAdded, this._scheduleMediaQueriesUpdate, this); |
+ this._cssModel.removeEventListener( |
+ WebInspector.CSSModel.Events.StyleSheetRemoved, this._scheduleMediaQueriesUpdate, this); |
+ this._cssModel.removeEventListener( |
+ WebInspector.CSSModel.Events.StyleSheetChanged, this._scheduleMediaQueriesUpdate, this); |
+ this._cssModel.removeEventListener( |
+ WebInspector.CSSModel.Events.MediaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); |
+ delete this._cssModel; |
+ } |
+ |
+ /** |
+ * @param {number} scale |
+ */ |
+ setAxisTransform(scale) { |
+ if (Math.abs(this._scale - scale) < 1e-8) |
+ return; |
+ this._scale = scale; |
+ this._renderMediaQueries(); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onMediaQueryClicked(event) { |
+ var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass('media-inspector-bar'); |
+ if (!mediaQueryMarker) |
+ return; |
+ |
+ var model = mediaQueryMarker._model; |
+ if (model.section() === WebInspector.MediaQueryInspector.Section.Max) { |
+ this._setWidthCallback(model.maxWidthExpression().computedLength()); |
+ return; |
+ } |
+ if (model.section() === WebInspector.MediaQueryInspector.Section.Min) { |
+ this._setWidthCallback(model.minWidthExpression().computedLength()); |
+ return; |
+ } |
+ var currentWidth = this._getWidthCallback(); |
+ if (currentWidth !== model.minWidthExpression().computedLength()) |
+ this._setWidthCallback(model.minWidthExpression().computedLength()); |
+ else |
+ this._setWidthCallback(model.maxWidthExpression().computedLength()); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onContextMenu(event) { |
+ if (!this._cssModel || !this._cssModel.isEnabled()) |
+ return; |
+ |
+ var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass('media-inspector-bar'); |
+ if (!mediaQueryMarker) |
+ return; |
+ |
+ var locations = mediaQueryMarker._locations; |
+ var uiLocations = new Map(); |
+ for (var i = 0; i < locations.length; ++i) { |
+ var uiLocation = WebInspector.cssWorkspaceBinding.rawLocationToUILocation(locations[i]); |
+ if (!uiLocation) |
+ continue; |
+ var descriptor = String.sprintf( |
+ '%s:%d:%d', uiLocation.uiSourceCode.url(), uiLocation.lineNumber + 1, uiLocation.columnNumber + 1); |
+ uiLocations.set(descriptor, uiLocation); |
+ } |
- /** |
- * @param {number} scale |
- */ |
- setAxisTransform: function(scale) |
- { |
- if (Math.abs(this._scale - scale) < 1e-8) |
- return; |
- this._scale = scale; |
- this._renderMediaQueries(); |
- }, |
+ var contextMenuItems = uiLocations.keysArray().sort(); |
+ var contextMenu = new WebInspector.ContextMenu(event); |
+ var subMenuItem = contextMenu.appendSubMenuItem(WebInspector.UIString.capitalize('Reveal in ^source ^code')); |
+ for (var i = 0; i < contextMenuItems.length; ++i) { |
+ var title = contextMenuItems[i]; |
+ subMenuItem.appendItem( |
+ title, |
+ this._revealSourceLocation.bind(this, /** @type {!WebInspector.UILocation} */ (uiLocations.get(title)))); |
+ } |
+ contextMenu.show(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UILocation} location |
+ */ |
+ _revealSourceLocation(location) { |
+ WebInspector.Revealer.reveal(location); |
+ } |
+ |
+ _scheduleMediaQueriesUpdate() { |
+ if (!this.isShowing()) |
+ return; |
+ this._mediaThrottler.schedule(this._refetchMediaQueries.bind(this)); |
+ } |
+ |
+ _refetchMediaQueries() { |
+ if (!this.isShowing() || !this._cssModel) |
+ return Promise.resolve(); |
+ |
+ return this._cssModel.mediaQueriesPromise().then(this._rebuildMediaQueries.bind(this)); |
+ } |
+ |
+ /** |
+ * @param {!Array.<!WebInspector.MediaQueryInspector.MediaQueryUIModel>} models |
+ * @return {!Array.<!WebInspector.MediaQueryInspector.MediaQueryUIModel>} |
+ */ |
+ _squashAdjacentEqual(models) { |
+ var filtered = []; |
+ for (var i = 0; i < models.length; ++i) { |
+ var last = filtered.peekLast(); |
+ if (!last || !last.equals(models[i])) |
+ filtered.push(models[i]); |
+ } |
+ return filtered; |
+ } |
+ |
+ /** |
+ * @param {!Array.<!WebInspector.CSSMedia>} cssMedias |
+ */ |
+ _rebuildMediaQueries(cssMedias) { |
+ var queryModels = []; |
+ for (var i = 0; i < cssMedias.length; ++i) { |
+ var cssMedia = cssMedias[i]; |
+ if (!cssMedia.mediaList) |
+ continue; |
+ for (var j = 0; j < cssMedia.mediaList.length; ++j) { |
+ var mediaQuery = cssMedia.mediaList[j]; |
+ var queryModel = WebInspector.MediaQueryInspector.MediaQueryUIModel.createFromMediaQuery(cssMedia, mediaQuery); |
+ if (queryModel && queryModel.rawLocation()) |
+ queryModels.push(queryModel); |
+ } |
+ } |
+ queryModels.sort(compareModels); |
+ queryModels = this._squashAdjacentEqual(queryModels); |
- /** |
- * @param {!Event} event |
- */ |
- _onMediaQueryClicked: function(event) |
- { |
- var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass("media-inspector-bar"); |
- if (!mediaQueryMarker) |
- return; |
- |
- var model = mediaQueryMarker._model; |
- if (model.section() === WebInspector.MediaQueryInspector.Section.Max) { |
- this._setWidthCallback(model.maxWidthExpression().computedLength()); |
- return; |
- } |
- if (model.section() === WebInspector.MediaQueryInspector.Section.Min) { |
- this._setWidthCallback(model.minWidthExpression().computedLength()); |
- return; |
- } |
- var currentWidth = this._getWidthCallback(); |
- if (currentWidth !== model.minWidthExpression().computedLength()) |
- this._setWidthCallback(model.minWidthExpression().computedLength()); |
- else |
- this._setWidthCallback(model.maxWidthExpression().computedLength()); |
- }, |
+ var allEqual = this._cachedQueryModels && this._cachedQueryModels.length === queryModels.length; |
+ for (var i = 0; allEqual && i < queryModels.length; ++i) |
+ allEqual = allEqual && this._cachedQueryModels[i].equals(queryModels[i]); |
+ if (allEqual) |
+ return; |
+ this._cachedQueryModels = queryModels; |
+ this._renderMediaQueries(); |
/** |
- * @param {!Event} event |
+ * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model1 |
+ * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model2 |
+ * @return {number} |
*/ |
- _onContextMenu: function(event) |
- { |
- if (!this._cssModel || !this._cssModel.isEnabled()) |
- return; |
- |
- var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass("media-inspector-bar"); |
- if (!mediaQueryMarker) |
- return; |
- |
- var locations = mediaQueryMarker._locations; |
- var uiLocations = new Map(); |
- for (var i = 0; i < locations.length; ++i) { |
- var uiLocation = WebInspector.cssWorkspaceBinding.rawLocationToUILocation(locations[i]); |
- if (!uiLocation) |
- continue; |
- var descriptor = String.sprintf("%s:%d:%d", uiLocation.uiSourceCode.url(), uiLocation.lineNumber + 1, uiLocation.columnNumber + 1); |
- uiLocations.set(descriptor, uiLocation); |
- } |
- |
- var contextMenuItems = uiLocations.keysArray().sort(); |
- var contextMenu = new WebInspector.ContextMenu(event); |
- var subMenuItem = contextMenu.appendSubMenuItem(WebInspector.UIString.capitalize("Reveal in ^source ^code")); |
- for (var i = 0; i < contextMenuItems.length; ++i) { |
- var title = contextMenuItems[i]; |
- subMenuItem.appendItem(title, this._revealSourceLocation.bind(this, /** @type {!WebInspector.UILocation} */(uiLocations.get(title)))); |
- } |
- contextMenu.show(); |
- }, |
+ function compareModels(model1, model2) { |
+ return model1.compareTo(model2); |
+ } |
+ } |
+ |
+ _renderMediaQueries() { |
+ if (!this._cachedQueryModels || !this.isShowing()) |
+ return; |
+ |
+ var markers = []; |
+ var lastMarker = null; |
+ for (var i = 0; i < this._cachedQueryModels.length; ++i) { |
+ var model = this._cachedQueryModels[i]; |
+ if (lastMarker && lastMarker.model.dimensionsEqual(model)) { |
+ lastMarker.locations.push(model.rawLocation()); |
+ lastMarker.active = lastMarker.active || model.active(); |
+ } else { |
+ lastMarker = {active: model.active(), model: model, locations: [model.rawLocation()]}; |
+ markers.push(lastMarker); |
+ } |
+ } |
- /** |
- * @param {!WebInspector.UILocation} location |
- */ |
- _revealSourceLocation: function(location) |
- { |
- WebInspector.Revealer.reveal(location); |
- }, |
- |
- _scheduleMediaQueriesUpdate: function() |
- { |
- if (!this.isShowing()) |
- return; |
- this._mediaThrottler.schedule(this._refetchMediaQueries.bind(this)); |
- }, |
- |
- _refetchMediaQueries: function() |
- { |
- if (!this.isShowing() || !this._cssModel) |
- return Promise.resolve(); |
- |
- return this._cssModel.mediaQueriesPromise() |
- .then(this._rebuildMediaQueries.bind(this)); |
- }, |
+ this.contentElement.removeChildren(); |
+ |
+ var container = null; |
+ for (var i = 0; i < markers.length; ++i) { |
+ if (!i || markers[i].model.section() !== markers[i - 1].model.section()) |
+ container = this.contentElement.createChild('div', 'media-inspector-marker-container'); |
+ var marker = markers[i]; |
+ var bar = this._createElementFromMediaQueryModel(marker.model); |
+ bar._model = marker.model; |
+ bar._locations = marker.locations; |
+ bar.classList.toggle('media-inspector-marker-inactive', !marker.active); |
+ container.appendChild(bar); |
+ } |
+ } |
+ |
+ /** |
+ * @return {number} |
+ */ |
+ _zoomFactor() { |
+ return WebInspector.zoomManager.zoomFactor() / this._scale; |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ wasShown() { |
+ this._scheduleMediaQueriesUpdate(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model |
+ * @return {!Element} |
+ */ |
+ _createElementFromMediaQueryModel(model) { |
+ var zoomFactor = this._zoomFactor(); |
+ var minWidthValue = model.minWidthExpression() ? model.minWidthExpression().computedLength() / zoomFactor : 0; |
+ var maxWidthValue = model.maxWidthExpression() ? model.maxWidthExpression().computedLength() / zoomFactor : 0; |
+ var result = createElementWithClass('div', 'media-inspector-bar'); |
+ |
+ if (model.section() === WebInspector.MediaQueryInspector.Section.Max) { |
+ result.createChild('div', 'media-inspector-marker-spacer'); |
+ var markerElement = result.createChild('div', 'media-inspector-marker media-inspector-marker-max-width'); |
+ markerElement.style.width = maxWidthValue + 'px'; |
+ markerElement.title = model.mediaText(); |
+ appendLabel(markerElement, model.maxWidthExpression(), false, false); |
+ appendLabel(markerElement, model.maxWidthExpression(), true, true); |
+ result.createChild('div', 'media-inspector-marker-spacer'); |
+ } |
- /** |
- * @param {!Array.<!WebInspector.MediaQueryInspector.MediaQueryUIModel>} models |
- * @return {!Array.<!WebInspector.MediaQueryInspector.MediaQueryUIModel>} |
- */ |
- _squashAdjacentEqual: function(models) |
- { |
- var filtered = []; |
- for (var i = 0; i < models.length; ++i) { |
- var last = filtered.peekLast(); |
- if (!last || !last.equals(models[i])) |
- filtered.push(models[i]); |
- } |
- return filtered; |
- }, |
+ if (model.section() === WebInspector.MediaQueryInspector.Section.MinMax) { |
+ result.createChild('div', 'media-inspector-marker-spacer'); |
+ var leftElement = result.createChild('div', 'media-inspector-marker media-inspector-marker-min-max-width'); |
+ leftElement.style.width = (maxWidthValue - minWidthValue) * 0.5 + 'px'; |
+ leftElement.title = model.mediaText(); |
+ appendLabel(leftElement, model.minWidthExpression(), true, false); |
+ appendLabel(leftElement, model.maxWidthExpression(), false, true); |
+ result.createChild('div', 'media-inspector-marker-spacer').style.flex = '0 0 ' + minWidthValue + 'px'; |
+ var rightElement = result.createChild('div', 'media-inspector-marker media-inspector-marker-min-max-width'); |
+ rightElement.style.width = (maxWidthValue - minWidthValue) * 0.5 + 'px'; |
+ rightElement.title = model.mediaText(); |
+ appendLabel(rightElement, model.minWidthExpression(), true, false); |
+ appendLabel(rightElement, model.maxWidthExpression(), false, true); |
+ result.createChild('div', 'media-inspector-marker-spacer'); |
+ } |
- /** |
- * @param {!Array.<!WebInspector.CSSMedia>} cssMedias |
- */ |
- _rebuildMediaQueries: function(cssMedias) |
- { |
- var queryModels = []; |
- for (var i = 0; i < cssMedias.length; ++i) { |
- var cssMedia = cssMedias[i]; |
- if (!cssMedia.mediaList) |
- continue; |
- for (var j = 0; j < cssMedia.mediaList.length; ++j) { |
- var mediaQuery = cssMedia.mediaList[j]; |
- var queryModel = WebInspector.MediaQueryInspector.MediaQueryUIModel.createFromMediaQuery(cssMedia, mediaQuery); |
- if (queryModel && queryModel.rawLocation()) |
- queryModels.push(queryModel); |
- } |
- } |
- queryModels.sort(compareModels); |
- queryModels = this._squashAdjacentEqual(queryModels); |
- |
- var allEqual = this._cachedQueryModels && this._cachedQueryModels.length === queryModels.length; |
- for (var i = 0; allEqual && i < queryModels.length; ++i) |
- allEqual = allEqual && this._cachedQueryModels[i].equals(queryModels[i]); |
- if (allEqual) |
- return; |
- this._cachedQueryModels = queryModels; |
- this._renderMediaQueries(); |
- |
- /** |
- * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model1 |
- * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model2 |
- * @return {number} |
- */ |
- function compareModels(model1, model2) |
- { |
- return model1.compareTo(model2); |
- } |
- }, |
- |
- _renderMediaQueries: function() |
- { |
- if (!this._cachedQueryModels || !this.isShowing()) |
- return; |
- |
- var markers = []; |
- var lastMarker = null; |
- for (var i = 0; i < this._cachedQueryModels.length; ++i) { |
- var model = this._cachedQueryModels[i]; |
- if (lastMarker && lastMarker.model.dimensionsEqual(model)) { |
- lastMarker.locations.push(model.rawLocation()); |
- lastMarker.active = lastMarker.active || model.active(); |
- } else { |
- lastMarker = { |
- active: model.active(), |
- model: model, |
- locations: [ model.rawLocation() ] |
- }; |
- markers.push(lastMarker); |
- } |
- } |
- |
- this.contentElement.removeChildren(); |
- |
- var container = null; |
- for (var i = 0; i < markers.length; ++i) { |
- if (!i || markers[i].model.section() !== markers[i - 1].model.section()) |
- container = this.contentElement.createChild("div", "media-inspector-marker-container"); |
- var marker = markers[i]; |
- var bar = this._createElementFromMediaQueryModel(marker.model); |
- bar._model = marker.model; |
- bar._locations = marker.locations; |
- bar.classList.toggle("media-inspector-marker-inactive", !marker.active); |
- container.appendChild(bar); |
- } |
- }, |
+ if (model.section() === WebInspector.MediaQueryInspector.Section.Min) { |
+ var leftElement = result.createChild( |
+ 'div', 'media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-left'); |
+ leftElement.title = model.mediaText(); |
+ appendLabel(leftElement, model.minWidthExpression(), false, false); |
+ result.createChild('div', 'media-inspector-marker-spacer').style.flex = '0 0 ' + minWidthValue + 'px'; |
+ var rightElement = result.createChild( |
+ 'div', 'media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-right'); |
+ rightElement.title = model.mediaText(); |
+ appendLabel(rightElement, model.minWidthExpression(), true, true); |
+ } |
- /** |
- * @return {number} |
- */ |
- _zoomFactor: function() |
- { |
- return WebInspector.zoomManager.zoomFactor() / this._scale; |
- }, |
+ function appendLabel(marker, expression, atLeft, leftAlign) { |
+ marker |
+ .createChild( |
+ 'div', |
+ 'media-inspector-marker-label-container ' + (atLeft ? 'media-inspector-marker-label-container-left' : |
+ 'media-inspector-marker-label-container-right')) |
+ .createChild( |
+ 'span', 'media-inspector-marker-label ' + |
+ (leftAlign ? 'media-inspector-label-left' : 'media-inspector-label-right')) |
+ .textContent = expression.value() + expression.unit(); |
+ } |
- wasShown: function() |
- { |
- this._scheduleMediaQueriesUpdate(); |
- }, |
+ return result; |
+ } |
+}; |
- /** |
- * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model |
- * @return {!Element} |
- */ |
- _createElementFromMediaQueryModel: function(model) |
- { |
- var zoomFactor = this._zoomFactor(); |
- var minWidthValue = model.minWidthExpression() ? model.minWidthExpression().computedLength() / zoomFactor : 0; |
- var maxWidthValue = model.maxWidthExpression() ? model.maxWidthExpression().computedLength() / zoomFactor : 0; |
- var result = createElementWithClass("div", "media-inspector-bar"); |
- |
- if (model.section() === WebInspector.MediaQueryInspector.Section.Max) { |
- result.createChild("div", "media-inspector-marker-spacer"); |
- var markerElement = result.createChild("div", "media-inspector-marker media-inspector-marker-max-width"); |
- markerElement.style.width = maxWidthValue + "px"; |
- markerElement.title = model.mediaText(); |
- appendLabel(markerElement, model.maxWidthExpression(), false, false); |
- appendLabel(markerElement, model.maxWidthExpression(), true, true); |
- result.createChild("div", "media-inspector-marker-spacer"); |
- } |
- |
- if (model.section() === WebInspector.MediaQueryInspector.Section.MinMax) { |
- result.createChild("div", "media-inspector-marker-spacer"); |
- var leftElement = result.createChild("div", "media-inspector-marker media-inspector-marker-min-max-width"); |
- leftElement.style.width = (maxWidthValue - minWidthValue) * 0.5 + "px"; |
- leftElement.title = model.mediaText(); |
- appendLabel(leftElement, model.minWidthExpression(), true, false); |
- appendLabel(leftElement, model.maxWidthExpression(), false, true); |
- result.createChild("div", "media-inspector-marker-spacer").style.flex = "0 0 " + minWidthValue + "px"; |
- var rightElement = result.createChild("div", "media-inspector-marker media-inspector-marker-min-max-width"); |
- rightElement.style.width = (maxWidthValue - minWidthValue) * 0.5 + "px"; |
- rightElement.title = model.mediaText(); |
- appendLabel(rightElement, model.minWidthExpression(), true, false); |
- appendLabel(rightElement, model.maxWidthExpression(), false, true); |
- result.createChild("div", "media-inspector-marker-spacer"); |
- } |
- |
- if (model.section() === WebInspector.MediaQueryInspector.Section.Min) { |
- var leftElement = result.createChild("div", "media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-left"); |
- leftElement.title = model.mediaText(); |
- appendLabel(leftElement, model.minWidthExpression(), false, false); |
- result.createChild("div", "media-inspector-marker-spacer").style.flex = "0 0 " + minWidthValue + "px"; |
- var rightElement = result.createChild("div", "media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-right"); |
- rightElement.title = model.mediaText(); |
- appendLabel(rightElement, model.minWidthExpression(), true, true); |
- } |
- |
- function appendLabel(marker, expression, atLeft, leftAlign) |
- { |
- marker.createChild("div", "media-inspector-marker-label-container " + (atLeft ? "media-inspector-marker-label-container-left" : "media-inspector-marker-label-container-right")) |
- .createChild("span", "media-inspector-marker-label " + (leftAlign ? "media-inspector-label-left" : "media-inspector-label-right")) |
- .textContent = expression.value() + expression.unit(); |
- } |
- |
- return result; |
- }, |
- |
- __proto__: WebInspector.Widget.prototype |
+/** |
+ * @enum {number} |
+ */ |
+WebInspector.MediaQueryInspector.Section = { |
+ Max: 0, |
+ MinMax: 1, |
+ Min: 2 |
}; |
/** |
- * @constructor |
- * @param {!WebInspector.CSSMedia} cssMedia |
- * @param {?WebInspector.CSSMediaQueryExpression} minWidthExpression |
- * @param {?WebInspector.CSSMediaQueryExpression} maxWidthExpression |
- * @param {boolean} active |
+ * @unrestricted |
*/ |
-WebInspector.MediaQueryInspector.MediaQueryUIModel = function(cssMedia, minWidthExpression, maxWidthExpression, active) |
-{ |
+WebInspector.MediaQueryInspector.MediaQueryUIModel = class { |
+ /** |
+ * @param {!WebInspector.CSSMedia} cssMedia |
+ * @param {?WebInspector.CSSMediaQueryExpression} minWidthExpression |
+ * @param {?WebInspector.CSSMediaQueryExpression} maxWidthExpression |
+ * @param {boolean} active |
+ */ |
+ constructor(cssMedia, minWidthExpression, maxWidthExpression, active) { |
this._cssMedia = cssMedia; |
this._minWidthExpression = minWidthExpression; |
this._maxWidthExpression = maxWidthExpression; |
this._active = active; |
if (maxWidthExpression && !minWidthExpression) |
- this._section = WebInspector.MediaQueryInspector.Section.Max; |
+ this._section = WebInspector.MediaQueryInspector.Section.Max; |
else if (minWidthExpression && maxWidthExpression) |
- this._section = WebInspector.MediaQueryInspector.Section.MinMax; |
+ this._section = WebInspector.MediaQueryInspector.Section.MinMax; |
else |
- this._section = WebInspector.MediaQueryInspector.Section.Min; |
-}; |
- |
-/** |
- * @param {!WebInspector.CSSMedia} cssMedia |
- * @param {!WebInspector.CSSMediaQuery} mediaQuery |
- * @return {?WebInspector.MediaQueryInspector.MediaQueryUIModel} |
- */ |
-WebInspector.MediaQueryInspector.MediaQueryUIModel.createFromMediaQuery = function(cssMedia, mediaQuery) |
-{ |
+ this._section = WebInspector.MediaQueryInspector.Section.Min; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.CSSMedia} cssMedia |
+ * @param {!WebInspector.CSSMediaQuery} mediaQuery |
+ * @return {?WebInspector.MediaQueryInspector.MediaQueryUIModel} |
+ */ |
+ static createFromMediaQuery(cssMedia, mediaQuery) { |
var maxWidthExpression = null; |
var maxWidthPixels = Number.MAX_VALUE; |
var minWidthExpression = null; |
var minWidthPixels = Number.MIN_VALUE; |
var expressions = mediaQuery.expressions(); |
for (var i = 0; i < expressions.length; ++i) { |
- var expression = expressions[i]; |
- var feature = expression.feature(); |
- if (feature.indexOf("width") === -1) |
- continue; |
- var pixels = expression.computedLength(); |
- if (feature.startsWith("max-") && pixels < maxWidthPixels) { |
- maxWidthExpression = expression; |
- maxWidthPixels = pixels; |
- } else if (feature.startsWith("min-") && pixels > minWidthPixels) { |
- minWidthExpression = expression; |
- minWidthPixels = pixels; |
- } |
+ var expression = expressions[i]; |
+ var feature = expression.feature(); |
+ if (feature.indexOf('width') === -1) |
+ continue; |
+ var pixels = expression.computedLength(); |
+ if (feature.startsWith('max-') && pixels < maxWidthPixels) { |
+ maxWidthExpression = expression; |
+ maxWidthPixels = pixels; |
+ } else if (feature.startsWith('min-') && pixels > minWidthPixels) { |
+ minWidthExpression = expression; |
+ minWidthPixels = pixels; |
+ } |
} |
if (minWidthPixels > maxWidthPixels || (!maxWidthExpression && !minWidthExpression)) |
- return null; |
- |
- return new WebInspector.MediaQueryInspector.MediaQueryUIModel(cssMedia, minWidthExpression, maxWidthExpression, mediaQuery.active()); |
+ return null; |
+ |
+ return new WebInspector.MediaQueryInspector.MediaQueryUIModel( |
+ cssMedia, minWidthExpression, maxWidthExpression, mediaQuery.active()); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other |
+ * @return {boolean} |
+ */ |
+ equals(other) { |
+ return this.compareTo(other) === 0; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other |
+ * @return {boolean} |
+ */ |
+ dimensionsEqual(other) { |
+ return this.section() === other.section() && |
+ (!this.minWidthExpression() || |
+ (this.minWidthExpression().computedLength() === other.minWidthExpression().computedLength())) && |
+ (!this.maxWidthExpression() || |
+ (this.maxWidthExpression().computedLength() === other.maxWidthExpression().computedLength())); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other |
+ * @return {number} |
+ */ |
+ compareTo(other) { |
+ if (this.section() !== other.section()) |
+ return this.section() - other.section(); |
+ if (this.dimensionsEqual(other)) { |
+ var myLocation = this.rawLocation(); |
+ var otherLocation = other.rawLocation(); |
+ if (!myLocation && !otherLocation) |
+ return this.mediaText().compareTo(other.mediaText()); |
+ if (myLocation && !otherLocation) |
+ return 1; |
+ if (!myLocation && otherLocation) |
+ return -1; |
+ if (this.active() !== other.active()) |
+ return this.active() ? -1 : 1; |
+ return myLocation.url.compareTo(otherLocation.url) || myLocation.lineNumber - otherLocation.lineNumber || |
+ myLocation.columnNumber - otherLocation.columnNumber; |
+ } |
+ if (this.section() === WebInspector.MediaQueryInspector.Section.Max) |
+ return other.maxWidthExpression().computedLength() - this.maxWidthExpression().computedLength(); |
+ if (this.section() === WebInspector.MediaQueryInspector.Section.Min) |
+ return this.minWidthExpression().computedLength() - other.minWidthExpression().computedLength(); |
+ return this.minWidthExpression().computedLength() - other.minWidthExpression().computedLength() || |
+ other.maxWidthExpression().computedLength() - this.maxWidthExpression().computedLength(); |
+ } |
+ |
+ /** |
+ * @return {!WebInspector.MediaQueryInspector.Section} |
+ */ |
+ section() { |
+ return this._section; |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ mediaText() { |
+ return this._cssMedia.text; |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.CSSLocation} |
+ */ |
+ rawLocation() { |
+ if (!this._rawLocation) |
+ this._rawLocation = this._cssMedia.rawLocation(); |
+ return this._rawLocation; |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.CSSMediaQueryExpression} |
+ */ |
+ minWidthExpression() { |
+ return this._minWidthExpression; |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.CSSMediaQueryExpression} |
+ */ |
+ maxWidthExpression() { |
+ return this._maxWidthExpression; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ active() { |
+ return this._active; |
+ } |
}; |
-WebInspector.MediaQueryInspector.MediaQueryUIModel.prototype = { |
- /** |
- * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other |
- * @return {boolean} |
- */ |
- equals: function(other) |
- { |
- return this.compareTo(other) === 0; |
- }, |
- |
- /** |
- * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other |
- * @return {boolean} |
- */ |
- dimensionsEqual: function(other) |
- { |
- return this.section() === other.section() |
- && (!this.minWidthExpression() || (this.minWidthExpression().computedLength() === other.minWidthExpression().computedLength())) |
- && (!this.maxWidthExpression() || (this.maxWidthExpression().computedLength() === other.maxWidthExpression().computedLength())); |
- }, |
- /** |
- * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other |
- * @return {number} |
- */ |
- compareTo: function(other) |
- { |
- if (this.section() !== other.section()) |
- return this.section() - other.section(); |
- if (this.dimensionsEqual(other)) { |
- var myLocation = this.rawLocation(); |
- var otherLocation = other.rawLocation(); |
- if (!myLocation && !otherLocation) |
- return this.mediaText().compareTo(other.mediaText()); |
- if (myLocation && !otherLocation) |
- return 1; |
- if (!myLocation && otherLocation) |
- return -1; |
- if (this.active() !== other.active()) |
- return this.active() ? -1 : 1; |
- return myLocation.url.compareTo(otherLocation.url) || myLocation.lineNumber - otherLocation.lineNumber || myLocation.columnNumber - otherLocation.columnNumber; |
- } |
- if (this.section() === WebInspector.MediaQueryInspector.Section.Max) |
- return other.maxWidthExpression().computedLength() - this.maxWidthExpression().computedLength(); |
- if (this.section() === WebInspector.MediaQueryInspector.Section.Min) |
- return this.minWidthExpression().computedLength() - other.minWidthExpression().computedLength(); |
- return this.minWidthExpression().computedLength() - other.minWidthExpression().computedLength() || other.maxWidthExpression().computedLength() - this.maxWidthExpression().computedLength(); |
- }, |
- |
- /** |
- * @return {!WebInspector.MediaQueryInspector.Section} |
- */ |
- section: function() |
- { |
- return this._section; |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- mediaText: function() |
- { |
- return this._cssMedia.text; |
- }, |
- |
- /** |
- * @return {?WebInspector.CSSLocation} |
- */ |
- rawLocation: function() |
- { |
- if (!this._rawLocation) |
- this._rawLocation = this._cssMedia.rawLocation(); |
- return this._rawLocation; |
- }, |
- |
- /** |
- * @return {?WebInspector.CSSMediaQueryExpression} |
- */ |
- minWidthExpression: function() |
- { |
- return this._minWidthExpression; |
- }, |
- |
- /** |
- * @return {?WebInspector.CSSMediaQueryExpression} |
- */ |
- maxWidthExpression: function() |
- { |
- return this._maxWidthExpression; |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- active: function() |
- { |
- return this._active; |
- } |
-}; |