aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/listeners.js
diff options
context:
space:
mode:
authorSam Potts <me@sampotts.me>2017-11-04 21:19:02 +1100
committerSam Potts <me@sampotts.me>2017-11-04 21:19:02 +1100
commitd920de2a25b1f9b3981671bbe9099af61e74410f (patch)
treebe561c96ddf345fcfdbdfe328b9c830d7914efbc /src/js/listeners.js
parent069c8093aefec9f23f3ff38de6041f8f90edf022 (diff)
downloadplyr-d920de2a25b1f9b3981671bbe9099af61e74410f.tar.lz
plyr-d920de2a25b1f9b3981671bbe9099af61e74410f.tar.xz
plyr-d920de2a25b1f9b3981671bbe9099af61e74410f.zip
Small tweaks
Diffstat (limited to 'src/js/listeners.js')
-rw-r--r--src/js/listeners.js168
1 files changed, 96 insertions, 72 deletions
diff --git a/src/js/listeners.js b/src/js/listeners.js
index f3746414..bc1a6094 100644
--- a/src/js/listeners.js
+++ b/src/js/listeners.js
@@ -360,61 +360,81 @@ const listeners = {
});
// Trigger custom and default handlers
- const handlerProxy = (event, customHandler, defaultHandler) => {
+ const proxy = (event, handlerKey, defaultHandler) => {
+ const customHandler = this.config.listeners[handleKey];
+
+ // Execute custom handler
if (utils.is.function(customHandler)) {
customHandler.call(this, event);
}
- if (utils.is.function(defaultHandler)) {
+
+ // Only call default handler if not prevented in custom handler
+ if (!event.defaultPrevented && utils.is.function(defaultHandler)) {
defaultHandler.call(this, event);
}
};
// Play
- utils.proxy(this.elements.buttons.play, 'click', this.config.listeners.play, togglePlay);
- utils.proxy(this.elements.buttons.playLarge, 'click', this.config.listeners.play, togglePlay);
+ utils.on(this.elements.buttons.play, 'click', event => proxy(event, 'play', togglePlay));
// Pause
- utils.proxy(this.elements.buttons.pause, 'click', this.config.listeners.pause, togglePlay);
+ utils.on(this.elements.buttons.pause, 'click', event => proxy(event, 'pause', togglePlay));
// Pause
- utils.proxy(this.elements.buttons.restart, 'click', this.config.listeners.restart, () => {
- this.restart();
- });
+ utils.on(this.elements.buttons.restart, 'click', event =>
+ proxy(event, 'restart', () => {
+ this.restart();
+ })
+ );
// Rewind
- utils.proxy(this.elements.buttons.rewind, 'click', this.config.listeners.rewind, () => {
- this.rewind();
- });
+ utils.on(this.elements.buttons.rewind, 'click', event =>
+ proxy(event, 'rewind', () => {
+ this.rewind();
+ })
+ );
// Rewind
- utils.proxy(this.elements.buttons.forward, 'click', this.config.listeners.forward, () => {
- this.forward();
- });
+ utils.on(this.elements.buttons.forward, 'click', event =>
+ proxy(event, 'forward', () => {
+ this.forward();
+ })
+ );
// Mute
- utils.proxy(this.elements.buttons.mute, 'click', this.config.listeners.mute, () => {
- this.toggleMute();
- });
+ utils.on(this.elements.buttons.mute, 'click', event =>
+ proxy(event, 'mute', () => {
+ this.toggleMute();
+ })
+ );
// Captions
- utils.proxy(this.elements.buttons.captions, 'click', this.config.listeners.captions, () => {
- this.toggleCaptions();
- });
+ utils.on(this.elements.buttons.captions, 'click', event =>
+ proxy(event, 'captions', () => {
+ this.toggleCaptions();
+ })
+ );
// Fullscreen
- utils.proxy(this.elements.buttons.fullscreen, 'click', this.config.listeners.fullscreen, () => {
- this.toggleFullscreen();
- });
+ utils.on(this.elements.buttons.fullscreen, 'click', event =>
+ proxy(event, 'fullscreen', () => {
+ this.toggleFullscreen();
+ })
+ );
// Picture-in-Picture
- utils.proxy(this.elements.buttons.pip, 'click', this.config.listeners.pip, () => {
- this.togglePictureInPicture();
- });
+ utils.on(this.elements.buttons.pip, 'click', event =>
+ proxy(event, 'pip', () => {
+ this.togglePictureInPicture();
+ })
+ );
// Airplay
- utils.proxy(this.elements.buttons.airplay, 'click', this.config.listeners.airplay, () => {
- this.airPlay();
- });
+ utils.on(this.elements.buttons.airplay, 'click', event =>
+ proxy(event, 'airplay', () => {
+ this.airPlay();
+ })
+ );
// Settings menu
utils.on(this.elements.buttons.settings, 'click', event => {
@@ -434,24 +454,24 @@ const listeners = {
// Settings menu items - use event delegation as items are added/removed
// Settings - Language
if (utils.matches(event.target, this.config.selectors.inputs.language)) {
- handlerProxy.call(this, event, this.config.listeners.language, () => {
+ proxy(event, 'language', () => {
this.toggleCaptions(true);
this.language = event.target.value.toLowerCase();
});
} else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {
// Settings - Quality
- handlerProxy.call(this, event, this.config.listeners.quality, () => {
+ proxy(event, 'quality', () => {
this.quality = event.target.value;
});
} else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {
// Settings - Speed
- handlerProxy.call(this, event, this.config.listeners.speed, () => {
+ proxy(event, 'speed', () => {
this.speed = parseFloat(event.target.value);
});
} else if (utils.matches(event.target, this.config.selectors.buttons.loop)) {
// Settings - Looping
// TODO: use toggle buttons
- handlerProxy.call(this, event, this.config.listeners.loop, () => {
+ proxy(event, 'loop', () => {
// TODO: This should be done in the method itself I think
// var value = event.target.getAttribute('data-loop__value') || event.target.getAttribute('data-loop__type');
@@ -461,14 +481,18 @@ const listeners = {
});
// Seek
- utils.proxy(this.elements.inputs.seek, inputEvent, this.config.listeners.seek, event => {
- this.currentTime = event.target.value / event.target.max * this.duration;
- });
+ utils.on(this.elements.inputs.seek, inputEvent, event =>
+ proxy(event, 'seek', () => {
+ this.currentTime = event.target.value / event.target.max * this.duration;
+ })
+ );
// Volume
- utils.proxy(this.elements.inputs.volume, inputEvent, this.config.listeners.volume, event => {
- this.volume = event.target.value;
- });
+ utils.on(this.elements.inputs.volume, inputEvent, event =>
+ proxy(event, 'volume', () => {
+ this.volume = event.target.value;
+ })
+ );
// Polyfill for lower fill in <input type="range"> for webkit
if (this.browser.isWebkit) {
@@ -479,7 +503,7 @@ const listeners = {
// Seek tooltip
utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event =>
- ui.updateSeekTooltip.call(this, event)
+ controls.updateSeekTooltip.call(this, event)
);
// Toggle controls visibility based on mouse movement
@@ -516,44 +540,44 @@ const listeners = {
}
// Mouse wheel for volume
- utils.proxy(
+ utils.on(
this.elements.inputs.volume,
'wheel',
- this.config.listeners.volume,
- event => {
- // 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.decreaseVolume(step);
- direction = -1;
- } else {
- this.increaseVolume(step);
- direction = 1;
+ event =>
+ proxy(event, 'volume', () => {
+ // 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.decreaseVolume(step);
+ direction = -1;
+ } else {
+ this.increaseVolume(step);
+ direction = 1;
+ }
}
- }
- // Scroll up (or down on natural) to increase
- if (event.deltaY > 0 || event.deltaX < 0) {
- if (inverted) {
- this.increaseVolume(step);
- direction = 1;
- } else {
- this.decreaseVolume(step);
- direction = -1;
+ // Scroll up (or down on natural) to increase
+ if (event.deltaY > 0 || event.deltaX < 0) {
+ if (inverted) {
+ this.increaseVolume(step);
+ direction = 1;
+ } else {
+ this.decreaseVolume(step);
+ direction = -1;
+ }
}
- }
- // Don't break page scrolling at max and min
- if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {
- event.preventDefault();
- }
- },
+ // Don't break page scrolling at max and min
+ if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {
+ event.preventDefault();
+ }
+ }),
false
);