Fixes for volume control on iOS
This commit is contained in:
		| @ -1,5 +1,9 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## v1.0.25 | ||||||
|  | - Fixes for iOS volume controls (hidden) | ||||||
|  | - Classnames for left/right controls changed | ||||||
|  |  | ||||||
| ## v1.0.24 | ## v1.0.24 | ||||||
| - Added tooltip option to display labels as tooltips (Fixes #50) | - Added tooltip option to display labels as tooltips (Fixes #50) | ||||||
|  |  | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ This is the default `html` option from `plyr.js`. | |||||||
|             "<span>0</span>% buffered", |             "<span>0</span>% buffered", | ||||||
|         "</progress>", |         "</progress>", | ||||||
|     "</div>", |     "</div>", | ||||||
|     "<span class='player-controls-playback'>", |     "<span class='player-controls-left'>", | ||||||
|         "<button type='button' data-player='restart'>", |         "<button type='button' data-player='restart'>", | ||||||
|             "<svg><use xlink:href='#icon-restart'></use></svg>", |             "<svg><use xlink:href='#icon-restart'></use></svg>", | ||||||
|             "<span class='sr-only'>Restart</span>", |             "<span class='sr-only'>Restart</span>", | ||||||
| @ -57,7 +57,7 @@ This is the default `html` option from `plyr.js`. | |||||||
|             "<span class='player-duration'>00:00</span>", |             "<span class='player-duration'>00:00</span>", | ||||||
|         "</span>", |         "</span>", | ||||||
|     "</span>", |     "</span>", | ||||||
|     "<span class='player-controls-sound'>", |     "<span class='player-controls-right'>", | ||||||
|         "<input class='inverted sr-only' id='mute{id}' type='checkbox' data-player='mute'>", |         "<input class='inverted sr-only' id='mute{id}' type='checkbox' data-player='mute'>", | ||||||
|         "<label id='mute{id}' for='mute{id}'>", |         "<label id='mute{id}' for='mute{id}'>", | ||||||
|             "<svg class='icon-muted'><use xlink:href='#icon-muted'></use></svg>", |             "<svg class='icon-muted'><use xlink:href='#icon-muted'></use></svg>", | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dist/plyr.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/plyr.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/plyr.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/plyr.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								docs/dist/docs.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								docs/dist/docs.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								docs/dist/templates.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								docs/dist/templates.js
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,2 @@ | |||||||
|     var templates = {}; |     var templates = {}; | ||||||
|     templates['controls'] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div class=\"player-controls\">");t.b("\n" + i);t.b("	<div class=\"player-progress\">");t.b("\n" + i);t.b("		<label for=\"seek{id}\" class=\"sr-only\">Seek</label>");t.b("\n" + i);t.b("		<input id=\"seek{id}\" class=\"player-progress-seek\" type=\"range\" min=\"0\" max=\"100\" step=\"0.5\" value=\"0\" data-player=\"seek\">");t.b("\n" + i);t.b("		<progress class=\"player-progress-played\" max=\"100\" value=\"0\">");t.b("\n" + i);t.b("			<span>0</span>% played");t.b("\n" + i);t.b("		</progress>");t.b("\n" + i);t.b("		<progress class=\"player-progress-buffer\" max=\"100\" value=\"0\">");t.b("\n" + i);t.b("			<span>0</span>% buffered");t.b("\n" + i);t.b("		</progress>");t.b("\n" + i);t.b("	</div>");t.b("\n" + i);t.b("	<span class=\"player-controls-playback\">");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"restart\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-restart\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Restart</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"rewind\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-rewind\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Rewind {seektime} secs</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"play\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-play\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Play</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"pause\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-pause\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Pause</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"fast-forward\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-fast-forward\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Forward {seektime} secs</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<span class=\"player-time\">");t.b("\n" + i);t.b("			<span class=\"sr-only\">Time</span>");t.b("\n" + i);t.b("			<span class=\"player-duration\">00:00</span>");t.b("\n" + i);t.b("		</span>");t.b("\n" + i);t.b("	</span>");t.b("\n" + i);t.b("	<span class=\"player-controls-sound\">");t.b("\n" + i);t.b("		<input class=\"inverted sr-only\" id=\"mute{id}\" type=\"checkbox\" data-player=\"mute\">");t.b("\n" + i);t.b("		<label id=\"mute{id}\" for=\"mute{id}\">");t.b("\n" + i);t.b("			<svg class=\"icon-muted\"><use xlink:href=\"#icon-muted\"></use></svg>");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-volume\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Toggle Mute</span>");t.b("\n" + i);t.b("		</label>");t.b("\n");t.b("\n" + i);t.b("		<label for=\"volume{id}\" class=\"sr-only\">Volume</label>");t.b("\n" + i);t.b("		<input id=\"volume{id}\" class=\"player-volume\" type=\"range\" min=\"0\" max=\"10\" step=\"0.5\" value=\"0\" data-player=\"volume\">");t.b("\n");t.b("\n" + i);t.b("		<input class=\"sr-only\" id=\"captions{id}\" type=\"checkbox\" data-player=\"captions\">");t.b("\n" + i);t.b("		<label for=\"captions{id}\">");t.b("\n" + i);t.b("			<svg class=\"icon-captions-on\"><use xlink:href=\"#icon-captions-on\"></use></svg>");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-captions-off\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Toggle Captions</span>");t.b("\n" + i);t.b("		</label>");t.b("\n");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"fullscreen\">");t.b("\n" + i);t.b("			<svg class=\"icon-exit-fullscreen\"><use xlink:href=\"#icon-exit-fullscreen\"></use></svg>");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-enter-fullscreen\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Toggle Fullscreen</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("	</span>");t.b("\n" + i);t.b("</div>");return t.fl(); },partials: {}, subs: {  }}); |     templates['controls'] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div class=\"player-controls\">");t.b("\n" + i);t.b("	<div class=\"player-progress\">");t.b("\n" + i);t.b("		<label for=\"seek{id}\" class=\"sr-only\">Seek</label>");t.b("\n" + i);t.b("		<input id=\"seek{id}\" class=\"player-progress-seek\" type=\"range\" min=\"0\" max=\"100\" step=\"0.5\" value=\"0\" data-player=\"seek\">");t.b("\n" + i);t.b("		<progress class=\"player-progress-played\" max=\"100\" value=\"0\">");t.b("\n" + i);t.b("			<span>0</span>% played");t.b("\n" + i);t.b("		</progress>");t.b("\n" + i);t.b("		<progress class=\"player-progress-buffer\" max=\"100\" value=\"0\">");t.b("\n" + i);t.b("			<span>0</span>% buffered");t.b("\n" + i);t.b("		</progress>");t.b("\n" + i);t.b("	</div>");t.b("\n" + i);t.b("	<span class=\"player-controls-left\">");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"restart\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-restart\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Restart</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"rewind\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-rewind\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Rewind {seektime} secs</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"play\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-play\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Play</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"pause\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-pause\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Pause</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"fast-forward\">");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-fast-forward\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Forward {seektime} secs</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("		<span class=\"player-time\">");t.b("\n" + i);t.b("			<span class=\"sr-only\">Time</span>");t.b("\n" + i);t.b("			<span class=\"player-duration\">00:00</span>");t.b("\n" + i);t.b("		</span>");t.b("\n" + i);t.b("	</span>");t.b("\n" + i);t.b("	<span class=\"player-controls-right\">");t.b("\n" + i);t.b("		<input class=\"inverted sr-only\" id=\"mute{id}\" type=\"checkbox\" data-player=\"mute\">");t.b("\n" + i);t.b("		<label id=\"mute{id}\" for=\"mute{id}\">");t.b("\n" + i);t.b("			<svg class=\"icon-muted\"><use xlink:href=\"#icon-muted\"></use></svg>");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-volume\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Toggle Mute</span>");t.b("\n" + i);t.b("		</label>");t.b("\n");t.b("\n" + i);t.b("		<label for=\"volume{id}\" class=\"sr-only\">Volume</label>");t.b("\n" + i);t.b("		<input id=\"volume{id}\" class=\"player-volume\" type=\"range\" min=\"0\" max=\"10\" step=\"0.5\" value=\"0\" data-player=\"volume\">");t.b("\n");t.b("\n" + i);t.b("		<input class=\"sr-only\" id=\"captions{id}\" type=\"checkbox\" data-player=\"captions\">");t.b("\n" + i);t.b("		<label for=\"captions{id}\">");t.b("\n" + i);t.b("			<svg class=\"icon-captions-on\"><use xlink:href=\"#icon-captions-on\"></use></svg>");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-captions-off\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Toggle Captions</span>");t.b("\n" + i);t.b("		</label>");t.b("\n");t.b("\n" + i);t.b("		<button type=\"button\" data-player=\"fullscreen\">");t.b("\n" + i);t.b("			<svg class=\"icon-exit-fullscreen\"><use xlink:href=\"#icon-exit-fullscreen\"></use></svg>");t.b("\n" + i);t.b("			<svg><use xlink:href=\"#icon-enter-fullscreen\"></use></svg>");t.b("\n" + i);t.b("			<span class=\"sr-only\">Toggle Fullscreen</span>");t.b("\n" + i);t.b("		</button>");t.b("\n" + i);t.b("	</span>");t.b("\n" + i);t.b("</div>");return t.fl(); },partials: {}, subs: {  }}); | ||||||
| @ -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.0.24/docs.css"> | 		<link rel="stylesheet" href="//cdn.plyr.io/1.0.25/docs.css"> | ||||||
| 	</head> | 	</head> | ||||||
| 	<body> | 	<body> | ||||||
| 		<main> | 		<main> | ||||||
|  | |||||||
| @ -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.0.24/plyr.css"> | 		<link rel="stylesheet" href="//cdn.plyr.io/1.0.25/plyr.css"> | ||||||
|  |  | ||||||
| 		<!-- Docs styles --> | 		<!-- Docs styles --> | ||||||
| 		<link rel="stylesheet" href="//cdn.plyr.io/1.0.24/docs.css"> | 		<link rel="stylesheet" href="//cdn.plyr.io/1.0.25/docs.css"> | ||||||
| 	</head> | 	</head> | ||||||
| 	<body> | 	<body> | ||||||
| 		<header> | 		<header> | ||||||
| @ -67,13 +67,13 @@ | |||||||
| 		<!-- Load SVG defs --> | 		<!-- Load SVG defs --> | ||||||
| 		<!-- You should bundle all SVG/Icons into one file using a build tool such as gulp and svg store --> | 		<!-- You should bundle all SVG/Icons into one file using a build tool such as gulp and svg store --> | ||||||
| 		<script> | 		<script> | ||||||
| 		(function(d,p){var a=new XMLHttpRequest(),b=d.body;a.open("GET",p,!0);a.send();a.onload=function(){var c=d.createElement("div");c.style.display="none";c.innerHTML=a.responseText;b.insertBefore(c,b.childNodes[0])}})(document,"//cdn.plyr.io/1.0.24/sprite.svg"); | 		(function(d,p){var a=new XMLHttpRequest(),b=d.body;a.open("GET",p,!0);a.send();a.onload=function(){var c=d.createElement("div");c.style.display="none";c.innerHTML=a.responseText;b.insertBefore(c,b.childNodes[0])}})(document,"//cdn.plyr.io/1.0.25/sprite.svg"); | ||||||
| 		</script> | 		</script> | ||||||
|  |  | ||||||
| 		<!-- Plyr core script --> | 		<!-- Plyr core script --> | ||||||
| 		<script src="//cdn.plyr.io/1.0.24/plyr.js"></script> | 		<script src="//cdn.plyr.io/1.0.25/plyr.js"></script> | ||||||
|  |  | ||||||
| 		<!-- Docs script --> | 		<!-- Docs script --> | ||||||
| 		<script src="//cdn.plyr.io/1.0.24/docs.js"></script> | 		<script src="//cdn.plyr.io/1.0.25/docs.js"></script> | ||||||
| 	</body> | 	</body> | ||||||
| </html> | </html> | ||||||
| @ -11,8 +11,7 @@ plyr.setup({ | |||||||
| 	html: 	templates.controls.render({}), | 	html: 	templates.controls.render({}), | ||||||
| 	captions: { | 	captions: { | ||||||
| 		defaultActive: true | 		defaultActive: true | ||||||
| 	}, | 	} | ||||||
| 	tooltips: true |  | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // Google analytics  | // Google analytics  | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
| 			<span>0</span>% buffered | 			<span>0</span>% buffered | ||||||
| 		</progress> | 		</progress> | ||||||
| 	</div> | 	</div> | ||||||
| 	<span class="player-controls-playback"> | 	<span class="player-controls-left"> | ||||||
| 		<button type="button" data-player="restart"> | 		<button type="button" data-player="restart"> | ||||||
| 			<svg><use xlink:href="#icon-restart"></use></svg> | 			<svg><use xlink:href="#icon-restart"></use></svg> | ||||||
| 			<span class="sr-only">Restart</span> | 			<span class="sr-only">Restart</span> | ||||||
| @ -35,7 +35,7 @@ | |||||||
| 			<span class="player-duration">00:00</span> | 			<span class="player-duration">00:00</span> | ||||||
| 		</span> | 		</span> | ||||||
| 	</span> | 	</span> | ||||||
| 	<span class="player-controls-sound"> | 	<span class="player-controls-right"> | ||||||
| 		<input class="inverted sr-only" id="mute{id}" type="checkbox" data-player="mute"> | 		<input class="inverted sr-only" id="mute{id}" type="checkbox" data-player="mute"> | ||||||
| 		<label id="mute{id}" for="mute{id}"> | 		<label id="mute{id}" for="mute{id}"> | ||||||
| 			<svg class="icon-muted"><use xlink:href="#icon-muted"></use></svg> | 			<svg class="icon-muted"><use xlink:href="#icon-muted"></use></svg> | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "plyr", |   "name": "plyr", | ||||||
|   "version": "1.0.24", |   "version": "1.0.25", | ||||||
|   "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", | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								readme.md
									
									
									
									
									
								
							| @ -38,7 +38,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.0.24/plyr.js` to `https://cdn.plyr.io/1.0.24/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.0.25/plyr.js` to `https://cdn.plyr.io/1.0.25/plyr.js` | ||||||
|  |  | ||||||
| ### Bower | ### Bower | ||||||
| If bower is your thang, you can grab Plyr using: | If bower is your thang, you can grab Plyr using: | ||||||
| @ -51,11 +51,11 @@ More info on setting up dependencies can be found in the [Bower Docs](http://bow | |||||||
| 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. HTTPS (SSL) is supported. | ||||||
|  |  | ||||||
| ```html | ```html | ||||||
| <link rel="stylesheet" href="//cdn.plyr.io/1.0.24/plyr.css"> | <link rel="stylesheet" href="//cdn.plyr.io/1.0.25/plyr.css"> | ||||||
| <script src="//cdn.plyr.io/1.0.24/plyr.js"></script> | <script src="//cdn.plyr.io/1.0.25/plyr.js"></script> | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| You can also access the `sprite.svg` file at `//cdn.plyr.io/1.0.24/sprite.svg`. | You can also access the `sprite.svg` file at `//cdn.plyr.io/1.0.25/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.  | ||||||
| @ -365,7 +365,7 @@ Fullscreen in Plyr is supported for all browsers that [currently support it](htt | |||||||
|   </tbody> |   </tbody> | ||||||
| </table> | </table> | ||||||
|  |  | ||||||
| ¹ iPhone forces the native player for `<video>` so no customisation possible | ¹ iPhone forces the native player for `<video>` so no customisation possible. `<audio>` elements have volume controls disabled. | ||||||
|  |  | ||||||
| ² Native player used (no support for `<progress>` or `<input type="range">`) | ² Native player used (no support for `<progress>` or `<input type="range">`) | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| // ========================================================================== | // ========================================================================== | ||||||
| // Plyr | // Plyr | ||||||
| // plyr.js v1.0.24 | // plyr.js v1.0.25 | ||||||
| // https://github.com/sampotts/plyr | // https://github.com/sampotts/plyr | ||||||
| // License: The MIT License (MIT) | // License: The MIT License (MIT) | ||||||
| // ========================================================================== | // ========================================================================== | ||||||
| @ -88,7 +88,7 @@ | |||||||
|                             "<span>0</span>% buffered", |                             "<span>0</span>% buffered", | ||||||
|                         "</progress>", |                         "</progress>", | ||||||
|                     "</div>", |                     "</div>", | ||||||
|                     "<span class='player-controls-playback'>", |                     "<span class='player-controls-left'>", | ||||||
|                         "<button type='button' data-player='restart'>", |                         "<button type='button' data-player='restart'>", | ||||||
|                             "<svg><use xlink:href='#icon-restart'></use></svg>", |                             "<svg><use xlink:href='#icon-restart'></use></svg>", | ||||||
|                             "<span class='sr-only'>Restart</span>", |                             "<span class='sr-only'>Restart</span>", | ||||||
| @ -114,7 +114,7 @@ | |||||||
|                             "<span class='player-duration'>00:00</span>", |                             "<span class='player-duration'>00:00</span>", | ||||||
|                         "</span>", |                         "</span>", | ||||||
|                     "</span>", |                     "</span>", | ||||||
|                     "<span class='player-controls-sound'>", |                     "<span class='player-controls-right'>", | ||||||
|                         "<input class='inverted sr-only' id='mute{id}' type='checkbox' data-player='mute'>", |                         "<input class='inverted sr-only' id='mute{id}' type='checkbox' data-player='mute'>", | ||||||
|                         "<label id='mute{id}' for='mute{id}'>", |                         "<label id='mute{id}' for='mute{id}'>", | ||||||
|                             "<svg class='icon-muted'><use xlink:href='#icon-muted'></use></svg>", |                             "<svg class='icon-muted'><use xlink:href='#icon-muted'></use></svg>", | ||||||
| @ -137,7 +137,7 @@ | |||||||
|                     "</span>", |                     "</span>", | ||||||
|                 "</div>" |                 "</div>" | ||||||
|             ].join("\n"); |             ].join("\n"); | ||||||
|     })() |         })() | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     // Debugging |     // Debugging | ||||||
| @ -151,7 +151,7 @@ | |||||||
|     // Unfortunately, due to mixed support, UA sniffing is required |     // Unfortunately, due to mixed support, UA sniffing is required | ||||||
|     function _browserSniff() { |     function _browserSniff() { | ||||||
|         var nAgt = navigator.userAgent, |         var nAgt = navigator.userAgent, | ||||||
|             browserName = navigator.appName, |             name = navigator.appName, | ||||||
|             fullVersion = ""+parseFloat(navigator.appVersion), |             fullVersion = ""+parseFloat(navigator.appVersion), | ||||||
|             majorVersion = parseInt(navigator.appVersion,10), |             majorVersion = parseInt(navigator.appVersion,10), | ||||||
|             nameOffset, |             nameOffset, | ||||||
| @ -160,22 +160,22 @@ | |||||||
|  |  | ||||||
|         // MSIE 11 |         // MSIE 11 | ||||||
|         if ((navigator.appVersion.indexOf("Windows NT") !== -1) && (navigator.appVersion.indexOf("rv:11") !== -1)) { |         if ((navigator.appVersion.indexOf("Windows NT") !== -1) && (navigator.appVersion.indexOf("rv:11") !== -1)) { | ||||||
|             browserName = "IE"; |             name = "IE"; | ||||||
|             fullVersion = "11;"; |             fullVersion = "11;"; | ||||||
|         } |         } | ||||||
|         // MSIE |         // MSIE | ||||||
|         else if ((verOffset=nAgt.indexOf("MSIE")) !== -1) { |         else if ((verOffset=nAgt.indexOf("MSIE")) !== -1) { | ||||||
|             browserName = "IE"; |             name = "IE"; | ||||||
|             fullVersion = nAgt.substring(verOffset+5); |             fullVersion = nAgt.substring(verOffset+5); | ||||||
|         } |         } | ||||||
|         // Chrome |         // Chrome | ||||||
|         else if ((verOffset=nAgt.indexOf("Chrome")) !== -1) { |         else if ((verOffset=nAgt.indexOf("Chrome")) !== -1) { | ||||||
|             browserName = "Chrome"; |             name = "Chrome"; | ||||||
|             fullVersion = nAgt.substring(verOffset+7); |             fullVersion = nAgt.substring(verOffset+7); | ||||||
|         } |         } | ||||||
|         // Safari |         // Safari | ||||||
|         else if ((verOffset=nAgt.indexOf("Safari")) !== -1) { |         else if ((verOffset=nAgt.indexOf("Safari")) !== -1) { | ||||||
|             browserName = "Safari"; |             name = "Safari"; | ||||||
|             fullVersion = nAgt.substring(verOffset+7); |             fullVersion = nAgt.substring(verOffset+7); | ||||||
|             if ((verOffset=nAgt.indexOf("Version")) !== -1) { |             if ((verOffset=nAgt.indexOf("Version")) !== -1) { | ||||||
|                 fullVersion = nAgt.substring(verOffset+8); |                 fullVersion = nAgt.substring(verOffset+8); | ||||||
| @ -183,15 +183,15 @@ | |||||||
|         } |         } | ||||||
|         // Firefox |         // Firefox | ||||||
|         else if ((verOffset=nAgt.indexOf("Firefox")) !== -1) { |         else if ((verOffset=nAgt.indexOf("Firefox")) !== -1) { | ||||||
|             browserName = "Firefox"; |             name = "Firefox"; | ||||||
|             fullVersion = nAgt.substring(verOffset+8); |             fullVersion = nAgt.substring(verOffset+8); | ||||||
|         } |         } | ||||||
|         // In most other browsers, "name/version" is at the end of userAgent  |         // In most other browsers, "name/version" is at the end of userAgent  | ||||||
|         else if ( (nameOffset=nAgt.lastIndexOf(" ")+1) < (verOffset=nAgt.lastIndexOf("/")) ) { |         else if ( (nameOffset=nAgt.lastIndexOf(" ")+1) < (verOffset=nAgt.lastIndexOf("/")) ) { | ||||||
|             browserName = nAgt.substring(nameOffset,verOffset); |             name = nAgt.substring(nameOffset,verOffset); | ||||||
|             fullVersion = nAgt.substring(verOffset+1); |             fullVersion = nAgt.substring(verOffset+1); | ||||||
|             if (browserName.toLowerCase()==browserName.toUpperCase()) { |             if (name.toLowerCase()==name.toUpperCase()) { | ||||||
|                 browserName = navigator.appName; |                 name = navigator.appName; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         // Trim the fullVersion string at semicolon/space if present |         // Trim the fullVersion string at semicolon/space if present | ||||||
| @ -207,8 +207,13 @@ | |||||||
|             fullVersion = ""+parseFloat(navigator.appVersion);  |             fullVersion = ""+parseFloat(navigator.appVersion);  | ||||||
|             majorVersion = parseInt(navigator.appVersion,10); |             majorVersion = parseInt(navigator.appVersion,10); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Return data |         // Return data | ||||||
|         return [browserName, majorVersion]; |         return { | ||||||
|  |             name:       name,  | ||||||
|  |             version:    majorVersion,  | ||||||
|  |             ios:        /(iPad|iPhone|iPod)/g.test(navigator.platform) | ||||||
|  |         }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Check for mime type support against a player instance |     // Check for mime type support against a player instance | ||||||
| @ -614,6 +619,7 @@ | |||||||
|             } |             } | ||||||
|             catch(e) { |             catch(e) { | ||||||
|                 _log("It looks like there's a problem with your controls html. Bailing.", true); |                 _log("It looks like there's a problem with your controls html. Bailing.", true); | ||||||
|  |  | ||||||
|                 return false; |                 return false; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -652,6 +658,11 @@ | |||||||
|             // If there's no autoplay attribute, assume the video is stopped and add state class |             // If there's no autoplay attribute, assume the video is stopped and add state class | ||||||
|             _toggleClass(player.container, config.classes.stopped, (player.media.getAttribute("autoplay") === null)); |             _toggleClass(player.container, config.classes.stopped, (player.media.getAttribute("autoplay") === null)); | ||||||
|  |  | ||||||
|  |             // Add iOS class | ||||||
|  |             if(player.browser.ios) { | ||||||
|  |                 _toggleClass(player.container, "ios", true); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             // Inject the player wrapper |             // Inject the player wrapper | ||||||
|             if(player.type === "video") { |             if(player.type === "video") { | ||||||
|                 // Create the wrapper div |                 // Create the wrapper div | ||||||
| @ -727,10 +738,10 @@ | |||||||
|                     _showCaptions(player); |                     _showCaptions(player); | ||||||
|  |  | ||||||
|                     // If IE 10/11 or Firefox 31+ or Safari 7+, don"t use native captioning (still doesn"t work although they claim it"s now supported) |                     // If IE 10/11 or Firefox 31+ or Safari 7+, don"t use native captioning (still doesn"t work although they claim it"s now supported) | ||||||
|                     if ((player.browserName === "IE" && player.browserMajorVersion === 10) ||  |                     if ((player.browser.name === "IE" && player.browser.version === 10) ||  | ||||||
|                             (player.browserName === "IE" && player.browserMajorVersion === 11) ||  |                             (player.browser.name === "IE" && player.browser.version === 11) ||  | ||||||
|                             (player.browserName === "Firefox" && player.browserMajorVersion >= 31) ||  |                             (player.browser.name === "Firefox" && player.browser.version >= 31) ||  | ||||||
|                             (player.browserName === "Safari" && player.browserMajorVersion >= 7)) { |                             (player.browser.name === "Safari" && player.browser.version >= 7)) { | ||||||
|                         // Debugging |                         // Debugging | ||||||
|                         _log("Detected IE 10/11 or Firefox 31+ or Safari 7+."); |                         _log("Detected IE 10/11 or Firefox 31+ or Safari 7+."); | ||||||
|  |  | ||||||
| @ -802,7 +813,7 @@ | |||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     // If Safari 7+, removing track from DOM [see "turn off native caption rendering" above] |                     // If Safari 7+, removing track from DOM [see "turn off native caption rendering" above] | ||||||
|                     if (player.browserName === "Safari" && player.browserMajorVersion >= 7) { |                     if (player.browser.name === "Safari" && player.browser.version >= 7) { | ||||||
|                         _log("Safari 7+ detected; removing track from DOM."); |                         _log("Safari 7+ detected; removing track from DOM."); | ||||||
|  |  | ||||||
|                         // Find all <track> elements |                         // Find all <track> elements | ||||||
| @ -1273,16 +1284,14 @@ | |||||||
|             fullscreen = _fullscreen(); |             fullscreen = _fullscreen(); | ||||||
|  |  | ||||||
|             // Sniff  |             // Sniff  | ||||||
|             player.browserInfo = _browserSniff(); |             player.browser = _browserSniff(); | ||||||
|             player.browserName = player.browserInfo[0]; |  | ||||||
|             player.browserMajorVersion = player.browserInfo[1]; |  | ||||||
|  |  | ||||||
|             // Debug info |             // Debug info | ||||||
|             _log(player.browserName + " " + player.browserMajorVersion); |             _log(player.browser.name + " " + player.browser.version); | ||||||
|  |  | ||||||
|             // If IE8, stop customization (use fallback) |             // If IE8, stop customization (use fallback) | ||||||
|             // If IE9, stop customization (use native controls) |             // If IE9, stop customization (use native controls) | ||||||
|             if (player.browserName === "IE" && (player.browserMajorVersion === 8 || player.browserMajorVersion === 9) ) { |             if (player.browser.name === "IE" && (player.browser.version === 8 || player.browser.version === 9) ) { | ||||||
|                 _log("Browser not suppported.", true); |                 _log("Browser not suppported.", true); | ||||||
|                 return false; |                 return false; | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -185,15 +185,15 @@ | |||||||
| 		text-align: center; | 		text-align: center; | ||||||
|  |  | ||||||
| 		// Layout | 		// Layout | ||||||
| 		&-sound { | 		&-right { | ||||||
| 			display: block; | 			display: block; | ||||||
| 			margin: @control-spacing auto 0; | 			margin: @control-spacing auto 0; | ||||||
| 		} | 		} | ||||||
| 		@media (min-width: @bp-control-split) { | 		@media (min-width: @bp-control-split) { | ||||||
| 			&-playback { | 			&-left { | ||||||
| 				float: left; | 				float: left; | ||||||
| 			} | 			} | ||||||
| 			&-sound { | 			&-right { | ||||||
| 				float: right; | 				float: right; | ||||||
| 				margin-top: 0; | 				margin-top: 0; | ||||||
| 			} | 			} | ||||||
| @ -497,6 +497,20 @@ | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// Hide sound controls on iOS | ||||||
|  | 	// It's not supported to change volume using JavaScript: | ||||||
|  | 	// https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html | ||||||
|  | 	&.ios &-volume, | ||||||
|  | 	&.ios [data-player='mute'], | ||||||
|  | 	&.ios [data-player='mute'] + label, | ||||||
|  | 	&-audio.ios &-controls-right { | ||||||
|  | 		display: none; | ||||||
|  | 	} | ||||||
|  | 	// Center buttons so it looks less odd | ||||||
|  | 	&-audio.ios &-controls-left { | ||||||
|  | 		float: none; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	// Full screen mode | 	// Full screen mode | ||||||
| 	&-fullscreen, | 	&-fullscreen, | ||||||
| 	&.fullscreen-active { | 	&.fullscreen-active { | ||||||
|  | |||||||
| @ -196,10 +196,10 @@ $bp-captions-large: 		768px; // When captions jump to the larger font size | |||||||
| 			margin: $control-spacing auto 0; | 			margin: $control-spacing auto 0; | ||||||
| 		} | 		} | ||||||
| 		@media (min-width: $bp-control-split) { | 		@media (min-width: $bp-control-split) { | ||||||
| 			&-playback { | 			&-left { | ||||||
| 				float: left; | 				float: left; | ||||||
| 			} | 			} | ||||||
| 			&-sound { | 			&-right { | ||||||
| 				float: right; | 				float: right; | ||||||
| 				margin-top: 0; | 				margin-top: 0; | ||||||
| 			} | 			} | ||||||
| @ -499,6 +499,20 @@ $bp-captions-large: 		768px; // When captions jump to the larger font size | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// Hide sound controls on iOS | ||||||
|  | 	// It's not supported to change volume using JavaScript: | ||||||
|  | 	// https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html | ||||||
|  | 	&.ios &-volume, | ||||||
|  | 	&.ios [data-player='mute'], | ||||||
|  | 	&.ios [data-player='mute'] + label, | ||||||
|  | 	&-audio.ios &-controls-right { | ||||||
|  | 		display: none; | ||||||
|  | 	} | ||||||
|  | 	// Center buttons so it looks less odd | ||||||
|  | 	&-audio.ios &-controls-left { | ||||||
|  | 		float: none; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	// Full screen mode | 	// Full screen mode | ||||||
| 	&-fullscreen, | 	&-fullscreen, | ||||||
| 	&.fullscreen-active { | 	&.fullscreen-active { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user