Index: third_party/WebKit/Source/devtools/front_end/components_lazy/FilmStripView.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/components_lazy/FilmStripView.js b/third_party/WebKit/Source/devtools/front_end/components_lazy/FilmStripView.js |
index a52e82fb6827587cd6ae7bf95179c8cfaab451bb..7572567a540426382a27d4d3dec9d002a04c652a 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/components_lazy/FilmStripView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/components_lazy/FilmStripView.js |
@@ -1,330 +1,311 @@ |
// 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.HBox} |
+ * @unrestricted |
*/ |
-WebInspector.FilmStripView = function() |
-{ |
- WebInspector.HBox.call(this, true); |
- this.registerRequiredCSS("components_lazy/filmStripView.css"); |
- this.contentElement.classList.add("film-strip-view"); |
- this._statusLabel = this.contentElement.createChild("div", "label"); |
+WebInspector.FilmStripView = class extends WebInspector.HBox { |
+ constructor() { |
+ super(true); |
+ this.registerRequiredCSS('components_lazy/filmStripView.css'); |
+ this.contentElement.classList.add('film-strip-view'); |
+ this._statusLabel = this.contentElement.createChild('div', 'label'); |
this.reset(); |
this.setMode(WebInspector.FilmStripView.Modes.TimeBased); |
-}; |
- |
-/** @enum {symbol} */ |
-WebInspector.FilmStripView.Events = { |
- FrameSelected: Symbol("FrameSelected"), |
- FrameEnter: Symbol("FrameEnter"), |
- FrameExit: Symbol("FrameExit"), |
-}; |
- |
-WebInspector.FilmStripView.Modes = { |
- TimeBased: "TimeBased", |
- FrameBased: "FrameBased" |
-}; |
- |
-WebInspector.FilmStripView.prototype = { |
- /** |
- * @param {string} mode |
- */ |
- setMode: function(mode) |
- { |
- this._mode = mode; |
- this.contentElement.classList.toggle("time-based", mode === WebInspector.FilmStripView.Modes.TimeBased); |
- this.update(); |
- }, |
- |
- /** |
- * @param {!WebInspector.FilmStripModel} filmStripModel |
- * @param {number} zeroTime |
- * @param {number} spanTime |
- */ |
- setModel: function(filmStripModel, zeroTime, spanTime) |
- { |
- this._model = filmStripModel; |
- this._zeroTime = zeroTime; |
- this._spanTime = spanTime; |
- var frames = filmStripModel.frames(); |
- if (!frames.length) { |
- this.reset(); |
- return; |
- } |
- this.update(); |
- }, |
+ } |
+ /** |
+ * @param {!Element} imageElement |
+ * @param {?string} data |
+ */ |
+ static _setImageData(imageElement, data) { |
+ if (data) |
+ imageElement.src = 'data:image/jpg;base64,' + data; |
+ } |
+ |
+ /** |
+ * @param {string} mode |
+ */ |
+ setMode(mode) { |
+ this._mode = mode; |
+ this.contentElement.classList.toggle('time-based', mode === WebInspector.FilmStripView.Modes.TimeBased); |
+ this.update(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.FilmStripModel} filmStripModel |
+ * @param {number} zeroTime |
+ * @param {number} spanTime |
+ */ |
+ setModel(filmStripModel, zeroTime, spanTime) { |
+ this._model = filmStripModel; |
+ this._zeroTime = zeroTime; |
+ this._spanTime = spanTime; |
+ var frames = filmStripModel.frames(); |
+ if (!frames.length) { |
+ this.reset(); |
+ return; |
+ } |
+ this.update(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.FilmStripModel.Frame} frame |
+ * @return {!Promise<!Element>} |
+ */ |
+ createFrameElement(frame) { |
+ var time = frame.timestamp; |
+ var element = createElementWithClass('div', 'frame'); |
+ element.title = WebInspector.UIString('Doubleclick to zoom image. Click to view preceding requests.'); |
+ element.createChild('div', 'time').textContent = Number.millisToString(time - this._zeroTime); |
+ var imageElement = element.createChild('div', 'thumbnail').createChild('img'); |
+ element.addEventListener( |
+ 'mousedown', this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameSelected, time), false); |
+ element.addEventListener( |
+ 'mouseenter', this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameEnter, time), false); |
+ element.addEventListener( |
+ 'mouseout', this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameExit, time), false); |
+ element.addEventListener('dblclick', this._onDoubleClick.bind(this, frame), false); |
+ |
+ return frame.imageDataPromise() |
+ .then(WebInspector.FilmStripView._setImageData.bind(null, imageElement)) |
+ .then(returnElement); |
/** |
- * @param {!WebInspector.FilmStripModel.Frame} frame |
- * @return {!Promise<!Element>} |
+ * @return {!Element} |
*/ |
- createFrameElement: function(frame) |
- { |
- var time = frame.timestamp; |
- var element = createElementWithClass("div", "frame"); |
- element.title = WebInspector.UIString("Doubleclick to zoom image. Click to view preceding requests."); |
- element.createChild("div", "time").textContent = Number.millisToString(time - this._zeroTime); |
- var imageElement = element.createChild("div", "thumbnail").createChild("img"); |
- element.addEventListener("mousedown", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameSelected, time), false); |
- element.addEventListener("mouseenter", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameEnter, time), false); |
- element.addEventListener("mouseout", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameExit, time), false); |
- element.addEventListener("dblclick", this._onDoubleClick.bind(this, frame), false); |
- |
- return frame.imageDataPromise().then(WebInspector.FilmStripView._setImageData.bind(null, imageElement)).then(returnElement); |
- /** |
- * @return {!Element} |
- */ |
- function returnElement() |
- { |
- return element; |
- } |
- }, |
- |
+ function returnElement() { |
+ return element; |
+ } |
+ } |
+ |
+ /** |
+ * @param {number} time |
+ * @return {!WebInspector.FilmStripModel.Frame} |
+ */ |
+ frameByTime(time) { |
/** |
* @param {number} time |
- * @return {!WebInspector.FilmStripModel.Frame} |
- */ |
- frameByTime: function(time) |
- { |
- /** |
- * @param {number} time |
- * @param {!WebInspector.FilmStripModel.Frame} frame |
- * @return {number} |
- */ |
- function comparator(time, frame) |
- { |
- return time - frame.timestamp; |
- } |
- // Using the first frame to fill the interval between recording start |
- // and a moment the frame is taken. |
- var frames = this._model.frames(); |
- var index = Math.max(frames.upperBound(time, comparator) - 1, 0); |
- return frames[index]; |
- }, |
- |
- update: function() |
- { |
- if (!this._model) |
- return; |
- var frames = this._model.frames(); |
- if (!frames.length) |
- return; |
- |
- if (this._mode === WebInspector.FilmStripView.Modes.FrameBased) { |
- Promise.all(frames.map(this.createFrameElement.bind(this))).then(appendElements.bind(this)); |
- return; |
- } |
- |
- var width = this.contentElement.clientWidth; |
- var scale = this._spanTime / width; |
- this.createFrameElement(frames[0]).then(continueWhenFrameImageLoaded.bind(this)); // Calculate frame width basing on the first frame. |
- |
- /** |
- * @this {WebInspector.FilmStripView} |
- * @param {!Element} element0 |
- */ |
- function continueWhenFrameImageLoaded(element0) |
- { |
- var frameWidth = Math.ceil(WebInspector.measurePreferredSize(element0, this.contentElement).width); |
- if (!frameWidth) |
- return; |
- |
- var promises = []; |
- for (var pos = frameWidth; pos < width; pos += frameWidth) { |
- var time = pos * scale + this._zeroTime; |
- promises.push(this.createFrameElement(this.frameByTime(time)).then(fixWidth)); |
- } |
- Promise.all(promises).then(appendElements.bind(this)); |
- /** |
- * @param {!Element} element |
- * @return {!Element} |
- */ |
- function fixWidth(element) |
- { |
- element.style.width = frameWidth + "px"; |
- return element; |
- } |
- } |
- |
- /** |
- * @param {!Array.<!Element>} elements |
- * @this {WebInspector.FilmStripView} |
- */ |
- function appendElements(elements) |
- { |
- this.contentElement.removeChildren(); |
- for (var i = 0; i < elements.length; ++i) |
- this.contentElement.appendChild(elements[i]); |
- } |
- }, |
- |
- /** |
- * @override |
- */ |
- onResize: function() |
- { |
- if (this._mode === WebInspector.FilmStripView.Modes.FrameBased) |
- return; |
- this.update(); |
- }, |
- |
- /** |
- * @param {string} eventName |
- * @param {number} timestamp |
+ * @param {!WebInspector.FilmStripModel.Frame} frame |
+ * @return {number} |
*/ |
- _onMouseEvent: function(eventName, timestamp) |
- { |
- this.dispatchEventToListeners(eventName, timestamp); |
- }, |
+ function comparator(time, frame) { |
+ return time - frame.timestamp; |
+ } |
+ // Using the first frame to fill the interval between recording start |
+ // and a moment the frame is taken. |
+ var frames = this._model.frames(); |
+ var index = Math.max(frames.upperBound(time, comparator) - 1, 0); |
+ return frames[index]; |
+ } |
+ |
+ update() { |
+ if (!this._model) |
+ return; |
+ var frames = this._model.frames(); |
+ if (!frames.length) |
+ return; |
+ |
+ if (this._mode === WebInspector.FilmStripView.Modes.FrameBased) { |
+ Promise.all(frames.map(this.createFrameElement.bind(this))).then(appendElements.bind(this)); |
+ return; |
+ } |
+ |
+ var width = this.contentElement.clientWidth; |
+ var scale = this._spanTime / width; |
+ this.createFrameElement(frames[0]).then( |
+ continueWhenFrameImageLoaded.bind(this)); // Calculate frame width basing on the first frame. |
/** |
- * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame |
+ * @this {WebInspector.FilmStripView} |
+ * @param {!Element} element0 |
*/ |
- _onDoubleClick: function(filmStripFrame) |
- { |
- new WebInspector.FilmStripView.Dialog(filmStripFrame, this._zeroTime); |
- }, |
- |
- reset: function() |
- { |
- this._zeroTime = 0; |
- this.contentElement.removeChildren(); |
- this.contentElement.appendChild(this._statusLabel); |
- }, |
+ function continueWhenFrameImageLoaded(element0) { |
+ var frameWidth = Math.ceil(WebInspector.measurePreferredSize(element0, this.contentElement).width); |
+ if (!frameWidth) |
+ return; |
+ |
+ var promises = []; |
+ for (var pos = frameWidth; pos < width; pos += frameWidth) { |
+ var time = pos * scale + this._zeroTime; |
+ promises.push(this.createFrameElement(this.frameByTime(time)).then(fixWidth)); |
+ } |
+ Promise.all(promises).then(appendElements.bind(this)); |
+ /** |
+ * @param {!Element} element |
+ * @return {!Element} |
+ */ |
+ function fixWidth(element) { |
+ element.style.width = frameWidth + 'px'; |
+ return element; |
+ } |
+ } |
/** |
- * @param {string} text |
+ * @param {!Array.<!Element>} elements |
+ * @this {WebInspector.FilmStripView} |
*/ |
- setStatusText: function(text) |
- { |
- this._statusLabel.textContent = text; |
- }, |
+ function appendElements(elements) { |
+ this.contentElement.removeChildren(); |
+ for (var i = 0; i < elements.length; ++i) |
+ this.contentElement.appendChild(elements[i]); |
+ } |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onResize() { |
+ if (this._mode === WebInspector.FilmStripView.Modes.FrameBased) |
+ return; |
+ this.update(); |
+ } |
+ |
+ /** |
+ * @param {string} eventName |
+ * @param {number} timestamp |
+ */ |
+ _onMouseEvent(eventName, timestamp) { |
+ this.dispatchEventToListeners(eventName, timestamp); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame |
+ */ |
+ _onDoubleClick(filmStripFrame) { |
+ new WebInspector.FilmStripView.Dialog(filmStripFrame, this._zeroTime); |
+ } |
+ |
+ reset() { |
+ this._zeroTime = 0; |
+ this.contentElement.removeChildren(); |
+ this.contentElement.appendChild(this._statusLabel); |
+ } |
+ |
+ /** |
+ * @param {string} text |
+ */ |
+ setStatusText(text) { |
+ this._statusLabel.textContent = text; |
+ } |
+}; |
- __proto__: WebInspector.HBox.prototype |
+/** @enum {symbol} */ |
+WebInspector.FilmStripView.Events = { |
+ FrameSelected: Symbol('FrameSelected'), |
+ FrameEnter: Symbol('FrameEnter'), |
+ FrameExit: Symbol('FrameExit'), |
}; |
-/** |
- * @param {!Element} imageElement |
- * @param {?string} data |
- */ |
-WebInspector.FilmStripView._setImageData = function(imageElement, data) |
-{ |
- if (data) |
- imageElement.src = "data:image/jpg;base64," + data; |
+WebInspector.FilmStripView.Modes = { |
+ TimeBased: 'TimeBased', |
+ FrameBased: 'FrameBased' |
}; |
+ |
/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
- * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame |
- * @param {number=} zeroTime |
+ * @unrestricted |
*/ |
-WebInspector.FilmStripView.Dialog = function(filmStripFrame, zeroTime) |
-{ |
- WebInspector.VBox.call(this, true); |
- this.registerRequiredCSS("components_lazy/filmStripDialog.css"); |
- this.contentElement.classList.add("filmstrip-dialog"); |
+WebInspector.FilmStripView.Dialog = class extends WebInspector.VBox { |
+ /** |
+ * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame |
+ * @param {number=} zeroTime |
+ */ |
+ constructor(filmStripFrame, zeroTime) { |
+ super(true); |
+ this.registerRequiredCSS('components_lazy/filmStripDialog.css'); |
+ this.contentElement.classList.add('filmstrip-dialog'); |
this.contentElement.tabIndex = 0; |
this._frames = filmStripFrame.model().frames(); |
this._index = filmStripFrame.index; |
this._zeroTime = zeroTime || filmStripFrame.model().zeroTime(); |
- this._imageElement = this.contentElement.createChild("img"); |
- var footerElement = this.contentElement.createChild("div", "filmstrip-dialog-footer"); |
- footerElement.createChild("div", "flex-auto"); |
- var prevButton = createTextButton("\u25C0", this._onPrevFrame.bind(this), undefined, WebInspector.UIString("Previous frame")); |
+ this._imageElement = this.contentElement.createChild('img'); |
+ var footerElement = this.contentElement.createChild('div', 'filmstrip-dialog-footer'); |
+ footerElement.createChild('div', 'flex-auto'); |
+ var prevButton = |
+ createTextButton('\u25C0', this._onPrevFrame.bind(this), undefined, WebInspector.UIString('Previous frame')); |
footerElement.appendChild(prevButton); |
- this._timeLabel = footerElement.createChild("div", "filmstrip-dialog-label"); |
- var nextButton = createTextButton("\u25B6", this._onNextFrame.bind(this), undefined, WebInspector.UIString("Next frame")); |
+ this._timeLabel = footerElement.createChild('div', 'filmstrip-dialog-label'); |
+ var nextButton = |
+ createTextButton('\u25B6', this._onNextFrame.bind(this), undefined, WebInspector.UIString('Next frame')); |
footerElement.appendChild(nextButton); |
- footerElement.createChild("div", "flex-auto"); |
+ footerElement.createChild('div', 'flex-auto'); |
- this.contentElement.addEventListener("keydown", this._keyDown.bind(this), false); |
+ this.contentElement.addEventListener('keydown', this._keyDown.bind(this), false); |
this.setDefaultFocusedElement(this.contentElement); |
this._render(); |
-}; |
+ } |
+ |
+ _resize() { |
+ if (!this._dialog) { |
+ this._dialog = new WebInspector.Dialog(); |
+ this.show(this._dialog.element); |
+ this._dialog.setWrapsContent(true); |
+ this._dialog.show(); |
+ } |
+ this._dialog.contentResized(); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _keyDown(event) { |
+ switch (event.key) { |
+ case 'ArrowLeft': |
+ if (WebInspector.isMac() && event.metaKey) |
+ this._onFirstFrame(); |
+ else |
+ this._onPrevFrame(); |
+ break; |
+ |
+ case 'ArrowRight': |
+ if (WebInspector.isMac() && event.metaKey) |
+ this._onLastFrame(); |
+ else |
+ this._onNextFrame(); |
+ break; |
+ |
+ case 'Home': |
+ this._onFirstFrame(); |
+ break; |
+ |
+ case 'End': |
+ this._onLastFrame(); |
+ break; |
+ } |
+ } |
+ |
+ _onPrevFrame() { |
+ if (this._index > 0) |
+ --this._index; |
+ this._render(); |
+ } |
-WebInspector.FilmStripView.Dialog.prototype = { |
- _resize: function() |
- { |
- if (!this._dialog) { |
- this._dialog = new WebInspector.Dialog(); |
- this.show(this._dialog.element); |
- this._dialog.setWrapsContent(true); |
- this._dialog.show(); |
- } |
- this._dialog.contentResized(); |
- }, |
+ _onNextFrame() { |
+ if (this._index < this._frames.length - 1) |
+ ++this._index; |
+ this._render(); |
+ } |
- /** |
- * @param {!Event} event |
- */ |
- _keyDown: function(event) |
- { |
- switch (event.key) { |
- case "ArrowLeft": |
- if (WebInspector.isMac() && event.metaKey) |
- this._onFirstFrame(); |
- else |
- this._onPrevFrame(); |
- break; |
- |
- case "ArrowRight": |
- if (WebInspector.isMac() && event.metaKey) |
- this._onLastFrame(); |
- else |
- this._onNextFrame(); |
- break; |
- |
- case "Home": |
- this._onFirstFrame(); |
- break; |
- |
- case "End": |
- this._onLastFrame(); |
- break; |
- } |
- }, |
- |
- _onPrevFrame: function() |
- { |
- if (this._index > 0) |
- --this._index; |
- this._render(); |
- }, |
- |
- _onNextFrame: function() |
- { |
- if (this._index < this._frames.length - 1) |
- ++this._index; |
- this._render(); |
- }, |
- |
- _onFirstFrame: function() |
- { |
- this._index = 0; |
- this._render(); |
- }, |
- |
- _onLastFrame: function() |
- { |
- this._index = this._frames.length - 1; |
- this._render(); |
- }, |
+ _onFirstFrame() { |
+ this._index = 0; |
+ this._render(); |
+ } |
- /** |
- * @return {!Promise<undefined>} |
- */ |
- _render: function() |
- { |
- var frame = this._frames[this._index]; |
- this._timeLabel.textContent = Number.millisToString(frame.timestamp - this._zeroTime); |
- return frame.imageDataPromise().then(WebInspector.FilmStripView._setImageData.bind(null, this._imageElement)).then(this._resize.bind(this)); |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
+ _onLastFrame() { |
+ this._index = this._frames.length - 1; |
+ this._render(); |
+ } |
+ |
+ /** |
+ * @return {!Promise<undefined>} |
+ */ |
+ _render() { |
+ var frame = this._frames[this._index]; |
+ this._timeLabel.textContent = Number.millisToString(frame.timestamp - this._zeroTime); |
+ return frame.imageDataPromise() |
+ .then(WebInspector.FilmStripView._setImageData.bind(null, this._imageElement)) |
+ .then(this._resize.bind(this)); |
+ } |
}; |