vendor/assets/javascripts/webshims/shims/combos/27.js in webshims-rails-0.4.6 vs vendor/assets/javascripts/webshims/shims/combos/27.js in webshims-rails-0.4.7

- old
+ new

@@ -662,12 +662,11 @@ (function($, shims){ var defineProperty = 'defineProperty'; var advancedObjectProperties = !!(Object.create && Object.defineProperties && Object.getOwnPropertyDescriptor); //safari5 has defineProperty-interface, but it can't be used on dom-object - //only do this test in non-IE browsers, because this hurts dhtml-behavior in some IE8 versions - if (advancedObjectProperties && !$.browser.msie && Object[defineProperty] && Object.prototype.__defineGetter__) { + if (advancedObjectProperties && Object[defineProperty] && Object.prototype.__defineGetter__) { (function(){ try { var foo = document.createElement('foo'); Object[defineProperty](foo, 'bar', { get: function(){ @@ -681,11 +680,11 @@ } foo = null; })(); } - Modernizr.objectAccessor = !!((advancedObjectProperties || (Object.prototype.__defineGetter__ && Object.prototype.__lookupSetter__)) && (!$.browser.opera || shims.browserVersion >= 11)); + Modernizr.objectAccessor = !!((advancedObjectProperties || (Object.prototype.__defineGetter__ && Object.prototype.__lookupSetter__))); Modernizr.advancedObjectProperties = advancedObjectProperties; if((!advancedObjectProperties || !Object.create || !Object.defineProperties || !Object.getOwnPropertyDescriptor || !Object.defineProperty)){ var call = Function.prototype.call; var prototypeOfObject = Object.prototype; @@ -817,10 +816,15 @@ var oldVal = $.fn.val; var singleVal = function(elem, name, val, pass, _argless){ return (_argless) ? oldVal.call($(elem)) : oldVal.call($(elem), val); }; + + $.fn.onTrigger = function(evt, fn){ + return this.on(evt, fn).each(fn); + }; + $.fn.val = function(val){ var elem = this[0]; if(arguments.length && val == null){ val = ''; } @@ -1011,18 +1015,18 @@ }; }); //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc - var isExtendNativeSave = (!$.browser.msie || parseInt($.browser.version, 10) > 8); + var isExtendNativeSave = Modernizr.ES5; var extendNativeValue = (function(){ var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar')); var has = Object.prototype.hasOwnProperty; return function(nodeName, prop, desc){ - var elem = document.createElement(nodeName); - var elemProto = webshims.getPrototypeOf(elem); - if( isExtendNativeSave && elemProto && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){ + var elem; + var elemProto; + if( isExtendNativeSave && (elem = document.createElement(nodeName)) && (elemProto = webshims.getPrototypeOf(elem)) && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){ var sup = elem[prop]; desc._supvalue = function(){ if(sup && sup.apply){ return sup.apply(this, arguments); } @@ -1218,11 +1222,11 @@ docObserve.height = docObserve.getHeight(); docObserve.width = docObserve.getWidth(); } - $.event.trigger('updateshadowdom'); + $(document).triggerHandler('updateshadowdom'); }, (e.type == 'resize') ? 50 : 9); }, _create: function(){ $.each({ Height: "getHeight", Width: "getWidth" }, function(name, type){ var body = document.body; @@ -1262,11 +1266,10 @@ } } }; - $.event.customEvent.updateshadowdom = true; webshims.docObserve = function(){ webshims.ready('DOM', function(){ docObserve.start(); }); }; @@ -1706,51 +1709,51 @@ webshims.isReady('webshimLocalization', true); }); //html5a11y (function($, document){ - var browserVersion = $.webshims.browserVersion; - if($.browser.mozilla && browserVersion > 5){return;} - if (!$.browser.msie || (browserVersion < 12 && browserVersion > 7)) { - var elemMappings = { - article: "article", - aside: "complementary", - section: "region", - nav: "navigation", - address: "contentinfo" - }; - var addRole = function(elem, role){ - var hasRole = elem.getAttribute('role'); - if (!hasRole) { - elem.setAttribute('role', role); + //if we support basic styleing or do not support ARIA (assumed) abort + if(!Modernizr.localstorage || ('hidden' in document.createElement('a'))){return;} + + var elemMappings = { + article: "article", + aside: "complementary", + section: "region", + nav: "navigation", + address: "contentinfo" + }; + var addRole = function(elem, role){ + var hasRole = elem.getAttribute('role'); + if (!hasRole) { + elem.setAttribute('role', role); + } + }; + + $.webshims.addReady(function(context, contextElem){ + $.each(elemMappings, function(name, role){ + var elems = $(name, context).add(contextElem.filter(name)); + for (var i = 0, len = elems.length; i < len; i++) { + addRole(elems[i], role); } - }; - - $.webshims.addReady(function(context, contextElem){ - $.each(elemMappings, function(name, role){ - var elems = $(name, context).add(contextElem.filter(name)); - for (var i = 0, len = elems.length; i < len; i++) { - addRole(elems[i], role); - } - }); - if (context === document) { - var header = document.getElementsByTagName('header')[0]; - var footers = document.getElementsByTagName('footer'); - var footerLen = footers.length; - if (header && !$(header).closest('section, article')[0]) { - addRole(header, 'banner'); - } - if (!footerLen) { - return; - } - var footer = footers[footerLen - 1]; - if (!$(footer).closest('section, article')[0]) { - addRole(footer, 'contentinfo'); - } - } }); - } + if (context === document) { + var header = document.getElementsByTagName('header')[0]; + var footers = document.getElementsByTagName('footer'); + var footerLen = footers.length; + if (header && !$(header).closest('section, article')[0]) { + addRole(header, 'banner'); + } + if (!footerLen) { + return; + } + var footer = footers[footerLen - 1]; + if (!$(footer).closest('section, article')[0]) { + addRole(footer, 'contentinfo'); + } + } + }); + })(jQuery, document); (function($, Modernizr, webshims){ "use strict"; var hasNative = Modernizr.audio && Modernizr.video; @@ -1801,11 +1804,13 @@ webshims.ready('WINDOWLOAD '+swfType, function(){ setTimeout(function(){ if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){ options.preferFlash = true; document.removeEventListener('error', switchOptions, true); - $('audio, video').mediaLoad(); + $('audio, video').each(function(){ + webshims.mediaelement.selectSource(this); + }); webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src); } else if(!hasSwf){ document.removeEventListener('error', switchOptions, true); } }, 20); @@ -2205,12 +2210,12 @@ if(!_srces.length || !parent || parent.nodeType != 1 || stopParent.test(parent.nodeName || '')){return;} data = data || webshims.data(elem, 'mediaelement'); stepSources(elem, data, options.preferFlash || undefined, _srces); }; + mediaelement.selectSource = selectSource; - $(document).on('ended', function(e){ var data = webshims.data(e.target, 'mediaelement'); if( supportsLoop && (!data || data.isActive == 'html5') && !$.prop(e.target, 'loop')){return;} setTimeout(function(){ if( $.prop(e.target, 'paused') || !$.prop(e.target, 'loop') ){return;} @@ -2271,56 +2276,61 @@ webshims.addReady(function(context, insertedElement){ var media = $('video, audio', context) .add(insertedElement.filter('video, audio')) .each(function(){ - if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){ + var data = webshims.data(this, 'mediaelement'); + + if(hasNative && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])') && (!data || data.isActive == 'html5')){ + //IE controls not visible bug $(this).prop('preload', 'metadata').mediaLoad(); } else { - selectSource(this); + selectSource(this, data); } - - if(hasNative){ - 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; - $(elem).triggerHandler('progress'); - } - }; - $(this) - .on({ - 'play loadstart progress': function(e){ - if(e.type == 'progress'){ - lastBuffered = getBufferedString(); - } - clearTimeout(bufferTimer); - bufferTimer = setTimeout(testBuffer, 999); - }, - 'emptied stalled mediaerror abort suspend': function(e){ - if(e.type == 'emptied'){ - lastBuffered = false; - } - clearTimeout(bufferTimer); + //FF progress bug + (function(){ + 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; + $(elem).triggerHandler('progress'); + } + }; + + $(this) + .on({ + 'play loadstart progress': function(e){ + if(e.type == 'progress'){ + lastBuffered = getBufferedString(); + } + clearTimeout(bufferTimer); + bufferTimer = setTimeout(testBuffer, 999); + }, + 'emptied stalled mediaerror abort suspend': function(e){ + if(e.type == 'emptied'){ + lastBuffered = false; + } + clearTimeout(bufferTimer); + } + }) + ; + })(); } }) ; if(!loadTrackUi.loaded && $('track', media).length){ @@ -2803,23 +2813,33 @@ }; var hideEvtArray = ['play', 'pause', 'playing', 'canplay', 'progress', 'waiting', 'ended', 'loadedmetadata', 'durationchange', 'emptied']; var hidevents = hideEvtArray.map(function(evt){ return evt +'.webshimspolyfill'; }).join(' '); - + var opposite = { + 'html5': 'third', + 'third': 'html5' + }; var hidePlayerEvents = function(event){ var data = webshims.data(event.target, 'mediaelement'); if(!data){return;} var isNativeHTML5 = ( event.originalEvent && event.originalEvent.type === event.type ); if( isNativeHTML5 == (data.activating == 'third') ){ event.stopImmediatePropagation(); - if(stopEvents[event.type] && data.isActive != data.activating){ - $(event.target).pause(); + if(stopEvents[event.type]){ + if(data.isActive != data.activating){ + $(event.target).pause(); + } else { + data.isActive = opposite[data.isActive]; + $(event.target).pause(); + data.isActive = opposite[data.isActive]; + } } } }; + addMediaToStopEvents = function(elem){ $(elem) .off(hidevents) .on(hidevents, hidePlayerEvents) ; @@ -2947,10 +2967,14 @@ .css({ position: 'relative', overflow: 'hidden' }) ; + var setDimensions = function(){ + setElementDimension(data, $.prop(elem, 'controls')); + }; + data = webshims.data(elem, 'mediaelement', webshims.objectCreate(playerStateObj, { actionQueue: { value: [] }, shadowElem: { @@ -3019,15 +3043,15 @@ mediaelement.setActive(elem, 'third', data); options.changeSWF(vars, elem, canPlaySrc, data, 'embed'); - $(elem).on('updatemediaelementdimensions updateshadowdom', function(){ - setElementDimension(data, $.prop(elem, 'controls')); - }); + $(document).on('updateshadowdom', setDimensions); + $(elem).on('updatemediaelementdimensions', setDimensions); + swfobject.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.0", false, vars, params, attrs, function(swfData){ if(swfData.success){ data.jwapi = swfData.ref; @@ -3224,13 +3248,12 @@ }); mediaSup = webshims.defineNodeNameProperties(nodeName, descs, 'prop'); }); - if(hasFlash){ + if(hasFlash && $.cleanData){ var oldClean = $.cleanData; - var gcBrowser = $.browser.msie && webshims.browserVersion < 9; var flashNames = { object: 1, OBJECT: 1 }; $.cleanData = function(elems){ @@ -3243,19 +3266,17 @@ loadedSwf--; try { elems[i][SENDEVENT]('play', false); } catch(er){} } - if(gcBrowser){ - try { - for (prop in elems[i]) { - if (typeof elems[i][prop] == "function") { - elems[i][prop] = null; - } + try { + for (prop in elems[i]) { + if (typeof elems[i][prop] == "function") { + elems[i][prop] = null; } - } catch(er){} - } + } + } catch(er){} } } } return oldClean.apply(this, arguments); @@ -3311,10 +3332,11 @@ }); jQuery.webshims.register('track', function($, webshims, window, document, undefined){ "use strict"; var mediaelement = webshims.mediaelement; var id = new Date().getTime(); + var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf'; //descriptions are not really shown, but they are inserted into the dom var showTracks = {subtitles: 1, captions: 1, descriptions: 1}; var notImplemented = function(){ webshims.error('not implemented yet'); }; @@ -3698,10 +3720,10 @@ }); }); } trackData = webshims.data(track, 'trackData', {track: obj}); - mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]').andSelf()[0] == track)); + mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]')[ADDBACK]()[0] == track)); } else { if(supportTrackMod){ copyProps.forEach(function(copyProp){ webshims.defineProperty(obj, copyName[copyProp] || copyProp, { value: track[copyProp], \ No newline at end of file