Changes to setup return value, SVG bug fix (fixes #269)
This commit is contained in:
		
							
								
								
									
										148
									
								
								src/js/plyr.js
									
									
									
									
									
								
							
							
						
						
									
										148
									
								
								src/js/plyr.js
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| // ========================================================================== | ||||
| // Plyr | ||||
| // plyr.js v1.7.0 | ||||
| // plyr.js v1.8.0 | ||||
| // https://github.com/selz/plyr | ||||
| // License: The MIT License (MIT) | ||||
| // ========================================================================== | ||||
| @ -44,7 +44,7 @@ | ||||
|         displayDuration:        true, | ||||
|         loadSprite:             true, | ||||
|         iconPrefix:             'plyr', | ||||
|         iconUrl:                'https://cdn.plyr.io/1.7.0/plyr.svg', | ||||
|         iconUrl:                'https://cdn.plyr.io/1.8.0/plyr.svg', | ||||
|         clickToPlay:            true, | ||||
|         hideControls:           true, | ||||
|         showPosterOnEnd:        false, | ||||
| @ -175,51 +175,56 @@ | ||||
|     // Credits: http://paypal.github.io/accessible-html5-video-player/ | ||||
|     // Unfortunately, due to mixed support, UA sniffing is required | ||||
|     function _browserSniff() { | ||||
|         var nAgt = navigator.userAgent, | ||||
|         var ua = navigator.userAgent, | ||||
|             name = navigator.appName, | ||||
|             fullVersion = '' + parseFloat(navigator.appVersion), | ||||
|             majorVersion = parseInt(navigator.appVersion, 10), | ||||
|             nameOffset, | ||||
|             verOffset, | ||||
|             ix; | ||||
|             ix, | ||||
|             isIE = false, | ||||
|             isFirefox = false, | ||||
|             isChrome = false, | ||||
|             isSafari = false; | ||||
|  | ||||
|         // MSIE 11 | ||||
|         if ((navigator.appVersion.indexOf('Windows NT') !== -1) && (navigator.appVersion.indexOf('rv:11') !== -1)) { | ||||
|             name = 'IE'; | ||||
|             isIE = true; | ||||
|             fullVersion = '11;'; | ||||
|         } | ||||
|         // MSIE | ||||
|         else if ((verOffset=nAgt.indexOf('MSIE')) !== -1) { | ||||
|             name = 'IE'; | ||||
|             fullVersion = nAgt.substring(verOffset + 5); | ||||
|         else if ((verOffset = ua.indexOf('MSIE')) !== -1) { | ||||
|             isIE = true; | ||||
|             fullVersion = ua.substring(verOffset + 5); | ||||
|         } | ||||
|         // Chrome | ||||
|         else if ((verOffset=nAgt.indexOf('Chrome')) !== -1) { | ||||
|             name = 'Chrome'; | ||||
|             fullVersion = nAgt.substring(verOffset + 7); | ||||
|         else if ((verOffset = ua.indexOf('Chrome')) !== -1) { | ||||
|             isChrome = true; | ||||
|             fullVersion = ua.substring(verOffset + 7); | ||||
|         } | ||||
|         // Safari | ||||
|         else if ((verOffset=nAgt.indexOf('Safari')) !== -1) { | ||||
|             name = 'Safari'; | ||||
|             fullVersion = nAgt.substring(verOffset + 7); | ||||
|             if ((verOffset = nAgt.indexOf('Version')) !== -1) { | ||||
|                 fullVersion = nAgt.substring(verOffset + 8); | ||||
|         else if ((verOffset = ua.indexOf('Safari')) !== -1) { | ||||
|             isSafari = true; | ||||
|             fullVersion = ua.substring(verOffset + 7); | ||||
|             if ((verOffset = ua.indexOf('Version')) !== -1) { | ||||
|                 fullVersion = ua.substring(verOffset + 8); | ||||
|             } | ||||
|         } | ||||
|         // Firefox | ||||
|         else if ((verOffset=nAgt.indexOf('Firefox')) !== -1) { | ||||
|             name = 'Firefox'; | ||||
|             fullVersion = nAgt.substring(verOffset + 8); | ||||
|         else if ((verOffset = ua.indexOf('Firefox')) !== -1) { | ||||
|             isFirefox = true; | ||||
|             fullVersion = ua.substring(verOffset + 8); | ||||
|         } | ||||
|         // In most other browsers, 'name/version' is at the end of userAgent | ||||
|         else if ((nameOffset=nAgt.lastIndexOf(' ') + 1) < (verOffset=nAgt.lastIndexOf('/'))) { | ||||
|             name = nAgt.substring(nameOffset,verOffset); | ||||
|             fullVersion = nAgt.substring(verOffset + 1); | ||||
|         else if ((nameOffset = ua.lastIndexOf(' ') + 1) < (verOffset = ua.lastIndexOf('/'))) { | ||||
|             name = ua.substring(nameOffset,verOffset); | ||||
|             fullVersion = ua.substring(verOffset + 1); | ||||
|  | ||||
|             if (name.toLowerCase() == name.toUpperCase()) { | ||||
|                 name = navigator.appName; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Trim the fullVersion string at semicolon/space if present | ||||
|         if ((ix = fullVersion.indexOf(';')) !== -1) { | ||||
|             fullVersion = fullVersion.substring(0, ix); | ||||
| @ -227,6 +232,7 @@ | ||||
|         if ((ix = fullVersion.indexOf(' ')) !== -1) { | ||||
|             fullVersion = fullVersion.substring(0, ix); | ||||
|         } | ||||
|  | ||||
|         // Get major version | ||||
|         majorVersion = parseInt('' + fullVersion, 10); | ||||
|         if (isNaN(majorVersion)) { | ||||
| @ -238,6 +244,10 @@ | ||||
|         return { | ||||
|             name:       name, | ||||
|             version:    majorVersion, | ||||
|             isIE:       isIE, | ||||
|             isFirefox:  isFirefox, | ||||
|             isChrome:   isChrome, | ||||
|             isSafari:   isSafari, | ||||
|             ios:        /(iPad|iPhone|iPod)/g.test(navigator.platform), | ||||
|             touch:      'ontouchstart' in document.documentElement | ||||
|         }; | ||||
| @ -924,8 +934,8 @@ | ||||
|  | ||||
|                 // Disable unsupported browsers than report false positive | ||||
|                 // Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1033144 | ||||
|                 if ((plyr.browser.name === 'IE' && plyr.browser.version >= 10) || | ||||
|                     (plyr.browser.name === 'Firefox' && plyr.browser.version >= 31)) { | ||||
|                 if ((plyr.browser.isIE && plyr.browser.version >= 10) || | ||||
|                     (plyr.browser.isFirefox && plyr.browser.version >= 31)) { | ||||
|  | ||||
|                     // Debugging | ||||
|                     _log('Detected browser with known TextTrack issues - using manual fallback'); | ||||
| @ -1191,15 +1201,16 @@ | ||||
|         function _injectControls() { | ||||
|             // Sprite | ||||
|             if (config.loadSprite) { | ||||
|                 var iconUrl = _getIconUrl(); | ||||
|                 var iconUrl = _getIconUrl(), | ||||
|                     isExternal = iconUrl.external; | ||||
|  | ||||
|                 // Only load external sprite using AJAX | ||||
|                 if (iconUrl.external) { | ||||
|                     _log('Loading external SVG sprite'); | ||||
|                 if (isExternal || plyr.browser.isIE) { | ||||
|                     _log('AJAX loading external SVG sprite' + (plyr.browser.isIE ? ' (due to IE)' : '')); | ||||
|                     loadSprite(iconUrl.url, "sprite-plyr"); | ||||
|                 } | ||||
|                 else { | ||||
|                     _log('Sprite will be used inline'); | ||||
|                     _log('Sprite will be used as external resource directly'); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @ -2715,7 +2726,7 @@ | ||||
|         // Listen for control events | ||||
|         function _controlListeners() { | ||||
|             // IE doesn't support input event, so we fallback to change | ||||
|             var inputEvent = (plyr.browser.name == 'IE' ? 'change' : 'input'); | ||||
|             var inputEvent = (plyr.browser.isIE ? 'change' : 'input'); | ||||
|  | ||||
|             // Click play/pause helper | ||||
|             function _togglePlay() { | ||||
| @ -3262,7 +3273,7 @@ | ||||
|     // Check for support | ||||
|     function supported(type) { | ||||
|         var browser = _browserSniff(), | ||||
|             oldIE   = (browser.name === 'IE' && browser.version <= 9), | ||||
|             oldIE   = (browser.isIE && browser.version <= 9), | ||||
|             iPhone  = /iPhone|iPod/i.test(navigator.userAgent), | ||||
|             audio   = !!document.createElement('audio').canPlayType, | ||||
|             video   = !!document.createElement('video').canPlayType, | ||||
| @ -3298,55 +3309,82 @@ | ||||
|     } | ||||
|  | ||||
|     // Setup function | ||||
|     function setup(elements, options) { | ||||
|     function setup(targets, options) { | ||||
|         // Get the players | ||||
|         var instances = [], | ||||
|             selector = [defaults.selectors.html5, defaults.selectors.embed].join(','); | ||||
|         var elements    = [], | ||||
|             containers  = [], | ||||
|             selector    = [defaults.selectors.html5, defaults.selectors.embed].join(','); | ||||
|  | ||||
|         // Select the elements | ||||
|         // Assume elements is a NodeList by default | ||||
|         if (typeof elements === 'string') { | ||||
|             elements = document.querySelectorAll(elements); | ||||
|         if (typeof targets === 'string') { | ||||
|             targets = document.querySelectorAll(targets); | ||||
|         } | ||||
|         // Single HTMLElement passed | ||||
|         else if (elements instanceof HTMLElement) { | ||||
|             elements = [elements]; | ||||
|         else if (targets instanceof HTMLElement) { | ||||
|             targets = [targets]; | ||||
|         } | ||||
|         // No selector passed, possibly options as first argument | ||||
|         else if (!(elements instanceof NodeList) && typeof elements !== 'string')  { | ||||
|         else if (!(targets instanceof NodeList) && typeof targets !== 'string')  { | ||||
|             // If options are the first argument | ||||
|             if (typeof options === 'undefined' && typeof elements === 'object') { | ||||
|                 options = elements; | ||||
|             if (typeof options === 'undefined' && typeof targets === 'object') { | ||||
|                 options = targets; | ||||
|             } | ||||
|  | ||||
|             // Use default selector | ||||
|             elements = document.querySelectorAll(selector); | ||||
|             targets = document.querySelectorAll(selector); | ||||
|         } | ||||
|  | ||||
|         // Bail if disabled or no basic support | ||||
|         // You may want to disable certain UAs etc | ||||
|         if (!supported().basic || !elements.length) { | ||||
|         if (!supported().basic || !targets.length) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         // Convert NodeList to array | ||||
|         if (targets instanceof NodeList) { | ||||
|             targets = Array.prototype.slice.call(targets); | ||||
|         } | ||||
|  | ||||
|         // Check if the targets have multiple media elements | ||||
|         for (var i = 0; i < targets.length; i++) { | ||||
|             var target = targets[i]; | ||||
|  | ||||
|             // Get children | ||||
|             var children = target.querySelectorAll(selector); | ||||
|  | ||||
|             // If there's more than one media element, wrap them | ||||
|             if (children.length > 1) { | ||||
|                 for (var x = 0; x < children.length; x++) { | ||||
|                     containers.push({ | ||||
|                         element: _wrap(children[x], document.createElement('div')), | ||||
|                         original: target | ||||
|                     }); | ||||
|                 } | ||||
|             } | ||||
|             else { | ||||
|                 containers.push({ | ||||
|                     element: target | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Create a player instance for each element | ||||
|         for (var i = 0; i < elements.length; i++) { | ||||
|             // Get the current element | ||||
|             var element = elements[i]; | ||||
|         for (var key in containers) { | ||||
|             var element = containers[key].element, | ||||
|                 original = containers[key].original || element; | ||||
|  | ||||
|             // Custom settings passed as data attribute | ||||
|             var settings = element.getAttribute("data-plyr"); | ||||
|  | ||||
|             // Wrap each media element if needed | ||||
|             // Wrap each media element if is target is media element | ||||
|             // as opposed to a wrapper | ||||
|             if (_matches(element, selector)) { | ||||
|                 // Wrap in a <div> | ||||
|                 element = _wrap(element, document.createElement('div')); | ||||
|             } | ||||
|  | ||||
|             // Setup a player instance and add to the element | ||||
|             if (typeof element.plyr === 'undefined') { | ||||
|             if (!('plyr' in element)) { | ||||
|                 // Create instance-specific config | ||||
|                 var config = _extend({}, defaults, options, JSON.parse(settings)); | ||||
|                 var config = _extend({}, defaults, options, JSON.parse(original.getAttribute('data-plyr'))); | ||||
|  | ||||
|                 // Bail if not enabled | ||||
|                 if (!config.enabled) { | ||||
| @ -3360,14 +3398,16 @@ | ||||
|                 element.plyr = (Object.keys(instance).length ? instance : false); | ||||
|  | ||||
|                 // Callback | ||||
|                 _triggerEvent(element, 'setup', { plyr: element.plyr }); | ||||
|                 _triggerEvent(original, 'setup', {  | ||||
|                     plyr: element.plyr  | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
|             // Add to return array even if it's already setup | ||||
|             instances.push(element.plyr); | ||||
|             elements.push(element); | ||||
|         } | ||||
|  | ||||
|         return instances; | ||||
|         return elements; | ||||
|     } | ||||
|  | ||||
|     return { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user