Skip to content

Commit

Permalink
feat: reset player ui on Player#reset (#5684)
Browse files Browse the repository at this point in the history
Fixes #4683
  • Loading branch information
reeckset authored and gkatsev committed Jan 8, 2019
1 parent dd63cf9 commit 175f773
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/js/control-bar/time-controls/remaining-time-display.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class RemainingTimeDisplay extends TimeDisplay {
* @listens Player#durationchange
*/
updateContent(event) {
if (!this.player_.duration()) {
if (typeof this.player_.duration() !== 'number') {
return;
}

Expand Down
36 changes: 36 additions & 0 deletions src/js/player.js
Original file line number Diff line number Diff line change
Expand Up @@ -2996,11 +2996,47 @@ class Player extends Component {
this.poster('');
this.loadTech_(this.options_.techOrder[0], null);
this.techCall_('reset');
this.resetControlBarUI_();
if (isEvented(this)) {
this.trigger('playerreset');
}
}

/**
* Reset Control Bar's UI by calling sub-methods that reset
* all of Control Bar's components
*/
resetControlBarUI_() {
this.resetProgressBar_();
this.resetPlaybackRate_();
this.resetVolumeBar_();
}

/**
* Reset tech's progress so progress bar is reset in the UI
*/
resetProgressBar_() {
this.currentTime(0);
this.controlBar.durationDisplay.updateContent();
this.controlBar.remainingTimeDisplay.updateContent();
}

/**
* Reset Playback ratio
*/
resetPlaybackRate_() {
this.playbackRate(this.defaultPlaybackRate());
this.handleTechRateChange_();
}

/**
* Reset Volume bar
*/
resetVolumeBar_() {
this.volume(1.0);
this.trigger('volumechange');
}

/**
* Returns all of the current source objects.
*
Expand Down
2 changes: 2 additions & 0 deletions test/unit/player.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1444,6 +1444,7 @@ QUnit.test('player#reset loads the Html5 tech and then techCalls reset', functio
techCall_(method) {
techCallMethod = method;
},
resetControlBarUI_() {},
poster() {}
};

Expand Down Expand Up @@ -1471,6 +1472,7 @@ QUnit.test('player#reset loads the first item in the techOrder and then techCall
techCall_(method) {
techCallMethod = method;
},
resetControlBarUI_() {},
poster() {}
};

Expand Down
55 changes: 55 additions & 0 deletions test/unit/reset-ui.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/* eslint-env qunit */
import TestHelpers from './test-helpers.js';
QUnit.module('player reset-ui');

QUnit.test('Calling resetProgressBar player method should place progress bar at 0% width', function(assert) {
const player = TestHelpers.makePlayer();

player.currentTime(20);
player.trigger('timeupdate');
player.resetProgressBar_();
assert.equal(
player.controlBar.progressControl.seekBar.playProgressBar.el().offsetWidth, 0,
'progress bar is reset to width 0%'
);
assert.equal(
player.currentTime(), 0,
'player current time is 0'
);
player.dispose();
});

QUnit.test('Calling resetPlaybackRate player method should place play rate at 1x', function(assert) {
const player = TestHelpers.makePlayer({techOrder: ['html5']});

player.playbackRate(2);
player.handleTechRateChange_();
player.resetPlaybackRate_();
const defaultRate = player.defaultPlaybackRate();

assert.equal(
player.controlBar.playbackRateMenuButton.labelEl_.textContent, defaultRate + 'x',
'Playback rate is the default one on the UI'
);
assert.equal(
player.playbackRate(), defaultRate,
'Playback rate is the default one on the player object'
);
player.dispose();
});

QUnit.test('Calling resetVolumeBar player method should reset volume bar', function(assert) {
const player = TestHelpers.makePlayer({ techOrder: ['html5'] });

player.volume(0.5);

player.trigger('volumechange');

assert.equal(player.controlBar.volumePanel.volumeControl.volumeBar.el_.getAttribute('aria-valuenow'), 50, 'UI value of VolumeBar is 50');

player.resetVolumeBar_();

assert.equal(player.controlBar.volumePanel.volumeControl.volumeBar.el_.getAttribute('aria-valuenow'), 100, 'UI value of VolumeBar is 100');

player.dispose();
});

0 comments on commit 175f773

Please sign in to comment.