Compare commits

...

18 Commits

Author SHA1 Message Date
224b612ae7 Bug fix 2015-05-18 14:46:21 +10:00
19d7522722 Fixes bug with 1.1.8 volume 2015-05-18 14:43:45 +10:00
ceace2a678 setVolume() API method improvements (Fixes #83) 2015-05-18 13:50:44 +10:00
d627454b2a Restore classname on destroy 2015-05-17 17:33:46 +10:00
7ccbfad6ad New API methods (fixes #77), Fix for non strict mode (fixes #78) 2015-05-17 17:23:09 +10:00
91f8a158d2 Update index.html 2015-04-19 23:47:46 +10:00
8925dcde01 Update readme.md 2015-04-19 23:45:25 +10:00
530abac3a7 Update readme.md 2015-04-15 01:15:05 +10:00
e702d9a881 Update readme.md 2015-04-15 01:14:36 +10:00
b0aeccb793 Update readme.md 2015-04-11 11:19:19 +10:00
43d8d748ce Merge pull request #76 from robinpoort/feature/sass-variables
Make SCSS variables optional
2015-04-11 09:29:04 +10:00
b43ea5c7d3 adding !default to variables so they are easily overwritable 2015-04-10 15:13:02 +02:00
f56759222d Update readme.md 2015-04-10 13:38:49 +10:00
c8b7bb570c Update readme.md 2015-04-10 13:37:55 +10:00
d536b29550 Update readme.md 2015-04-10 13:36:51 +10:00
ecbda018c5 Merge branch 'master' of github.com:selz/plyr
# Conflicts:
#	src/js/plyr.js
2015-04-10 07:17:23 +10:00
5187311ff0 Bug fix for isFullscreen() in Mozilla (Fixes #38) 2015-04-10 07:16:53 +10:00
d9a94ac7b0 Version bump 2015-04-08 13:42:34 +10:00
8 changed files with 194 additions and 124 deletions

View File

@ -1,5 +1,8 @@
# Changelog # Changelog
## v1.1.5
- Fix for incorrect `isFullscreen()` return value in Mozilla (Fixes #38)
## v1.1.4 ## v1.1.4
- Minor bug fixes - Minor bug fixes
@ -9,7 +12,7 @@
## v1.1.2 ## v1.1.2
- Added an onSetup callback option - Added an onSetup callback option
- Added fullscreen API methods toggleFullscreen() (must be user iniated), and isFullscreen() - Added fullscreen API methods `toggleFullscreen()` (must be user iniated), and `isFullscreen()`
## v1.1.1 ## v1.1.1
- Fix for unsupported browser handling - Fix for unsupported browser handling
@ -19,7 +22,7 @@
- Added config option to set which controls are shown (if using the default controls html) and better handling of missing controls - Added config option to set which controls are shown (if using the default controls html) and better handling of missing controls
## v1.0.31 ## v1.0.31
- Display duration on metadataloaded - Display duration on `metadataloaded`
## v1.0.30 ## v1.0.30
- Fixed bug with media longer than 60 minutes (Fixes #69) - Fixed bug with media longer than 60 minutes (Fixes #69)

2
dist/plyr.js vendored

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Docs styles --> <!-- Docs styles -->
<link rel="stylesheet" href="//cdn.plyr.io/1.1.4/docs.css"> <link rel="stylesheet" href="//cdn.plyr.io/1.1.9/docs.css">
</head> </head>
<body> <body>
<main> <main>

View File

@ -8,10 +8,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Styles --> <!-- Styles -->
<link rel="stylesheet" href="//cdn.plyr.io/1.1.4/plyr.css"> <link rel="stylesheet" href="https://cdn.plyr.io/1.1.9/plyr.css">
<!-- Docs styles --> <!-- Docs styles -->
<link rel="stylesheet" href="//cdn.plyr.io/1.1.4/docs.css"> <link rel="stylesheet" href="https://cdn.plyr.io/1.1.9/docs.css">
</head> </head>
<body> <body>
<header> <header>
@ -23,18 +23,16 @@
<main> <main>
<section class="example-video"> <section class="example-video">
<div class="player"> <div class="player">
<video poster="//cdn.selz.com/plyr/1.0/poster.jpg" controls crossorigin> <video poster="https://cdn.selz.com/plyr/1.0/poster.jpg" controls crossorigin>
<!-- Video files --> <!-- Video files -->
<source src="//cdn.selz.com/plyr/1.0/movie.mp4" type="video/mp4"> <source src="https://cdn.selz.com/plyr/1.0/movie.mp4" type="video/mp4">
<source src="//cdn.selz.com/plyr/1.0/movie.webm" type="video/webm"> <source src="https://cdn.selz.com/plyr/1.0/movie.webm" type="video/webm">
<!-- Text track file --> <!-- Text track file -->
<track kind="captions" label="English" srclang="en" src="//cdn.selz.com/plyr/1.0/en.vtt" default> <track kind="captions" label="English" srclang="en" src="https://cdn.selz.com/plyr/1.0/en.vtt" default>
<!-- Fallback for browsers that don't support the <video> element --> <!-- Fallback for browsers that don't support the <video> element -->
<div> <a href="https://cdn.selz.com/plyr/1.0/movie.mp4">Download</a>
<a href="//cdn.selz.com/plyr/1.0/movie.mp4">Download</a>
</div>
</video> </video>
</div> </div>
<small>Big Buck Bunny. More info can be found at <a href="https://peach.blender.org" target="_blank">peach.blender.org</a>.</small> <small>Big Buck Bunny. More info can be found at <a href="https://peach.blender.org" target="_blank">peach.blender.org</a>.</small>
@ -44,13 +42,11 @@
<div class="player"> <div class="player">
<audio controls> <audio controls>
<!-- Audio files --> <!-- Audio files -->
<source src="//cdn.selz.com/plyr/1.0/logistics-96-sample.mp3" type="audio/mp3"> <source src="https://cdn.selz.com/plyr/1.0/logistics-96-sample.mp3" type="audio/mp3">
<source src="//cdn.selz.com/plyr/1.0/logistics-96-sample.ogg" type="audio/ogg"> <source src="https://cdn.selz.com/plyr/1.0/logistics-96-sample.ogg" type="audio/ogg">
<!-- Fallback for browsers that don't support the <audio> element --> <!-- Fallback for browsers that don't support the <audio> element -->
<div> <a href="https://cdn.selz.com/plyr/1.0/logistics-96-sample.mp3">Download</a>
<a href="//cdn.selz.com/plyr/1.0/logistics-96-sample.mp3">Download</a>
</div>
</audio> </audio>
</div> </div>
<small>"96" by Logistics, which can be purchased from <a href="https://www.hospitalrecords.com/shop/artist/logistics" target="_blank">Hospital Records</a>.</small> <small>"96" by Logistics, which can be purchased from <a href="https://www.hospitalrecords.com/shop/artist/logistics" target="_blank">Hospital Records</a>.</small>
@ -83,13 +79,13 @@
b.insertBefore(c, b.childNodes[0]); b.insertBefore(c, b.childNodes[0]);
} }
} }
})(document, "https://cdn.plyr.io/1.1.4/sprite.svg"); })(document, "https://cdn.plyr.io/1.1.9/sprite.svg");
</script> </script>
<!-- Plyr core script --> <!-- Plyr core script -->
<script src="//cdn.plyr.io/1.1.4/plyr.js"></script> <script src="https://cdn.plyr.io/1.1.9/plyr.js"></script>
<!-- Docs script --> <!-- Docs script -->
<script src="//cdn.plyr.io/1.1.4/docs.js"></script> <script src="https://cdn.plyr.io/1.1.9/docs.js"></script>
</body> </body>
</html> </html>

View File

@ -1,6 +1,6 @@
{ {
"name": "plyr", "name": "plyr",
"version": "1.1.4", "version": "1.1.9",
"description": "A simple HTML5 media player using custom controls", "description": "A simple HTML5 media player using custom controls",
"homepage": "http://plyr.io", "homepage": "http://plyr.io",
"main": "gulpfile.js", "main": "gulpfile.js",

View File

@ -25,11 +25,10 @@ Oh and yes, it works with Bootstrap.
Check out [the changelog](changelog.md) Check out [the changelog](changelog.md)
## Planned development ## Planned development
- Accept a string selector, a node, or a nodelist for the `container` property of `selectors`.
- Multiple language captions (with selection)
- Playlists (audio and video) - Playlists (audio and video)
- Set source by API - YouTube and Vimeo support
- Tooltip option (for seeking and controls) - Playback speed
- Multiple language captions (with selection)
... and whatever else has been raised in [issues](https://github.com/Selz/plyr/issues) ... and whatever else has been raised in [issues](https://github.com/Selz/plyr/issues)
If you have any cool ideas or features, please let me know by [creating an issue](https://github.com/Selz/plyr/issues/new) or of course, forking and sending a pull request. If you have any cool ideas or features, please let me know by [creating an issue](https://github.com/Selz/plyr/issues/new) or of course, forking and sending a pull request.
@ -38,7 +37,7 @@ If you have any cool ideas or features, please let me know by [creating an issue
Check `docs/index.html` and `docs/dist/docs.js` for an example setup. Check `docs/index.html` and `docs/dist/docs.js` for an example setup.
**Heads up**, the example `index.html` file needs to be served from a webserver (such as Apache, Nginx, IIS or similar) unless you change the file sources to include http or https. e.g. change `//cdn.plyr.io/1.1.4/plyr.js` to `https://cdn.plyr.io/1.1.4/plyr.js` **Heads up**, the example `index.html` file needs to be served from a webserver (such as Apache, Nginx, IIS or similar) unless you change the file sources to include http or https. e.g. change `//cdn.plyr.io/1.1.9/plyr.js` to `https://cdn.plyr.io/1.1.9/plyr.js`
### Bower ### Bower
If bower is your thang, you can grab Plyr using: If bower is your thang, you can grab Plyr using:
@ -55,14 +54,14 @@ ember addon:install ember-cli-plyr
More info is on [npm](https://www.npmjs.com/package/ember-cli-plyr) and [GitHub](https://github.com/louisrudner/ember-cli-plyr) More info is on [npm](https://www.npmjs.com/package/ember-cli-plyr) and [GitHub](https://github.com/louisrudner/ember-cli-plyr)
### CDN ### CDN
If you want to use our CDN, you can use the following. HTTPS (SSL) is supported. If you want to use our CDN, you can use the following:
```html ```html
<link rel="stylesheet" href="//cdn.plyr.io/1.1.4/plyr.css"> <link rel="stylesheet" href="https://cdn.plyr.io/1.1.9/plyr.css">
<script src="//cdn.plyr.io/1.1.4/plyr.js"></script> <script src="https://cdn.plyr.io/1.1.9/plyr.js"></script>
``` ```
You can also access the `sprite.svg` file at `//cdn.plyr.io/1.1.4/sprite.svg`. You can also access the `sprite.svg` file at `https://cdn.plyr.io/1.1.9/sprite.svg`.
### CSS ### CSS
If you want to use the default css, add the `plyr.css` file from /dist into your head, or even better use `plyr.less` or `plyr.sass` file included in `/src` in your build to save a request. If you want to use the default css, add the `plyr.css` file from /dist into your head, or even better use `plyr.less` or `plyr.sass` file included in `/src` in your build to save a request.
@ -99,18 +98,16 @@ and the AJAX technique here:
The only extra markup that's needed to use plyr is a `<div>` wrapper. Replace the source, poster and captions with urls for your media. The only extra markup that's needed to use plyr is a `<div>` wrapper. Replace the source, poster and captions with urls for your media.
```html ```html
<div class="player"> <div class="player">
<video poster="//cdn.selz.com/plyr/1.0/poster.jpg" controls crossorigin> <video poster="https://cdn.selz.com/plyr/1.0/poster.jpg" controls crossorigin>
<!-- Video files --> <!-- Video files -->
<source src="//cdn.selz.com/plyr/1.0/movie.mp4" type="video/mp4"> <source src="https://cdn.selz.com/plyr/1.0/movie.mp4" type="video/mp4">
<source src="//cdn.selz.com/plyr/1.0/movie.webm" type="video/webm"> <source src="https://cdn.selz.com/plyr/1.0/movie.webm" type="video/webm">
<!-- Text track file --> <!-- Text track file -->
<track kind="captions" label="English captions" src="//cdn.selz.com/plyr/1.0/movie_captions_en.vtt" srclang="en" default> <track kind="captions" label="English captions" src="https://cdn.selz.com/plyr/1.0/movie_captions_en.vtt" srclang="en" default>
<!-- Fallback for browsers that don't support the <video> element --> <!-- Fallback for browsers that don't support the <video> element -->
<div> <a href="https://cdn.selz.com/plyr/1.0/movie.mp4">Download</a>
<a href="//cdn.selz.com/plyr/1.0/movie.mp4">Download</a>
</div>
</video> </video>
</div> </div>
``` ```
@ -120,13 +117,11 @@ And the same for `<audio>`
<div class="player"> <div class="player">
<audio controls> <audio controls>
<!-- Audio files --> <!-- Audio files -->
<source src="//cdn.selz.com/plyr/1.0/logistics-96-sample.mp3" type="audio/mp3"> <source src="https://cdn.selz.com/plyr/1.0/logistics-96-sample.mp3" type="audio/mp3">
<source src="//cdn.selz.com/plyr/1.0/logistics-96-sample.ogg" type="audio/ogg"> <source src="https://cdn.selz.com/plyr/1.0/logistics-96-sample.ogg" type="audio/ogg">
<!-- Fallback for browsers that don't support the <audio> element --> <!-- Fallback for browsers that don't support the <audio> element -->
<div> <a href="https://cdn.selz.com/plyr/1.0/logistics-96-sample.mp3">Download</a>
<a href="//cdn.selz.com/plyr/1.0/logistics-96-sample.mp3">Download</a>
</div>
</audio> </audio>
</div> </div>
``` ```
@ -138,20 +133,16 @@ More info on CORS here:
[https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) [https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)
### JavaScript ### JavaScript
Much of the behaviour of the player is configurable when initialising the library. Below is an example of a default instance. Much of the behaviour of the player is configurable when initialising the library. Here's an example of a default setup:
```html ```html
<script src="dist/plyr.js"></script> <script src="dist/plyr.js"></script>
<script> <script>plyr.setup();</script>
plyr.setup({
*options*
});
</script>
``` ```
#### Options #### Options
You can pass the following options to the setup method. You can pass the following options to the setup method using `plyr.setup({...})`.
<table class="table" width="100%"> <table class="table" width="100%">
<thead> <thead>
@ -355,6 +346,16 @@ Here's a list of the methods supported:
<td>String</td> <td>String</td>
<td>Set the poster url. This is supported for the <code>video</code> element only.</td> <td>Set the poster url. This is supported for the <code>video</code> element only.</td>
</tr> </tr>
<tr>
<td><code>destroy()</code></td>
<td>&mdash;</td>
<td>Destroys the plyr UI and any media event listeners, effectively restoring to the previous state before <code>setup()</code> was called.</td>
</tr>
<tr>
<td><code>restore()</code></td>
<td>&mdash;</td>
<td>Reverses the effects of the <code>destroy()</code> method, restoring the UI and listeners.</td>
</tr>
</tbody> </tbody>
</table> </table>
@ -423,7 +424,7 @@ There's an API method for checking support. You can call `plyr.supported()` and
If you find anything weird with Plyr, please let us know using the GitHub issues tracker. If you find anything weird with Plyr, please let us know using the GitHub issues tracker.
## Author ## Author
Plyr is developed by [@sam_potts](https://twitter.com/sam_potts) / [sampotts.me](http://sampotts.me) Plyr is developed by [@sam_potts](https://twitter.com/sam_potts) / [sampotts.me](http://sampotts.me) with help from the awesome [contributors](https://github.com/Selz/plyr/graphs/contributors)
## Mentions ## Mentions
- [The Changelog](http://thechangelog.com/plyr-simple-html5-media-player-custom-controls-webvtt-captions/) - [The Changelog](http://thechangelog.com/plyr-simple-html5-media-player-custom-controls-webvtt-captions/)

View File

@ -1,6 +1,6 @@
// ========================================================================== // ==========================================================================
// Plyr // Plyr
// plyr.js v1.1.2 // plyr.js v1.1.9
// https://github.com/selz/plyr // https://github.com/selz/plyr
// License: The MIT License (MIT) // License: The MIT License (MIT)
// ========================================================================== // ==========================================================================
@ -366,12 +366,28 @@
// append it to the parent. // append it to the parent.
if (sibling) { if (sibling) {
parent.insertBefore(child, sibling); parent.insertBefore(child, sibling);
} else { }
else {
parent.appendChild(child); parent.appendChild(child);
} }
} }
} }
// Unwrap an element
// http://plainjs.com/javascript/manipulation/unwrap-a-dom-element-35/
function _unwrap(wrapper) {
// Get the element's parent node
var parent = wrapper.parentNode;
// Move all children out of the element
while (wrapper.firstChild) {
parent.insertBefore(wrapper.firstChild, wrapper);
}
// Remove the empty element
parent.removeChild(wrapper);
}
// Remove an element // Remove an element
function _remove(element) { function _remove(element) {
element.parentNode.removeChild(element); element.parentNode.removeChild(element);
@ -404,7 +420,7 @@
// Toggle event // Toggle event
function _toggleHandler(element, events, callback, toggle) { function _toggleHandler(element, events, callback, toggle) {
events = events.split(" "); var eventList = events.split(" ");
// If a nodelist is passed, call itself on each node // If a nodelist is passed, call itself on each node
if(element instanceof NodeList) { if(element instanceof NodeList) {
@ -417,8 +433,8 @@
} }
// If a single node is passed, bind the event listener // If a single node is passed, bind the event listener
for (var i = 0; i < events.length; i++) { for (var i = 0; i < eventList.length; i++) {
element[toggle ? "addEventListener" : "removeEventListener"](events[i], callback, false); element[toggle ? "addEventListener" : "removeEventListener"](eventList[i], callback, false);
} }
} }
@ -541,6 +557,8 @@
switch (this.prefix) { switch (this.prefix) {
case "": case "":
return document.fullscreenElement == element; return document.fullscreenElement == element;
case "moz":
return document.mozFullScreenElement == element;
default: default:
return document[this.prefix + "FullscreenElement"] == element; return document[this.prefix + "FullscreenElement"] == element;
} }
@ -1128,12 +1146,7 @@
// Set volume // Set volume
function _setVolume(volume) { function _setVolume(volume) {
// Bail if there's no volume element // Use default if no value specified
if(!player.volume) {
return;
}
// Use default if needed
if(typeof volume === "undefined") { if(typeof volume === "undefined") {
if(config.storage.enabled && _storage().supported) { if(config.storage.enabled && _storage().supported) {
volume = window.localStorage[config.storage.key] || config.volume; volume = window.localStorage[config.storage.key] || config.volume;
@ -1142,25 +1155,22 @@
volume = config.volume; volume = config.volume;
} }
} }
// Maximum is 10 // Maximum is 10
if(volume > 10) { if(volume > 10) {
volume = 10; volume = 10;
} }
// Minimum is 0
// If the controls are there if(volume < 0) {
if(player.supported.full) { volume = 0;
player.volume.value = volume;
} }
// Set the player volume // Set the player volume
player.media.volume = parseFloat(volume / 10); player.media.volume = parseFloat(volume / 10);
// Update the UI // Toggle muted state
_checkMute(); if(player.media.muted && volume > 0) {
_toggleMute();
// Store the volume in storage
if(config.storage.enabled && _storage().supported) {
window.localStorage.setItem(config.storage.key, volume);
} }
} }
@ -1171,16 +1181,32 @@
muted = !player.media.muted; muted = !player.media.muted;
} }
// If the controls are there
if(player.supported.full) {
player.buttons.mute.checked = muted;
}
// Set mute on the player // Set mute on the player
player.media.muted = muted; player.media.muted = muted;
}
// Update UI // Update volume UI and storage
_checkMute(); function _updateVolume() {
// Get the current volume
var volume = player.media.muted ? 0 : (player.media.volume * 10);
// Update the <input type="range"> if present
if(player.supported.full && player.volume) {
player.volume.value = volume;
}
// Store the volume in storage
if(config.storage.enabled && _storage().supported) {
window.localStorage.setItem(config.storage.key, volume);
}
// Toggle class if muted
_toggleClass(player.container, config.classes.muted, (volume === 0));
// Update checkbox for mute state
if(player.supported.full && player.buttons.mute) {
player.buttons.mute.checked = (volume === 0);
}
} }
// Toggle captions // Toggle captions
@ -1199,11 +1225,6 @@
_toggleClass(player.container, config.classes.captions.active, show); _toggleClass(player.container, config.classes.captions.active, show);
} }
// Check mute state
function _checkMute() {
_toggleClass(player.container, config.classes.muted, (player.media.volume === 0 || player.media.muted));
}
// Check if media is loading // Check if media is loading
function _checkLoading(event) { function _checkLoading(event) {
var loading = (event.type === "waiting"); var loading = (event.type === "waiting");
@ -1475,7 +1496,7 @@
_on(player.media, "playing", _updateProgress); _on(player.media, "playing", _updateProgress);
// Handle native mute // Handle native mute
_on(player.media, "volumechange", _checkMute); _on(player.media, "volumechange", _updateVolume);
// Handle native play/pause // Handle native play/pause
_on(player.media, "play pause", _checkPlaying); _on(player.media, "play pause", _checkPlaying);
@ -1510,7 +1531,50 @@
} }
} }
// Destroy an instance
function _destroy() {
// Bail if the element is not initialized
if(!player.init) {
return null;
}
// Reset container classname
player.container.setAttribute("class", config.selectors.container.replace(".", ""));
// Event listeners are removed when elements are removed
// http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory
// Remove controls
_remove(_getElement(config.selectors.controls));
// If video, we need to remove some more
if(player.type === "video") {
// Remove captions
_remove(_getElement(config.selectors.captions));
// Remove video wrapper
_unwrap(player.videoContainer);
}
// Restore native video controls
player.media.setAttribute("controls", "");
// Clone the media element to remove listeners
// http://stackoverflow.com/questions/19469881/javascript-remove-all-event-listeners-of-specific-type
var clone = player.media.cloneNode(true);
player.media.parentNode.replaceChild(clone, player.media);
// Remove init flag
player.init = false;
}
// Setup a player
function _init() { function _init() {
// Bail if the element is initialized
if(player.init) {
return null;
}
// Setup the fullscreen api // Setup the fullscreen api
fullscreen = _fullscreen(); fullscreen = _fullscreen();
@ -1569,10 +1633,14 @@
} }
// Successful setup // Successful setup
return true; player.init = true;
} }
if(!_init()) { // Initialize instance
_init();
// If init failed, return an empty object
if(!player.init) {
return {}; return {};
} }
@ -1591,7 +1659,9 @@
toggleCaptions: _toggleCaptions, toggleCaptions: _toggleCaptions,
toggleFullscreen: _toggleFullscreen, toggleFullscreen: _toggleFullscreen,
isFullscreen: function() { return player.isFullscreen || false; }, isFullscreen: function() { return player.isFullscreen || false; },
support: function(mimeType) { return _supportMime(player, mimeType); } support: function(mimeType) { return _supportMime(player, mimeType); },
destroy: _destroy,
restore: _init
} }
} }

View File

@ -5,50 +5,50 @@
// Variables // Variables
// ------------------------------- // -------------------------------
// Colors // Colors
$blue: #3498DB; $blue: #3498DB !default;
$gray-dark: #343f4a; $gray-dark: #343f4a !default;
$gray: #565d64; $gray: #565d64 !default;
$gray-light: #cbd0d3; $gray-light: #cbd0d3 !default;
$off-white: #d6dadd; $off-white: #d6dadd !default;
// Font sizes // Font sizes
$font-size-small: 14px; $font-size-small: 14px !default;
$font-size-base: 16px; $font-size-base: 16px !default;
$font-size-large: ceil(($font-size-base * 1.5)); $font-size-large: ceil(($font-size-base * 1.5)) !default;
// Controls // Controls
$control-spacing: 10px; $control-spacing: 10px !default;
$controls-bg: $gray-dark; $controls-bg: $gray-dark !default;
$control-bg-hover: $blue; $control-bg-hover: $blue !default;
$control-color: $gray-light; $control-color: $gray-light !default;
$control-color-inactive: $gray; $control-color-inactive: $gray !default;
$control-color-hover: #fff; $control-color-hover: #fff !default;
// Tooltips // Tooltips
$tooltip-bg: $controls-bg; $tooltip-bg: $controls-bg !default;
$tooltip-color: #fff; $tooltip-color: #fff !default;
$tooltip-padding: $control-spacing; $tooltip-padding: $control-spacing !default;
$tooltip-arrow-size: 5px; $tooltip-arrow-size: 5px !default;
$tooltip-radius: 3px; $tooltip-radius: 3px !default;
// Progress // Progress
$progress-bg: rgba(red($gray), green($gray), blue($gray), .2); $progress-bg: rgba(red($gray), green($gray), blue($gray), .2) !default;
$progress-playing-bg: $blue; $progress-playing-bg: $blue !default;
$progress-buffered-bg: rgba(red($gray), green($gray), blue($gray), .25); $progress-buffered-bg: rgba(red($gray), green($gray), blue($gray), .25) !default;
$progress-loading-size: 40px; $progress-loading-size: 40px !default;
$progress-loading-bg: rgba(0,0,0, .15); $progress-loading-bg: rgba(0,0,0, .15) !default;
// Volume // Volume
$volume-track-height: 6px; $volume-track-height: 6px !default;
$volume-track-bg: $gray; $volume-track-bg: $gray !default;
$volume-thumb-height: ($volume-track-height * 2); $volume-thumb-height: ($volume-track-height * 2) !default;
$volume-thumb-width: ($volume-track-height * 2); $volume-thumb-width: ($volume-track-height * 2) !default;
$volume-thumb-bg: $control-color; $volume-thumb-bg: $control-color !default;
$volume-thumb-bg-focus: $control-bg-hover; $volume-thumb-bg-focus: $control-bg-hover !default;
// Breakpoints // Breakpoints
$bp-control-split: 560px; // When controls split into left/right $bp-control-split: 560px !default; // When controls split into left/right
$bp-captions-large: 768px; // When captions jump to the larger font size $bp-captions-large: 768px !default; // When captions jump to the larger font size
// Utility classes & mixins // Utility classes & mixins
// ------------------------------- // -------------------------------