diff options
author | Sam Potts <sam@potts.es> | 2017-11-08 23:46:20 +1100 |
---|---|---|
committer | Sam Potts <sam@potts.es> | 2017-11-08 23:46:20 +1100 |
commit | bb66be98da5470e227703c4ebcfcbccba234a992 (patch) | |
tree | b45124f374117ff120acdf47fe15c838c8f9af20 /src | |
parent | c948e95adea876c7c43785fe904bedd22f9c307d (diff) | |
download | plyr-bb66be98da5470e227703c4ebcfcbccba234a992.tar.lz plyr-bb66be98da5470e227703c4ebcfcbccba234a992.tar.xz plyr-bb66be98da5470e227703c4ebcfcbccba234a992.zip |
Volume fixes and other tidy up work
Diffstat (limited to 'src')
-rw-r--r-- | src/js/defaults.js | 2 | ||||
-rw-r--r-- | src/js/listeners.js | 2 | ||||
-rw-r--r-- | src/js/plugins/vimeo.js | 10 | ||||
-rw-r--r-- | src/js/plugins/youtube.js | 19 | ||||
-rw-r--r-- | src/js/plyr.js | 71 | ||||
-rw-r--r-- | src/js/ui.js | 13 |
6 files changed, 68 insertions, 49 deletions
diff --git a/src/js/defaults.js b/src/js/defaults.js index 64783aed..59ac1d0c 100644 --- a/src/js/defaults.js +++ b/src/js/defaults.js @@ -63,7 +63,7 @@ const defaults = { // Speed default and options to display speed: { - default: 1, + selected: 1, options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], }, diff --git a/src/js/listeners.js b/src/js/listeners.js index cebfb0fa..31135a38 100644 --- a/src/js/listeners.js +++ b/src/js/listeners.js @@ -404,7 +404,7 @@ const listeners = { // Mute utils.on(this.elements.buttons.mute, 'click', event => proxy(event, 'mute', () => { - this.muted = 'toggle'; + this.muted = !this.muted; }) ); diff --git a/src/js/plugins/vimeo.js b/src/js/plugins/vimeo.js index f35cc927..1ad26bf4 100644 --- a/src/js/plugins/vimeo.js +++ b/src/js/plugins/vimeo.js @@ -119,20 +119,20 @@ const vimeo = { }); // Playback speed - let { playbackRate } = player.media; + let speed = player.config.speed.selected; Object.defineProperty(player.media, 'playbackRate', { get() { - return playbackRate; + return speed; }, set(input) { - playbackRate = input; + speed = input; player.embed.setPlaybackRate(input); utils.dispatchEvent.call(player, player.media, 'ratechange'); }, }); // Volume - let { volume } = player.media; + let { volume } = player.config; Object.defineProperty(player.media, 'volume', { get() { return volume; @@ -156,7 +156,7 @@ const vimeo = { }); // Loop - let { loop } = player.media; + let { loop } = player.config; Object.defineProperty(player.media, 'loop', { get() { return loop; diff --git a/src/js/plugins/youtube.js b/src/js/plugins/youtube.js index 5ff45ca8..440890e7 100644 --- a/src/js/plugins/youtube.js +++ b/src/js/plugins/youtube.js @@ -123,10 +123,9 @@ const youtube = { }; player.media.duration = instance.getDuration(); player.media.paused = true; - player.media.muted = instance.isMuted(); - player.media.currentTime = 0; // Seeking + player.media.currentTime = 0; Object.defineProperty(player.media, 'currentTime', { get() { return Number(instance.getCurrentTime()); @@ -153,6 +152,21 @@ const youtube = { }, }); + // Quality + Object.defineProperty(player.media, 'quality', { + get() { + return instance.getPlaybackQuality(); + }, + set(input) { + // Trigger request event + utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, { + quality: input, + }); + + instance.setPlaybackQuality(input); + }, + }); + // Volume let volume = instance.getVolume() / 100; Object.defineProperty(player.media, 'volume', { @@ -167,6 +181,7 @@ const youtube = { }); // Muted + player.media.muted = instance.isMuted(); Object.defineProperty(player.media, 'muted', { get() { return instance.isMuted(); diff --git a/src/js/plyr.js b/src/js/plyr.js index 16a3a2e0..ca56b709 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -401,13 +401,14 @@ class Plyr { volume = min; } + // Update config + this.config.volume = volume; + // Set the player volume this.media.volume = volume; // Toggle muted state - if (volume === 0) { - this.muted = true; - } + this.muted = volume === 0; } /** @@ -434,11 +435,14 @@ class Plyr { // Toggle mute set muted(mute) { // If the method is called without parameter, toggle based on current value - const toggle = utils.is.boolean(mute) ? mute : !this.media.muted; + const toggle = utils.is.boolean(mute) ? mute : this.config.muted; // Set button state utils.toggleState(this.elements.buttons.mute, toggle); + // Update config + this.config.muted = toggle; + // Set mute on the player this.media.muted = toggle; } @@ -449,10 +453,15 @@ class Plyr { // Playback speed set speed(input) { - // Load speed from storage or default value - let speed = utils.is.number(input) - ? input - : parseFloat(storage.get.call(this).speed || this.speed.selected || this.config.speed.default); + let speed = null; + + if (utils.is.number(input)) { + speed = input; + } else if (utils.is.number(storage.get.call(this).speed)) { + ({ speed } = storage.get.call(this)); + } else { + speed = this.config.speed.selected; + } // Set min/max if (speed < 0.1) { @@ -467,6 +476,9 @@ class Plyr { return; } + // Update config + this.config.speed.selected = speed; + // Set media speed this.media.playbackRate = speed; } @@ -477,43 +489,30 @@ class Plyr { // Set playback quality set quality(input) { - // Load speed from storage or default value - const quality = utils.is.string(input) - ? input - : parseFloat(storage.get.call(this).quality || this.config.quality.selected); + let quality = null; + + if (utils.is.string(input)) { + quality = input; + } else if (utils.is.number(storage.get.call(this).speed)) { + ({ quality } = storage.get.call(this)); + } else { + quality = this.config.quality.selected; + } - if (!this.config.quality.options.includes(quality)) { + if (!this.options.quality.includes(quality)) { this.warn(`Unsupported quality option (${quality})`); return; } - // Set media speed - switch (this.type) { - case 'youtube': - this.utils.dispatchEvent.call(this, this.media, 'qualityrequested', false, { - quality, - }); - - this.embed.setPlaybackQuality(quality); - - break; + // Update config + this.config.quality.selected = quality; - default: - this.warn('Quality options are only available for YouTube'); - break; - } + // Set quality + this.media.quality = quality; } get quality() { - // Set media speed - switch (this.type) { - case 'youtube': - return this.embed.getPlaybackQuality(); - - default: - this.warn('Quality options are only available for YouTube'); - return null; - } + return this.media.quality; } // Toggle loop diff --git a/src/js/ui.js b/src/js/ui.js index c0db3f8f..6486b9fb 100644 --- a/src/js/ui.js +++ b/src/js/ui.js @@ -69,16 +69,21 @@ const ui = { // Captions captions.setup.call(this); - // Set volume + // Reset volume this.volume = null; - // this.muted = null; - // Set playback speed + // Reset mute state + this.muted = null; + + // Reset speed this.speed = null; - // Set loop + // Reset loop state this.loop = null; + // Reset quality options + this.options.quality = []; + // Reset time display ui.timeUpdate.call(this); |