| Index: third_party/WebKit/Source/devtools/front_end/ui/BezierEditor.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/ui/BezierEditor.js b/third_party/WebKit/Source/devtools/front_end/ui/BezierEditor.js
|
| index 31d32412efd25b77c5532d3b110dbcb7861fa495..b9c5a48b2033c060806064a06b7c330a710689cf 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/ui/BezierEditor.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/ui/BezierEditor.js
|
| @@ -1,282 +1,270 @@
|
| // Copyright (c) 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.BezierEditor = function()
|
| -{
|
| - WebInspector.VBox.call(this, true);
|
| - this.registerRequiredCSS("ui/bezierEditor.css");
|
| +WebInspector.BezierEditor = class extends WebInspector.VBox {
|
| + constructor() {
|
| + super(true);
|
| + this.registerRequiredCSS('ui/bezierEditor.css');
|
| this.contentElement.tabIndex = 0;
|
|
|
| // Preview UI
|
| - this._previewElement = this.contentElement.createChild("div", "bezier-preview-container");
|
| - this._previewElement.createChild("div", "bezier-preview-animation");
|
| - this._previewElement.addEventListener("click", this._startPreviewAnimation.bind(this));
|
| - this._previewOnion = this.contentElement.createChild("div", "bezier-preview-onion");
|
| - this._previewOnion.addEventListener("click", this._startPreviewAnimation.bind(this));
|
| + this._previewElement = this.contentElement.createChild('div', 'bezier-preview-container');
|
| + this._previewElement.createChild('div', 'bezier-preview-animation');
|
| + this._previewElement.addEventListener('click', this._startPreviewAnimation.bind(this));
|
| + this._previewOnion = this.contentElement.createChild('div', 'bezier-preview-onion');
|
| + this._previewOnion.addEventListener('click', this._startPreviewAnimation.bind(this));
|
|
|
| - this._outerContainer = this.contentElement.createChild("div", "bezier-container");
|
| + this._outerContainer = this.contentElement.createChild('div', 'bezier-container');
|
|
|
| // Presets UI
|
| - this._presetsContainer = this._outerContainer.createChild("div", "bezier-presets");
|
| + this._presetsContainer = this._outerContainer.createChild('div', 'bezier-presets');
|
| this._presetUI = new WebInspector.BezierUI(40, 40, 0, 2, false);
|
| this._presetCategories = [];
|
| for (var i = 0; i < WebInspector.BezierEditor.Presets.length; i++) {
|
| - this._presetCategories[i] = this._createCategory(WebInspector.BezierEditor.Presets[i]);
|
| - this._presetsContainer.appendChild(this._presetCategories[i].icon);
|
| + this._presetCategories[i] = this._createCategory(WebInspector.BezierEditor.Presets[i]);
|
| + this._presetsContainer.appendChild(this._presetCategories[i].icon);
|
| }
|
|
|
| // Curve UI
|
| this._curveUI = new WebInspector.BezierUI(150, 250, 50, 7, true);
|
| - this._curve = this._outerContainer.createSVGChild("svg", "bezier-curve");
|
| - WebInspector.installDragHandle(this._curve, this._dragStart.bind(this), this._dragMove.bind(this), this._dragEnd.bind(this), "default");
|
| + this._curve = this._outerContainer.createSVGChild('svg', 'bezier-curve');
|
| + WebInspector.installDragHandle(
|
| + this._curve, this._dragStart.bind(this), this._dragMove.bind(this), this._dragEnd.bind(this), 'default');
|
| +
|
| + this._header = this.contentElement.createChild('div', 'bezier-header');
|
| + var minus = this._createPresetModifyIcon(this._header, 'bezier-preset-minus', 'M 12 6 L 8 10 L 12 14');
|
| + var plus = this._createPresetModifyIcon(this._header, 'bezier-preset-plus', 'M 8 6 L 12 10 L 8 14');
|
| + minus.addEventListener('click', this._presetModifyClicked.bind(this, false));
|
| + plus.addEventListener('click', this._presetModifyClicked.bind(this, true));
|
| + this._label = this._header.createChild('span', 'source-code bezier-display-value');
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.Geometry.CubicBezier} bezier
|
| + */
|
| + setBezier(bezier) {
|
| + if (!bezier)
|
| + return;
|
| + this._bezier = bezier;
|
| + this._updateUI();
|
| + }
|
| +
|
| + /**
|
| + * @return {!WebInspector.Geometry.CubicBezier}
|
| + */
|
| + bezier() {
|
| + return this._bezier;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + wasShown() {
|
| + this._unselectPresets();
|
| + // Check if bezier matches a preset
|
| + for (var category of this._presetCategories) {
|
| + for (var i = 0; i < category.presets.length; i++) {
|
| + if (this._bezier.asCSSText() === category.presets[i].value) {
|
| + category.presetIndex = i;
|
| + this._presetCategorySelected(category);
|
| + }
|
| + }
|
| + }
|
|
|
| - this._header = this.contentElement.createChild("div", "bezier-header");
|
| - var minus = this._createPresetModifyIcon(this._header, "bezier-preset-minus", "M 12 6 L 8 10 L 12 14");
|
| - var plus = this._createPresetModifyIcon(this._header, "bezier-preset-plus", "M 8 6 L 12 10 L 8 14");
|
| - minus.addEventListener("click", this._presetModifyClicked.bind(this, false));
|
| - plus.addEventListener("click", this._presetModifyClicked.bind(this, true));
|
| - this._label = this._header.createChild("span", "source-code bezier-display-value");
|
| + this._updateUI();
|
| + this._startPreviewAnimation();
|
| + }
|
| +
|
| + _onchange() {
|
| + this._updateUI();
|
| + this.dispatchEventToListeners(WebInspector.BezierEditor.Events.BezierChanged, this._bezier.asCSSText());
|
| + }
|
| +
|
| + _updateUI() {
|
| + var labelText = this._selectedCategory ? this._selectedCategory.presets[this._selectedCategory.presetIndex].name :
|
| + this._bezier.asCSSText().replace(/\s(-\d\.\d)/g, '$1');
|
| + this._label.textContent = WebInspector.UIString(labelText);
|
| + this._curveUI.drawCurve(this._bezier, this._curve);
|
| + this._previewOnion.removeChildren();
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event} event
|
| + * @return {boolean}
|
| + */
|
| + _dragStart(event) {
|
| + this._mouseDownPosition = new WebInspector.Geometry.Point(event.x, event.y);
|
| + var ui = this._curveUI;
|
| + this._controlPosition = new WebInspector.Geometry.Point(
|
| + Number.constrain((event.offsetX - ui.radius) / ui.curveWidth(), 0, 1),
|
| + (ui.curveHeight() + ui.marginTop + ui.radius - event.offsetY) / ui.curveHeight());
|
| +
|
| + var firstControlPointIsCloser = this._controlPosition.distanceTo(this._bezier.controlPoints[0]) <
|
| + this._controlPosition.distanceTo(this._bezier.controlPoints[1]);
|
| + this._selectedPoint = firstControlPointIsCloser ? 0 : 1;
|
| +
|
| + this._bezier.controlPoints[this._selectedPoint] = this._controlPosition;
|
| + this._unselectPresets();
|
| + this._onchange();
|
| +
|
| + event.consume(true);
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {number} mouseX
|
| + * @param {number} mouseY
|
| + */
|
| + _updateControlPosition(mouseX, mouseY) {
|
| + var deltaX = (mouseX - this._mouseDownPosition.x) / this._curveUI.curveWidth();
|
| + var deltaY = (mouseY - this._mouseDownPosition.y) / this._curveUI.curveHeight();
|
| + var newPosition = new WebInspector.Geometry.Point(
|
| + Number.constrain(this._controlPosition.x + deltaX, 0, 1), this._controlPosition.y - deltaY);
|
| + this._bezier.controlPoints[this._selectedPoint] = newPosition;
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event} event
|
| + */
|
| + _dragMove(event) {
|
| + this._updateControlPosition(event.x, event.y);
|
| + this._onchange();
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event} event
|
| + */
|
| + _dragEnd(event) {
|
| + this._updateControlPosition(event.x, event.y);
|
| + this._onchange();
|
| + this._startPreviewAnimation();
|
| + }
|
| +
|
| + /**
|
| + * @param {!Array<{name: string, value: string}>} presetGroup
|
| + * @return {!WebInspector.BezierEditor.PresetCategory}
|
| + */
|
| + _createCategory(presetGroup) {
|
| + var presetElement = createElementWithClass('div', 'bezier-preset-category');
|
| + var iconElement = presetElement.createSVGChild('svg', 'bezier-preset monospace');
|
| + var category = {presets: presetGroup, presetIndex: 0, icon: presetElement};
|
| + this._presetUI.drawCurve(WebInspector.Geometry.CubicBezier.parse(category.presets[0].value), iconElement);
|
| + iconElement.addEventListener('click', this._presetCategorySelected.bind(this, category));
|
| + return category;
|
| + }
|
| +
|
| + /**
|
| + * @param {!Element} parentElement
|
| + * @param {string} className
|
| + * @param {string} drawPath
|
| + * @return {!Element}
|
| + */
|
| + _createPresetModifyIcon(parentElement, className, drawPath) {
|
| + var icon = parentElement.createSVGChild('svg', 'bezier-preset-modify ' + className);
|
| + icon.setAttribute('width', 20);
|
| + icon.setAttribute('height', 20);
|
| + var path = icon.createSVGChild('path');
|
| + path.setAttribute('d', drawPath);
|
| + return icon;
|
| + }
|
| +
|
| + _unselectPresets() {
|
| + for (var category of this._presetCategories)
|
| + category.icon.classList.remove('bezier-preset-selected');
|
| + delete this._selectedCategory;
|
| + this._header.classList.remove('bezier-header-active');
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.BezierEditor.PresetCategory} category
|
| + * @param {!Event=} event
|
| + */
|
| + _presetCategorySelected(category, event) {
|
| + if (this._selectedCategory === category)
|
| + return;
|
| + this._unselectPresets();
|
| + this._header.classList.add('bezier-header-active');
|
| + this._selectedCategory = category;
|
| + this._selectedCategory.icon.classList.add('bezier-preset-selected');
|
| + this.setBezier(WebInspector.Geometry.CubicBezier.parse(category.presets[category.presetIndex].value));
|
| + this._onchange();
|
| + this._startPreviewAnimation();
|
| + if (event)
|
| + event.consume(true);
|
| + }
|
| +
|
| + /**
|
| + * @param {boolean} intensify
|
| + * @param {!Event} event
|
| + */
|
| + _presetModifyClicked(intensify, event) {
|
| + if (!this._selectedCategory)
|
| + return;
|
| +
|
| + var length = this._selectedCategory.presets.length;
|
| + this._selectedCategory.presetIndex = (this._selectedCategory.presetIndex + (intensify ? 1 : -1) + length) % length;
|
| + this.setBezier(WebInspector.Geometry.CubicBezier.parse(
|
| + this._selectedCategory.presets[this._selectedCategory.presetIndex].value));
|
| + this._onchange();
|
| + this._startPreviewAnimation();
|
| + }
|
| +
|
| + _startPreviewAnimation() {
|
| + if (this._previewAnimation)
|
| + this._previewAnimation.cancel();
|
| +
|
| + const animationDuration = 1600;
|
| + const numberOnionSlices = 20;
|
| +
|
| + var keyframes = [
|
| + {offset: 0, transform: 'translateX(0px)', easing: this._bezier.asCSSText(), opacity: 1},
|
| + {offset: 0.9, transform: 'translateX(218px)', opacity: 1},
|
| + {offset: 1, transform: 'translateX(218px)', opacity: 0}
|
| + ];
|
| + this._previewAnimation = this._previewElement.animate(keyframes, animationDuration);
|
| + this._previewOnion.removeChildren();
|
| + for (var i = 0; i <= numberOnionSlices; i++) {
|
| + var slice = this._previewOnion.createChild('div', 'bezier-preview-animation');
|
| + var player = slice.animate(
|
| + [{transform: 'translateX(0px)', easing: this._bezier.asCSSText()}, {transform: 'translateX(218px)'}],
|
| + {duration: animationDuration, fill: 'forwards'});
|
| + player.pause();
|
| + player.currentTime = animationDuration * i / numberOnionSlices;
|
| + }
|
| + }
|
| };
|
|
|
| /** @enum {symbol} */
|
| WebInspector.BezierEditor.Events = {
|
| - BezierChanged: Symbol("BezierChanged")
|
| + BezierChanged: Symbol('BezierChanged')
|
| };
|
|
|
| WebInspector.BezierEditor.Presets = [
|
| - [
|
| - { name: "ease-in-out", value: "ease-in-out" },
|
| - { name: "In Out · Sine", value: "cubic-bezier(0.45, 0.05, 0.55, 0.95)" },
|
| - { name: "In Out · Quadratic", value: "cubic-bezier(0.46, 0.03, 0.52, 0.96)" },
|
| - { name: "In Out · Cubic", value: "cubic-bezier(0.65, 0.05, 0.36, 1)" },
|
| - { name: "Fast Out, Slow In", value: "cubic-bezier(0.4, 0, 0.2, 1)" },
|
| - { name: "In Out · Back", value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)" }
|
| - ],
|
| - [
|
| - { name: "Fast Out, Linear In", value: "cubic-bezier(0.4, 0, 1, 1)" },
|
| - { name: "ease-in", value: "ease-in" },
|
| - { name: "In · Sine", value: "cubic-bezier(0.47, 0, 0.75, 0.72)" },
|
| - { name: "In · Quadratic", value: "cubic-bezier(0.55, 0.09, 0.68, 0.53)" },
|
| - { name: "In · Cubic", value: "cubic-bezier(0.55, 0.06, 0.68, 0.19)" },
|
| - { name: "In · Back", value: "cubic-bezier(0.6, -0.28, 0.74, 0.05)" }
|
| - ],
|
| - [
|
| - { name: "ease-out", value: "ease-out" },
|
| - { name: "Out · Sine", value: "cubic-bezier(0.39, 0.58, 0.57, 1)" },
|
| - { name: "Out · Quadratic", value: "cubic-bezier(0.25, 0.46, 0.45, 0.94)" },
|
| - { name: "Out · Cubic", value: "cubic-bezier(0.22, 0.61, 0.36, 1)" },
|
| - { name: "Linear Out, Slow In", value: "cubic-bezier(0, 0, 0.2, 1)" },
|
| - { name: "Out · Back", value: "cubic-bezier(0.18, 0.89, 0.32, 1.28)" }
|
| - ]
|
| + [
|
| + {name: 'ease-in-out', value: 'ease-in-out'}, {name: 'In Out · Sine', value: 'cubic-bezier(0.45, 0.05, 0.55, 0.95)'},
|
| + {name: 'In Out · Quadratic', value: 'cubic-bezier(0.46, 0.03, 0.52, 0.96)'},
|
| + {name: 'In Out · Cubic', value: 'cubic-bezier(0.65, 0.05, 0.36, 1)'},
|
| + {name: 'Fast Out, Slow In', value: 'cubic-bezier(0.4, 0, 0.2, 1)'},
|
| + {name: 'In Out · Back', value: 'cubic-bezier(0.68, -0.55, 0.27, 1.55)'}
|
| + ],
|
| + [
|
| + {name: 'Fast Out, Linear In', value: 'cubic-bezier(0.4, 0, 1, 1)'}, {name: 'ease-in', value: 'ease-in'},
|
| + {name: 'In · Sine', value: 'cubic-bezier(0.47, 0, 0.75, 0.72)'},
|
| + {name: 'In · Quadratic', value: 'cubic-bezier(0.55, 0.09, 0.68, 0.53)'},
|
| + {name: 'In · Cubic', value: 'cubic-bezier(0.55, 0.06, 0.68, 0.19)'},
|
| + {name: 'In · Back', value: 'cubic-bezier(0.6, -0.28, 0.74, 0.05)'}
|
| + ],
|
| + [
|
| + {name: 'ease-out', value: 'ease-out'}, {name: 'Out · Sine', value: 'cubic-bezier(0.39, 0.58, 0.57, 1)'},
|
| + {name: 'Out · Quadratic', value: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)'},
|
| + {name: 'Out · Cubic', value: 'cubic-bezier(0.22, 0.61, 0.36, 1)'},
|
| + {name: 'Linear Out, Slow In', value: 'cubic-bezier(0, 0, 0.2, 1)'},
|
| + {name: 'Out · Back', value: 'cubic-bezier(0.18, 0.89, 0.32, 1.28)'}
|
| + ]
|
| ];
|
|
|
| /** @typedef {{presets: !Array.<{name: string, value: string}>, icon: !Element, presetIndex: number}} */
|
| WebInspector.BezierEditor.PresetCategory;
|
| -
|
| -WebInspector.BezierEditor.prototype = {
|
| - /**
|
| - * @param {?WebInspector.Geometry.CubicBezier} bezier
|
| - */
|
| - setBezier: function(bezier)
|
| - {
|
| - if (!bezier)
|
| - return;
|
| - this._bezier = bezier;
|
| - this._updateUI();
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.Geometry.CubicBezier}
|
| - */
|
| - bezier: function()
|
| - {
|
| - return this._bezier;
|
| - },
|
| -
|
| - wasShown: function()
|
| - {
|
| - this._unselectPresets();
|
| - // Check if bezier matches a preset
|
| - for (var category of this._presetCategories) {
|
| - for (var i = 0; i < category.presets.length; i++) {
|
| - if (this._bezier.asCSSText() === category.presets[i].value) {
|
| - category.presetIndex = i;
|
| - this._presetCategorySelected(category);
|
| - }
|
| - }
|
| - }
|
| -
|
| - this._updateUI();
|
| - this._startPreviewAnimation();
|
| - },
|
| -
|
| - _onchange: function()
|
| - {
|
| - this._updateUI();
|
| - this.dispatchEventToListeners(WebInspector.BezierEditor.Events.BezierChanged, this._bezier.asCSSText());
|
| - },
|
| -
|
| - _updateUI: function()
|
| - {
|
| - var labelText = this._selectedCategory ? this._selectedCategory.presets[this._selectedCategory.presetIndex].name : this._bezier.asCSSText().replace(/\s(-\d\.\d)/g, "$1");
|
| - this._label.textContent = WebInspector.UIString(labelText);
|
| - this._curveUI.drawCurve(this._bezier, this._curve);
|
| - this._previewOnion.removeChildren();
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event} event
|
| - * @return {boolean}
|
| - */
|
| - _dragStart: function(event)
|
| - {
|
| - this._mouseDownPosition = new WebInspector.Geometry.Point(event.x, event.y);
|
| - var ui = this._curveUI;
|
| - this._controlPosition = new WebInspector.Geometry.Point(
|
| - Number.constrain((event.offsetX - ui.radius) / ui.curveWidth(), 0, 1),
|
| - (ui.curveHeight() + ui.marginTop + ui.radius - event.offsetY) / ui.curveHeight());
|
| -
|
| - var firstControlPointIsCloser = this._controlPosition.distanceTo(this._bezier.controlPoints[0]) < this._controlPosition.distanceTo(this._bezier.controlPoints[1]);
|
| - this._selectedPoint = firstControlPointIsCloser ? 0 : 1;
|
| -
|
| - this._bezier.controlPoints[this._selectedPoint] = this._controlPosition;
|
| - this._unselectPresets();
|
| - this._onchange();
|
| -
|
| - event.consume(true);
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} mouseX
|
| - * @param {number} mouseY
|
| - */
|
| - _updateControlPosition: function(mouseX, mouseY)
|
| - {
|
| - var deltaX = (mouseX - this._mouseDownPosition.x) / this._curveUI.curveWidth();
|
| - var deltaY = (mouseY - this._mouseDownPosition.y) / this._curveUI.curveHeight();
|
| - var newPosition = new WebInspector.Geometry.Point(Number.constrain(this._controlPosition.x + deltaX, 0, 1), this._controlPosition.y - deltaY);
|
| - this._bezier.controlPoints[this._selectedPoint] = newPosition;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event} event
|
| - */
|
| - _dragMove: function(event)
|
| - {
|
| - this._updateControlPosition(event.x, event.y);
|
| - this._onchange();
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event} event
|
| - */
|
| - _dragEnd: function(event)
|
| - {
|
| - this._updateControlPosition(event.x, event.y);
|
| - this._onchange();
|
| - this._startPreviewAnimation();
|
| - },
|
| -
|
| - /**
|
| - * @param {!Array<{name: string, value: string}>} presetGroup
|
| - * @return {!WebInspector.BezierEditor.PresetCategory}
|
| - */
|
| - _createCategory: function(presetGroup)
|
| - {
|
| - var presetElement = createElementWithClass("div", "bezier-preset-category");
|
| - var iconElement = presetElement.createSVGChild("svg", "bezier-preset monospace");
|
| - var category = { presets: presetGroup, presetIndex: 0, icon: presetElement };
|
| - this._presetUI.drawCurve(WebInspector.Geometry.CubicBezier.parse(category.presets[0].value), iconElement);
|
| - iconElement.addEventListener("click", this._presetCategorySelected.bind(this, category));
|
| - return category;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Element} parentElement
|
| - * @param {string} className
|
| - * @param {string} drawPath
|
| - * @return {!Element}
|
| - */
|
| - _createPresetModifyIcon: function(parentElement, className, drawPath)
|
| - {
|
| - var icon = parentElement.createSVGChild("svg", "bezier-preset-modify " + className);
|
| - icon.setAttribute("width", 20);
|
| - icon.setAttribute("height", 20);
|
| - var path = icon.createSVGChild("path");
|
| - path.setAttribute("d", drawPath);
|
| - return icon;
|
| - },
|
| -
|
| - _unselectPresets: function()
|
| - {
|
| - for (var category of this._presetCategories)
|
| - category.icon.classList.remove("bezier-preset-selected");
|
| - delete this._selectedCategory;
|
| - this._header.classList.remove("bezier-header-active");
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.BezierEditor.PresetCategory} category
|
| - * @param {!Event=} event
|
| - */
|
| - _presetCategorySelected: function(category, event)
|
| - {
|
| - if (this._selectedCategory === category)
|
| - return;
|
| - this._unselectPresets();
|
| - this._header.classList.add("bezier-header-active");
|
| - this._selectedCategory = category;
|
| - this._selectedCategory.icon.classList.add("bezier-preset-selected");
|
| - this.setBezier(WebInspector.Geometry.CubicBezier.parse(category.presets[category.presetIndex].value));
|
| - this._onchange();
|
| - this._startPreviewAnimation();
|
| - if (event)
|
| - event.consume(true);
|
| - },
|
| -
|
| - /**
|
| - * @param {boolean} intensify
|
| - * @param {!Event} event
|
| - */
|
| - _presetModifyClicked: function(intensify, event)
|
| - {
|
| - if (!this._selectedCategory)
|
| - return;
|
| -
|
| - var length = this._selectedCategory.presets.length;
|
| - this._selectedCategory.presetIndex = (this._selectedCategory.presetIndex + (intensify ? 1 : -1) + length) % length;
|
| - this.setBezier(WebInspector.Geometry.CubicBezier.parse(this._selectedCategory.presets[this._selectedCategory.presetIndex].value));
|
| - this._onchange();
|
| - this._startPreviewAnimation();
|
| - },
|
| -
|
| - _startPreviewAnimation: function()
|
| - {
|
| - if (this._previewAnimation)
|
| - this._previewAnimation.cancel();
|
| -
|
| - const animationDuration = 1600;
|
| - const numberOnionSlices = 20;
|
| -
|
| - var keyframes = [{ offset: 0, transform: "translateX(0px)", easing: this._bezier.asCSSText(), opacity: 1 },
|
| - { offset: 0.9, transform: "translateX(218px)", opacity: 1 },
|
| - { offset: 1, transform: "translateX(218px)", opacity: 0 }];
|
| - this._previewAnimation = this._previewElement.animate(keyframes, animationDuration);
|
| - this._previewOnion.removeChildren();
|
| - for (var i = 0; i <= numberOnionSlices; i++) {
|
| - var slice = this._previewOnion.createChild("div", "bezier-preview-animation");
|
| - var player = slice.animate([{ transform: "translateX(0px)", easing: this._bezier.asCSSText() }, { transform: "translateX(218px)" }],
|
| - { duration: animationDuration, fill: "forwards" });
|
| - player.pause();
|
| - player.currentTime = animationDuration * i / numberOnionSlices;
|
| - }
|
| - },
|
| -
|
| - __proto__: WebInspector.VBox.prototype
|
| -};
|
|
|