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);