aboutsummaryrefslogtreecommitdiffstats
path: root/src/js
diff options
context:
space:
mode:
authorSam Potts <sam@potts.es>2018-06-21 09:11:05 +1000
committerSam Potts <sam@potts.es>2018-06-21 09:11:05 +1000
commit17dcb63c26e22ea8848056555a7c0ff19f779bf8 (patch)
tree8dd41ad9fd6d8bcfe6c2e2db583424f9df8e2524 /src/js
parentf62e1da01a1a3cf78def1002a5cbe47db5cc9361 (diff)
parente04b90c9c030bf5629e034f616a636245770a8d1 (diff)
downloadplyr-17dcb63c26e22ea8848056555a7c0ff19f779bf8.tar.lz
plyr-17dcb63c26e22ea8848056555a7c0ff19f779bf8.tar.xz
plyr-17dcb63c26e22ea8848056555a7c0ff19f779bf8.zip
Merge branch 'develop'
# Conflicts: # dist/plyr.js.map # dist/plyr.min.js # dist/plyr.min.js.map # dist/plyr.polyfilled.js.map # dist/plyr.polyfilled.min.js # dist/plyr.polyfilled.min.js.map
Diffstat (limited to 'src/js')
-rw-r--r--src/js/listeners.js38
-rw-r--r--src/js/plugins/ads.js4
-rw-r--r--src/js/plyr.js7
-rw-r--r--src/js/plyr.polyfilled.js2
-rw-r--r--src/js/utils/is.js112
5 files changed, 72 insertions, 91 deletions
diff --git a/src/js/listeners.js b/src/js/listeners.js
index 9d987508..d9811dd1 100644
--- a/src/js/listeners.js
+++ b/src/js/listeners.js
@@ -665,36 +665,20 @@ class Listeners {
// Detect "natural" scroll - suppored on OS X Safari only
// Other browsers on OS X will be inverted until support improves
const inverted = event.webkitDirectionInvertedFromDevice;
- const step = 1 / 50;
- let direction = 0;
-
- // Scroll down (or up on natural) to decrease
- if (event.deltaY < 0 || event.deltaX > 0) {
- if (inverted) {
- this.player.decreaseVolume(step);
- direction = -1;
- } else {
- this.player.increaseVolume(step);
- direction = 1;
- }
- }
- // Scroll up (or down on natural) to increase
- if (event.deltaY > 0 || event.deltaX < 0) {
- if (inverted) {
- this.player.increaseVolume(step);
- direction = 1;
- } else {
- this.player.decreaseVolume(step);
- direction = -1;
- }
- }
+ // Get delta from event. Invert if `inverted` is true
+ const [x, y] = [event.deltaX, -event.deltaY]
+ .map(value => inverted ? -value : value);
+
+ // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)
+ const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);
+
+ // Change the volume by 2%
+ this.player.increaseVolume(direction / 50);
// Don't break page scrolling at max and min
- if (
- (direction === 1 && this.player.media.volume < 1) ||
- (direction === -1 && this.player.media.volume > 0)
- ) {
+ const { volume } = this.player.media;
+ if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {
event.preventDefault();
}
},
diff --git a/src/js/plugins/ads.js b/src/js/plugins/ads.js
index e0d49265..856772d5 100644
--- a/src/js/plugins/ads.js
+++ b/src/js/plugins/ads.js
@@ -49,7 +49,9 @@ class Ads {
}
get enabled() {
- return this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId);
+ return (
+ this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)
+ );
}
/**
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 5d67d596..3db4776d 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr
-// plyr.js v3.3.17
+// plyr.js v3.3.18
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
@@ -553,7 +553,7 @@ class Plyr {
*/
increaseVolume(step) {
const volume = this.media.muted ? 0 : this.volume;
- this.volume = volume + (is.number(step) ? step : 1);
+ this.volume = volume + (is.number(step) ? step : 0);
}
/**
@@ -561,8 +561,7 @@ class Plyr {
* @param {boolean} step - How much to decrease by (between 0 and 1)
*/
decreaseVolume(step) {
- const volume = this.media.muted ? 0 : this.volume;
- this.volume = volume - (is.number(step) ? step : 1);
+ this.increaseVolume(-step);
}
/**
diff --git a/src/js/plyr.polyfilled.js b/src/js/plyr.polyfilled.js
index 81586fd1..85d9a262 100644
--- a/src/js/plyr.polyfilled.js
+++ b/src/js/plyr.polyfilled.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr Polyfilled Build
-// plyr.js v3.3.17
+// plyr.js v3.3.18
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/src/js/utils/is.js b/src/js/utils/is.js
index cb2c07c6..b4760da4 100644
--- a/src/js/utils/is.js
+++ b/src/js/utils/is.js
@@ -3,65 +3,61 @@
// ==========================================================================
const getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);
-
const instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);
+const isNullOrUndefined = input => input === null || typeof input === 'undefined';
+const isObject = input => getConstructor(input) === Object;
+const isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);
+const isString = input => getConstructor(input) === String;
+const isBoolean = input => getConstructor(input) === Boolean;
+const isFunction = input => getConstructor(input) === Function;
+const isArray = input => Array.isArray(input);
+const isWeakMap = input => instanceOf(input, WeakMap);
+const isNodeList = input => instanceOf(input, NodeList);
+const isElement = input => instanceOf(input, Element);
+const isTextNode = input => getConstructor(input) === Text;
+const isEvent = input => instanceOf(input, Event);
+const isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);
+const isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));
+
+const isEmpty = input =>
+ isNullOrUndefined(input) ||
+ ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||
+ (isObject(input) && !Object.keys(input).length);
+
+const isUrl = input => {
+ // Accept a URL object
+ if (instanceOf(input, window.URL)) {
+ return true;
+ }
-const is = {
- object(input) {
- return getConstructor(input) === Object;
- },
- number(input) {
- return getConstructor(input) === Number && !Number.isNaN(input);
- },
- string(input) {
- return getConstructor(input) === String;
- },
- boolean(input) {
- return getConstructor(input) === Boolean;
- },
- function(input) {
- return getConstructor(input) === Function;
- },
- array(input) {
- return !is.nullOrUndefined(input) && Array.isArray(input);
- },
- weakMap(input) {
- return instanceOf(input, WeakMap);
- },
- nodeList(input) {
- return instanceOf(input, NodeList);
- },
- element(input) {
- return instanceOf(input, Element);
- },
- textNode(input) {
- return getConstructor(input) === Text;
- },
- event(input) {
- return instanceOf(input, Event);
- },
- cue(input) {
- return instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);
- },
- track(input) {
- return instanceOf(input, TextTrack) || (!is.nullOrUndefined(input) && is.string(input.kind));
- },
- url(input) {
- return (
- !is.nullOrUndefined(input) &&
- /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(input)
- );
- },
- nullOrUndefined(input) {
- return input === null || typeof input === 'undefined';
- },
- empty(input) {
- return (
- is.nullOrUndefined(input) ||
- ((is.string(input) || is.array(input) || is.nodeList(input)) && !input.length) ||
- (is.object(input) && !Object.keys(input).length)
- );
- },
+ // Add the protocol if required
+ let string = input;
+ if (!input.startsWith('http://') || !input.startsWith('https://')) {
+ string = `http://${input}`;
+ }
+
+ try {
+ return !isEmpty(new URL(string).hostname);
+ } catch (e) {
+ return false;
+ }
};
-export default is;
+export default {
+ nullOrUndefined: isNullOrUndefined,
+ object: isObject,
+ number: isNumber,
+ string: isString,
+ boolean: isBoolean,
+ function: isFunction,
+ array: isArray,
+ weakMap: isWeakMap,
+ nodeList: isNodeList,
+ element: isElement,
+ textNode: isTextNode,
+ event: isEvent,
+ cue: isCue,
+ track: isTrack,
+ url: isUrl,
+ empty: isEmpty,
+};