Index: third_party/WebKit/Source/devtools/front_end/ui/CSSShadowEditor.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/CSSShadowEditor.js b/third_party/WebKit/Source/devtools/front_end/ui/CSSShadowEditor.js |
deleted file mode 100644 |
index 7ea6cae648edb65a05d85983c2447eb2d5b6563a..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/devtools/front_end/ui/CSSShadowEditor.js |
+++ /dev/null |
@@ -1,429 +0,0 @@ |
-// 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. |
-/** |
- * @unrestricted |
- */ |
-UI.CSSShadowEditor = class extends UI.VBox { |
- constructor() { |
- super(true); |
- this.registerRequiredCSS('ui/cssShadowEditor.css'); |
- this.contentElement.tabIndex = 0; |
- this.setDefaultFocusedElement(this.contentElement); |
- |
- this._typeField = this.contentElement.createChild('div', 'shadow-editor-field'); |
- this._typeField.createChild('label', 'shadow-editor-label').textContent = Common.UIString('Type'); |
- this._outsetButton = this._typeField.createChild('button', 'shadow-editor-button-left'); |
- this._outsetButton.textContent = Common.UIString('Outset'); |
- this._outsetButton.addEventListener('click', this._onButtonClick.bind(this), false); |
- this._insetButton = this._typeField.createChild('button', 'shadow-editor-button-right'); |
- this._insetButton.textContent = Common.UIString('Inset'); |
- this._insetButton.addEventListener('click', this._onButtonClick.bind(this), false); |
- |
- var xField = this.contentElement.createChild('div', 'shadow-editor-field'); |
- this._xInput = this._createTextInput(xField, Common.UIString('X offset')); |
- var yField = this.contentElement.createChild('div', 'shadow-editor-field'); |
- this._yInput = this._createTextInput(yField, Common.UIString('Y offset')); |
- this._xySlider = xField.createChild('canvas', 'shadow-editor-2D-slider'); |
- this._xySlider.width = UI.CSSShadowEditor.canvasSize; |
- this._xySlider.height = UI.CSSShadowEditor.canvasSize; |
- this._xySlider.tabIndex = -1; |
- this._halfCanvasSize = UI.CSSShadowEditor.canvasSize / 2; |
- this._innerCanvasSize = this._halfCanvasSize - UI.CSSShadowEditor.sliderThumbRadius; |
- UI.installDragHandle(this._xySlider, this._dragStart.bind(this), this._dragMove.bind(this), null, 'default'); |
- this._xySlider.addEventListener('keydown', this._onCanvasArrowKey.bind(this), false); |
- this._xySlider.addEventListener('blur', this._onCanvasBlur.bind(this), false); |
- |
- var blurField = this.contentElement.createChild('div', 'shadow-editor-blur-field'); |
- this._blurInput = this._createTextInput(blurField, Common.UIString('Blur')); |
- this._blurSlider = this._createSlider(blurField); |
- |
- this._spreadField = this.contentElement.createChild('div', 'shadow-editor-field'); |
- this._spreadInput = this._createTextInput(this._spreadField, Common.UIString('Spread')); |
- this._spreadSlider = this._createSlider(this._spreadField); |
- } |
- |
- /** |
- * @param {!Element} field |
- * @param {string} propertyName |
- * @return {!Element} |
- */ |
- _createTextInput(field, propertyName) { |
- var label = field.createChild('label', 'shadow-editor-label'); |
- label.textContent = propertyName; |
- label.setAttribute('for', propertyName); |
- var textInput = field.createChild('input', 'shadow-editor-text-input'); |
- textInput.type = 'text'; |
- textInput.id = propertyName; |
- textInput.addEventListener('keydown', this._handleValueModification.bind(this), false); |
- textInput.addEventListener('mousewheel', this._handleValueModification.bind(this), false); |
- textInput.addEventListener('input', this._onTextInput.bind(this), false); |
- textInput.addEventListener('blur', this._onTextBlur.bind(this), false); |
- return textInput; |
- } |
- |
- /** |
- * @param {!Element} field |
- * @return {!Element} |
- */ |
- _createSlider(field) { |
- var slider = UI.createSliderLabel(0, UI.CSSShadowEditor.maxRange, -1); |
- slider.addEventListener('input', this._onSliderInput.bind(this), false); |
- field.appendChild(slider); |
- return slider; |
- } |
- |
- /** |
- * @override |
- */ |
- wasShown() { |
- this._updateUI(); |
- } |
- |
- /** |
- * @param {!Common.CSSShadowModel} model |
- */ |
- setModel(model) { |
- this._model = model; |
- this._typeField.hidden = !model.isBoxShadow(); |
- this._spreadField.hidden = !model.isBoxShadow(); |
- this._updateUI(); |
- } |
- |
- _updateUI() { |
- this._updateButtons(); |
- this._xInput.value = this._model.offsetX().asCSSText(); |
- this._yInput.value = this._model.offsetY().asCSSText(); |
- this._blurInput.value = this._model.blurRadius().asCSSText(); |
- this._spreadInput.value = this._model.spreadRadius().asCSSText(); |
- this._blurSlider.value = this._model.blurRadius().amount; |
- this._spreadSlider.value = this._model.spreadRadius().amount; |
- this._updateCanvas(false); |
- } |
- |
- _updateButtons() { |
- this._insetButton.classList.toggle('enabled', this._model.inset()); |
- this._outsetButton.classList.toggle('enabled', !this._model.inset()); |
- } |
- |
- /** |
- * @param {boolean} drawFocus |
- */ |
- _updateCanvas(drawFocus) { |
- var context = this._xySlider.getContext('2d'); |
- context.clearRect(0, 0, this._xySlider.width, this._xySlider.height); |
- |
- // Draw dashed axes. |
- context.save(); |
- context.setLineDash([1, 1]); |
- context.strokeStyle = 'rgba(210, 210, 210, 0.8)'; |
- context.beginPath(); |
- context.moveTo(this._halfCanvasSize, 0); |
- context.lineTo(this._halfCanvasSize, UI.CSSShadowEditor.canvasSize); |
- context.moveTo(0, this._halfCanvasSize); |
- context.lineTo(UI.CSSShadowEditor.canvasSize, this._halfCanvasSize); |
- context.stroke(); |
- context.restore(); |
- |
- var thumbPoint = this._sliderThumbPosition(); |
- // Draw 2D slider line. |
- context.save(); |
- context.translate(this._halfCanvasSize, this._halfCanvasSize); |
- context.lineWidth = 2; |
- context.strokeStyle = 'rgba(130, 130, 130, 0.75)'; |
- context.beginPath(); |
- context.moveTo(0, 0); |
- context.lineTo(thumbPoint.x, thumbPoint.y); |
- context.stroke(); |
- // Draw 2D slider thumb. |
- if (drawFocus) { |
- context.beginPath(); |
- context.fillStyle = 'rgba(66, 133, 244, 0.4)'; |
- context.arc(thumbPoint.x, thumbPoint.y, UI.CSSShadowEditor.sliderThumbRadius + 2, 0, 2 * Math.PI); |
- context.fill(); |
- } |
- context.beginPath(); |
- context.fillStyle = '#4285F4'; |
- context.arc(thumbPoint.x, thumbPoint.y, UI.CSSShadowEditor.sliderThumbRadius, 0, 2 * Math.PI); |
- context.fill(); |
- context.restore(); |
- } |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onButtonClick(event) { |
- var insetClicked = (event.currentTarget === this._insetButton); |
- if (insetClicked && this._model.inset() || !insetClicked && !this._model.inset()) |
- return; |
- this._model.setInset(insetClicked); |
- this._updateButtons(); |
- this.dispatchEventToListeners(UI.CSSShadowEditor.Events.ShadowChanged, this._model); |
- } |
- |
- /** |
- * @param {!Event} event |
- */ |
- _handleValueModification(event) { |
- var modifiedValue = UI.createReplacementString(event.currentTarget.value, event, customNumberHandler); |
- if (!modifiedValue) |
- return; |
- var length = Common.CSSLength.parse(modifiedValue); |
- if (!length) |
- return; |
- if (event.currentTarget === this._blurInput && length.amount < 0) |
- length.amount = 0; |
- event.currentTarget.value = length.asCSSText(); |
- event.currentTarget.selectionStart = 0; |
- event.currentTarget.selectionEnd = event.currentTarget.value.length; |
- this._onTextInput(event); |
- event.consume(true); |
- |
- /** |
- * @param {string} prefix |
- * @param {number} number |
- * @param {string} suffix |
- * @return {string} |
- */ |
- function customNumberHandler(prefix, number, suffix) { |
- if (!suffix.length) |
- suffix = UI.CSSShadowEditor.defaultUnit; |
- return prefix + number + suffix; |
- } |
- } |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onTextInput(event) { |
- this._changedElement = event.currentTarget; |
- this._changedElement.classList.remove('invalid'); |
- var length = Common.CSSLength.parse(event.currentTarget.value); |
- if (!length || event.currentTarget === this._blurInput && length.amount < 0) |
- return; |
- if (event.currentTarget === this._xInput) { |
- this._model.setOffsetX(length); |
- this._updateCanvas(false); |
- } else if (event.currentTarget === this._yInput) { |
- this._model.setOffsetY(length); |
- this._updateCanvas(false); |
- } else if (event.currentTarget === this._blurInput) { |
- this._model.setBlurRadius(length); |
- this._blurSlider.value = length.amount; |
- } else if (event.currentTarget === this._spreadInput) { |
- this._model.setSpreadRadius(length); |
- this._spreadSlider.value = length.amount; |
- } |
- this.dispatchEventToListeners(UI.CSSShadowEditor.Events.ShadowChanged, this._model); |
- } |
- |
- _onTextBlur() { |
- if (!this._changedElement) |
- return; |
- var length = !this._changedElement.value.trim() ? Common.CSSLength.zero() : |
- Common.CSSLength.parse(this._changedElement.value); |
- if (!length) |
- length = Common.CSSLength.parse(this._changedElement.value + UI.CSSShadowEditor.defaultUnit); |
- if (!length) { |
- this._changedElement.classList.add('invalid'); |
- this._changedElement = null; |
- return; |
- } |
- if (this._changedElement === this._xInput) { |
- this._model.setOffsetX(length); |
- this._xInput.value = length.asCSSText(); |
- this._updateCanvas(false); |
- } else if (this._changedElement === this._yInput) { |
- this._model.setOffsetY(length); |
- this._yInput.value = length.asCSSText(); |
- this._updateCanvas(false); |
- } else if (this._changedElement === this._blurInput) { |
- if (length.amount < 0) |
- length = Common.CSSLength.zero(); |
- this._model.setBlurRadius(length); |
- this._blurInput.value = length.asCSSText(); |
- this._blurSlider.value = length.amount; |
- } else if (this._changedElement === this._spreadInput) { |
- this._model.setSpreadRadius(length); |
- this._spreadInput.value = length.asCSSText(); |
- this._spreadSlider.value = length.amount; |
- } |
- this._changedElement = null; |
- this.dispatchEventToListeners(UI.CSSShadowEditor.Events.ShadowChanged, this._model); |
- } |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onSliderInput(event) { |
- if (event.currentTarget === this._blurSlider) { |
- this._model.setBlurRadius(new Common.CSSLength( |
- this._blurSlider.value, this._model.blurRadius().unit || UI.CSSShadowEditor.defaultUnit)); |
- this._blurInput.value = this._model.blurRadius().asCSSText(); |
- this._blurInput.classList.remove('invalid'); |
- } else if (event.currentTarget === this._spreadSlider) { |
- this._model.setSpreadRadius(new Common.CSSLength( |
- this._spreadSlider.value, this._model.spreadRadius().unit || UI.CSSShadowEditor.defaultUnit)); |
- this._spreadInput.value = this._model.spreadRadius().asCSSText(); |
- this._spreadInput.classList.remove('invalid'); |
- } |
- this.dispatchEventToListeners(UI.CSSShadowEditor.Events.ShadowChanged, this._model); |
- } |
- |
- /** |
- * @param {!MouseEvent} event |
- * @return {boolean} |
- */ |
- _dragStart(event) { |
- this._xySlider.focus(); |
- this._updateCanvas(true); |
- this._canvasOrigin = new Common.Geometry.Point( |
- this._xySlider.totalOffsetLeft() + this._halfCanvasSize, |
- this._xySlider.totalOffsetTop() + this._halfCanvasSize); |
- var clickedPoint = new Common.Geometry.Point(event.x - this._canvasOrigin.x, event.y - this._canvasOrigin.y); |
- var thumbPoint = this._sliderThumbPosition(); |
- if (clickedPoint.distanceTo(thumbPoint) >= UI.CSSShadowEditor.sliderThumbRadius) |
- this._dragMove(event); |
- return true; |
- } |
- |
- /** |
- * @param {!MouseEvent} event |
- */ |
- _dragMove(event) { |
- var point = new Common.Geometry.Point(event.x - this._canvasOrigin.x, event.y - this._canvasOrigin.y); |
- if (event.shiftKey) |
- point = this._snapToClosestDirection(point); |
- var constrainedPoint = this._constrainPoint(point, this._innerCanvasSize); |
- var newX = Math.round((constrainedPoint.x / this._innerCanvasSize) * UI.CSSShadowEditor.maxRange); |
- var newY = Math.round((constrainedPoint.y / this._innerCanvasSize) * UI.CSSShadowEditor.maxRange); |
- |
- if (event.shiftKey) { |
- this._model.setOffsetX(new Common.CSSLength(newX, this._model.offsetX().unit || UI.CSSShadowEditor.defaultUnit)); |
- this._model.setOffsetY(new Common.CSSLength(newY, this._model.offsetY().unit || UI.CSSShadowEditor.defaultUnit)); |
- } else { |
- if (!event.altKey) { |
- this._model.setOffsetX( |
- new Common.CSSLength(newX, this._model.offsetX().unit || UI.CSSShadowEditor.defaultUnit)); |
- } |
- if (!UI.KeyboardShortcut.eventHasCtrlOrMeta(event)) { |
- this._model.setOffsetY( |
- new Common.CSSLength(newY, this._model.offsetY().unit || UI.CSSShadowEditor.defaultUnit)); |
- } |
- } |
- this._xInput.value = this._model.offsetX().asCSSText(); |
- this._yInput.value = this._model.offsetY().asCSSText(); |
- this._xInput.classList.remove('invalid'); |
- this._yInput.classList.remove('invalid'); |
- this._updateCanvas(true); |
- this.dispatchEventToListeners(UI.CSSShadowEditor.Events.ShadowChanged, this._model); |
- } |
- |
- _onCanvasBlur() { |
- this._updateCanvas(false); |
- } |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onCanvasArrowKey(event) { |
- var shiftX = 0; |
- var shiftY = 0; |
- if (event.key === 'ArrowRight') |
- shiftX = 1; |
- else if (event.key === 'ArrowLeft') |
- shiftX = -1; |
- else if (event.key === 'ArrowUp') |
- shiftY = -1; |
- else if (event.key === 'ArrowDown') |
- shiftY = 1; |
- |
- if (!shiftX && !shiftY) |
- return; |
- event.consume(true); |
- |
- if (shiftX) { |
- var offsetX = this._model.offsetX(); |
- var newAmount = |
- Number.constrain(offsetX.amount + shiftX, -UI.CSSShadowEditor.maxRange, UI.CSSShadowEditor.maxRange); |
- if (newAmount === offsetX.amount) |
- return; |
- this._model.setOffsetX(new Common.CSSLength(newAmount, offsetX.unit || UI.CSSShadowEditor.defaultUnit)); |
- this._xInput.value = this._model.offsetX().asCSSText(); |
- this._xInput.classList.remove('invalid'); |
- } |
- if (shiftY) { |
- var offsetY = this._model.offsetY(); |
- var newAmount = |
- Number.constrain(offsetY.amount + shiftY, -UI.CSSShadowEditor.maxRange, UI.CSSShadowEditor.maxRange); |
- if (newAmount === offsetY.amount) |
- return; |
- this._model.setOffsetY(new Common.CSSLength(newAmount, offsetY.unit || UI.CSSShadowEditor.defaultUnit)); |
- this._yInput.value = this._model.offsetY().asCSSText(); |
- this._yInput.classList.remove('invalid'); |
- } |
- this._updateCanvas(true); |
- this.dispatchEventToListeners(UI.CSSShadowEditor.Events.ShadowChanged, this._model); |
- } |
- |
- /** |
- * @param {!Common.Geometry.Point} point |
- * @param {number} max |
- * @return {!Common.Geometry.Point} |
- */ |
- _constrainPoint(point, max) { |
- if (Math.abs(point.x) <= max && Math.abs(point.y) <= max) |
- return new Common.Geometry.Point(point.x, point.y); |
- return point.scale(max / Math.max(Math.abs(point.x), Math.abs(point.y))); |
- } |
- |
- /** |
- * @param {!Common.Geometry.Point} point |
- * @return {!Common.Geometry.Point} |
- */ |
- _snapToClosestDirection(point) { |
- var minDistance = Number.MAX_VALUE; |
- var closestPoint = point; |
- |
- var directions = [ |
- new Common.Geometry.Point(0, -1), // North |
- new Common.Geometry.Point(1, -1), // Northeast |
- new Common.Geometry.Point(1, 0), // East |
- new Common.Geometry.Point(1, 1) // Southeast |
- ]; |
- |
- for (var direction of directions) { |
- var projection = point.projectOn(direction); |
- var distance = point.distanceTo(projection); |
- if (distance < minDistance) { |
- minDistance = distance; |
- closestPoint = projection; |
- } |
- } |
- |
- return closestPoint; |
- } |
- |
- /** |
- * @return {!Common.Geometry.Point} |
- */ |
- _sliderThumbPosition() { |
- var x = (this._model.offsetX().amount / UI.CSSShadowEditor.maxRange) * this._innerCanvasSize; |
- var y = (this._model.offsetY().amount / UI.CSSShadowEditor.maxRange) * this._innerCanvasSize; |
- return this._constrainPoint(new Common.Geometry.Point(x, y), this._innerCanvasSize); |
- } |
-}; |
- |
-/** @enum {symbol} */ |
-UI.CSSShadowEditor.Events = { |
- ShadowChanged: Symbol('ShadowChanged') |
-}; |
- |
-/** @type {number} */ |
-UI.CSSShadowEditor.maxRange = 20; |
-/** @type {string} */ |
-UI.CSSShadowEditor.defaultUnit = 'px'; |
-/** @type {number} */ |
-UI.CSSShadowEditor.sliderThumbRadius = 6; |
-/** @type {number} */ |
-UI.CSSShadowEditor.canvasSize = 88; |