Index: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js |
similarity index 52% |
copy from third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js |
copy to third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js |
index da378087eae4001530e8ecb6998b29cec3c2d809..00f87218f0d7cb1222314ef56780900e31f7dd55 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js |
@@ -1,354 +1,14 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Copyright 2016 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} |
- */ |
-WebInspector.DeviceModeView = function() |
-{ |
- WebInspector.VBox.call(this, true); |
- this.setMinimumSize(150, 150); |
- 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)); |
- // TODO(dgozman): remove CountUpdated event. |
- this._showMediaInspectorSetting = WebInspector.settings.createSetting("showMediaQueryInspector", false); |
- this._showMediaInspectorSetting.addChangeListener(this._updateUI, this); |
- this._showRulersSetting = WebInspector.settings.createSetting("emulation.showRulers", false); |
- 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._createUI(); |
- WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._zoomChanged, this); |
-}; |
- |
-WebInspector.DeviceModeView.prototype = { |
- _createUI: function() |
- { |
- this._toolbar = new WebInspector.DeviceModeView.Toolbar(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._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._onScreenImageLoaded.bind(this, true), false); |
- this._screenImage.addEventListener("error", this._onScreenImageLoaded.bind(this, false), false); |
- |
- this._cornerResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-corner-resizer"); |
- this._cornerResizerElement.createChild("div", ""); |
- this._createResizer(this._cornerResizerElement, true, true); |
- |
- this._widthResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-width-resizer"); |
- this._widthResizerElement.createChild("div", ""); |
- this._createResizer(this._widthResizerElement, true, false); |
- |
- this._heightResizerElement = this._screenArea.createChild("div", "device-mode-resizer device-mode-height-resizer"); |
- this._heightResizerElement.createChild("div", ""); |
- this._createResizer(this._heightResizerElement, false, true); |
- this._heightResizerElement.addEventListener("dblclick", this._model.setHeight.bind(this._model, 0), false); |
- this._heightResizerElement.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(); |
- } |
- }, |
- |
- toggleDeviceMode: function() |
- { |
- this._toolbar.toggleDeviceMode(); |
- }, |
- |
- /** |
- * @param {!Element} element |
- * @param {boolean} width |
- * @param {boolean} height |
- * @return {!WebInspector.ResizerWidget} |
- */ |
- _createResizer: function(element, width, height) |
- { |
- var resizer = new WebInspector.ResizerWidget(); |
- resizer.addElement(element); |
- resizer.setCursor(width && height ? "nwse-resize" : (width ? "ew-resize" : "ns-resize")); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeStart, this._onResizeStart, this); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate.bind(this, width, height)); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeEnd, this._onResizeEnd, this); |
- return resizer; |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeStart: function(event) |
- { |
- this._slowPositionStart = null; |
- /** @type {!Size} */ |
- this._resizeStart = this._model.screenRect().size(); |
- }, |
- |
- /** |
- * @param {boolean} width |
- * @param {boolean} height |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeUpdate: function(width, height, 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 (width) { |
- var dipOffsetX = cssOffsetX * WebInspector.zoomManager.zoomFactor(); |
- var newWidth = this._resizeStart.width + dipOffsetX * 2; |
- newWidth = Math.round(newWidth / this._model.scale()); |
- if (newWidth >= WebInspector.DeviceModeModel.MinDeviceSize && newWidth <= WebInspector.DeviceModeModel.MaxDeviceSize) |
- this._model.setWidth(newWidth); |
- } |
- |
- if (height) { |
- var dipOffsetY = cssOffsetY * WebInspector.zoomManager.zoomFactor(); |
- var newHeight = this._resizeStart.height + dipOffsetY; |
- 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() |
- { |
- 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)) { |
- this._screenArea.style.left = cssScreenRect.left + "px"; |
- this._screenArea.style.top = cssScreenRect.top + "px"; |
- this._screenArea.style.width = cssScreenRect.width + "px"; |
- this._screenArea.style.height = cssScreenRect.height + "px"; |
- this._leftRuler.element.style.left = cssScreenRect.left + "px"; |
- updateRulers = true; |
- callDoResize = true; |
- this._cachedCssScreenRect = cssScreenRect; |
- } |
- |
- var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFactor); |
- if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { |
- this._pageArea.style.left = cssVisiblePageRect.left + "px"; |
- this._pageArea.style.top = cssVisiblePageRect.top + "px"; |
- this._pageArea.style.width = cssVisiblePageRect.width + "px"; |
- this._pageArea.style.height = cssVisiblePageRect.height + "px"; |
- callDoResize = true; |
- this._cachedCssVisiblePageRect = cssVisiblePageRect; |
- } |
- |
- var resizable = this._model.type() === WebInspector.DeviceModeModel.Type.Responsive; |
- if (resizable !== this._cachedResizable) { |
- this._widthResizerElement.classList.toggle("hidden", !resizable); |
- this._heightResizerElement.classList.toggle("hidden", !resizable); |
- this._cornerResizerElement.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._contentClip, 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._loadScreenImage(this._model.screenImage()); |
- this._mediaInspector.setAxisTransform(-cssScreenRect.left * zoomFactor / this._model.scale(), this._model.scale()); |
- if (callDoResize) |
- this.doResize(); |
- if (updateRulers) { |
- this._topRuler.render(this._cachedCssScreenRect ? this._cachedCssScreenRect.left : 0, this._model.scale()); |
- this._leftRuler.render(0, this._model.scale()); |
- } |
- if (contentAreaResized) |
- this._contentAreaResized(); |
- }, |
- |
- /** |
- * @param {string} srcset |
- */ |
- _loadScreenImage: function(srcset) |
- { |
- if (this._screenImage.getAttribute("srcset") === srcset) |
- return; |
- this._screenImage.setAttribute("srcset", srcset); |
- if (!srcset) |
- this._screenImage.classList.toggle("hidden", true); |
- }, |
- |
- /** |
- * @param {boolean} success |
- */ |
- _onScreenImageLoaded: function(success) |
- { |
- this._screenImage.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._widthResizerElement.classList.contains("hidden"); |
- this._widthResizerElement.classList.toggle("hidden", false); |
- this._heightResizerElement.classList.toggle("hidden", false); |
- this._handleWidth = this._widthResizerElement.offsetWidth; |
- this._handleHeight = this._heightResizerElement.offsetHeight; |
- this._widthResizerElement.classList.toggle("hidden", hidden); |
- this._heightResizerElement.classList.toggle("hidden", hidden); |
- }, |
- |
- _zoomChanged: function() |
- { |
- delete this._handleWidth; |
- delete this._handleHeight; |
- if (this.isShowing()) { |
- this._measureHandles(); |
- this._contentAreaResized(); |
- } |
- }, |
- |
- /** |
- * @override |
- */ |
- onResize: function() |
- { |
- if (this.isShowing()) |
- this._contentAreaResized(); |
- }, |
- |
- /** |
- * @override |
- */ |
- wasShown: function() |
- { |
- this._measureHandles(); |
- this._mediaInspector.setEnabled(true); |
- this._toolbar.restore(); |
- }, |
- |
- /** |
- * @override |
- */ |
- willHide: function() |
- { |
- this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null); |
- this._mediaInspector.setEnabled(false); |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
-} |
- |
-/** |
* @param {!WebInspector.DeviceModeModel} model |
* @param {!WebInspector.Setting} showMediaInspectorSetting |
* @param {!WebInspector.Setting} showRulersSetting |
* @constructor |
*/ |
-WebInspector.DeviceModeView.Toolbar = function(model, showMediaInspectorSetting, showRulersSetting) |
+WebInspector.DeviceModeToolbar = function(model, showMediaInspectorSetting, showRulersSetting) |
{ |
this._model = model; |
this._showMediaInspectorSetting = showMediaInspectorSetting; |
@@ -386,7 +46,7 @@ WebInspector.DeviceModeView.Toolbar = function(model, showMediaInspectorSetting, |
this._persistenceSetting = WebInspector.settings.createSetting("emulation.deviceModeValue", {device: "", orientation: "", mode: ""}); |
} |
-WebInspector.DeviceModeView.Toolbar.prototype = { |
+WebInspector.DeviceModeToolbar.prototype = { |
/** |
* @param {!WebInspector.Toolbar} toolbar |
*/ |
@@ -728,7 +388,7 @@ WebInspector.DeviceModeView.Toolbar.prototype = { |
/** |
* @param {!Array<!WebInspector.EmulatedDevice>} devices |
- * @this {WebInspector.DeviceModeView.Toolbar} |
+ * @this {WebInspector.DeviceModeToolbar} |
*/ |
function appendGroup(devices) |
{ |
@@ -741,7 +401,7 @@ WebInspector.DeviceModeView.Toolbar.prototype = { |
}, |
/** |
- * @this {WebInspector.DeviceModeView.Toolbar} |
+ * @this {WebInspector.DeviceModeToolbar} |
*/ |
_deviceListChanged: function() |
{ |
@@ -904,205 +564,3 @@ WebInspector.DeviceModeView.Toolbar.prototype = { |
this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null); |
} |
} |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
- * @param {boolean} horizontal |
- * @param {function(number)} applyCallback |
- */ |
-WebInspector.DeviceModeView.Ruler = function(horizontal, applyCallback) |
-{ |
- WebInspector.VBox.call(this); |
- this._contentElement = this.element.createChild("div", "device-mode-ruler flex-auto"); |
- this._horizontal = horizontal; |
- this._scale = 1; |
- this._offset = 0; |
- this._count = 0; |
- this._throttler = new WebInspector.Throttler(0); |
- this._applyCallback = applyCallback; |
-} |
- |
-WebInspector.DeviceModeView.Ruler.prototype = { |
- /** |
- * @param {number} offset |
- * @param {number} scale |
- */ |
- render: function(offset, scale) |
- { |
- this._scale = scale; |
- this._offset = offset; |
- if (this._horizontal) |
- this.element.style.paddingLeft = this._offset + "px"; |
- else |
- this.element.style.paddingTop = this._offset + "px"; |
- 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; |
- } |
- |
- 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; |
- |
- 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 |
-} |
- |
- |
-/** |
- * @constructor |
- * @implements {WebInspector.ActionDelegate} |
- */ |
-WebInspector.DeviceModeView.ActionDelegate = function() |
-{ |
-} |
- |
-WebInspector.DeviceModeView.ActionDelegate.prototype = { |
- /** |
- * @override |
- * @param {!WebInspector.Context} context |
- * @param {string} actionId |
- * @return {boolean} |
- */ |
- handleAction: function(context, actionId) |
- { |
- if (WebInspector.DeviceModeView._wrapperInstance) { |
- if (actionId === "emulation.toggle-device-mode") { |
- WebInspector.DeviceModeView._wrapperInstance._toggleDeviceMode(); |
- return true; |
- } |
- if (actionId === "emulation.request-app-banner") { |
- WebInspector.DeviceModeView._wrapperInstance._requestAppBanner(); |
- return true; |
- } |
- } |
- return false; |
- } |
-} |
- |
- |
-/** |
- * @extends {WebInspector.VBox} |
- * @param {!WebInspector.InspectedPagePlaceholder} inspectedPagePlaceholder |
- * @constructor |
- */ |
-WebInspector.DeviceModeView.Wrapper = function(inspectedPagePlaceholder) |
-{ |
- WebInspector.VBox.call(this); |
- WebInspector.DeviceModeView._wrapperInstance = this; |
- this._inspectedPagePlaceholder = inspectedPagePlaceholder; |
- /** @type {?WebInspector.DeviceModeView} */ |
- this._deviceModeView = null; |
- this._toggleDeviceModeAction = WebInspector.actionRegistry.action("emulation.toggle-device-mode"); |
- this._showDeviceModeSetting = WebInspector.settings.createSetting("emulation.showDeviceMode", false); |
- this._showDeviceModeSetting.addChangeListener(this._update.bind(this, false)); |
- this._update(true); |
-} |
- |
-/** @type {!WebInspector.DeviceModeView.Wrapper} */ |
-WebInspector.DeviceModeView._wrapperInstance; |
- |
-WebInspector.DeviceModeView.Wrapper.prototype = { |
- _toggleDeviceMode: function() |
- { |
- this._showDeviceModeSetting.set(!this._showDeviceModeSetting.get()); |
- }, |
- |
- /** |
- * @param {boolean} force |
- */ |
- _update: function(force) |
- { |
- this._toggleDeviceModeAction.setToggled(this._showDeviceModeSetting.get()); |
- if (!force) { |
- var showing = this._deviceModeView && this._deviceModeView.isShowing(); |
- if (this._showDeviceModeSetting.get() === showing) |
- return; |
- } |
- |
- if (this._showDeviceModeSetting.get()) { |
- if (!this._deviceModeView) |
- this._deviceModeView = new WebInspector.DeviceModeView(); |
- this._deviceModeView.show(this.element); |
- this._inspectedPagePlaceholder.clearMinimumSizeAndMargins(); |
- this._inspectedPagePlaceholder.show(this._deviceModeView.element); |
- } else { |
- if (this._deviceModeView) |
- this._deviceModeView.detach(); |
- this._inspectedPagePlaceholder.restoreMinimumSizeAndMargins(); |
- this._inspectedPagePlaceholder.show(this.element); |
- } |
- }, |
- |
- _requestAppBanner: function() |
- { |
- this._deviceModeView._model.requestAppBanner(); |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
-} |