aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSam <sam@potts.es>2018-01-04 13:43:56 +1100
committerSam <sam@potts.es>2018-01-04 13:43:56 +1100
commit92cb9e22e24d52e1843a5865651f7b2c5a00d47a (patch)
treebc626af1855f08504e9ee09fdaa6753d7bbf59c4 /src
parent6b9106ddb1416e59f2dde05039c7ebad15ee8fa7 (diff)
downloadplyr-92cb9e22e24d52e1843a5865651f7b2c5a00d47a.tar.lz
plyr-92cb9e22e24d52e1843a5865651f7b2c5a00d47a.tar.xz
plyr-92cb9e22e24d52e1843a5865651f7b2c5a00d47a.zip
Started on error handling
Diffstat (limited to 'src')
-rw-r--r--src/js/defaults.js1
-rw-r--r--src/js/listeners.js8
-rw-r--r--src/js/plyr.js9
-rw-r--r--src/js/ui.js25
-rw-r--r--src/sass/plyr.scss1
-rw-r--r--src/sass/settings/captions.scss4
-rw-r--r--src/sass/settings/type.scss2
-rw-r--r--src/sass/states/error.scss25
-rw-r--r--src/sass/states/fullscreen.scss7
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;
}