Index: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js |
index 51cc3056901a3e0b2383fda25f1f24b8dc8d75e5..6e0f80565c765e0da963a11ed775df32ea70af2b 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js |
@@ -1,596 +1,576 @@ |
// Copyright 2015 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.VBox} |
+ * @unrestricted |
*/ |
-WebInspector.DeviceModeView = function() |
-{ |
- WebInspector.VBox.call(this, true); |
+WebInspector.DeviceModeView = class extends WebInspector.VBox { |
+ constructor() { |
+ super(true); |
this.setMinimumSize(150, 150); |
- this.element.classList.add("device-mode-view"); |
- this.registerRequiredCSS("emulation/deviceModeView.css"); |
+ this.element.classList.add('device-mode-view'); |
+ this.registerRequiredCSS('emulation/deviceModeView.css'); |
WebInspector.Tooltip.addNativeOverrideContainer(this.contentElement); |
this._model = new WebInspector.DeviceModeModel(this._updateUI.bind(this)); |
- this._mediaInspector = new WebInspector.MediaQueryInspector(() => this._model.appliedDeviceSize().width, this._model.setWidth.bind(this._model)); |
- this._showMediaInspectorSetting = WebInspector.settings.moduleSetting("showMediaQueryInspector"); |
+ this._mediaInspector = new WebInspector.MediaQueryInspector( |
+ () => this._model.appliedDeviceSize().width, this._model.setWidth.bind(this._model)); |
+ this._showMediaInspectorSetting = WebInspector.settings.moduleSetting('showMediaQueryInspector'); |
this._showMediaInspectorSetting.addChangeListener(this._updateUI, this); |
- this._showRulersSetting = WebInspector.settings.moduleSetting("emulation.showRulers"); |
+ this._showRulersSetting = WebInspector.settings.moduleSetting('emulation.showRulers'); |
this._showRulersSetting.addChangeListener(this._updateUI, this); |
this._topRuler = new WebInspector.DeviceModeView.Ruler(true, this._model.setWidthAndScaleToFit.bind(this._model)); |
- this._topRuler.element.classList.add("device-mode-ruler-top"); |
- this._leftRuler = new WebInspector.DeviceModeView.Ruler(false, this._model.setHeightAndScaleToFit.bind(this._model)); |
- this._leftRuler.element.classList.add("device-mode-ruler-left"); |
+ this._topRuler.element.classList.add('device-mode-ruler-top'); |
+ this._leftRuler = |
+ new WebInspector.DeviceModeView.Ruler(false, this._model.setHeightAndScaleToFit.bind(this._model)); |
+ this._leftRuler.element.classList.add('device-mode-ruler-left'); |
this._createUI(); |
WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._zoomChanged, this); |
-}; |
- |
-WebInspector.DeviceModeView.prototype = { |
- _createUI: function() |
- { |
- this._toolbar = new WebInspector.DeviceModeToolbar(this._model, this._showMediaInspectorSetting, this._showRulersSetting); |
- this.contentElement.appendChild(this._toolbar.element()); |
- |
- this._contentClip = this.contentElement.createChild("div", "device-mode-content-clip vbox"); |
- this._responsivePresetsContainer = this._contentClip.createChild("div", "device-mode-presets-container"); |
- this._populatePresetsContainer(); |
- this._mediaInspectorContainer = this._contentClip.createChild("div", "device-mode-media-container"); |
- this._contentArea = this._contentClip.createChild("div", "device-mode-content-area"); |
- |
- this._outlineImage = this._contentArea.createChild("img", "device-mode-outline-image hidden fill"); |
- this._outlineImage.addEventListener("load", this._onImageLoaded.bind(this, this._outlineImage, true), false); |
- this._outlineImage.addEventListener("error", this._onImageLoaded.bind(this, this._outlineImage, false), false); |
- |
- this._screenArea = this._contentArea.createChild("div", "device-mode-screen-area"); |
- this._screenImage = this._screenArea.createChild("img", "device-mode-screen-image hidden"); |
- this._screenImage.addEventListener("load", this._onImageLoaded.bind(this, this._screenImage, true), false); |
- this._screenImage.addEventListener("error", this._onImageLoaded.bind(this, this._screenImage, false), false); |
- |
- this._bottomRightResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-bottom-right-resizer"); |
- this._bottomRightResizerElement.createChild("div", ""); |
- this._createResizer(this._bottomRightResizerElement, 2, 1); |
- |
- this._bottomLeftResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-bottom-left-resizer"); |
- this._bottomLeftResizerElement.createChild("div", ""); |
- this._createResizer(this._bottomLeftResizerElement, -2, 1); |
- |
- this._rightResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-right-resizer"); |
- this._rightResizerElement.createChild("div", ""); |
- this._createResizer(this._rightResizerElement, 2, 0); |
- |
- this._leftResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-left-resizer"); |
- this._leftResizerElement.createChild("div", ""); |
- this._createResizer(this._leftResizerElement, -2, 0); |
- |
- this._bottomResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-bottom-resizer"); |
- this._bottomResizerElement.createChild("div", ""); |
- this._createResizer(this._bottomResizerElement, 0, 1); |
- this._bottomResizerElement.addEventListener("dblclick", this._model.setHeight.bind(this._model, 0), false); |
- this._bottomResizerElement.title = WebInspector.UIString("Double-click for full height"); |
- |
- this._pageArea = this._screenArea.createChild("div", "device-mode-page-area"); |
- this._pageArea.createChild("content"); |
- }, |
- |
- _populatePresetsContainer: function() |
- { |
- var sizes = [320, 375, 425, 768, 1024, 1440, 2560]; |
- var titles = [WebInspector.UIString("Mobile S"), |
- WebInspector.UIString("Mobile M"), |
- WebInspector.UIString("Mobile L"), |
- WebInspector.UIString("Tablet"), |
- WebInspector.UIString("Laptop"), |
- WebInspector.UIString("Laptop L"), |
- WebInspector.UIString("4K")]; |
- this._presetBlocks = []; |
- var inner = this._responsivePresetsContainer.createChild("div", "device-mode-presets-container-inner"); |
- for (var i = sizes.length - 1; i >= 0; --i) { |
- var outer = inner.createChild("div", "fill device-mode-preset-bar-outer"); |
- var block = outer.createChild("div", "device-mode-preset-bar"); |
- block.createChild("span").textContent = titles[i] + " \u2013 " + sizes[i] + "px"; |
- block.addEventListener("click", applySize.bind(this, sizes[i]), false); |
- block.__width = sizes[i]; |
- this._presetBlocks.push(block); |
- } |
- |
- /** |
- * @param {number} width |
- * @param {!Event} e |
- * @this {WebInspector.DeviceModeView} |
- */ |
- function applySize(width, e) |
- { |
- this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null); |
- this._model.setSizeAndScaleToFit(width, 0); |
- e.consume(); |
- } |
- }, |
- |
- /** |
- * @param {!Element} element |
- * @param {number} widthFactor |
- * @param {number} heightFactor |
- * @return {!WebInspector.ResizerWidget} |
- */ |
- _createResizer: function(element, widthFactor, heightFactor) |
- { |
- var resizer = new WebInspector.ResizerWidget(); |
- resizer.addElement(element); |
- var cursor = widthFactor ? "ew-resize" : "ns-resize"; |
- if (widthFactor * heightFactor > 0) |
- cursor = "nwse-resize"; |
- if (widthFactor * heightFactor < 0) |
- cursor = "nesw-resize"; |
- resizer.setCursor(cursor); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeStart, this._onResizeStart, this); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate.bind(this, widthFactor, heightFactor)); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeEnd, this._onResizeEnd, this); |
- return resizer; |
- }, |
+ } |
+ |
+ _createUI() { |
+ this._toolbar = |
+ new WebInspector.DeviceModeToolbar(this._model, this._showMediaInspectorSetting, this._showRulersSetting); |
+ this.contentElement.appendChild(this._toolbar.element()); |
+ |
+ this._contentClip = this.contentElement.createChild('div', 'device-mode-content-clip vbox'); |
+ this._responsivePresetsContainer = this._contentClip.createChild('div', 'device-mode-presets-container'); |
+ this._populatePresetsContainer(); |
+ this._mediaInspectorContainer = this._contentClip.createChild('div', 'device-mode-media-container'); |
+ this._contentArea = this._contentClip.createChild('div', 'device-mode-content-area'); |
+ |
+ this._outlineImage = this._contentArea.createChild('img', 'device-mode-outline-image hidden fill'); |
+ this._outlineImage.addEventListener('load', this._onImageLoaded.bind(this, this._outlineImage, true), false); |
+ this._outlineImage.addEventListener('error', this._onImageLoaded.bind(this, this._outlineImage, false), false); |
+ |
+ this._screenArea = this._contentArea.createChild('div', 'device-mode-screen-area'); |
+ this._screenImage = this._screenArea.createChild('img', 'device-mode-screen-image hidden'); |
+ this._screenImage.addEventListener('load', this._onImageLoaded.bind(this, this._screenImage, true), false); |
+ this._screenImage.addEventListener('error', this._onImageLoaded.bind(this, this._screenImage, false), false); |
+ |
+ this._bottomRightResizerElement = |
+ this._screenArea.createChild('div', 'device-mode-resizer device-mode-bottom-right-resizer'); |
+ this._bottomRightResizerElement.createChild('div', ''); |
+ this._createResizer(this._bottomRightResizerElement, 2, 1); |
+ |
+ this._bottomLeftResizerElement = |
+ this._screenArea.createChild('div', 'device-mode-resizer device-mode-bottom-left-resizer'); |
+ this._bottomLeftResizerElement.createChild('div', ''); |
+ this._createResizer(this._bottomLeftResizerElement, -2, 1); |
+ |
+ this._rightResizerElement = this._screenArea.createChild('div', 'device-mode-resizer device-mode-right-resizer'); |
+ this._rightResizerElement.createChild('div', ''); |
+ this._createResizer(this._rightResizerElement, 2, 0); |
+ |
+ this._leftResizerElement = this._screenArea.createChild('div', 'device-mode-resizer device-mode-left-resizer'); |
+ this._leftResizerElement.createChild('div', ''); |
+ this._createResizer(this._leftResizerElement, -2, 0); |
+ |
+ this._bottomResizerElement = this._screenArea.createChild('div', 'device-mode-resizer device-mode-bottom-resizer'); |
+ this._bottomResizerElement.createChild('div', ''); |
+ this._createResizer(this._bottomResizerElement, 0, 1); |
+ this._bottomResizerElement.addEventListener('dblclick', this._model.setHeight.bind(this._model, 0), false); |
+ this._bottomResizerElement.title = WebInspector.UIString('Double-click for full height'); |
+ |
+ this._pageArea = this._screenArea.createChild('div', 'device-mode-page-area'); |
+ this._pageArea.createChild('content'); |
+ } |
+ |
+ _populatePresetsContainer() { |
+ var sizes = [320, 375, 425, 768, 1024, 1440, 2560]; |
+ var titles = [ |
+ WebInspector.UIString('Mobile S'), WebInspector.UIString('Mobile M'), WebInspector.UIString('Mobile L'), |
+ WebInspector.UIString('Tablet'), WebInspector.UIString('Laptop'), WebInspector.UIString('Laptop L'), |
+ WebInspector.UIString('4K') |
+ ]; |
+ this._presetBlocks = []; |
+ var inner = this._responsivePresetsContainer.createChild('div', 'device-mode-presets-container-inner'); |
+ for (var i = sizes.length - 1; i >= 0; --i) { |
+ var outer = inner.createChild('div', 'fill device-mode-preset-bar-outer'); |
+ var block = outer.createChild('div', 'device-mode-preset-bar'); |
+ block.createChild('span').textContent = titles[i] + ' \u2013 ' + sizes[i] + 'px'; |
+ block.addEventListener('click', applySize.bind(this, sizes[i]), false); |
+ block.__width = sizes[i]; |
+ this._presetBlocks.push(block); |
+ } |
/** |
- * @param {!WebInspector.Event} event |
+ * @param {number} width |
+ * @param {!Event} e |
+ * @this {WebInspector.DeviceModeView} |
*/ |
- _onResizeStart: function(event) |
- { |
- this._slowPositionStart = null; |
- /** @type {!Size} */ |
- this._resizeStart = this._model.screenRect().size(); |
- }, |
- |
- /** |
- * @param {number} widthFactor |
- * @param {number} heightFactor |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeUpdate: function(widthFactor, heightFactor, event) |
- { |
- if (event.data.shiftKey !== !!this._slowPositionStart) |
- this._slowPositionStart = event.data.shiftKey ? {x: event.data.currentX, y: event.data.currentY} : null; |
- |
- var cssOffsetX = event.data.currentX - event.data.startX; |
- var cssOffsetY = event.data.currentY - event.data.startY; |
- if (this._slowPositionStart) { |
- cssOffsetX = (event.data.currentX - this._slowPositionStart.x) / 10 + this._slowPositionStart.x - event.data.startX; |
- cssOffsetY = (event.data.currentY - this._slowPositionStart.y) / 10 + this._slowPositionStart.y - event.data.startY; |
- } |
- |
- if (widthFactor) { |
- var dipOffsetX = cssOffsetX * WebInspector.zoomManager.zoomFactor(); |
- var newWidth = this._resizeStart.width + dipOffsetX * widthFactor; |
- newWidth = Math.round(newWidth / this._model.scale()); |
- if (newWidth >= WebInspector.DeviceModeModel.MinDeviceSize && newWidth <= WebInspector.DeviceModeModel.MaxDeviceSize) |
- this._model.setWidth(newWidth); |
- } |
- |
- if (heightFactor) { |
- var dipOffsetY = cssOffsetY * WebInspector.zoomManager.zoomFactor(); |
- var newHeight = this._resizeStart.height + dipOffsetY * heightFactor; |
- newHeight = Math.round(newHeight / this._model.scale()); |
- if (newHeight >= WebInspector.DeviceModeModel.MinDeviceSize && newHeight <= WebInspector.DeviceModeModel.MaxDeviceSize) |
- this._model.setHeight(newHeight); |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeEnd: function(event) |
- { |
- delete this._resizeStart; |
- WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.ResizedViewInResponsiveMode); |
- }, |
- |
- _updateUI: function() |
- { |
- /** |
- * @param {!Element} element |
- * @param {!WebInspector.Rect} rect |
- */ |
- function applyRect(element, rect) |
- { |
- element.style.left = rect.left + "px"; |
- element.style.top = rect.top + "px"; |
- element.style.width = rect.width + "px"; |
- element.style.height = rect.height + "px"; |
- } |
- |
- if (!this.isShowing()) |
- return; |
- |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var callDoResize = false; |
- var showRulers = this._showRulersSetting.get() && this._model.type() !== WebInspector.DeviceModeModel.Type.None; |
- var contentAreaResized = false; |
- var updateRulers = false; |
- |
- var cssScreenRect = this._model.screenRect().scale(1 / zoomFactor); |
- if (!cssScreenRect.isEqual(this._cachedCssScreenRect)) { |
- applyRect(this._screenArea, cssScreenRect); |
- updateRulers = true; |
- callDoResize = true; |
- this._cachedCssScreenRect = cssScreenRect; |
- } |
- |
- var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFactor); |
- if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { |
- applyRect(this._pageArea, cssVisiblePageRect); |
- callDoResize = true; |
- this._cachedCssVisiblePageRect = cssVisiblePageRect; |
- } |
- |
- var outlineRect = this._model.outlineRect().scale(1 / zoomFactor); |
- if (!outlineRect.isEqual(this._cachedOutlineRect)) { |
- applyRect(this._outlineImage, outlineRect); |
- callDoResize = true; |
- this._cachedOutlineRect = outlineRect; |
- } |
- this._contentClip.classList.toggle("device-mode-outline-visible", !!this._model.outlineImage()); |
- |
- var resizable = this._model.type() === WebInspector.DeviceModeModel.Type.Responsive; |
- if (resizable !== this._cachedResizable) { |
- this._rightResizerElement.classList.toggle("hidden", !resizable); |
- this._leftResizerElement.classList.toggle("hidden", !resizable); |
- this._bottomResizerElement.classList.toggle("hidden", !resizable); |
- this._bottomRightResizerElement.classList.toggle("hidden", !resizable); |
- this._bottomLeftResizerElement.classList.toggle("hidden", !resizable); |
- this._cachedResizable = resizable; |
- } |
- |
- var mediaInspectorVisible = this._showMediaInspectorSetting.get() && this._model.type() !== WebInspector.DeviceModeModel.Type.None; |
- if (mediaInspectorVisible !== this._cachedMediaInspectorVisible) { |
- if (mediaInspectorVisible) |
- this._mediaInspector.show(this._mediaInspectorContainer); |
- else |
- this._mediaInspector.detach(); |
- contentAreaResized = true; |
- callDoResize = true; |
- this._cachedMediaInspectorVisible = mediaInspectorVisible; |
- } |
- |
- if (showRulers !== this._cachedShowRulers) { |
- this._contentClip.classList.toggle("device-mode-rulers-visible", showRulers); |
- if (showRulers) { |
- this._topRuler.show(this._contentArea); |
- this._leftRuler.show(this._contentArea); |
- } else { |
- this._topRuler.detach(); |
- this._leftRuler.detach(); |
- } |
- contentAreaResized = true; |
- callDoResize = true; |
- this._cachedShowRulers = showRulers; |
- } |
- |
- if (this._model.scale() !== this._cachedScale) { |
- updateRulers = true; |
- callDoResize = true; |
- for (var block of this._presetBlocks) |
- block.style.width = block.__width * this._model.scale() + "px"; |
- this._cachedScale = this._model.scale(); |
- } |
- |
- this._toolbar.update(); |
- this._loadImage(this._screenImage, this._model.screenImage()); |
- this._loadImage(this._outlineImage, this._model.outlineImage()); |
- this._mediaInspector.setAxisTransform(this._model.scale()); |
- if (callDoResize) |
- this.doResize(); |
- if (updateRulers) { |
- this._topRuler.render(this._model.scale()); |
- this._leftRuler.render(this._model.scale()); |
- this._topRuler.element.positionAt(this._cachedCssScreenRect ? this._cachedCssScreenRect.left : 0, this._cachedCssScreenRect ? this._cachedCssScreenRect.top : 0); |
- this._leftRuler.element.positionAt(this._cachedCssScreenRect ? this._cachedCssScreenRect.left : 0, this._cachedCssScreenRect ? this._cachedCssScreenRect.top : 0); |
- } |
- if (contentAreaResized) |
- this._contentAreaResized(); |
- }, |
- |
+ function applySize(width, e) { |
+ this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null); |
+ this._model.setSizeAndScaleToFit(width, 0); |
+ e.consume(); |
+ } |
+ } |
+ |
+ /** |
+ * @param {!Element} element |
+ * @param {number} widthFactor |
+ * @param {number} heightFactor |
+ * @return {!WebInspector.ResizerWidget} |
+ */ |
+ _createResizer(element, widthFactor, heightFactor) { |
+ var resizer = new WebInspector.ResizerWidget(); |
+ resizer.addElement(element); |
+ var cursor = widthFactor ? 'ew-resize' : 'ns-resize'; |
+ if (widthFactor * heightFactor > 0) |
+ cursor = 'nwse-resize'; |
+ if (widthFactor * heightFactor < 0) |
+ cursor = 'nesw-resize'; |
+ resizer.setCursor(cursor); |
+ resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeStart, this._onResizeStart, this); |
+ resizer.addEventListener( |
+ WebInspector.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate.bind(this, widthFactor, heightFactor)); |
+ resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeEnd, this._onResizeEnd, this); |
+ return resizer; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onResizeStart(event) { |
+ this._slowPositionStart = null; |
+ /** @type {!Size} */ |
+ this._resizeStart = this._model.screenRect().size(); |
+ } |
+ |
+ /** |
+ * @param {number} widthFactor |
+ * @param {number} heightFactor |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onResizeUpdate(widthFactor, heightFactor, event) { |
+ if (event.data.shiftKey !== !!this._slowPositionStart) |
+ this._slowPositionStart = event.data.shiftKey ? {x: event.data.currentX, y: event.data.currentY} : null; |
+ |
+ var cssOffsetX = event.data.currentX - event.data.startX; |
+ var cssOffsetY = event.data.currentY - event.data.startY; |
+ if (this._slowPositionStart) { |
+ cssOffsetX = |
+ (event.data.currentX - this._slowPositionStart.x) / 10 + this._slowPositionStart.x - event.data.startX; |
+ cssOffsetY = |
+ (event.data.currentY - this._slowPositionStart.y) / 10 + this._slowPositionStart.y - event.data.startY; |
+ } |
+ |
+ if (widthFactor) { |
+ var dipOffsetX = cssOffsetX * WebInspector.zoomManager.zoomFactor(); |
+ var newWidth = this._resizeStart.width + dipOffsetX * widthFactor; |
+ newWidth = Math.round(newWidth / this._model.scale()); |
+ if (newWidth >= WebInspector.DeviceModeModel.MinDeviceSize && |
+ newWidth <= WebInspector.DeviceModeModel.MaxDeviceSize) |
+ this._model.setWidth(newWidth); |
+ } |
+ |
+ if (heightFactor) { |
+ var dipOffsetY = cssOffsetY * WebInspector.zoomManager.zoomFactor(); |
+ var newHeight = this._resizeStart.height + dipOffsetY * heightFactor; |
+ newHeight = Math.round(newHeight / this._model.scale()); |
+ if (newHeight >= WebInspector.DeviceModeModel.MinDeviceSize && |
+ newHeight <= WebInspector.DeviceModeModel.MaxDeviceSize) |
+ this._model.setHeight(newHeight); |
+ } |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onResizeEnd(event) { |
+ delete this._resizeStart; |
+ WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.ResizedViewInResponsiveMode); |
+ } |
+ |
+ _updateUI() { |
/** |
* @param {!Element} element |
- * @param {string} srcset |
- */ |
- _loadImage: function(element, srcset) |
- { |
- if (element.getAttribute("srcset") === srcset) |
- return; |
- element.setAttribute("srcset", srcset); |
- if (!srcset) |
- element.classList.toggle("hidden", true); |
- }, |
- |
- /** |
- * @param {!Element} element |
- * @param {boolean} success |
- */ |
- _onImageLoaded: function(element, success) |
- { |
- element.classList.toggle("hidden", !success); |
- }, |
- |
- _contentAreaResized: function() |
- { |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var rect = this._contentArea.getBoundingClientRect(); |
- var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(rect.height * zoomFactor, 1)); |
- var preferredSize = new Size(Math.max((rect.width - 2 * this._handleWidth) * zoomFactor, 1), Math.max((rect.height - this._handleHeight) * zoomFactor, 1)); |
- this._model.setAvailableSize(availableSize, preferredSize); |
- }, |
- |
- _measureHandles: function() |
- { |
- var hidden = this._rightResizerElement.classList.contains("hidden"); |
- this._rightResizerElement.classList.toggle("hidden", false); |
- this._bottomResizerElement.classList.toggle("hidden", false); |
- this._handleWidth = this._rightResizerElement.offsetWidth; |
- this._handleHeight = this._bottomResizerElement.offsetHeight; |
- this._rightResizerElement.classList.toggle("hidden", hidden); |
- this._bottomResizerElement.classList.toggle("hidden", hidden); |
- }, |
- |
- _zoomChanged: function() |
- { |
- delete this._handleWidth; |
- delete this._handleHeight; |
- if (this.isShowing()) { |
- this._measureHandles(); |
- this._contentAreaResized(); |
- } |
- }, |
- |
- /** |
- * @override |
+ * @param {!WebInspector.Rect} rect |
*/ |
- onResize: function() |
- { |
- if (this.isShowing()) |
- this._contentAreaResized(); |
- }, |
+ function applyRect(element, rect) { |
+ element.style.left = rect.left + 'px'; |
+ element.style.top = rect.top + 'px'; |
+ element.style.width = rect.width + 'px'; |
+ element.style.height = rect.height + 'px'; |
+ } |
+ |
+ if (!this.isShowing()) |
+ return; |
+ |
+ var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
+ var callDoResize = false; |
+ var showRulers = this._showRulersSetting.get() && this._model.type() !== WebInspector.DeviceModeModel.Type.None; |
+ var contentAreaResized = false; |
+ var updateRulers = false; |
+ |
+ var cssScreenRect = this._model.screenRect().scale(1 / zoomFactor); |
+ if (!cssScreenRect.isEqual(this._cachedCssScreenRect)) { |
+ applyRect(this._screenArea, cssScreenRect); |
+ updateRulers = true; |
+ callDoResize = true; |
+ this._cachedCssScreenRect = cssScreenRect; |
+ } |
+ |
+ var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFactor); |
+ if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { |
+ applyRect(this._pageArea, cssVisiblePageRect); |
+ callDoResize = true; |
+ this._cachedCssVisiblePageRect = cssVisiblePageRect; |
+ } |
+ |
+ var outlineRect = this._model.outlineRect().scale(1 / zoomFactor); |
+ if (!outlineRect.isEqual(this._cachedOutlineRect)) { |
+ applyRect(this._outlineImage, outlineRect); |
+ callDoResize = true; |
+ this._cachedOutlineRect = outlineRect; |
+ } |
+ this._contentClip.classList.toggle('device-mode-outline-visible', !!this._model.outlineImage()); |
+ |
+ var resizable = this._model.type() === WebInspector.DeviceModeModel.Type.Responsive; |
+ if (resizable !== this._cachedResizable) { |
+ this._rightResizerElement.classList.toggle('hidden', !resizable); |
+ this._leftResizerElement.classList.toggle('hidden', !resizable); |
+ this._bottomResizerElement.classList.toggle('hidden', !resizable); |
+ this._bottomRightResizerElement.classList.toggle('hidden', !resizable); |
+ this._bottomLeftResizerElement.classList.toggle('hidden', !resizable); |
+ this._cachedResizable = resizable; |
+ } |
+ |
+ var mediaInspectorVisible = |
+ this._showMediaInspectorSetting.get() && this._model.type() !== WebInspector.DeviceModeModel.Type.None; |
+ if (mediaInspectorVisible !== this._cachedMediaInspectorVisible) { |
+ if (mediaInspectorVisible) |
+ this._mediaInspector.show(this._mediaInspectorContainer); |
+ else |
+ this._mediaInspector.detach(); |
+ contentAreaResized = true; |
+ callDoResize = true; |
+ this._cachedMediaInspectorVisible = mediaInspectorVisible; |
+ } |
+ |
+ if (showRulers !== this._cachedShowRulers) { |
+ this._contentClip.classList.toggle('device-mode-rulers-visible', showRulers); |
+ if (showRulers) { |
+ this._topRuler.show(this._contentArea); |
+ this._leftRuler.show(this._contentArea); |
+ } else { |
+ this._topRuler.detach(); |
+ this._leftRuler.detach(); |
+ } |
+ contentAreaResized = true; |
+ callDoResize = true; |
+ this._cachedShowRulers = showRulers; |
+ } |
+ |
+ if (this._model.scale() !== this._cachedScale) { |
+ updateRulers = true; |
+ callDoResize = true; |
+ for (var block of this._presetBlocks) |
+ block.style.width = block.__width * this._model.scale() + 'px'; |
+ this._cachedScale = this._model.scale(); |
+ } |
+ |
+ this._toolbar.update(); |
+ this._loadImage(this._screenImage, this._model.screenImage()); |
+ this._loadImage(this._outlineImage, this._model.outlineImage()); |
+ this._mediaInspector.setAxisTransform(this._model.scale()); |
+ if (callDoResize) |
+ this.doResize(); |
+ if (updateRulers) { |
+ this._topRuler.render(this._model.scale()); |
+ this._leftRuler.render(this._model.scale()); |
+ this._topRuler.element.positionAt( |
+ this._cachedCssScreenRect ? this._cachedCssScreenRect.left : 0, |
+ this._cachedCssScreenRect ? this._cachedCssScreenRect.top : 0); |
+ this._leftRuler.element.positionAt( |
+ this._cachedCssScreenRect ? this._cachedCssScreenRect.left : 0, |
+ this._cachedCssScreenRect ? this._cachedCssScreenRect.top : 0); |
+ } |
+ if (contentAreaResized) |
+ this._contentAreaResized(); |
+ } |
+ |
+ /** |
+ * @param {!Element} element |
+ * @param {string} srcset |
+ */ |
+ _loadImage(element, srcset) { |
+ if (element.getAttribute('srcset') === srcset) |
+ return; |
+ element.setAttribute('srcset', srcset); |
+ if (!srcset) |
+ element.classList.toggle('hidden', true); |
+ } |
+ |
+ /** |
+ * @param {!Element} element |
+ * @param {boolean} success |
+ */ |
+ _onImageLoaded(element, success) { |
+ element.classList.toggle('hidden', !success); |
+ } |
+ |
+ _contentAreaResized() { |
+ var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
+ var rect = this._contentArea.getBoundingClientRect(); |
+ var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(rect.height * zoomFactor, 1)); |
+ var preferredSize = new Size( |
+ Math.max((rect.width - 2 * this._handleWidth) * zoomFactor, 1), |
+ Math.max((rect.height - this._handleHeight) * zoomFactor, 1)); |
+ this._model.setAvailableSize(availableSize, preferredSize); |
+ } |
+ |
+ _measureHandles() { |
+ var hidden = this._rightResizerElement.classList.contains('hidden'); |
+ this._rightResizerElement.classList.toggle('hidden', false); |
+ this._bottomResizerElement.classList.toggle('hidden', false); |
+ this._handleWidth = this._rightResizerElement.offsetWidth; |
+ this._handleHeight = this._bottomResizerElement.offsetHeight; |
+ this._rightResizerElement.classList.toggle('hidden', hidden); |
+ this._bottomResizerElement.classList.toggle('hidden', hidden); |
+ } |
+ |
+ _zoomChanged() { |
+ delete this._handleWidth; |
+ delete this._handleHeight; |
+ if (this.isShowing()) { |
+ this._measureHandles(); |
+ this._contentAreaResized(); |
+ } |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onResize() { |
+ if (this.isShowing()) |
+ this._contentAreaResized(); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ wasShown() { |
+ this._measureHandles(); |
+ this._toolbar.restore(); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ willHide() { |
+ this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null); |
+ } |
+ |
+ captureScreenshot() { |
+ var mainTarget = WebInspector.targetManager.mainTarget(); |
+ if (!mainTarget) |
+ return; |
+ WebInspector.DOMModel.muteHighlight(); |
+ |
+ var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
+ var rect = this._contentArea.getBoundingClientRect(); |
+ var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(rect.height * zoomFactor, 1)); |
+ var outlineVisible = this._model.deviceOutlineSetting().get(); |
+ |
+ if (availableSize.width < this._model.screenRect().width || |
+ availableSize.height < this._model.screenRect().height) { |
+ WebInspector.inspectorView.minimize(); |
+ this._model.deviceOutlineSetting().set(false); |
+ } |
+ |
+ mainTarget.pageAgent().captureScreenshot(screenshotCaptured.bind(this)); |
/** |
- * @override |
+ * @param {?Protocol.Error} error |
+ * @param {string} content |
+ * @this {WebInspector.DeviceModeView} |
*/ |
- wasShown: function() |
- { |
- this._measureHandles(); |
- this._toolbar.restore(); |
- }, |
- |
- /** |
- * @override |
- */ |
- willHide: function() |
- { |
- this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null); |
- }, |
- |
- captureScreenshot: function() |
- { |
- var mainTarget = WebInspector.targetManager.mainTarget(); |
- if (!mainTarget) |
- return; |
- WebInspector.DOMModel.muteHighlight(); |
- |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var rect = this._contentArea.getBoundingClientRect(); |
- var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(rect.height * zoomFactor, 1)); |
- var outlineVisible = this._model.deviceOutlineSetting().get(); |
- |
- if (availableSize.width < this._model.screenRect().width || |
- availableSize.height < this._model.screenRect().height) { |
- WebInspector.inspectorView.minimize(); |
- this._model.deviceOutlineSetting().set(false); |
+ function screenshotCaptured(error, content) { |
+ this._model.deviceOutlineSetting().set(outlineVisible); |
+ var dpr = window.devicePixelRatio; |
+ var outlineRect = this._model.outlineRect().scale(dpr); |
+ var screenRect = this._model.screenRect().scale(dpr); |
+ screenRect.left -= outlineRect.left; |
+ screenRect.top -= outlineRect.top; |
+ var visiblePageRect = this._model.visiblePageRect().scale(dpr); |
+ visiblePageRect.left += screenRect.left; |
+ visiblePageRect.top += screenRect.top; |
+ outlineRect.left = 0; |
+ outlineRect.top = 0; |
+ |
+ WebInspector.DOMModel.unmuteHighlight(); |
+ WebInspector.inspectorView.restore(); |
+ |
+ if (error) { |
+ console.error(error); |
+ return; |
+ } |
+ |
+ // Create a canvas to splice the images together. |
+ var canvas = createElement('canvas'); |
+ var ctx = canvas.getContext('2d'); |
+ canvas.width = outlineRect.width; |
+ canvas.height = outlineRect.height; |
+ ctx.imageSmoothingEnabled = false; |
+ |
+ var promise = Promise.resolve(); |
+ if (this._model.outlineImage()) |
+ promise = promise.then(paintImage.bind(null, this._model.outlineImage(), outlineRect)); |
+ promise = promise.then(drawBorder); |
+ if (this._model.screenImage()) |
+ promise = promise.then(paintImage.bind(null, this._model.screenImage(), screenRect)); |
+ promise.then(paintScreenshot.bind(this)); |
+ |
+ /** |
+ * @param {string} src |
+ * @param {!WebInspector.Rect} rect |
+ * @return {!Promise<undefined>} |
+ */ |
+ function paintImage(src, rect) { |
+ var callback; |
+ var promise = new Promise(fulfill => callback = fulfill); |
+ var image = new Image(); |
+ image.crossOrigin = 'Anonymous'; |
+ image.srcset = src; |
+ image.onload = onImageLoad; |
+ image.onerror = callback; |
+ return promise; |
+ |
+ function onImageLoad() { |
+ ctx.drawImage(image, rect.left, rect.top, rect.width, rect.height); |
+ callback(); |
} |
- |
- mainTarget.pageAgent().captureScreenshot(screenshotCaptured.bind(this)); |
- |
- /** |
- * @param {?Protocol.Error} error |
- * @param {string} content |
- * @this {WebInspector.DeviceModeView} |
- */ |
- function screenshotCaptured(error, content) |
- { |
- this._model.deviceOutlineSetting().set(outlineVisible); |
- var dpr = window.devicePixelRatio; |
- var outlineRect = this._model.outlineRect().scale(dpr); |
- var screenRect = this._model.screenRect().scale(dpr); |
- screenRect.left -= outlineRect.left; |
- screenRect.top -= outlineRect.top; |
- var visiblePageRect = this._model.visiblePageRect().scale(dpr); |
- visiblePageRect.left += screenRect.left; |
- visiblePageRect.top += screenRect.top; |
- outlineRect.left = 0; |
- outlineRect.top = 0; |
- |
- WebInspector.DOMModel.unmuteHighlight(); |
- WebInspector.inspectorView.restore(); |
- |
- if (error) { |
- console.error(error); |
- return; |
- } |
- |
- // Create a canvas to splice the images together. |
- var canvas = createElement("canvas"); |
- var ctx = canvas.getContext("2d"); |
- canvas.width = outlineRect.width; |
- canvas.height = outlineRect.height; |
- ctx.imageSmoothingEnabled = false; |
- |
- var promise = Promise.resolve(); |
- if (this._model.outlineImage()) |
- promise = promise.then(paintImage.bind(null, this._model.outlineImage(), outlineRect)); |
- promise = promise.then(drawBorder); |
- if (this._model.screenImage()) |
- promise = promise.then(paintImage.bind(null, this._model.screenImage(), screenRect)); |
- promise.then(paintScreenshot.bind(this)); |
- |
- /** |
- * @param {string} src |
- * @param {!WebInspector.Rect} rect |
- * @return {!Promise<undefined>} |
- */ |
- function paintImage(src, rect) |
- { |
- var callback; |
- var promise = new Promise(fulfill => callback = fulfill); |
- var image = new Image(); |
- image.crossOrigin = "Anonymous"; |
- image.srcset = src; |
- image.onload = onImageLoad; |
- image.onerror = callback; |
- return promise; |
- |
- function onImageLoad() |
- { |
- ctx.drawImage(image, rect.left, rect.top, rect.width, rect.height); |
- callback(); |
- } |
- } |
- |
- function drawBorder() |
- { |
- ctx.strokeStyle = "hsla(0, 0%, 98%, 0.5)"; |
- ctx.lineWidth = 1; |
- ctx.setLineDash([10, 10]); |
- ctx.strokeRect(screenRect.left + 1, screenRect.top + 1, screenRect.width - 2, screenRect.height - 2); |
- } |
- |
- /** |
- * @this {WebInspector.DeviceModeView} |
- */ |
- function paintScreenshot() |
- { |
- var pageImage = new Image(); |
- pageImage.src = "data:image/png;base64," + content; |
- ctx.drawImage(pageImage, |
- visiblePageRect.left, |
- visiblePageRect.top, |
- Math.min(pageImage.naturalWidth, screenRect.width), |
- Math.min(pageImage.naturalHeight, screenRect.height)); |
- var url = mainTarget && mainTarget.inspectedURL(); |
- var fileName = url ? url.trimURL().removeURLFragment() : ""; |
- if (this._model.type() === WebInspector.DeviceModeModel.Type.Device) |
- fileName += WebInspector.UIString("(%s)", this._model.device().title); |
- // Trigger download. |
- var link = createElement("a"); |
- link.download = fileName + ".png"; |
- link.href = canvas.toDataURL("image/png"); |
- link.click(); |
- } |
- } |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
+ } |
+ |
+ function drawBorder() { |
+ ctx.strokeStyle = 'hsla(0, 0%, 98%, 0.5)'; |
+ ctx.lineWidth = 1; |
+ ctx.setLineDash([10, 10]); |
+ ctx.strokeRect(screenRect.left + 1, screenRect.top + 1, screenRect.width - 2, screenRect.height - 2); |
+ } |
+ |
+ /** |
+ * @this {WebInspector.DeviceModeView} |
+ */ |
+ function paintScreenshot() { |
+ var pageImage = new Image(); |
+ pageImage.src = 'data:image/png;base64,' + content; |
+ ctx.drawImage( |
+ pageImage, visiblePageRect.left, visiblePageRect.top, Math.min(pageImage.naturalWidth, screenRect.width), |
+ Math.min(pageImage.naturalHeight, screenRect.height)); |
+ var url = mainTarget && mainTarget.inspectedURL(); |
+ var fileName = url ? url.trimURL().removeURLFragment() : ''; |
+ if (this._model.type() === WebInspector.DeviceModeModel.Type.Device) |
+ fileName += WebInspector.UIString('(%s)', this._model.device().title); |
+ // Trigger download. |
+ var link = createElement('a'); |
+ link.download = fileName + '.png'; |
+ link.href = canvas.toDataURL('image/png'); |
+ link.click(); |
+ } |
+ } |
+ } |
}; |
/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
- * @param {boolean} horizontal |
- * @param {function(number)} applyCallback |
+ * @unrestricted |
*/ |
-WebInspector.DeviceModeView.Ruler = function(horizontal, applyCallback) |
-{ |
- WebInspector.VBox.call(this); |
- this.element.classList.add("device-mode-ruler"); |
- this._contentElement = this.element.createChild("div", "device-mode-ruler-content").createChild("div", "device-mode-ruler-inner"); |
+WebInspector.DeviceModeView.Ruler = class extends WebInspector.VBox { |
+ /** |
+ * @param {boolean} horizontal |
+ * @param {function(number)} applyCallback |
+ */ |
+ constructor(horizontal, applyCallback) { |
+ super(); |
+ this.element.classList.add('device-mode-ruler'); |
+ this._contentElement = |
+ this.element.createChild('div', 'device-mode-ruler-content').createChild('div', 'device-mode-ruler-inner'); |
this._horizontal = horizontal; |
this._scale = 1; |
this._count = 0; |
this._throttler = new WebInspector.Throttler(0); |
this._applyCallback = applyCallback; |
-}; |
- |
-WebInspector.DeviceModeView.Ruler.prototype = { |
- /** |
- * @param {number} scale |
- */ |
- render: function(scale) |
- { |
- this._scale = scale; |
- this._throttler.schedule(this._update.bind(this)); |
- }, |
- |
- /** |
- * @override |
- */ |
- onResize: function() |
- { |
- this._throttler.schedule(this._update.bind(this)); |
- }, |
- |
- /** |
- * @return {!Promise.<?>} |
- */ |
- _update: function() |
- { |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var size = this._horizontal ? this._contentElement.offsetWidth : this._contentElement.offsetHeight; |
- |
- if (this._scale !== this._renderedScale || zoomFactor !== this._renderedZoomFactor) { |
- this._contentElement.removeChildren(); |
- this._count = 0; |
- this._renderedScale = this._scale; |
- this._renderedZoomFactor = zoomFactor; |
+ } |
+ |
+ /** |
+ * @param {number} scale |
+ */ |
+ render(scale) { |
+ this._scale = scale; |
+ this._throttler.schedule(this._update.bind(this)); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onResize() { |
+ this._throttler.schedule(this._update.bind(this)); |
+ } |
+ |
+ /** |
+ * @return {!Promise.<?>} |
+ */ |
+ _update() { |
+ var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
+ var size = this._horizontal ? this._contentElement.offsetWidth : this._contentElement.offsetHeight; |
+ |
+ if (this._scale !== this._renderedScale || zoomFactor !== this._renderedZoomFactor) { |
+ this._contentElement.removeChildren(); |
+ this._count = 0; |
+ this._renderedScale = this._scale; |
+ this._renderedZoomFactor = zoomFactor; |
+ } |
+ |
+ var dipSize = size * zoomFactor / this._scale; |
+ var count = Math.ceil(dipSize / 5); |
+ var step = 1; |
+ if (this._scale < 0.8) |
+ step = 2; |
+ if (this._scale < 0.6) |
+ step = 4; |
+ if (this._scale < 0.4) |
+ step = 8; |
+ if (this._scale < 0.2) |
+ step = 16; |
+ if (this._scale < 0.1) |
+ step = 32; |
+ |
+ for (var i = count; i < this._count; i++) { |
+ if (!(i % step)) |
+ this._contentElement.lastChild.remove(); |
+ } |
+ |
+ for (var i = this._count; i < count; i++) { |
+ if (i % step) |
+ continue; |
+ var marker = this._contentElement.createChild('div', 'device-mode-ruler-marker'); |
+ if (i) { |
+ if (this._horizontal) |
+ marker.style.left = (5 * i) * this._scale / zoomFactor + 'px'; |
+ else |
+ marker.style.top = (5 * i) * this._scale / zoomFactor + 'px'; |
+ if (!(i % 20)) { |
+ var text = marker.createChild('div', 'device-mode-ruler-text'); |
+ text.textContent = i * 5; |
+ text.addEventListener('click', this._onMarkerClick.bind(this, i * 5), false); |
} |
- |
- var dipSize = size * zoomFactor / this._scale; |
- var count = Math.ceil(dipSize / 5); |
- var step = 1; |
- if (this._scale < 0.8) |
- step = 2; |
- if (this._scale < 0.6) |
- step = 4; |
- if (this._scale < 0.4) |
- step = 8; |
- if (this._scale < 0.2) |
- step = 16; |
- if (this._scale < 0.1) |
- step = 32; |
- |
- for (var i = count; i < this._count; i++) { |
- if (!(i % step)) |
- this._contentElement.lastChild.remove(); |
- } |
- |
- for (var i = this._count; i < count; i++) { |
- if (i % step) |
- continue; |
- var marker = this._contentElement.createChild("div", "device-mode-ruler-marker"); |
- if (i) { |
- if (this._horizontal) |
- marker.style.left = (5 * i) * this._scale / zoomFactor + "px"; |
- else |
- marker.style.top = (5 * i) * this._scale / zoomFactor + "px"; |
- if (!(i % 20)) { |
- var text = marker.createChild("div", "device-mode-ruler-text"); |
- text.textContent = i * 5; |
- text.addEventListener("click", this._onMarkerClick.bind(this, i * 5), false); |
- } |
- } |
- if (!(i % 10)) |
- marker.classList.add("device-mode-ruler-marker-large"); |
- else if (!(i % 5)) |
- marker.classList.add("device-mode-ruler-marker-medium"); |
- } |
- |
- this._count = count; |
- return Promise.resolve(); |
- }, |
- |
- /** |
- * @param {number} size |
- */ |
- _onMarkerClick: function(size) |
- { |
- this._applyCallback.call(null, size); |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
+ } |
+ if (!(i % 10)) |
+ marker.classList.add('device-mode-ruler-marker-large'); |
+ else if (!(i % 5)) |
+ marker.classList.add('device-mode-ruler-marker-medium'); |
+ } |
+ |
+ this._count = count; |
+ return Promise.resolve(); |
+ } |
+ |
+ /** |
+ * @param {number} size |
+ */ |
+ _onMarkerClick(size) { |
+ this._applyCallback.call(null, size); |
+ } |
}; |