1197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// found in the LICENSE file. 4197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 5197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 6197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @constructor 7197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.View} 8197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @implements {WebInspector.TargetManager.Observer} 9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 10197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.MediaQueryInspector = function() 11197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 12197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.View.call(this); 13197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.classList.add("media-inspector-view", "media-inspector-view-empty"); 14197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.addEventListener("click", this._onMediaQueryClicked.bind(this), false); 15197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.addEventListener("contextmenu", this._onContextMenu.bind(this), false); 167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._mediaThrottler = new WebInspector.Throttler(0); 17197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 18197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._offset = 0; 19197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._scale = 1; 207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._lastReportedCount = 0; 21197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 22197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.targetManager.observeTargets(this); 23197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 24197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._renderMediaQueries.bind(this), this); 25197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 26197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 27197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 28197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @enum {number} 29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 30197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.MediaQueryInspector.Section = { 31197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Max: 0, 32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch MinMax: 1, 33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Min: 2 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 36197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.MediaQueryInspector.Events = { 379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) HeightUpdated: "HeightUpdated", 389e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) CountUpdated: "CountUpdated" 39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 41197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.MediaQueryInspector.prototype = { 42197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target 44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch targetAdded: function(target) 46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME: adapt this to multiple targets. 48197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (this._target) 49197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 50197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._target = target; 51197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetAdded, this._scheduleMediaQueriesUpdate, this); 52197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, this._scheduleMediaQueriesUpdate, this); 53197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._scheduleMediaQueriesUpdate, this); 54197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); 55197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 56197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 57197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 58197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target 59197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 60197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch targetRemoved: function(target) 61197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 62197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (target !== this._target) 63197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.StyleSheetAdded, this._scheduleMediaQueriesUpdate, this); 65197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, this._scheduleMediaQueriesUpdate, this); 66197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._scheduleMediaQueriesUpdate, this); 67197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._scheduleMediaQueriesUpdate, this); 68197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 69197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 70197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 71197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {number} offset 72197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {number} scale 73197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setAxisTransform: function(offset, scale) 75197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (this._offset === offset && Math.abs(this._scale - scale) < 1e-8) 77197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 78197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._offset = offset; 79197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._scale = scale; 80197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._renderMediaQueries(); 81197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 82197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 83197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 84197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {boolean} enabled 85197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setEnabled: function(enabled) 87197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 88197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._enabled = enabled; 89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._scheduleMediaQueriesUpdate(); 90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 93197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} event 94197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 95197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _onMediaQueryClicked: function(event) 96197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass("media-inspector-marker"); 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!mediaQueryMarker) 99197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 100197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 101197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 102197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {number} width 103197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 104197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch function setWidth(width) 105197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 106197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.overridesSupport.settings.deviceWidth.set(width); 107197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.overridesSupport.settings.emulateResolution.set(true); 108197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 109197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var model = mediaQueryMarker._model; 111197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (model.section() === WebInspector.MediaQueryInspector.Section.Max) { 112197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setWidth(model.maxWidthExpression().computedLength()); 113197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 114197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 115197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (model.section() === WebInspector.MediaQueryInspector.Section.Min) { 116197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setWidth(model.minWidthExpression().computedLength()); 117197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 118197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 119197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var currentWidth = WebInspector.overridesSupport.settings.deviceWidth.get(); 120197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (currentWidth !== model.minWidthExpression().computedLength()) 121197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setWidth(model.minWidthExpression().computedLength()); 122197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 123197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setWidth(model.maxWidthExpression().computedLength()); 124197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 125197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 126197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 127197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} event 128197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 129197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _onContextMenu: function(event) 130197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var mediaQueryMarker = event.target.enclosingNodeOrSelfWithClass("media-inspector-marker"); 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!mediaQueryMarker) 133197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 134197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var locations = mediaQueryMarker._locations; 1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var uiLocations = new StringMap(); 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var i = 0; i < locations.length; ++i) { 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var uiLocation = WebInspector.cssWorkspaceBinding.rawLocationToUILocation(locations[i]); 1397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!uiLocation) 1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci continue; 1417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var descriptor = String.sprintf("%s:%d:%d", uiLocation.uiSourceCode.uri(), uiLocation.lineNumber + 1, uiLocation.columnNumber + 1); 1427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci uiLocations.set(descriptor, uiLocation); 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var contextMenuItems = uiLocations.keys().sort(); 146197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var contextMenu = new WebInspector.ContextMenu(event); 147197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var subMenuItem = contextMenu.appendSubMenuItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Reveal in source code" : "Reveal In Source Code")); 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var i = 0; i < contextMenuItems.length; ++i) { 1497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var title = contextMenuItems[i]; 1507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci subMenuItem.appendItem(title, this._revealSourceLocation.bind(this, /** @type {!WebInspector.UILocation} */(uiLocations.get(title)))); 151197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 152197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch contextMenu.show(); 153197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 154197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 155197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 156197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.UILocation} location 157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 158197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _revealSourceLocation: function(location) 159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.Revealer.reveal(location); 161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 162197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 163197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _scheduleMediaQueriesUpdate: function() 164197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 165197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this._enabled) 166197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 167197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._mediaThrottler.schedule(this._refetchMediaQueries.bind(this)); 168197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 169197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 170197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 171197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Throttler.FinishCallback} finishCallback 172197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 173197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _refetchMediaQueries: function(finishCallback) 174197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 175197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this._enabled) { 176197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch finishCallback(); 177197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 178197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 179197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 180197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 181197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Array.<!WebInspector.CSSMedia>} cssMedias 182197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @this {!WebInspector.MediaQueryInspector} 183197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 184197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch function callback(cssMedias) 185197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 186197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._rebuildMediaQueries(cssMedias); 187197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch finishCallback(); 188197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 189197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._target.cssModel.getMediaQueries(callback.bind(this)); 190197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 191197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 192197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 193197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Array.<!WebInspector.MediaQueryInspector.MediaQueryUIModel>} models 194197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!Array.<!WebInspector.MediaQueryInspector.MediaQueryUIModel>} 195197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 196197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _squashAdjacentEqual: function(models) 197197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 198197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var filtered = []; 199197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var i = 0; i < models.length; ++i) { 200197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var last = filtered.peekLast(); 201197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!last || !last.equals(models[i])) 202197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch filtered.push(models[i]); 203197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 204197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return filtered; 205197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 206197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 208197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Array.<!WebInspector.CSSMedia>} cssMedias 209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 210197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _rebuildMediaQueries: function(cssMedias) 211197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 212197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var queryModels = []; 213197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var i = 0; i < cssMedias.length; ++i) { 214197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var cssMedia = cssMedias[i]; 215197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!cssMedia.mediaList) 216197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch continue; 217197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var j = 0; j < cssMedia.mediaList.length; ++j) { 2187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var mediaQuery = cssMedia.mediaList[j]; 2197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var queryModel = WebInspector.MediaQueryInspector.MediaQueryUIModel.createFromMediaQuery(cssMedia, mediaQuery); 2207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (queryModel && queryModel.rawLocation()) 221197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch queryModels.push(queryModel); 222197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 223197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 224197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch queryModels.sort(compareModels); 225197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch queryModels = this._squashAdjacentEqual(queryModels); 226197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 227197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var allEqual = this._cachedQueryModels && this._cachedQueryModels.length == queryModels.length; 228197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var i = 0; allEqual && i < queryModels.length; ++i) 229197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch allEqual = allEqual && this._cachedQueryModels[i].equals(queryModels[i]); 230197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (allEqual) 231197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 232197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._cachedQueryModels = queryModels; 233197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._renderMediaQueries(); 234197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 235197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 236197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model1 237197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model2 238197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {number} 239197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 240197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch function compareModels(model1, model2) 241197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 242197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return model1.compareTo(model2); 243197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 244197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 245197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 246197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _renderMediaQueries: function() 247197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 248197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this._cachedQueryModels) 249197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 250197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 251197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var markers = []; 252197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var lastMarker = null; 253197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var i = 0; i < this._cachedQueryModels.length; ++i) { 254197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var model = this._cachedQueryModels[i]; 255197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (lastMarker && lastMarker.model.dimensionsEqual(model)) { 2567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci lastMarker.locations.push(model.rawLocation()); 2577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci lastMarker.active = lastMarker.active || model.active(); 258197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } else { 259197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch lastMarker = { 2607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci active: model.active(), 261197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch model: model, 2627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci locations: [ model.rawLocation() ] 263197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }; 264197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch markers.push(lastMarker); 265197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 266197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 267197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 2687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (markers.length !== this._lastReportedCount) { 2697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._lastReportedCount = markers.length; 2707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.dispatchEventToListeners(WebInspector.MediaQueryInspector.Events.CountUpdated, markers.length); 2717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 2727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!this.isShowing()) 2747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 2757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var oldChildrenCount = this.element.children.length; 277197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var scrollTop = this.element.scrollTop; 278197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.removeChildren(); 2797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var container = null; 281197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var i = 0; i < markers.length; ++i) { 2827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!i || markers[i].model.section() !== markers[i - 1].model.section()) 2837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci container = this.element.createChild("div", "media-inspector-marker-container"); 284197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var marker = markers[i]; 285197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var bar = this._createElementFromMediaQueryModel(marker.model); 286197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bar._model = marker.model; 287197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bar._locations = marker.locations; 2887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bar.classList.toggle("media-inspector-marker-inactive", !marker.active); 2897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci container.appendChild(bar); 290197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 291197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.scrollTop = scrollTop; 292197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.classList.toggle("media-inspector-view-empty", !this.element.children.length); 2937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (this.element.children.length !== oldChildrenCount) 294197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.dispatchEventToListeners(WebInspector.MediaQueryInspector.Events.HeightUpdated); 295197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 296197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 297197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 298197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {number} 299197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 300197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _zoomFactor: function() 301197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 302197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return WebInspector.zoomManager.zoomFactor() / this._scale; 303197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 304197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 305197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch wasShown: function() 306197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 307197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._renderMediaQueries(); 308197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 309197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 310197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 311197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} model 312197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!Element} 313197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 314197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _createElementFromMediaQueryModel: function(model) 315197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 316197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var zoomFactor = this._zoomFactor(); 317197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var minWidthValue = model.minWidthExpression() ? model.minWidthExpression().computedLength() : 0; 318197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 319197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch const styleClassPerSection = [ 3207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci "media-inspector-marker-max-width", 3217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci "media-inspector-marker-min-max-width", 3227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci "media-inspector-marker-min-width" 323197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ]; 3247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var markerElement = document.createElementWithClass("div", "media-inspector-marker"); 3257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var leftPixelValue = minWidthValue ? (minWidthValue - this._offset) / zoomFactor : 0; 326197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch markerElement.style.left = leftPixelValue + "px"; 3277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci markerElement.classList.add(styleClassPerSection[model.section()]); 328197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var widthPixelValue = null; 329197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (model.maxWidthExpression() && model.minWidthExpression()) 330197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch widthPixelValue = (model.maxWidthExpression().computedLength() - minWidthValue) / zoomFactor; 331197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else if (model.maxWidthExpression()) 3327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci widthPixelValue = (model.maxWidthExpression().computedLength() - this._offset) / zoomFactor; 333197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 334197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch markerElement.style.right = "0"; 335197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (typeof widthPixelValue === "number") 336197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch markerElement.style.width = widthPixelValue + "px"; 337197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 3387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (model.minWidthExpression()) { 3397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var labelClass = model.section() === WebInspector.MediaQueryInspector.Section.MinMax ? "media-inspector-label-right" : "media-inspector-label-left"; 3407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var labelContainer = markerElement.createChild("div", "media-inspector-marker-label-container media-inspector-marker-label-container-left"); 3417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci labelContainer.createChild("span", "media-inspector-marker-label " + labelClass).textContent = model.minWidthExpression().value() + model.minWidthExpression().unit(); 342197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 343197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 3447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (model.maxWidthExpression()) { 3457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var labelClass = model.section() === WebInspector.MediaQueryInspector.Section.MinMax ? "media-inspector-label-left" : "media-inspector-label-right"; 3467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var labelContainer = markerElement.createChild("div", "media-inspector-marker-label-container media-inspector-marker-label-container-right"); 3477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci labelContainer.createChild("span", "media-inspector-marker-label " + labelClass).textContent = model.maxWidthExpression().value() + model.maxWidthExpression().unit(); 348197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 3497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci markerElement.title = model.mediaText(); 350197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 3517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return markerElement; 352197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 353197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 354197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch __proto__: WebInspector.View.prototype 355197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}; 356197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 357197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 358197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @constructor 359197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.CSSMedia} cssMedia 360197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {?WebInspector.CSSMediaQueryExpression} minWidthExpression 361197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {?WebInspector.CSSMediaQueryExpression} maxWidthExpression 3627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {boolean} active 363197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 3647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.MediaQueryInspector.MediaQueryUIModel = function(cssMedia, minWidthExpression, maxWidthExpression, active) 365197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 366197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._cssMedia = cssMedia; 367197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._minWidthExpression = minWidthExpression; 368197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._maxWidthExpression = maxWidthExpression; 3697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._active = active; 370197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (maxWidthExpression && !minWidthExpression) 371197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._section = WebInspector.MediaQueryInspector.Section.Max; 372197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else if (minWidthExpression && maxWidthExpression) 373197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._section = WebInspector.MediaQueryInspector.Section.MinMax; 374197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 375197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._section = WebInspector.MediaQueryInspector.Section.Min; 376197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 377197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 378197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 379197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.CSSMedia} cssMedia 3807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.CSSMediaQuery} mediaQuery 381197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {?WebInspector.MediaQueryInspector.MediaQueryUIModel} 382197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 3837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.MediaQueryInspector.MediaQueryUIModel.createFromMediaQuery = function(cssMedia, mediaQuery) 384197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 385197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var maxWidthExpression = null; 386197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var maxWidthPixels = Number.MAX_VALUE; 387197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var minWidthExpression = null; 388197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var minWidthPixels = Number.MIN_VALUE; 3897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var expressions = mediaQuery.expressions(); 3907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var i = 0; i < expressions.length; ++i) { 3917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var expression = expressions[i]; 392197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var feature = expression.feature(); 393197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (feature.indexOf("width") === -1) 394197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch continue; 395197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var pixels = expression.computedLength(); 396197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (feature.startsWith("max-") && pixels < maxWidthPixels) { 397197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch maxWidthExpression = expression; 398197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch maxWidthPixels = pixels; 399197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } else if (feature.startsWith("min-") && pixels > minWidthPixels) { 400197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch minWidthExpression = expression; 401197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch minWidthPixels = pixels; 402197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 403197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 404197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (minWidthPixels > maxWidthPixels || (!maxWidthExpression && !minWidthExpression)) 405197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return null; 406197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 4077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return new WebInspector.MediaQueryInspector.MediaQueryUIModel(cssMedia, minWidthExpression, maxWidthExpression, mediaQuery.active()); 408197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 409197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 410197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.MediaQueryInspector.MediaQueryUIModel.prototype = { 411197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 412197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other 413197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 414197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 415197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch equals: function(other) 416197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 417197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this.compareTo(other) === 0; 418197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 419197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 420197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 421197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other 422197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 423197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 424197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch dimensionsEqual: function(other) 425197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 426197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this.section() === other.section() 427197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch && (!this.minWidthExpression() || (this.minWidthExpression().computedLength() === other.minWidthExpression().computedLength())) 428197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch && (!this.maxWidthExpression() || (this.maxWidthExpression().computedLength() === other.maxWidthExpression().computedLength())); 429197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 430197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 431197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 432197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.MediaQueryInspector.MediaQueryUIModel} other 433197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {number} 434197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 435197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch compareTo: function(other) 436197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 437197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (this.section() !== other.section()) 438197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this.section() - other.section(); 439197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (this.dimensionsEqual(other)) { 4407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var myLocation = this.rawLocation(); 4417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var otherLocation = other.rawLocation(); 442197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!myLocation && !otherLocation) 443197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this.mediaText().compareTo(other.mediaText()); 444197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (myLocation && !otherLocation) 445197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return 1; 446197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!myLocation && otherLocation) 447197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return -1; 4487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (this.active() !== other.active()) 4497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this.active() ? -1 : 1; 4507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return myLocation.url.compareTo(otherLocation.url) || myLocation.lineNumber - otherLocation.lineNumber || myLocation.columnNumber - otherLocation.columnNumber; 451197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 452197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (this.section() === WebInspector.MediaQueryInspector.Section.Max) 4537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return other.maxWidthExpression().computedLength() - this.maxWidthExpression().computedLength(); 454197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (this.section() === WebInspector.MediaQueryInspector.Section.Min) 455197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this.minWidthExpression().computedLength() - other.minWidthExpression().computedLength(); 4567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this.minWidthExpression().computedLength() - other.minWidthExpression().computedLength() || other.maxWidthExpression().computedLength() - this.maxWidthExpression().computedLength(); 457197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 458197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 459197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 460197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!WebInspector.MediaQueryInspector.Section} 461197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 462197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch section: function() 463197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 464197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._section; 465197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 466197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 467197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 468197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {string} 469197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 470197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch mediaText: function() 471197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 472197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._cssMedia.text; 473197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 474197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 475197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 4767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {?WebInspector.CSSLocation} 477197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 4787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci rawLocation: function() 479197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 4807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!this._rawLocation) 4817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._rawLocation = this._cssMedia.rawLocation(); 4827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this._rawLocation; 483197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 484197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 485197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 486197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {?WebInspector.CSSMediaQueryExpression} 487197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 488197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch minWidthExpression: function() 489197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 490197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._minWidthExpression; 491197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 492197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 493197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 494197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {?WebInspector.CSSMediaQueryExpression} 495197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 496197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch maxWidthExpression: function() 497197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 498197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._maxWidthExpression; 4997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 5007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 5027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {boolean} 5037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 5047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci active: function() 5057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 5067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this._active; 507197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 508197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 509