Small tweaks

This commit is contained in:
Sam Potts 2017-07-23 21:13:11 +10:00
parent dfc516baf6
commit 7b60e473fa
11 changed files with 125 additions and 85 deletions

View File

@ -6,7 +6,7 @@
"Audio", "Audio",
"Video", "Video",
"HTML5 Audio", "HTML5 Audio",
"HTml5 Video" "HTML5 Video"
], ],
"authors": [ "authors": [
"Sam Potts <sam@potts.es>" "Sam Potts <sam@potts.es>"
@ -30,4 +30,4 @@
"url": "git://github.com/sampotts/plyr.git" "url": "git://github.com/sampotts/plyr.git"
}, },
"license": "MIT" "license": "MIT"
} }

2
demo/dist/demo.css vendored

File diff suppressed because one or more lines are too long

2
demo/dist/demo.js vendored

File diff suppressed because one or more lines are too long

View File

@ -4,15 +4,16 @@
@font-face { @font-face {
font-family: "Avenir"; font-family: "Avenir";
src: url("//cdn.plyr.io/fonts/avenir-medium.woff2") format("woff2"), src: url("https://cdn.plyr.io/fonts/avenir-medium.woff2") format("woff2"),
url("//cdn.plyr.io/fonts/avenir-medium.woff") format("woff"); url("https://cdn.plyr.io/fonts/avenir-medium.woff") format("woff");
font-style: normal; font-style: normal;
font-weight: @font-weight-base; font-weight: @font-weight-base;
} }
@font-face { @font-face {
font-family: "Avenir"; font-family: "Avenir";
src: url("//cdn.plyr.io/fonts/avenir-bold.woff2") format("woff2"), src: url("https://cdn.plyr.io/fonts/avenir-bold.woff2") format("woff2"),
url("//cdn.plyr.io/fonts/avenir-bold.woff") format("woff"); url("https://cdn.plyr.io/fonts/avenir-bold.woff") format("woff");
font-style: normal; font-style: normal;
font-weight: @font-weight-bold; font-weight: @font-weight-bold;
} }

View File

@ -24,8 +24,8 @@
@font-size-base: 16; @font-size-base: 16;
@font-size-small: 14; @font-size-small: 14;
@font-size-h1: 64; @font-size-h1: 64;
@font-weight-base: 400; @font-weight-base: 500;
@font-weight-bold: 500; @font-weight-bold: 600;
// Elements // Elements
@link-color: @brand-primary; @link-color: @brand-primary;

2
dist/plyr.css vendored

File diff suppressed because one or more lines are too long

4
dist/plyr.js vendored

File diff suppressed because one or more lines are too long

View File

@ -8,12 +8,12 @@
[ ] Handle quality change for YouTube [ ] Handle quality change for YouTube
[ ] Handle speed change for YouTube [ ] Handle speed change for YouTube
[ ] Set quality when loading YouTube vid [ ] Set quality when loading YouTube vid
[ ] Set "home" values [ ] Set default values
[ ] Hide unsupported menu items (+ on source change) [ ] Hide unsupported menu items on source change
[ ] Test PiP (need MacOS Sierra) [ ] Test PiP (need MacOS Sierra)
[ ] Test AirPlay (need MacOS Sierra) [ ] Test AirPlay (need MacOS Sierra)
[ ] Add `controlshidden` and `controlsshown` events [ ] Add `controlshidden` and `controlsshown` events
[ ] Test custom controls (without settings support for now) [ ] Test custom controls still works (without settings support for now)
[ ] Tidy up small UI for iOS inline [ ] Tidy up small UI for iOS inline
[ ] Finish new loop setup and display in seek bar [ ] Finish new loop setup and display in seek bar
[ ] Update docs for removal of setup [ ] Update docs for removal of setup
@ -21,7 +21,7 @@
#### Later #### Later
[ ] Wistia player [ ] Wistia player
[ ] Inlined sprite option [ ] Inlined sprite option
[ ] Start / end options for all players? [ ] Start / end time options for all players?
[ ] Get quality options for HTML5 somehow (multi source?) [ ] Get quality options for HTML5 somehow (multi source?)
[ ] Download button - grab first <source> or src attribute (or maybe use currentSrc?) for HTML5 and links for embedded players [ ] Download button - grab first <source> or src attribute (or maybe use currentSrc?) for HTML5 and links for embedded players
[ ] Scale captions size based on video size (in lieu of element queries) [ ] Scale captions size based on video size (in lieu of element queries)
@ -69,12 +69,15 @@
- decreaseVolume (new) - decreaseVolume (new)
- togglePictureInPicture (new) - togglePictureInPicture (new)
- airPlay (new) - airPlay (new)
- Added `.off` API method
#### Other breaking changes #### Other breaking changes
- New config options for loop - New config options for loop
- Selectors changes (new `input` and `display` object) - DOCUMENT - Selectors changes (new `input` and `display` object) - DOCUMENT
- Custom HTML option now `controls` which accepts a string (HTML), a function (your own template engine) or array (use built in controls) - Custom HTML option now `controls` which accepts a string (HTML), a function (your own template engine) or array (use built in controls)
- .setup() is removed in favour of a constructor - `.setup()` is removed in favour of a constructor
- `.loadSprite` removed
- `.support` removed
#### Added #### Added
- Seek i8n label - Seek i8n label

View File

@ -44,41 +44,6 @@
showPosterOnEnd: false, showPosterOnEnd: false,
disableContextMenu: true, disableContextMenu: true,
// Quality settings
quality: {
default: 'auto',
selected: 'auto'
},
// Set loops
loop: {
active: false,
start: 0,
end: null,
indicator: {
start: 0,
end: 0
}
},
// Speed up/down
speed: {
selected: 1,
options: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2]
},
// Keyboard shortcut settings
keyboardShortcuts: {
focused: true,
global: false
},
// Display tooltips
tooltips: {
controls: false,
seek: true
},
// Selectors // Selectors
// Change these to match your template if using custom HTML // Change these to match your template if using custom HTML
selectors: { selectors: {
@ -164,6 +129,41 @@
tabFocus: 'tab-focus' tabFocus: 'tab-focus'
}, },
// Quality settings
quality: {
default: 'auto',
selected: 'auto'
},
// Set loops
loop: {
active: false,
start: 0,
end: null,
indicator: {
start: 0,
end: 0
}
},
// Speed up/down
speed: {
selected: 1,
options: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2]
},
// Keyboard shortcut settings
keyboardShortcuts: {
focused: true,
global: false
},
// Display tooltips
tooltips: {
controls: false,
seek: true
},
// Captions settings // Captions settings
captions: { captions: {
active: false, active: false,
@ -1290,6 +1290,19 @@
} }
} }
// Add elements to HTML5 media (source, tracks, etc)
function insertElements(type, attributes) {
if (utils.is.string(attributes)) {
utils.insertElement(type, player.media, {
src: attributes
});
} else if (utils.is.array(attributes)) {
attributes.forEach(function(attribute) {
utils.insertElement(type, player.media, attribute);
});
}
}
// Trap focus inside container // Trap focus inside container
function focusTrap() { function focusTrap() {
var tabbables = getElements('input:not([disabled]), button:not([disabled])'); var tabbables = getElements('input:not([disabled]), button:not([disabled])');
@ -1315,19 +1328,6 @@
utils.on(player.elements.container, 'keydown', checkFocus, false); utils.on(player.elements.container, 'keydown', checkFocus, false);
} }
// Add elements to HTML5 media (source, tracks, etc)
function insertElements(type, attributes) {
if (utils.is.string(attributes)) {
utils.insertElement(type, player.media, {
src: attributes
});
} else if (utils.is.array(attributes)) {
attributes.forEach(function(attribute) {
utils.insertElement(type, player.media, attribute);
});
}
}
// Get icon URL // Get icon URL
function getIconUrl() { function getIconUrl() {
return { return {
@ -1536,7 +1536,13 @@
} }
// Build the default HTML // Build the default HTML
// TODO: Set order based on order in the config.controls array?
function createControls(data) { function createControls(data) {
// Do nothing if we want no controls
if (utils.is.empty(player.config.controls)) {
return;
}
// Create the container // Create the container
var controls = utils.createElement('div', utils.getAttributesFromSelector(player.config.selectors.controls.wrapper)); var controls = utils.createElement('div', utils.getAttributesFromSelector(player.config.selectors.controls.wrapper));
@ -1643,7 +1649,7 @@
} }
// Settings button / menu // Settings button / menu
if (utils.inArray(player.config.controls, 'settings')) { if (utils.inArray(player.config.controls, 'settings') && !utils.is.empty(player.config.settings)) {
var menu = utils.createElement('div', { var menu = utils.createElement('div', {
class: 'plyr__menu' class: 'plyr__menu'
}); });
@ -2269,7 +2275,7 @@
} }
// Find the UI controls and store references in custom controls // Find the UI controls and store references in custom controls
// TODO: Allow settings menus with custom controls (coming soon!) // TODO: Allow settings menus with custom controls
function findElements() { function findElements() {
try { try {
player.elements.controls = getElement(player.config.selectors.controls.wrapper); player.elements.controls = getElement(player.config.selectors.controls.wrapper);
@ -2329,7 +2335,7 @@
utils.toggleClass(player.elements.container, player.config.selectors.container.replace('.', ''), player.supported.full); utils.toggleClass(player.elements.container, player.config.selectors.container.replace('.', ''), player.supported.full);
} }
// Toggle native controls // Toggle native HTML5 media controls
function toggleNativeControls(toggle) { function toggleNativeControls(toggle) {
if (toggle && utils.inArray(types.html5, player.type)) { if (toggle && utils.inArray(types.html5, player.type)) {
player.media.setAttribute('controls', ''); player.media.setAttribute('controls', '');
@ -2709,10 +2715,14 @@
// YouTube needs a call to `stopVideo` before playing again // YouTube needs a call to `stopVideo` before playing again
instance.stopVideo(); instance.stopVideo();
instance.playVideo(); instance.playVideo();
break; break;
} }
player.media.paused = true; player.media.paused = true;
trigger(player.media, 'ended'); trigger(player.media, 'ended');
break; break;
case 1: case 1:
@ -2724,6 +2734,7 @@
} }
player.media.seeking = false; player.media.seeking = false;
trigger(player.media, 'play'); trigger(player.media, 'play');
trigger(player.media, 'playing'); trigger(player.media, 'playing');
@ -2753,7 +2764,9 @@
case 2: case 2:
player.media.paused = true; player.media.paused = true;
trigger(player.media, 'pause'); trigger(player.media, 'pause');
break; break;
} }
@ -3208,9 +3221,11 @@
} }
} }
if (utils.is.number(player.config.loop.start) && utils.is.number(player.config.loop.end) && player.media.currentTime >= player.config.loop.end) { // TODO: Loop - this shouldn't be here
/*if (utils.is.number(player.config.loop.start) && utils.is.number(player.config.loop.end) && player.media.currentTime >= player.config.loop.end) {
console.warn('Looping');
player.seek(player.config.loop.start); player.seek(player.config.loop.start);
} }*/
setProgress(progress, value); setProgress(progress, value);
} }
@ -4988,7 +5003,7 @@
return player; return player;
}; };
// Event listener // Event listeners
Plyr.prototype.on = function(event, callback) { Plyr.prototype.on = function(event, callback) {
var player = this; var player = this;
@ -4999,6 +5014,16 @@
return player; return player;
}; };
Plyr.prototype.off = function(event, callback) {
var player = this;
// Listen for events on container
utils.off(player.elements.container, event, callback);
// Allow chaining
return player;
};
// Check for support // Check for support
Plyr.prototype.supports = function(mimeType) { Plyr.prototype.supports = function(mimeType) {
return support.mime(this, mimeType); return support.mime(this, mimeType);
@ -5102,4 +5127,4 @@
}; };
return Plyr; return Plyr;
}); });

View File

@ -78,14 +78,13 @@
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: 0; padding: 0;
vertical-align: middle;
appearance: none;
cursor: pointer; cursor: pointer;
border: none; border: none;
background: transparent; background: transparent;
// WebKit // WebKit
-webkit-appearance: none;
&::-webkit-slider-runnable-track { &::-webkit-slider-runnable-track {
.plyr-range-track(); .plyr-range-track();
} }
@ -413,9 +412,9 @@
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
padding: @plyr-control-spacing; padding: ceil(@plyr-control-spacing * 1.25);
background: @plyr-video-control-bg-hover; background: fade(@plyr-video-control-bg-hover, 80%);
border: 4px solid currentColor; border: 3px solid currentColor;
border-radius: 100%; border-radius: 100%;
box-shadow: 0 1px 1px fade(#000, 15%); box-shadow: 0 1px 1px fade(#000, 15%);
color: @plyr-video-control-color; color: @plyr-video-control-color;
@ -431,6 +430,11 @@
pointer-events: none; pointer-events: none;
} }
&:hover,
&:focus {
background: @plyr-video-control-bg-hover;
}
&:focus { &:focus {
outline: 1px dotted fade(@plyr-video-control-color, 50%); outline: 1px dotted fade(@plyr-video-control-color, 50%);
} }
@ -759,10 +763,13 @@
margin: -(@plyr-range-track-height / 2) 0 0; margin: -(@plyr-range-track-height / 2) 0 0;
padding: 0; padding: 0;
vertical-align: top; vertical-align: top;
appearance: none;
border: none; border: none;
border-radius: 100px; border-radius: 100px;
// WebKit
-webkit-appearance: none;
&::-webkit-progress-bar { &::-webkit-progress-bar {
background: transparent; background: transparent;
} }
@ -771,11 +778,15 @@
border-radius: 100px; border-radius: 100px;
min-width: @plyr-range-track-height; min-width: @plyr-range-track-height;
} }
// Mozilla
&::-moz-progress-bar { &::-moz-progress-bar {
background: currentColor; background: currentColor;
border-radius: 100px; border-radius: 100px;
min-width: @plyr-range-track-height; min-width: @plyr-range-track-height;
} }
// Microsoft
&::-ms-fill { &::-ms-fill {
border-radius: 100px; border-radius: 100px;
} }

View File

@ -15,11 +15,11 @@
@plyr-font-family: inherit; //Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif; @plyr-font-family: inherit; //Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif;
@plyr-font-size-small: 14px; @plyr-font-size-small: 14px;
@plyr-font-size-base: 16px; @plyr-font-size-base: 16px;
@plyr-font-weight-normal: 400; @plyr-font-weight-normal: 500;
@plyr-font-weight-bold: 600; @plyr-font-weight-bold: 600;
// Captions // Captions
@plyr-captions-bg: fade(#000, 60%); @plyr-captions-bg: fade(#343f4a, 80%);
@plyr-captions-color: #fff; @plyr-captions-color: #fff;
@plyr-font-size-captions-base: @plyr-font-size-base; @plyr-font-size-captions-base: @plyr-font-size-base;
@plyr-font-size-captions-medium: ceil(@plyr-font-size-base * 1.5); @plyr-font-size-captions-medium: ceil(@plyr-font-size-base * 1.5);
@ -29,13 +29,13 @@
@plyr-control-icon-size: 18px; @plyr-control-icon-size: 18px;
@plyr-control-spacing: 10px; @plyr-control-spacing: 10px;
@plyr-control-padding: (@plyr-control-spacing * .7); @plyr-control-padding: (@plyr-control-spacing * .7);
@plyr-video-controls-bg: #000; @plyr-video-controls-bg: #343f4a;
@plyr-video-control-color: #fff; @plyr-video-control-color: #fff;
@plyr-video-control-color-hover: #fff; @plyr-video-control-color-hover: #fff;
@plyr-video-control-bg-hover: @plyr-color-main; @plyr-video-control-bg-hover: @plyr-color-main;
@plyr-audio-controls-bg: #fff; @plyr-audio-controls-bg: #fff;
@plyr-audio-controls-border: 1px solid #dbe3e8; @plyr-audio-controls-border: 1px solid #dbe3e8;
@plyr-audio-control-color: #565D64; @plyr-audio-control-color: #565d64;
@plyr-audio-control-color-hover: #fff; @plyr-audio-control-color-hover: #fff;
@plyr-audio-control-bg-hover: @plyr-color-main; @plyr-audio-control-bg-hover: @plyr-color-main;
@ -56,7 +56,7 @@
@plyr-progress-loading-bg: fade(#343f4a, 20%); @plyr-progress-loading-bg: fade(#343f4a, 20%);
@plyr-video-progress-bg: fade(#fff, 25%); @plyr-video-progress-bg: fade(#fff, 25%);
@plyr-video-progress-buffered-bg: @plyr-video-progress-bg; @plyr-video-progress-buffered-bg: @plyr-video-progress-bg;
@plyr-audio-progress-bg: fade(#C6D6DB, 66%); @plyr-audio-progress-bg: fade(#c6d6db, 66%);
@plyr-audio-progress-buffered-bg: @plyr-audio-progress-bg; @plyr-audio-progress-buffered-bg: @plyr-audio-progress-bg;
// Range sliders // Range sliders