diff options
Diffstat (limited to 'chimere/static/jme/packages/mm.embed.js')
| -rw-r--r-- | chimere/static/jme/packages/mm.embed.js | 1166 | 
1 files changed, 1166 insertions, 0 deletions
| diff --git a/chimere/static/jme/packages/mm.embed.js b/chimere/static/jme/packages/mm.embed.js new file mode 100644 index 0000000..3213893 --- /dev/null +++ b/chimere/static/jme/packages/mm.embed.js @@ -0,0 +1,1166 @@ +/**! + * Part of the jMediaelement-Project vpre1.3.5 | http://github.com/aFarkas/jMediaelement + * @author Alexander Farkas + * Copyright 2010, Alexander Farkas + * Dual licensed under the MIT or GPL Version 2 licenses. + */ + +(function($){ +	$.multimediaSupport = {}; +	var m 		= $.multimediaSupport, +		vID 	= new Date().getTime(), +		doc		= document, +		tVid 	= $('<video />')[0], +		//this bad assumption isn't really true, but our workaround-implementation doesn't really hurt +		supportMediaPreload = !( 'webkitPreservesPitch' in tVid && parseFloat($.browser.version, 10) < 535 && (navigator.userAgent.indexOf('Chrome') !== -1 || navigator.userAgent.indexOf('Mac') === -1) ) +	; +	// support test + document.createElement trick +	$.support.video = !!(tVid.canPlayType); +	$.support.autoBuffer = !!('autobuffer' in tVid); +	$.support.audio = !!($('<audio />')[0].canPlayType); +	 +	tVid = null; +	 +	$('<source />'); +	$('<track />'); +	 +	$.support.mediaElements = ($.support.video && $.support.audio); +	$.support.dynamicHTML5 = !!($('<video><div></div></video>')[0].innerHTML); +	$.support.mediaLoop = ('loop' in $('<video />')[0]); +	$.browser.deprecatedPoster = !supportMediaPreload; +	 +	// HTML5 shiv document.createElement does not work with dynamic inserted elements +	// thanks to jdbartlett for this simple script +	// see also http://jdbartlett.github.com/innershiv/ +	$.fixHTML5 = (function(){ +		var d, b; +		return ($.support.dynamicHTML5) ?  +			function(h){return h;} : +			function(h) { +				if (!d) { +					b = document.body; +					d = document.createElement('div'); +					d.style.display = 'none'; +				} +				var e = d.cloneNode(false); +				b.appendChild(e); +				e.innerHTML = h; +				b.removeChild(e); +				return e.childNodes; +			} +		; +	})(); +	 +	 +	 +	var cssShow 		= { left: "0px", position: "absolute", visibility: "hidden", display:"block" }, +		dimStyles = ['float'] +	; +	 +	$.each(['Top', 'Left', 'Right', 'Bottom'], function(i, name){ +		dimStyles.push('margin'+ name); +		dimStyles.push('padding'+ name); +		dimStyles.push('border'+ name +'Width'); +		setTimeout(function(){ +			m._transferStyles.push('border'+ name +'Color'); +			m._transferStyles.push('border'+ name +'Style'); +		}, 1); +	}); +	$.fn.getDimensions = function(){ +		var ret = {width: 0, height: 0}; +		if(this[0]){ +			var elem = this, +				elmS = this[0].style +			; +			// assume that inline style is correct +			// enables %, em etc. feature with inline-style (i.e.: 100%) +			ret.height = elmS.height || this.height(); +			ret.width = elmS.width || this.width(); +			$.each(dimStyles, function(i, name){ +				// assume that inline style is correct +				ret[name] = elmS[name] || elem.css(name); +			}); +		} +		return ret; +	}; +	 +	 +	 +	var oldAttr 		= $.attr, +		attrElems 		= /video|audio|source/i, +		srcNames 		= { +					src: 1, +					poster: 1 +				}, +		booleanNames 	= { +					loop: 1, +					autoplay: 1, +					controls: 1 +				}, +		mixedNames 		= { +			srces: 1, +			getConfig: 1, +			preload: 1 +		}, +		preloadVals = { +			auto: 1, +			metadata: 1, +			none: 1 +		}  +	; +	 +	var fixPreload = { +		change: function(elem, setPreload, force){ +			if( !$.support.mediaElements ){return;} +			var _preload = elem.getAttribute('preload') || 'metadata'; +			if( force || setPreload !== _preload ){ +				if( !supportMediaPreload ){ +					if( setPreload === 'none' || (_preload === 'none' && (setPreload === 'auto' || !elem.getAttribute('poster')) ) ){ +						$(elem).unbind('play', fixPreload.changePlayMode); +						if(setPreload === 'none'){ +							$(elem).bind('play', fixPreload.changePlayMode); +						} +						$.attr(elem, 'srces', $.attr(elem, 'srces'), setPreload); +					} +				} else if( $.support.autoBuffer ){ +					elem.autobuffer = !!(setPreload === 'auto'); +				} +			} +		}, +		changeAutoplay: function(elem, autoplay){ +			if( $.support.mediaElements && !supportMediaPreload && $.attr(elem, 'preload') === 'none' && autoplay !== $.attr(elem, 'autoplay')){ +				var srces = $.attr(elem, 'srces'); +				$.attr(elem, 'srces', srces, 'auto'); +				if( srces.length && autoplay ){ +					setTimeout(function(){ +						if(elem.play && $(elem).getMediaAPI() === 'nativ' ){ +							elem.play(); +						} +					}, 9); +				} +			} +		}, +		changePlayMode: function(){ +			fixPreload.changeAutoplay(this, true); +		}, +		addSrces: function(elem, srces, preload){ +			if( supportMediaPreload || !$.support.mediaElements ){ +				return false; +			} +			 +			preload = preload || $.attr(elem, 'preload'); +			$(elem).unbind('play', fixPreload.changePlayMode); +			if( preload === 'auto' || $.attr(elem, 'autoplay') ){return $.data(elem, 'jme-srces', false);} +			$(elem).bind('play', fixPreload.changePlayMode); +			$.data(elem, 'jme-srces', srces); +			return true; +		} +	}; +	$.attr = function(elem, name, value, preloadPass){ +		 +		if( !(elem.nodeName && attrElems.test(elem.nodeName) && (mixedNames[name] || booleanNames[name] || srcNames[name])) ){ +			return oldAttr(elem, name, value, preloadPass); +		} +		 +		var set = (value !== undefined), elemName, api, ret; +		 +		if(!set){ +			if(booleanNames[name]){ +				return ( typeof elem[name] === 'boolean' ) ? elem[name] : !!((elem.attributes[name] || {}).specified); +			} +			if(srcNames[name]){ +				return $.support.video && elem[name] || m.makeAbsURI(elem.getAttribute(name)); +			} +			switch(name) { +				case 'srces': +					ret = $.data(elem, 'jme-srces'); +					if(ret){break;} +					 +					ret = $.attr(elem, 'src'); +					if( ret ){ +						ret = [{ +								src: ret, +								type: elem.getAttribute('type'), +								media: elem.getAttribute('media') +							}] +						; +					} else { +						ret = []; +						$('source', elem).each(function(i){ +							ret.push({ +								src: $.attr(this, 'src'), +								type: this.getAttribute('type'), +								media: this.getAttribute('media') +							}); +						}); +						// safari without quicktime ignores source-tags, initially +						if(!ret.length){ +							$('a.source', elem).each(function(){ +								ret.push({ +									src: this.href, +									type: this.getAttribute('type'), +									media: this.getAttribute('data-media') +								}); +							}); +						} +					} +					break; +				case 'getConfig': +					ret = {}; +					$.each(['autoplay', 'loop', 'controls', 'poster', 'preload'], function(i, name){ +						ret[name] = $.attr(elem, name); +					}); +					break; +				case 'preload': +					ret = elem.preload || elem.getAttribute('preload'); +					if(ret === ''){ +						ret = 'auto'; +					} +					if(!preloadVals[ret]){ +						ret = 'metadata'; +					} +					break; +			} +			return ret; +		} else { +			if(booleanNames[name]){ +				value = !!(value); +				elem[name] = value; +				if(name === 'autoplay'){ +					fixPreload.changeAutoplay(elem, value); +				} +				if(value){ +					elem[name] = value; +					elem.setAttribute(name, name); +				} else { +					elem[name] = value; +					elem.removeAttribute(name); +				} +			} else if(srcNames[name]){ +				elem.setAttribute(name, value); +			} else if (name === 'srces') { +				$('source, a.source', elem).remove(); +				elem.removeAttribute('src'); +				value = $.isArray(value) ? value : [value]; +				if(fixPreload.addSrces(elem, value, preloadPass)){return;} +				$.each(value, function(i, src){ +					 +					ret = doc.createElement('source'); +					if(typeof src === 'string'){ +						src = {src: src}; +					} +					ret.setAttribute('src', src.src); +					if(src.type){ +						ret.setAttribute('type', src.type); +					} +					if(src.media){ +						ret.setAttribute('media', src.media); +					} +					elem.appendChild(ret); +				}); +			} else if(name === 'getConfig'){ +				//works, but you shouldn´t use as a setter +				$.each(value, function(n, v){ +					$.attr(elem, n, v); +				}); +			} else if(name === 'preload'){ +				if(value === ''){ +					value = 'auto'; +				} else if(!preloadVals[value]){ +					value = 'metadata'; +				} +				fixPreload.change(elem, value, preloadPass); +				elem.setAttribute(name, value); +			} +		} +	}; +	 +	function sourceError(){ +		$.event.special.mediaerror.handler.apply($(this).closest('video, audio')[0], arguments); +	} +	 +	function bindSource(e){ +		if(!$.support.mediaElements){return;} +		 +		var apis = $.data(this, 'mediaElemSupport'); +		if(!apis || !apis.apis){return;} +		//reset error +		if(e && e.type){ +			$.data(this, 'calledMediaError', false); +		} +		apis = apis.apis; +		 +		//webkit is really stupid with the error event, so fallback to canPlaytype +		var elem 	= this, +			srces 	= $.attr(this, 'srces') +		; +		 +		if( elem.error || (srces.length && !apis.nativ.canPlaySrces(srces)) ){ +			$.event.special.mediaerror.handler.call(this, $.Event('mediaerror')); +			//stop trying to play +			try { +				elem.pause(); +			} catch(er){} +		} +				 +		//bind error  +		$('source', this) +			.unbind('error', sourceError) +			.filter(':last') +			.bind('error', sourceError) +		; +	} +	 +	$.event.special.mediaerror = { +		setup: function(){ +			//ff always triggers an error on video/audio | w3c/webkit/opera triggers error event on source, if available +			var media = $(this) +				.bind('error', $.event.special.mediaerror.handler) +				//older webkit do not support emptied +				.bind('native_mediareset', bindSource) +			; +			//bindSource can trigger mediaerror, but event is always bound after setup +			setTimeout(function(){ +				media.each(bindSource); +			}, 0); +		}, +		teardown: function(){ +			$(this) +				.unbind('error', $.event.special.mediaerror.handler) +				.find('source') +				.unbind('error', sourceError) +			; +		}, +		handler: function(e){ +			if($.data(this, 'calledMediaError')){return;} +			e = $.extend({}, e || {}, {type: 'mediaerror'}); +			$.data(this, 'calledMediaError', true); +			return $.event.handle.apply(this, arguments); +		} +	}; +	 +	m.getExt = function(src){ +		var pos = src.indexOf('?'), +			ext = '' +		; +		src = (pos > 0) ? src.substring(0, pos) : src; +		pos = src.lastIndexOf('.') + 1; +		ext = src.substr(pos); +		return (ext && ext.toLowerCase) ? ext.toLowerCase() : ext; +	}; + + +	var getExt = m.getExt; +	var mimeTypes = { +			audio: { +				//ogm shouldn´t be used! +				'audio/ogg': ['ogg','oga', 'ogm'], +				'audio/mpeg': ['mp2','mp3','mpga','mpega'], +				'audio/mp4': ['mp4','mpg4', 'm4r'], +				'audio/wav': ['wav'], +				'audio/x-m4a': ['m4a'], +				'audio/x-m4p': ['m4p'], +				'audio/3gpp': ['3gp','3gpp'], +				'audio/webm': ['webm'] +			}, +			video: { +				//ogm shouldn´t be used! +				'video/ogg': ['ogg','ogv', 'ogm'], +				'video/mpeg': ['mpg','mpeg','mpe'], +				'video/mp4': ['mp4','mpg4', 'm4v'], +				'video/quicktime': ['mov','qt'], +				'video/x-msvideo': ['avi'], +				'video/x-ms-asf': ['asf', 'asx'], +				'video/flv': ['flv', 'f4v'], +				'video/3gpp': ['3gp','3gpp'], +				'video/webm': ['webm'] +			} +		} +	; +	 +	 +	$.extend(m, { +		jsPath: (function(){ +			var scripts = $('script'), +				path = scripts[scripts.length - 1].src.split('?')[0] +			; +			return path.slice(0, path.lastIndexOf("/") + 1); +		})(), +		extendWithData: (function(){ +			var allowedVals ={ +				string: 1, +				number: 1, +				'boolean': 1 +			}; +			return function(elem, target, obj){ +				if(!obj){ +					obj = target; +				} +				$.each(obj, $.isArray(obj) ?  +					function(i, name){ +						m.getData(elem, name, target); +					} : +					function(name, val){ +						if(allowedVals[typeof val]){ +							m.getData(elem, name, target); +						} +					} +				); +				return target; +			}; +		})(), +		getData: (function(){ +			var getVal = function(elem, name){ +				var val = elem.getAttribute('data-'+ name); +				if(!val && val !== ''){ +					return undefined; +				} +								 +				return (val * 1 == val) ?  +					parseFloat(val, 10) : +					(val === 'false') ? +					false : +					(val === 'true') ? +					true : +					val +				; +			}; +			return function(elem, arr, ret){ +				var name = arr; +				ret = ret || {}; +				if(typeof arr === 'string'){ +					arr = [name]; +				} +				 +				$.each(arr, $.isArray(arr) ?  +					function(i, name){ +						var val = getVal(elem, name); +						if(val !== undefined){ +							ret[name] = val; +						} +					} : +					function(name){ +						var val = getVal(elem, name); +						if(val !== undefined){ +							ret[name] = val; +						} +					} +				); +				return ret; +			}; +		})(), +		registerMimetype: function(elemName, mimeObj){ +			if(arguments.length === 1){ +				$.each(mimeTypes, function(name){ +					m.registerMimetype(name, elemName); +				}); +				return; +			} +			$.each(mimeObj, function(mime, exts){ +				if(mimeTypes[elemName][mime]){ +					mimeTypes[elemName][mime] = []; +				} +				mimeTypes[elemName][mime] = mimeTypes[elemName][mime].concat(exts); +			}); +			 +		}, +		_showMimeTypes: function(){ +			if(window.console){ +				console.log(mimeTypes); +			} +		}, +		add: function(name, elemName, api){ +			if(!this.apis[elemName][name]){ +				this.apis[elemName][name] = m.beget(this.fn); +				if(name !== 'nativ' && $.inArray(name, $.fn.jmeEmbed.defaults.apiOrder) === -1){ +					$.fn.jmeEmbed.defaults.apiOrder.push(name); +				} +			}  +			$.extend(true, this.apis[elemName][name], api); +		}, +		fn: { +			_init: $.noop, +			canPlayType: function(type){ +				var elem = this.apiElem, +					ret +				; +				if(elem && elem.canPlayType){ +					ret = elem.canPlayType(type); +					return (ret === 'no') ? '' : ret; +				} +				var parts 	= m.extractContainerCodecsFormType(type), +					that 	= this +				; +				ret		= 'probably'; +				if(!parts[1]){ +					return (this.canPlayContainer && $.inArray(parts[0], this.canPlayContainer) !== -1) ? 'maybe' : ''; +				} +				$.each(parts[1], function(i, part){ +					if(!that.canPlayCodecs || $.inArray(part, that.canPlayCodecs) === -1){ +						ret = ''; +						return false; +					} +				}); +				return ret; +			}, +			canPlaySrc: function(src){ +				var that = this; +				if(typeof src !== 'string'){ +					if(src.type){ +						return this.canPlayType(src.type); +					} +					src = src.src; +				} +				 +				var ext = getExt(src), ret = ''; +				$.each(mimeTypes[this.nodeName], function(mime, exts){ +					var index = $.inArray(ext, exts); +					if(index !== -1){ +						ret = that.canPlayType(mime); +						return false; +					} +				}); +				return ret; +			}, +			canPlaySrces: function(srces){ +				srces = srces || $.attr(this.element, 'srces'); +				if(!$.isArray(srces)){ +					srces = [srces]; +				} +				var that 	= this, +					canplay = false, +					src 	= '' +				; +				$.each(srces, function(i, curSrc){ +					canplay = that.canPlaySrc(curSrc); +					if(canplay){ +						src = curSrc; +						return false; +					} +				}); +				return src; +			}, +			_setActive: $.noop, +			_setInactive: $.noop, +			_trigger: function(e){$(this.element).triggerHandler(e, e);} +		}, +		apis: { +			audio: {}, +			video: {} +		}, +		extractContainerCodecsFormType: function(type){ +			var types = type.split(/\s*;\s*/g); +			if(types[1] && types[1].indexOf('codecs') !== -1){ +				types[1] = types[1].replace(/["|']$/, '').replace(/^\s*codecs=('|")/, '').split(/\s*,\s*/g); +			} +			return types; +		}, +		makeAbsURI: (function(){ +			return function(src){ +				if(src && typeof src === 'string'){ +					src = $('<a href="'+ src +'"></a>')[0].href; +				} +				return src; +			}; +		})(), +		// simple, but powerfull +		beget: function(sup){ +			var F = function(){}; +			F.prototype = sup; +			return new F(); +		}, +		_create: function(elemName, supType, element, opts){ +			var data = $.data(element, 'mediaElemSupport') || $.data(element, 'mediaElemSupport', {apis: {}, nodeName: elemName}); +			if(!data.apis[supType]){ +				data.apis[supType] = m.beget( m.apis[elemName][supType]); +				data.apis[supType].element = element; +				data.apis[supType].nodeName = elemName; +				data.apis[supType].name = supType; +				data.apis[supType].data = {}; +				data.apis[supType].embedOpts = opts; +			} +			return data; +		}, +		_transferStyles: [ +			'backgroundColor', 'backgroundPosition', 'backgroundImage', 'backgroundRepeat', 'background-attachment' +		], +		_setAPIActive: function(element, supType){ +			var data 		= $.data(element, 'mediaElemSupport'), +				oldActive 	= data.name +			; +			if(oldActive === supType){return true;} +			 +			var hideElem = data.apis[oldActive].apiElem, +				showElem = data.apis[supType] && data.apis[supType].apiElem, +				apiReady = false +			; +			 +			if(showElem && showElem.nodeName){ +				if(data.nodeName !== 'audio' || $.attr(element, 'controls')){ +					if(supType === 'nativ'){ +						data.apis[supType].visualElem.css({display: ''}); +					} else { +						data.apis[supType].visualElem +							.css( $.extend({visibility: ''}, data.apis[oldActive].visualElem.getDimensions())  ) +						; +					} +				} +				data.apis[supType]._setActive(oldActive); +				apiReady = true; +				 +				data.apis[supType]._trigger({type: 'apiActivated', api: supType}); +				if( data.apis[oldActive] ){ +					if( data.apis[oldActive]._volumelevelState !== undefined ){ +						$(element).volumelevel(data.apis[oldActive]._volumelevelState); +					} +					if( data.apis[oldActive]._muteState !== undefined ){ +						$(element).muted(data.apis[oldActive]._muteState); +					} +					if(data.apis[oldActive].visualElem){ +						$.each(m._transferStyles, function(i, name){ +							data.apis[supType].visualElem.css(name, data.apis[oldActive].visualElem.css(name));	 +						}); +					} +				} +				 +			} +			data.apis[supType].isAPIActive = true; +			if(hideElem && hideElem.nodeName){ +				if(oldActive === 'nativ'){ +					hideElem.style.display = 'none'; +				} else { +					data.apis[oldActive].visualElem +						.css({ +							height: 0, +							width: 0, +							visibility: 'hidden' +						}) +					; +				} +				data.apis[oldActive]._setInactive(supType); +				data.apis[oldActive].isAPIActive = false; +				data.apis[supType]._trigger({type: 'apiDeActivated', api: oldActive}); +			} +			 +			data.name = supType; +			 +			return apiReady; +		}, +		getSuitedPlayers: function(elem, apiOrder){ +			var apis = $.data(elem, 'mediaElemSupport'); +			if(!apis || !apis.apis){return;} +			apis = apis.apis; +			var srces 		= $.attr(elem, 'srces'), +				supported 	= false, +				getSupported = function(name, api){ +					if( (typeof api.isTechAvailable === 'boolean' && !api.isTechAvailable) || ( $.isFunction(api.isTechAvailable) && !api.isTechAvailable() ) ){ +						return; +					} +					var src = api.canPlaySrces(srces); +					 +					if(src){ +						supported = { +							src: src.src || src, +							name: name +						}; +					} +					return supported; +				} +			; +			if(!srces.length){return 'noSource';} +			if(apiOrder){ +				$.each(apiOrder, function(i, name){ +					return !(getSupported(name, apis[name])); +				}); +			} else { +				$.each(apis, function(name, api){ +					return !(getSupported(name, api)); +				}); +			} +			return supported; +		}, +		_embedApi: function(elem, supported, apiData){ +			var config 	= $.attr(elem, 'getConfig'), +				jElm 	= $(elem), +				dims 	= {}, +				id 		= elem.id, +				fn 		= function(apiElem){ +							apiData.apis[supported.name].apiElem = apiElem; +							$(apiElem).addClass(apiData.nodeName); +							if(!config.controls){ +								$(apiElem).attr({ +									tabindex: '-1', +									role: 'presentation' +								}); +							} +							apiData.apis[supported.name]._init(); +							apiData.apis[supported.name]._trigger({type: 'apiActivated', api: supported.name}); +						}, +				label 	= jElm.attr('aria-labelledby') +			; +			 +			if(!id){ +				vID++; +				id = apiData.nodeName +'-'+vID; +				elem.id = id; +			} +			apiData.apis[supported.name].visualElem = $('<div class="media-element-box mm-'+ apiData.nodeName +'-box" style="position: relative;" />').insertBefore(elem); +			 +			if(label){ +				apiData.apis[supported.name].visualElem.attr({ +					role: 'group', +					'aria-labelledby': label +				}); +			} +			 +			if(apiData.nodeName === 'audio' && !config.controls){ +				apiData.apis[supported.name].visualElem +					.css({ +						height: 0, +						width: 0 +					}) +				; +			} else { +				apiData.apis[supported.name].visualElem +					.css( jElm.getDimensions() ) +				; +				$.each(m._transferStyles, function(i, name){ +					apiData.apis[supported.name].visualElem.css(name, jElm.css(name));	 +				}); +			} +			apiData.apis[supported.name]._embed(supported.src, apiData.name +'-'+ id, config, fn); +		}, +		getPluginVersion: function(name, plugDesc){ +			var plugin 	= plugDesc || (navigator.plugins && navigator.plugins[name]), +				version = [-1, 0], +				desc +			; +			if(plugin){ +				desc = (plugin.description || '').replace(/,/g, '.').match(/(\d+)/g) || ['0']; +				if(desc && desc[0]){ +				    version[0] = desc[0]; +					if(desc[1]){ +					    version[0] += '.'+desc[1]; +					} +					version[0] = parseFloat(version[0], 10); +					if(desc[2]){ +					    version[1] = parseInt(desc[2], 10); +					} +				} +			} +			return version; +		}, +		embedObject: function(elem, id, attrs, params, activeXAttrs, pluginName){ +			elem.style.overflow = 'hidden'; +			elem = $('<div />').prependTo(elem)[0]; +			var obj; +			 +			if(navigator.plugins && navigator.plugins.length){  +				obj = doc.createElement('object'); +				$.each(attrs, function(name, val){ +					obj.setAttribute(name, val); +				}); +				 +				$.each(params, function(name, val){ +					var param = doc.createElement('param'); +					param.setAttribute('name', name); +					param.setAttribute('value', val); +					obj.appendChild(param); +				}); +				obj.setAttribute('id', id); +				obj.setAttribute('name', id); +				if(params.wmode === 'transparent'){ +					obj.style.minHeight = '1px'; +					obj.style.minHeight = '1px'; +				}  +				elem.parentNode.replaceChild(obj, elem); +			} else if(window.ActiveXObject){ +				obj = '<object style="width: 100%; height: 100%; width="100%" height="100%"'; +				$.each($.extend({}, attrs, activeXAttrs), function(name, val){ +					obj += ' '+ name +'="'+ val +'"'; +				}); +				obj += ' name="'+ id +'"'; +				obj += ' id="'+ id +'"'; +				obj += '>'; +				$.each(params, function(name, val){ +					obj += ' <param name="'+ name +'" value="'+ val +'" />'; +				}); +				obj += '</object>'; +				elem.outerHTML = obj; +				obj = doc.getElementById(id); +			} +			if(obj){ +				obj.setAttribute('width', '100%'); +				obj.setAttribute('height', '100%'); +			} +			$(window).unload(function(){ +				jQuery.cleanData( [ obj ] ); +				obj = null; +			}); +//			vlc in ie is a little stupid here +			setTimeout(function(){ +				if( !obj || !obj.style ){return;} +				obj.style.width = '100%'; +				obj.style.height = '100%'; +			}, 0); +			return obj; +		} +	}); +	 +	m.add('nativ', 'video', {}); +	m.add('nativ', 'audio', {}); +	 +	function findInitFallback(elem, opts){ +		var elemName 	= elem.nodeName.toLowerCase(); +		 +		//getSupportedSrc and Player +		var supported = m.getSuitedPlayers(elem, opts.apiOrder), +			apiData	= $.data(elem, 'mediaElemSupport') +		; +		 +		// important total fail error event +		if(!supported){ +			apiData.apis.nativ._trigger({type: 'totalerror'}); +			try { +				elem.pause(); +			} catch(e){} +			return; +		} +		if(supported === 'noSource'){ +			apiData.noSource = true; +			return; +		} +		//_setAPIActive returns false if player isn´t embeded +		if(!m._setAPIActive(elem, supported.name)){ +			m._embedApi(elem, supported, apiData, elemName); +		} else if(apiData.apis[supported.name]._mmload){ +			apiData.apis[supported.name]._mmload(supported.src, $.attr(elem, 'poster')); +		} +	} +	 +	var showFallback = function(){ +		var fallback = $(this).hide().children(':not(source, track)').clone().insertAfter(this); +		$(this).one('mediareset', function(){ +			 $(this).show(); +			 fallback.remove(); +		}); +	}; +	 +	 +	 +	$.fn.jmeEmbed = function(opts){ +		opts = $.extend(true, {}, $.fn.jmeEmbed.defaults, opts); +		if(opts.showFallback && $.support.mediaElements){ +			this.bind('totalerror', showFallback); +		} +		 +		return this.each(function(){ +			var elemName 	= this.nodeName.toLowerCase(), +				supported 	= false, +				elem = this +			; +			 +			if(elemName !== 'video' && elemName !== 'audio' || ($.support.flash9 && $.nodeName(elem.parentNode, 'object'))){return;} +			 +			//remove swf fallback +			$('object, embed', this) +				.each(function(){ +					$('> *:not(param, embed, object)', this).appendTo(elem); +				}) +				.remove() +			; +			 +			$(this).trigger('jmeBeforeEmbed', { +					options: opts, +					nodeName: elemName +				}) +			; +			if(opts.removeControls){ +				$.attr(this, 'controls', false); +			} +			 +			var apiData = m._create(elemName, 'nativ', this, opts); +			apiData.name = 'nativ'; +			apiData.apis.nativ.apiElem = this; +			apiData.apis.nativ.visualElem = $(this); +			apiData.apis.nativ.isAPIActive = true; +			$.each(m.apis[elemName], function(name){ +				if(name !== 'nativ'){ +					m._create(elemName, name, elem, opts); +				} +			}); +			 +			$(this) +				.bind('mediaerror', function(e){ +					if(apiData.name === 'nativ'){ +						findInitFallback(this, opts); +					} +				}) +			; +			 +			if($.support.flash9 && opts.activateFlash && opts.flashPlayer){ +				supported = m.getSuitedPlayers(elem, [opts.flashPlayer]); +				if( supported == 'noSource' ){ +					supported = {name: opts.flashPlayer}; +				} +				apiData.apis.nativ.isAPIReady = true; +				if(supported.name == opts.flashPlayer && !m._setAPIActive(this, opts.flashPlayer)){ +					m._embedApi(this, supported, apiData, elemName); +				} else { +					supported = false; +				} +			}  +			if( !supported ){ +				if(opts.debug || !$.support.mediaElements){ +					 findInitFallback(this, opts); +					 apiData.apis.nativ.isAPIReady = true; +				} else { +					apiData.apis.nativ._init(); +				} +			} +			$.attr(this, 'preload', $.attr(this, 'preload'), true); +			 +			$(this) +				.trigger('jmeEmbed', { +					options: opts, +					nodeName: elemName, +					data: apiData +				}) +			; +		}); +	}; +	 +	$.fn.jmeEmbed.defaults = { +		debug: false, +		removeControls: false, +		showFallback: false, +		apiOrder: [], +		activateFlash: false, +		flashPlayer: '' +	}; +	 +	// deprecated +	$.fn.mediaElementEmbed = $.fn.jmeEmbed; +	 +	if($.cleanData && window.ActiveXObject){ +		var _cleanData = $.cleanData; +		$.cleanData = function(elems){ +			_cleanData(elems); +			for(var i = 0, len = elems.length; i < len; i++){ +				if(elems[i].nodeName === 'OBJECT'){ +					try { +						for (var j in elems[i]) { +							if (typeof elems[i][j] === "function") { +								elems[i][j] = null; +							} +						} +					} catch(e){} +				} +			} +		}; +	} +	 +})(jQuery);/**! + * Part of the jMediaelement-Project | http://github.com/aFarkas/jMediaelement + * @author Alexander Farkas + * Copyright 2010, Alexander Farkas + * Dual licensed under the MIT or GPL Version 2 licenses. + */ + +(function($){ +	 +	var swfAttr = {type: 'application/x-shockwave-flash'}, +		aXAttrs = {classid: 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'}, +		m 		= $.multimediaSupport +	; +	 +	$.extend($.fn.jmeEmbed.defaults,  +			{ +				flashPlayer: 'jwPlayer', +				jwPlayer: { +					path: m.jsPath + 'player.swf', +					hideIcons: 'auto', +					vars: {}, +					attrs: {}, +					plugins: {}, +					params: { +						allowscriptaccess: 'always', +						allowfullscreen: 'true' +					} +				} +			} +		) +	; +	 +	$(function(){ +		var path = ($('script.jwPlayer')[0] || {}).src; +		if(path){ +			$.fn.jmeEmbed.defaults.jwPlayer.path = path; +		} +	}); +		 +	var regs = { +			A: /&/g, +			a: /&/g, +			e: /\=/g, +			q: /\?/g +		}, +		providerMatch = { +			audio: 'sound', +			video: 'video' +		}, +		replaceVar = function(val){ +			return (val.replace) ? val.replace(regs.A, '%26').replace(regs.a, '%26').replace(regs.e, '%3D').replace(regs.q, '%3F') : val; +		} +	; +	 +	 +	 +	(function(){ +		$.support.flash9 = false; +		$.support.flashVersion = 0; +		var swf 				= m.getPluginVersion('Shockwave Flash'), +			supportsMovieStar 	= function(obj, _retest){ +				$.support.flash9 = false; +					try { +						//opera needs typeof check do not use 'GetVariable' in obj +						if (obj && typeof obj.GetVariable !== 'undefined') { +							var version = obj.GetVariable("$version"); +							obj = m.getPluginVersion('', { +								description: version +							}); +							$.support.flashVersion = obj[0]; +							$.support.flash9 = !!(obj[0] > 9 || (obj[0] === 9 && obj[1] >= 115)); +						} +					} catch (e) {} +				 +			} +		; +		if(swf && swf[0]){ +			$.support.flashVersion = swf[0]; +		} +		if(swf[0] > 9 || (swf[0] === 9 && swf[1] >= 115)){ +			//temp result +			 +			$.support.flash9 = true; +			$(function(){ +				swf = $('<object />', swfAttr).appendTo('body'); +				supportsMovieStar(swf[0]); +				swf.remove(); +			}); +		} else if(window.ActiveXObject){ +			try { +				swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); +				supportsMovieStar(swf); +				swf = null; +			} catch(e){} +		} +	})(); +	 +	var jwMM 	= { +			isTechAvailable: function(){ +				return $.support.flash9; +			}, +			_extendJWLoad: function(src, obj, elem){ +				if(!src){return;} +				 +				elem = elem || this.element; +				var changeVars = this.embedOpts.jwPlayer.changeVars; +				m.extendWithData(elem, obj, ['type', 'provider', 'stretching', 'bufferlength', 'streamer']); +				obj.file = (elem.getAttribute('data-jwprefixsrc') || '') + obj.file;  +				// if we can't autodetect provider by file-extension, +				// we add a provider +				var ext = m.getExt(src), +					name = (ext == 'm4r') ? 'video' : this.nodeName +				; +				if(ext == 'm4r' || !this.canPlaySrc(src)){ +					if(!obj.provider){ +						obj.provider = providerMatch[name]; +					} +					if(!obj.type){ +						obj.type = providerMatch[name]; +					} +				} +				if(changeVars){ +					changeVars(src, obj, elem, this); +				} +				return obj; +			}, +			_embed: function(src, id, cfg, fn){ +				var opts 		= this.embedOpts.jwPlayer, +					vars 		= $.extend({}, opts.vars, {file: src, id: id}), +					attrs	 	= $.extend({name: id}, opts.attrs, swfAttr, !(window.ActiveXObject) ? {data: opts.path} : {}), +					params 		= $.extend({movie: opts.path}, opts.params), +					plugins 	= [], +					that 		= this +				; +				 +				this._extendJWLoad(src, vars); +				 +				if(cfg.poster){ +					vars.image = cfg.poster; +				} +												 +				vars.autostart = ''+ cfg.autoplay; +				vars.repeat = (cfg.loop) ? 'single' : 'false'; +				vars.controlbar = (cfg.controls) ? 'bottom' : 'none'; +				 +				if( !cfg.controls && this.nodeName !== 'audio' && params.wmode === undefined ){ +					params.wmode = 'transparent'; +				} +				 +				if( (!cfg.controls && opts.hideIcons && params.wmode === 'transparent') || opts.hideIcons === true ){ +					vars.icons = 'false'; +					vars.showicons = 'false'; +				} +				 +				if( params.wmode === 'transparent' && !vars.screencolor && !attrs.bgcolor ){ +					vars.screencolor = 'ffffffff'; +					attrs.bgcolor = '#000000'; +				} +				 +				params.flashvars = []; +				$.each(vars, function(name, val){ +					params.flashvars.push(replaceVar(name)+'='+replaceVar(val)); +				}); +				 +				$.each(opts.plugins, function(name, src){ +					plugins.push(src); +				}); +				if(plugins.length){ +					params.flashvars.push( 'plugins='+ ( plugins.join(',') ) ); +				} +				params.flashvars = params.flashvars.join('&'); +				fn(m.embedObject( this.visualElem[0], id, attrs, params, aXAttrs, 'Shockwave Flash' )); +				setTimeout(function(){ +					var swf = $('object', that.visualElem)[0]; +					if( !swf || (swf.style.display === 'none' && $('> *', that.visualElem).length > 1 ) ){ +						$('div[bgactive]', that.visualElem).css({width: '100%', height: '100%'}); +						that._trigger('flashblocker'); +					} +				}, 9); +			}, +			canPlaySrc: function(media){ +				var ret 	= m.fn.canPlaySrc.apply(this, arguments),  +					index 	= -1, +					src 	= media.src || media +				; +				 +				if( !ret && typeof src === 'string' ){ +					index = src.indexOf('youtube.com/'); +					if(index < 15 && index > 6){ +						ret = 'maybe'; +					} +				} +				 +				return ret; +			}, +			canPlayCodecs: ['avc1.42E01E', 'mp4a.40.2', 'avc1.58A01E', 'avc1.4D401E', 'avc1.64001E', 'VP6', 'mp3', 'AAC'], +			canPlayContainer: ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'jwplayer/jwplayer'] +		} +	; +	 +	m.add('jwPlayer', 'video', jwMM); +	m.add('jwPlayer', 'audio', jwMM); +	 +})(jQuery); | 
