vendor/assets/javascripts/webshims/shims/combos/23.js in webshims-rails-1.12.3 vs vendor/assets/javascripts/webshims/shims/combos/23.js in webshims-rails-1.12.5

- old
+ new

@@ -3,11 +3,11 @@ * based on SWFObject v2.2 <http://code.google.com/p/swfobject/> is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> */ var swfmini = function() { - + var wasRemoved = function(){webshims.error('This method was removed from swfmini');}; var UNDEF = "undefined", OBJECT = "object", webshims = window.webshims, SHOCKWAVE_FLASH = "Shockwave Flash", SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", @@ -17,19 +17,12 @@ doc = document, nav = navigator, plugin = false, domLoadFnArr = [main], - objIdArr = [], - listenersArr = [], - storedAltContent, - storedAltContentId, - storedCallbackFn, - storedCallbackObj, + isDomLoaded = false, - dynamicStylesheet, - dynamicStylesheetMedia, autoHideShow = true, /* Centralized function for browser feature detection - User agent string detection is only used when no good alternative is possible - Is executed directly for optimal performance @@ -73,15 +66,10 @@ }(); function callDomLoadFunctions() { if (isDomLoaded) { return; } - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); - t.parentNode.removeChild(t); - } - catch (e) { return; } isDomLoaded = true; var dl = domLoadFnArr.length; for (var i = 0; i < dl; i++) { domLoadFnArr[i](); } @@ -93,19 +81,12 @@ } else { domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ } } + - /* Cross-browser onload - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ - - Will fire an event as soon as a web page including all of its assets are loaded - */ - function addLoadEvent(fn) { - - } - /* Main function - Will preferably execute onDomLoad, otherwise onload (as a fallback) */ function main() { if (plugin) { @@ -143,154 +124,17 @@ b.removeChild(o); t = null; })(); } } + - - function getObjectById(objectIdStr) { - var r = null; - var o = getElementById(objectIdStr); - if (o && o.nodeName == "OBJECT") { - if (typeof o.SetVariable != UNDEF) { - r = o; - } - else { - var n = o.getElementsByTagName(OBJECT)[0]; - if (n) { - r = n; - } - } - } - return r; - } - - - /* Cross-browser dynamic SWF creation - */ - function createSWF(attObj, parObj, id) { - var r, el = getElementById(id); - if (ua.wk && ua.wk < 312) { return r; } - if (el) { - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content - attObj.id = id; - } - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML - var att = ""; - for (var i in attObj) { - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries - if (i.toLowerCase() == "data") { - parObj.movie = attObj[i]; - } - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - att += ' class="' + attObj[i] + '"'; - } - else if (i.toLowerCase() != "classid") { - att += ' ' + i + '="' + attObj[i] + '"'; - } - } - } - var par = ""; - for (var j in parObj) { - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries - par += '<param name="' + j + '" value="' + parObj[j] + '" />'; - } - } - el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>'; - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) - r = getElementById(attObj.id); - } - else { // well-behaving browsers - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - for (var m in attObj) { - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - o.setAttribute("class", attObj[m]); - } - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute - o.setAttribute(m, attObj[m]); - } - } - } - for (var n in parObj) { - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element - createObjParam(o, n, parObj[n]); - } - } - el.parentNode.replaceChild(o, el); - r = o; - } - } - return r; - } - - function createObjParam(el, pName, pValue) { - var p = createElement("param"); - p.setAttribute("name", pName); - p.setAttribute("value", pValue); - el.appendChild(p); - } - - /* Cross-browser SWF removal - - Especially needed to safely and completely remove a SWF in Internet Explorer - */ - function removeSWF(id) { - var obj = getElementById(id); - if (obj && obj.nodeName == "OBJECT") { - if (ua.ie && ua.win) { - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - removeObjectInIE(id); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.removeChild(obj); - } - } - } - - function removeObjectInIE(id) { - var obj = getElementById(id); - if (obj) { - for (var i in obj) { - if (typeof obj[i] == "function") { - obj[i] = null; - } - } - obj.parentNode.removeChild(obj); - } - } - - /* Functions to optimize JavaScript compression - */ - function getElementById(id) { - var el = null; - try { - el = doc.getElementById(id); - } - catch (e) {} - return el; - } - function createElement(el) { return doc.createElement(el); } - /* Updated attachEvent function for Internet Explorer - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks - */ - function addListener(target, eventType, fn) { - target.attachEvent(eventType, fn); - listenersArr[listenersArr.length] = [target, eventType, fn]; - } - + /* Flash Player and SWF content version matching */ function hasPlayerVersion(rv) { var pv = ua.pv, v = rv.split("."); v[0] = parseInt(v[0], 10); @@ -298,111 +142,47 @@ v[2] = parseInt(v[2], 10) || 0; return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; } - - function setVisibility(id, isVisible) { - if (!autoHideShow) { return; } - var elem; - var v = isVisible ? "visible" : "hidden"; - if (isDomLoaded && (elem && getElementById(id))) { - getElementById(id).style.visibility = v; - } - } - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) - */ - var cleanup = function() { - if (ua.ie && ua.win && window.attachEvent) { - window.attachEvent("onunload", function() { - // remove listeners to avoid memory leaks - var ll = listenersArr.length; - for (var i = 0; i < ll; i++) { - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); - } - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect - var il = objIdArr.length; - for (var j = 0; j < il; j++) { - removeSWF(objIdArr[j]); - } - // cleanup library's main closures to avoid memory leaks - for (var k in ua) { - ua[k] = null; - } - ua = null; - for (var l in swfmini) { - swfmini[l] = null; - } - swfmini = null; - }); - } - }(); - + + webshims.ready('DOM', callDomLoadFunctions); - + + webshims.loader.addModule('swfmini-embed', {d: ['swfmini']}); + var loadEmbed = hasPlayerVersion('9.0.0') ? + function(){ + webshims.loader.loadList(['swfmini-embed']); + return true; + } : + webshims.$.noop + ; + + if(!Modernizr.video){ + loadEmbed(); + } else { + webshims.ready('WINDOWLOAD', loadEmbed); + } + return { /* Public API - Reference: http://code.google.com/p/swfobject/wiki/documentation */ - registerObject: function() { - - }, + registerObject: wasRemoved, - getObjectById: function(objectIdStr) { - if (ua.w3) { - return getObjectById(objectIdStr); - } - }, + getObjectById: wasRemoved, embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { - var callbackObj = {success:false, id:replaceElemIdStr}; - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { - setVisibility(replaceElemIdStr, false); - addDomLoadEvent(function() { - widthStr += ""; // auto-convert to string - heightStr += ""; - var att = {}; - if (attObj && typeof attObj === OBJECT) { - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs - att[i] = attObj[i]; - } - } - att.data = swfUrlStr; - att.width = widthStr; - att.height = heightStr; - var par = {}; - if (parObj && typeof parObj === OBJECT) { - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs - par[j] = parObj[j]; - } - } - if (flashvarsObj && typeof flashvarsObj === OBJECT) { - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + k + "=" + flashvarsObj[k]; - } - else { - par.flashvars = k + "=" + flashvarsObj[k]; - } - } - } - if (hasPlayerVersion(swfVersionStr)) { // create SWF - var obj = createSWF(att, par, replaceElemIdStr); - if (att.id == replaceElemIdStr) { - setVisibility(replaceElemIdStr, true); - } - callbackObj.success = true; - callbackObj.ref = obj; - } - else { // show alternative content - setVisibility(replaceElemIdStr, true); - } - if (callbackFn) { callbackFn(callbackObj); } + var args = arguments; + if(loadEmbed()){ + webshims.ready('swfmini-embed', function(){ + swfmini.embedSWF.apply(swfmini, args); }); + } else if(callbackFn) { + callbackFn({success:false, id:replaceElemIdStr}); } - else if (callbackFn) { callbackFn(callbackObj); } }, switchOffAutoHideShow: function() { autoHideShow = false; }, @@ -422,38 +202,29 @@ else { return undefined; } }, - showExpressInstall: function() { - - }, + showExpressInstall: wasRemoved, - removeSWF: function(objElemIdStr) { - if (ua.w3) { - removeSWF(objElemIdStr); - } - }, + removeSWF: wasRemoved, - createCSS: function() { - - }, + createCSS: wasRemoved, addDomLoadEvent: addDomLoadEvent, - addLoadEvent: addLoadEvent, + addLoadEvent: wasRemoved, // For internal usage only - expressInstallCallback: function() { - - } + expressInstallCallback: wasRemoved }; }(); + +webshims.isReady('swfmini', true); ;(function(Modernizr, webshims){ "use strict"; - var $ = webshims.$; var hasNative = Modernizr.audio && Modernizr.video; var supportsLoop = false; var bugs = webshims.bugs; var swfType = 'mediaelement-jaris'; var loadSwf = function(){ @@ -462,86 +233,49 @@ webshims.mediaelement.loadSwf = true; webshims.reTest([swfType], hasNative); } }); }; + var wsCfg = webshims.cfg; var options = wsCfg.mediaelement; var hasFullTrackSupport; var hasSwf; if(!options){ webshims.error("mediaelement wasn't implemented but loaded"); return; } + if(hasNative){ var videoElem = document.createElement('video'); Modernizr.videoBuffered = ('buffered' in videoElem); Modernizr.mediaDefaultMuted = ('defaultMuted' in videoElem); supportsLoop = ('loop' in videoElem); - + Modernizr.mediaLoop = supportsLoop; + webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']); - if(!Modernizr.videoBuffered ){ + if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && navigator.userAgent.indexOf('MSIE') != -1 && 'ActiveXObject' in window) ){ webshims.addPolyfill('mediaelement-native-fix', { d: ['dom-support'] }); webshims.loader.loadList(['mediaelement-native-fix']); } - - if(!options.preferFlash){ - var noSwitch = { - 1: 1 - }; - var switchOptions = function(e){ - var media, error, parent; - if(!options.preferFlash && - ($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) && - (media = $(e.target).closest('audio, video')) && (error = media.prop('error')) && !noSwitch[error.code] - ){ - - $(function(){ - if(hasSwf && !options.preferFlash){ - loadSwf(); - webshims.ready('WINDOWLOAD '+swfType, function(){ - setTimeout(function(){ - if(!options.preferFlash && webshims.mediaelement.createSWF && !media.is('.nonnative-api-active')){ - options.preferFlash = true; - document.removeEventListener('error', switchOptions, true); - $('audio, video').each(function(){ - webshims.mediaelement.selectSource(this); - }); - webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error')+ 'first error: '+ error); - } - }, 9); - }); - } else{ - document.removeEventListener('error', switchOptions, true); - } - }); - } - }; - document.addEventListener('error', switchOptions, true); - $('audio, video').each(function(){ - var error = $.prop(this, 'error'); - if(error && !noSwitch[error]){ - switchOptions({target: this}); - return false; - } - }); - } } if(Modernizr.track && !bugs.track){ (function(){ - if(!bugs.track){ - bugs.track = typeof $('<track />')[0].readyState != 'number'; - } - - if(!bugs.track){ + + if(window.VTTCue && !window.TextTrackCue){ + window.TextTrackCue = window.VTTCue; + } else if(!window.VTTCue){ + window.VTTCue = window.TextTrackCue; + } + try { - new TextTrackCue(2, 3, ''); + new VTTCue(2, 3, ''); } catch(e){ bugs.track = true; } } })(); @@ -573,10 +307,11 @@ if(!data.streamId.length){ webshims.error('Could not parse rtmp url'); } data.streamId = data.streamId.join('/'); }; + var getSrcObj = function(elem, nodeName){ elem = $(elem); var src = {src: elem.attr('src') || '', elem: elem, srcProp: elem.prop('src')}; var tmp; @@ -642,18 +377,11 @@ loadThird(); webshims.loader.loadList(['track-ui']); }); } }; -// var loadMediaGroup = function(){ -// if(!loadMediaGroup.loaded){ -// loadMediaGroup.loaded = true; -// webshims.ready(window.MediaController ? 'WINDOWLOAD' : 'DOM', function(){ -// webshims.loader.loadList(['mediagroup']); -// }); -// } -// }; + var loadYt = (function(){ var loaded; return function(){ if(loaded || !hasYt){return;} loaded = true; @@ -674,15 +402,12 @@ webshims.addPolyfill('mediaelement-yt', { test: !hasYt, d: ['dom-support'] }); + -// webshims.addModule('mediagroup', { -// d: ['mediaelement', 'dom-support'] -// }); - mediaelement.mimeTypes = { audio: { //ogm shouldn´t be used! 'audio/ogg': ['ogg','oga', 'ogm'], 'audio/ogg;codecs="opus"': 'opus', @@ -711,11 +436,11 @@ } ; mediaelement.mimeTypes.source = $.extend({}, mediaelement.mimeTypes.audio, mediaelement.mimeTypes.video); - mediaelement.getTypeForSrc = function(src, nodeName, data){ + mediaelement.getTypeForSrc = function(src, nodeName){ if(src.indexOf('youtube.com/watch?') != -1 || src.indexOf('youtube.com/v/') != -1){ return 'video/youtube'; } if(src.indexOf('rtmp') === 0){ return nodeName+'/rtmp'; @@ -749,36 +474,17 @@ } else { srces.push(src); } return srces; } else { - mediaElem.removeAttr('src').removeAttr('type').find('source').remove(); - if(!$.isArray(srces)){ - srces = [srces]; - } - srces.forEach(function(src){ - if(typeof src == 'string'){ - src = {src: src}; - } - mediaElem.append($(document.createElement('source')).attr(src)); - }); - + webshims.error('setting sources was removed.'); } }; - $.fn.loadMediaSrc = function(srces, poster){ - return this.each(function(){ - if(poster !== undefined){ - $(this).removeAttr('poster'); - if(poster){ - $.attr(this, 'poster', poster); - } - } - mediaelement.srces(this, srces); - $(this).mediaLoad(); - }); + $.fn.loadMediaSrc = function(){ + webshims.error('loadMediaSrc was removed.'); }; mediaelement.swfMimeTypes = ['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', 'video/jarisplayer', 'jarisplayer/jarisplayer', 'video/youtube', 'video/rtmp', 'audio/rtmp']; mediaelement.canThirdPlaySrces = function(mediaElem, srces){ @@ -850,12 +556,11 @@ var handleThird = (function(){ var requested; var readyType = hasSwf ? swfType : 'mediaelement-yt'; return function( mediaElem, ret, data ){ //readd to ready - - + webshims.ready(readyType, function(){ if(mediaelement.createSWF && $(mediaElem).parent()[0]){ mediaelement.createSWF( mediaElem, ret, data ); } else if(!requested) { requested = true; @@ -927,62 +632,18 @@ $(e.target).prop('currentTime', 0).play(); }, 1); }); - var handleMedia = false; + var handleMedia = false; var initMediaElements = function(){ var testFixMedia = function(){ if(webshims.implement(this, 'mediaelement')){ selectSource(this); if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){ $.prop(this, 'muted', true); } - //fixes for FF 12 and IE9/10 || does not hurt, if run in other browsers - if(hasNative && (!supportsLoop || ('ActiveXObject' in window))){ - var bufferTimer; - var lastBuffered; - var elem = this; - var getBufferedString = function(){ - var buffered = $.prop(elem, 'buffered'); - if(!buffered){return;} - var bufferString = ""; - for(var i = 0, len = buffered.length; i < len;i++){ - bufferString += buffered.end(i); - } - return bufferString; - }; - var testBuffer = function(){ - var buffered = getBufferedString(); - if(buffered != lastBuffered){ - lastBuffered = buffered; - webshims.info('needed to trigger progress manually'); - $(elem).triggerHandler('progress'); - } - }; - - $(this) - .on({ - 'play loadstart progress': function(e){ - if(e.type == 'progress'){ - lastBuffered = getBufferedString(); - } - clearTimeout(bufferTimer); - bufferTimer = setTimeout(testBuffer, 400); - }, - 'emptied stalled mediaerror abort suspend': function(e){ - if(e.type == 'emptied'){ - lastBuffered = false; - } - clearTimeout(bufferTimer); - } - }) - ; - if('ActiveXObject' in window && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay],.nonnative-api-active)')){ - $(this).prop('preload', 'metadata').mediaLoad(); - } - } } }; webshims.ready('dom-support', function(){ @@ -991,11 +652,11 @@ if(!supportsLoop){ webshims.defineNodeNamesBooleanProperty(['audio', 'video'], 'loop'); } ['audio', 'video'].forEach(function(nodeName){ - var supLoad, supController; + var supLoad; supLoad = webshims.defineNodeNameProperty(nodeName, 'load', { prop: { value: function(){ var data = webshims.data(this, 'mediaelement'); selectSource(this, data); @@ -1024,63 +685,13 @@ } return ret; } } }); - -// supController = webshims.defineNodeNameProperty(nodeName, 'controller', { -// prop: { -// get: function(type){ -// if(!loadMediaGroup.loaded){ -// loadMediaGroup(); -// } -// if(mediaelement.controller){ -// return mediaelement.controller[nodeName].get.apply(this, arguments); -// } -// return supController.prop._supget && supController.prop._supget.apply(this, arguments); -// }, -// set: function(){ -// var that = this; -// var args = arguments; -// if(!loadMediaGroup.loaded){ -// loadMediaGroup(); -// } -// if(mediaelement.controller){ -// return mediaelement.controller[nodeName].set.apply(that, args); -// } else { -// webshims.ready('mediagroup', function(){ -// mediaelement.controller[nodeName].set.apply(that, args); -// }); -// } -// return supController.prop._supset && supController.prop._supset.apply(this, arguments); -// } -// } -// }); - -// webshims.ready('mediagroup', function(){ -// mediaelement.controller[nodeName].sup = supController; -// }); }); + -// webshims.onNodeNamesPropertyModify(['audio', 'video'], ['mediaGroup'], { -// set: function(){ -// var that = this; -// var args = arguments; -// if(!loadMediaGroup.loaded){ -// loadMediaGroup(); -// } -// if(mediaelement.mediagroup){ -// mediaelement.mediagroup.set.apply(that, args); -// } else { -// webshims.ready('mediagroup', function(){ -// mediaelement.mediagroup.set.apply(that, args); -// }); -// } -// }, -// initAttr: true -// }); - webshims.onNodeNamesPropertyModify(['audio', 'video'], ['src', 'poster'], { set: function(){ var elem = this; var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {}); clearTimeout(baseData.loadTimer); @@ -1098,13 +709,10 @@ .each(testFixMedia) ; if(!loadTrackUi.loaded && $('track', media).length){ loadTrackUi(); } -// if(!loadMediaGroup.loaded && this.getAttribute('mediagroup')){ -// loadMediaGroup(); -// } media = null; }); }); if(hasNative && !handleMedia){ @@ -1140,6 +748,7 @@ } else { webshims.ready(swfType, initMediaElements); } webshims.ready('track', loadTrackUi); }); + })(Modernizr, webshims);