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