зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1210796 - Part 15: Displays the animation detail if the previously displayed animation is included in timeline list after refresh all UI. r=pbro
MozReview-Commit-ID: FiltMpwd4VY --HG-- extra : rebase_source : 607211ac1e205213961f1e1e848a338f6eb0eab6
This commit is contained in:
Родитель
2cf17a6f91
Коммит
f3194a4a0b
|
@ -258,6 +258,7 @@ AnimationsTimeline.prototype = {
|
||||||
this.animatedPropertiesEl = null;
|
this.animatedPropertiesEl = null;
|
||||||
this.animationDetailCloseButton = null;
|
this.animationDetailCloseButton = null;
|
||||||
this.animationRootEl = null;
|
this.animationRootEl = null;
|
||||||
|
this.selectedAnimation = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -277,6 +278,11 @@ AnimationsTimeline.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
unrender: function () {
|
unrender: function () {
|
||||||
|
this.unrenderButLeaveDetailsComponent();
|
||||||
|
this.details.unrender();
|
||||||
|
},
|
||||||
|
|
||||||
|
unrenderButLeaveDetailsComponent: function () {
|
||||||
for (let animation of this.animations) {
|
for (let animation of this.animations) {
|
||||||
animation.off("changed", this.onAnimationStateChanged);
|
animation.off("changed", this.onAnimationStateChanged);
|
||||||
}
|
}
|
||||||
|
@ -284,7 +290,6 @@ AnimationsTimeline.prototype = {
|
||||||
TimeScale.reset();
|
TimeScale.reset();
|
||||||
this.destroySubComponents("targetNodes");
|
this.destroySubComponents("targetNodes");
|
||||||
this.destroySubComponents("timeBlocks");
|
this.destroySubComponents("timeBlocks");
|
||||||
this.details.unrender();
|
|
||||||
this.animationsEl.innerHTML = "";
|
this.animationsEl.innerHTML = "";
|
||||||
this.off("timeline-data-changed", this.onTimelineDataChanged);
|
this.off("timeline-data-changed", this.onTimelineDataChanged);
|
||||||
},
|
},
|
||||||
|
@ -337,9 +342,13 @@ AnimationsTimeline.prototype = {
|
||||||
const selectedAnimationEl = animationEls[index];
|
const selectedAnimationEl = animationEls[index];
|
||||||
selectedAnimationEl.classList.add("selected");
|
selectedAnimationEl.classList.add("selected");
|
||||||
this.animationRootEl.classList.add("animation-detail-visible");
|
this.animationRootEl.classList.add("animation-detail-visible");
|
||||||
yield this.details.render(animation);
|
if (animation !== this.details.animation) {
|
||||||
|
this.selectedAnimation = animation;
|
||||||
|
// Don't render if the detail displays same animation already.
|
||||||
|
yield this.details.render(animation);
|
||||||
|
this.animationAnimationNameEl.textContent = getFormattedAnimationTitle(animation);
|
||||||
|
}
|
||||||
this.onTimelineDataChanged(null, { time: this.currentTime || 0 });
|
this.onTimelineDataChanged(null, { time: this.currentTime || 0 });
|
||||||
this.animationAnimationNameEl.textContent = getFormattedAnimationTitle(animation);
|
|
||||||
this.emit("animation-selected", animation);
|
this.emit("animation-selected", animation);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
@ -421,7 +430,7 @@ AnimationsTimeline.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function (animations, documentCurrentTime) {
|
render: function (animations, documentCurrentTime) {
|
||||||
this.unrender();
|
this.unrenderButLeaveDetailsComponent();
|
||||||
|
|
||||||
this.animations = animations;
|
this.animations = animations;
|
||||||
if (!this.animations.length) {
|
if (!this.animations.length) {
|
||||||
|
@ -496,10 +505,21 @@ AnimationsTimeline.prototype = {
|
||||||
// To indicate the animation progress in AnimationDetails.
|
// To indicate the animation progress in AnimationDetails.
|
||||||
this.on("timeline-data-changed", this.onTimelineDataChanged);
|
this.on("timeline-data-changed", this.onTimelineDataChanged);
|
||||||
|
|
||||||
// Display animation's detail if there is only one animation.
|
// Display animation's detail if there is only one animation,
|
||||||
|
// or the previously displayed animation is included in timeline list.
|
||||||
if (this.animations.length === 1) {
|
if (this.animations.length === 1) {
|
||||||
this.onAnimationSelected(null, this.animations[0]);
|
this.onAnimationSelected(null, this.animations[0]);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
if (!this.animationRootEl.classList.contains("animation-detail-visible")) {
|
||||||
|
// Do nothing since the animation detail pane is closing now.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.animations.indexOf(this.selectedAnimation) >= 0) {
|
||||||
|
this.onAnimationSelected(null, this.selectedAnimation);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.onDetailCloseButtonClick();
|
||||||
},
|
},
|
||||||
|
|
||||||
isAtLeastOneAnimationPlaying: function () {
|
isAtLeastOneAnimationPlaying: function () {
|
||||||
|
|
|
@ -6,18 +6,24 @@
|
||||||
|
|
||||||
// Test for animations that have different starting time.
|
// Test for animations that have different starting time.
|
||||||
// We should check progress indicator working well even if the start time is not zero.
|
// We should check progress indicator working well even if the start time is not zero.
|
||||||
|
// Also, check that there is no duplication display.
|
||||||
|
|
||||||
add_task(function* () {
|
add_task(function* () {
|
||||||
yield addTab(URL_ROOT + "doc_delayed_starttime_animations.html");
|
yield addTab(URL_ROOT + "doc_delayed_starttime_animations.html");
|
||||||
const { panel } = yield openAnimationInspector();
|
const { panel } = yield openAnimationInspector();
|
||||||
yield setStyle(null, panel, "animation", "anim 100s", "#target2");
|
yield setStyleAndWaitForAnimationSelecting(panel, "animation", "anim 100s", "#target2");
|
||||||
yield setStyle(null, panel, "animation", "anim 100s", "#target3");
|
yield setStyleAndWaitForAnimationSelecting(panel, "animation", "anim 100s", "#target3");
|
||||||
yield setStyle(null, panel, "animation", "anim 100s", "#target4");
|
yield setStyleAndWaitForAnimationSelecting(panel, "animation", "anim 100s", "#target4");
|
||||||
yield setStyle(null, panel, "animation", "anim 100s", "#target5");
|
yield setStyleAndWaitForAnimationSelecting(panel, "animation", "anim 100s", "#target5");
|
||||||
|
|
||||||
yield clickOnAnimation(panel, 1);
|
|
||||||
const timelineComponent = panel.animationsTimelineComponent;
|
const timelineComponent = panel.animationsTimelineComponent;
|
||||||
const detailsComponent = timelineComponent.details;
|
const detailsComponent = timelineComponent.details;
|
||||||
|
const headers =
|
||||||
|
detailsComponent.containerEl.querySelectorAll(".animated-properties-header");
|
||||||
|
is(headers.length, 1, "There should be only one header in the details panel");
|
||||||
|
|
||||||
|
// Check indicator.
|
||||||
|
yield clickOnAnimation(panel, 1);
|
||||||
const progressIndicatorEl = detailsComponent.progressIndicatorEl;
|
const progressIndicatorEl = detailsComponent.progressIndicatorEl;
|
||||||
const startTime = detailsComponent.animation.state.previousStartTime;
|
const startTime = detailsComponent.animation.state.previousStartTime;
|
||||||
detailsComponent.indicateProgress(0);
|
detailsComponent.indicateProgress(0);
|
||||||
|
@ -36,3 +42,9 @@ add_task(function* () {
|
||||||
is(progressIndicatorEl.style.left, "0%",
|
is(progressIndicatorEl.style.left, "0%",
|
||||||
"The progress indicator position should be 0% at end of animation");
|
"The progress indicator position should be 0% at end of animation");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function* setStyleAndWaitForAnimationSelecting(panel, name, value, selector) {
|
||||||
|
const onSelecting = waitForAnimationSelecting(panel);
|
||||||
|
yield setStyle(null, panel, name, value, selector);
|
||||||
|
yield onSelecting;
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
// 3. Display after click on an animation.
|
// 3. Display after click on an animation.
|
||||||
// 4. Display from first time if displayed animation is only one.
|
// 4. Display from first time if displayed animation is only one.
|
||||||
// 5. Close the animation-detail element by clicking on close button.
|
// 5. Close the animation-detail element by clicking on close button.
|
||||||
|
// 6. Stay selected animation even if refresh all UI.
|
||||||
|
|
||||||
requestLongerTimeout(5);
|
requestLongerTimeout(5);
|
||||||
|
|
||||||
|
@ -57,4 +58,10 @@ add_task(function* () {
|
||||||
"animation-detail element should display");
|
"animation-detail element should display");
|
||||||
is(animationDetailEl.offsetHeight, previousHeight,
|
is(animationDetailEl.offsetHeight, previousHeight,
|
||||||
"The height of animation-detail should keep the height");
|
"The height of animation-detail should keep the height");
|
||||||
|
|
||||||
|
// 6. Stay selected animation even if refresh all UI.
|
||||||
|
yield selectNodeAndWaitForAnimations("#target1", inspector);
|
||||||
|
yield clickTimelineRewindButton(panel);
|
||||||
|
ok(animationDetailEl.querySelector(".property"),
|
||||||
|
"The property in animation-detail element should stay as is");
|
||||||
});
|
});
|
||||||
|
|
|
@ -40,8 +40,6 @@ add_task(function* () {
|
||||||
ok(!btn.classList.contains("paused"),
|
ok(!btn.classList.contains("paused"),
|
||||||
"Clicking the button once finite animations are done should restart them");
|
"Clicking the button once finite animations are done should restart them");
|
||||||
yield assertScrubberMoving(panel, true);
|
yield assertScrubberMoving(panel, true);
|
||||||
|
|
||||||
yield waitForAnimationSelecting(panel);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function waitForButtonPaused(btn) {
|
function waitForButtonPaused(btn) {
|
||||||
|
|
|
@ -475,8 +475,6 @@ function* setStyle(animation, panel, name, value, selector) {
|
||||||
propertyValue: value
|
propertyValue: value
|
||||||
});
|
});
|
||||||
yield onAnimationChanged;
|
yield onAnimationChanged;
|
||||||
const onSelected = animation ? waitForAnimationSelecting(panel) : Promise.resolve();
|
|
||||||
yield onSelected;
|
|
||||||
|
|
||||||
// Also wait for the target node previews to be loaded if the panel got
|
// Also wait for the target node previews to be loaded if the panel got
|
||||||
// refreshed as a result of this animation mutation.
|
// refreshed as a result of this animation mutation.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче