diff options
author | Sam <sam@potts.es> | 2018-01-04 13:43:56 +1100 |
---|---|---|
committer | Sam <sam@potts.es> | 2018-01-04 13:43:56 +1100 |
commit | 92cb9e22e24d52e1843a5865651f7b2c5a00d47a (patch) | |
tree | bc626af1855f08504e9ee09fdaa6753d7bbf59c4 /src | |
parent | 6b9106ddb1416e59f2dde05039c7ebad15ee8fa7 (diff) | |
download | plyr-92cb9e22e24d52e1843a5865651f7b2c5a00d47a.tar.lz plyr-92cb9e22e24d52e1843a5865651f7b2c5a00d47a.tar.xz plyr-92cb9e22e24d52e1843a5865651f7b2c5a00d47a.zip |
Started on error handling
Diffstat (limited to 'src')
-rw-r--r-- | src/js/defaults.js | 1 | ||||
-rw-r--r-- | src/js/listeners.js | 8 | ||||
-rw-r--r-- | src/js/plyr.js | 9 | ||||
-rw-r--r-- | src/js/ui.js | 25 | ||||
-rw-r--r-- | src/sass/plyr.scss | 1 | ||||
-rw-r--r-- | src/sass/settings/captions.scss | 4 | ||||
-rw-r--r-- | src/sass/settings/type.scss | 2 | ||||
-rw-r--r-- | src/sass/states/error.scss | 25 | ||||
-rw-r--r-- | src/sass/states/fullscreen.scss | 7 |
9 files changed, 77 insertions, 5 deletions
diff --git a/src/js/defaults.js b/src/js/defaults.js index b7dcbf4f..15fadac7 100644 --- a/src/js/defaults.js +++ b/src/js/defaults.js @@ -305,6 +305,7 @@ const defaults = { stopped: 'plyr--stopped', playing: 'plyr--playing', loading: 'plyr--loading', + error: 'plyr--has-error', hover: 'plyr--hover', tooltip: 'plyr__tooltip', hidden: 'plyr__sr-only', diff --git a/src/js/listeners.js b/src/js/listeners.js index 0d57f5e1..b3ccc1c6 100644 --- a/src/js/listeners.js +++ b/src/js/listeners.js @@ -221,6 +221,11 @@ const listeners = { utils.on(document, fullscreen.eventType, event => { this.toggleFullscreen(event); }); + + // Fullscreen toggle on double click + utils.on(this.elements.container, 'dblclick', event => { + this.toggleFullscreen(event); + }); } }, @@ -263,6 +268,9 @@ const listeners = { // Loading utils.on(this.media, 'stalled waiting canplay seeked playing', event => ui.checkLoading.call(this, event)); + // Check if media failed to load + // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event)); + // Click video if (this.supported.ui && this.config.clickToPlay && !this.isAudio) { // Re-fetch the wrapper diff --git a/src/js/plyr.js b/src/js/plyr.js index 7766cc47..e6df286c 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -35,7 +35,11 @@ let scrollPosition = { class Plyr { constructor(target, options) { this.timers = {}; + + // State this.ready = false; + this.loading = false; + this.failed = false; // Set the media element this.media = target; @@ -809,6 +813,11 @@ class Plyr { * @param {event} event */ toggleFullscreen(event) { + // Video only + if (this.isAudio) { + return; + } + // Check for native support if (fullscreen.enabled) { if (utils.is.event(event) && event.type === fullscreen.eventType) { diff --git a/src/js/ui.js b/src/js/ui.js index 44f1a367..7a45a6c3 100644 --- a/src/js/ui.js +++ b/src/js/ui.js @@ -153,7 +153,7 @@ const ui = { // Check if media is loading checkLoading(event) { - this.loading = [ + this.loading = this.media.networkState === 2 || [ 'stalled', 'waiting', ].includes(event.type); @@ -171,6 +171,29 @@ const ui = { }, this.loading ? 250 : 0); }, + // Check if media failed to load + checkFailed() { + // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState + this.failed = this.media.networkState === 3; + + if (this.failed) { + utils.toggleClass(this.elements.container, this.config.classNames.loading, false); + utils.toggleClass(this.elements.container, this.config.classNames.error, true); + } + + // Clear timer + clearTimeout(this.timers.failed); + + // Timer to prevent flicker when seeking + this.timers.loading = setTimeout(() => { + // Toggle container class hook + utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading); + + // Show controls if loading, hide if done + this.toggleControls(this.loading); + }, this.loading ? 250 : 0); + }, + // Update volume UI and storage updateVolume() { if (!this.supported.ui) { diff --git a/src/sass/plyr.scss b/src/sass/plyr.scss index 2a01a561..362c89b7 100644 --- a/src/sass/plyr.scss +++ b/src/sass/plyr.scss @@ -37,6 +37,7 @@ @import 'components/video'; @import 'components/volume'; +@import 'states/error'; @import 'states/fullscreen'; @import 'utils/animation'; diff --git a/src/sass/settings/captions.scss b/src/sass/settings/captions.scss index c87693d0..0c259046 100644 --- a/src/sass/settings/captions.scss +++ b/src/sass/settings/captions.scss @@ -6,5 +6,5 @@ $plyr-captions-bg: rgba(#000, 0.8) !default; $plyr-captions-color: #fff !default; $plyr-font-size-captions-base: $plyr-font-size-base !default; $plyr-font-size-captions-small: $plyr-font-size-small !default; -$plyr-font-size-captions-medium: 18px !default; -$plyr-font-size-captions-large: 21px !default; +$plyr-font-size-captions-medium: $plyr-font-size-large !default; +$plyr-font-size-captions-large: $plyr-font-size-xlarge !default; diff --git a/src/sass/settings/type.scss b/src/sass/settings/type.scss index f1e72588..7c587446 100644 --- a/src/sass/settings/type.scss +++ b/src/sass/settings/type.scss @@ -5,6 +5,8 @@ $plyr-font-family: Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif !default; $plyr-font-size-base: 16px !default; $plyr-font-size-small: 14px !default; +$plyr-font-size-large: 18px !default; +$plyr-font-size-xlarge: 21px !default; $plyr-font-size-time: 14px !default; $plyr-font-size-badge: 9px !default; diff --git a/src/sass/states/error.scss b/src/sass/states/error.scss new file mode 100644 index 00000000..64d05c7b --- /dev/null +++ b/src/sass/states/error.scss @@ -0,0 +1,25 @@ +// -------------------------------------------------------------- +// Error state +// -------------------------------------------------------------- + +.plyr--has-error { + pointer-events: none; + + &::after { + align-items: center; + background: rgba(#000, 90%); + color: #fff; + content: attr(data-plyr-error); + display: flex; + font-size: $plyr-font-size-base; + height: 100%; + justify-content: center; + left: 0; + position: absolute; + text-align: center; + text-shadow: 0 1px 1px rgba(#000, 10%); + top: 0; + width: 100%; + z-index: 10; + } +} diff --git a/src/sass/states/fullscreen.scss b/src/sass/states/fullscreen.scss index 855e670f..5632a60f 100644 --- a/src/sass/states/fullscreen.scss +++ b/src/sass/states/fullscreen.scss @@ -6,14 +6,17 @@ @include plyr-fullscreen-active(); } +/* stylelint-disable-next-line */ .plyr:-webkit-full-screen { @include plyr-fullscreen-active(); } +/* stylelint-disable-next-line */ .plyr:-moz-full-screen { @include plyr-fullscreen-active(); } +/* stylelint-disable-next-line */ .plyr:-ms-fullscreen { @include plyr-fullscreen-active(); } @@ -22,10 +25,10 @@ .plyr--fullscreen-fallback { @include plyr-fullscreen-active(); - position: fixed; - top: 0; bottom: 0; left: 0; + position: fixed; right: 0; + top: 0; z-index: 10000000; } |