Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1178)

Unified Diff: Source/devtools/front_end/elements/AnimationSection.js

Issue 620783002: Devtools Animations: Basic animation inspection & control in Styles pane (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/devtools.gypi ('k') | Source/devtools/front_end/elements/StylesSidebarPane.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/elements/AnimationSection.js
diff --git a/Source/devtools/front_end/elements/AnimationSection.js b/Source/devtools/front_end/elements/AnimationSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..a51b0c946b710823c15fe2dc19ea24bfa444be64
--- /dev/null
+++ b/Source/devtools/front_end/elements/AnimationSection.js
@@ -0,0 +1,128 @@
+/**
apavlov 2014/10/01 07:39:36 The [short 3-line] copyright notice is missing
samli 2014/10/02 08:30:33 Done.
+ * @constructor
+ * @param {?WebInspector.DOMModel.AnimationPlayer} animationPlayer
+ */
+WebInspector.AnimationSection = function(animationPlayer)
+{
+ var section = this;
apavlov 2014/10/01 07:39:35 This should go just before the createCurrentTimeSl
samli 2014/10/02 08:30:33 Done.
+ this.element = document.createElement("div");
+ this.element.className = "styles-section";
+ this.element._section = this;
+ this.propertiesElement = document.createElement("div");
+ this.player = animationPlayer;
apavlov 2014/10/01 07:39:36 We typically assign the constructor arguments firs
samli 2014/10/02 08:30:33 Done.
+ this.animationControls = createAnimationControls();
+ this.element.appendChild(this.animationControls);
+ this.element.appendChild(this.propertiesElement);
+
+ /**
+ * @return {!Element}
+ */
+ function createCurrentTimeSlider() {
apavlov 2014/10/01 07:39:35 Brace on the next line. I also think this should b
samli 2014/10/02 08:30:34 Done.
+ var slider = document.createElement("input");
+ var iterationDuration = section.player.animation().duration();
+ var iterationCount = section.player.animation().iterationCount();
+ slider.type = "range";
apavlov 2014/10/01 07:39:35 It's best to glue these to the "var slider" declar
samli 2014/10/02 08:30:33 Done.
+ slider.min = 0;
+ slider.step = 0.01;
+
+ if (!iterationCount) {
+ // Infinite iterations
+ slider.max = iterationDuration;
+ slider.value = section.player.currentTime() % iterationDuration;
+ } else {
+ slider.max = iterationCount * iterationDuration;
+ slider.value = section.player.currentTime();
+ }
+
+ slider.addEventListener('input', function (e) {
apavlov 2014/10/01 07:39:35 DevTools use double quotes for string literals. T
samli 2014/10/02 08:30:33 Done.
+ section.player.setCurrentTime(parseFloat(e.target.value), updateAnimationPlayer);
+ });
+ requestAnimationFrame(updateCurrentTime);
+ return slider;
+ }
+
+ /**
+ * @return {!Element}
+ */
+ function createAnimationControls() {
apavlov 2014/10/01 07:39:35 Brace on the next line. Ditto for this becoming a
samli 2014/10/02 08:30:33 Done.
+ var controls = document.createElement("div");
+
+ // Pause/play button
+ var pausePlayButton = document.createElement("button");
apavlov 2014/10/01 07:39:35 Not sure, but you might want to take a look at Web
samli 2014/10/02 08:30:33 Ack. Going to look into this tomorrow.
+ if (section.player.paused()) {
apavlov 2014/10/01 07:39:36 no braces around single-line blocks
samli 2014/10/02 08:30:33 Done.
+ pausePlayButton.textContent = WebInspector.UIString("Play");
+ } else {
apavlov 2014/10/01 07:39:36 ditto
samli 2014/10/02 08:30:34 Done.
+ pausePlayButton.textContent = WebInspector.UIString("Pause");
+ }
+ pausePlayButton.addEventListener("click", function () {
apavlov 2014/10/01 07:39:35 Please use a named nested function
samli 2014/10/02 08:30:33 Done.
+ if (section.player.paused()) {
+ section.player.play(updateAnimationPlayer);
+ pausePlayButton.textContent = WebInspector.UIString("Pause");
+ } else {
+ section.player.pause(updateAnimationPlayer);
+ pausePlayButton.textContent = WebInspector.UIString("Play");
+ }
+ });
+ controls.appendChild(pausePlayButton);
+
+ // Current time slider
+ section.currentTimeSlider = createCurrentTimeSlider();
+ controls.appendChild(section.currentTimeSlider);
+
+ return controls;
+ }
+
+ /**
+ * @param {?WebInspector.DOMModel.AnimationPlayer} animationPlayer
+ */
+ function updateAnimationPlayer(animationPlayer) {
apavlov 2014/10/01 07:39:35 brace on the next line
samli 2014/10/02 08:30:33 Done.
+ if (animationPlayer)
apavlov 2014/10/01 07:39:36 Is this missing braces around the next two lines o
samli 2014/10/02 08:30:33 Acknowledged.
+ section.player = animationPlayer;
+ requestAnimationFrame(updateCurrentTime);
+ }
+
+ function updateCurrentTime() {
apavlov 2014/10/01 07:39:35 brace on the next line
samli 2014/10/02 08:30:33 Done.
+ section.player.getCurrentState(function (currentTime, isRunning) {
apavlov 2014/10/01 07:39:36 Annotated named function, please
samli 2014/10/02 08:30:33 Done.
+ section.currentTimeSlider.value = section.player.animation().iterationCount() == null ? currentTime % section.player.animation().duration() : currentTime;
+ if (isRunning) {
apavlov 2014/10/01 07:39:35 no braces around single-line blocks
samli 2014/10/02 08:30:34 Done.
+ requestAnimationFrame(updateCurrentTime);
+ }
+ });
+ }
+}
+
+WebInspector.AnimationSection.prototype = {
+ get player()
apavlov 2014/10/01 07:39:36 We do not use getters and setters in the new code.
samli 2014/10/02 08:30:33 Done.
+ {
+ return this._animationPlayer;
+ },
+ set player(p)
apavlov 2014/10/01 07:39:35 blank line above
samli 2014/10/02 08:30:33 Done.
+ {
+ if (p === this._animationPlayer)
+ return;
+
+ this._animationPlayer = p;
+
+ if (p instanceof WebInspector.DOMModel.AnimationPlayer) {
+ this.propertiesElement.removeChildren();
+ var animationObject = {
+ 'paused': p.paused(),
apavlov 2014/10/01 07:39:36 Double-quotes for string literals
samli 2014/10/02 08:30:33 Done.
+ 'finished': p.finished(),
+ 'start-time': p.startTime(),
+ 'player-playback-rate': p.playbackRate(),
+ 'id': p.sequenceNumber(),
+ 'start-delay': p.animation().startDelay(),
+ 'playback-rate': p.animation().playbackRate(),
+ 'iteration-start': p.animation().iterationStart(),
+ 'iteration-count': p.animation().iterationCount(),
+ 'duration': p.animation().duration(),
+ 'direction': p.animation().direction(),
+ 'fill-mode': p.animation().fillMode(),
+ 'time-fraction': p.animation().timeFraction()
+ };
+ var obj = WebInspector.RemoteObject.fromLocalObject(animationObject);
+ var section = new WebInspector.ObjectPropertiesSection(obj, WebInspector.UIString("Animation Properties"), undefined, null, undefined, undefined);
apavlov 2014/10/01 07:39:36 You only need the first two arguments here. Please
samli 2014/10/02 08:30:33 Done.
+ this.propertiesElement.appendChild(section.element);
+ }
+ },
apavlov 2014/10/01 07:39:35 extra comma
samli 2014/10/02 08:30:33 Done.
+}
« no previous file with comments | « Source/devtools/devtools.gypi ('k') | Source/devtools/front_end/elements/StylesSidebarPane.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698