vendor/assets/javascripts/webshims/shims/track.js in webshims-rails-1.14.3 vs vendor/assets/javascripts/webshims/shims/track.js in webshims-rails-1.14.4
- old
+ new
@@ -3,11 +3,12 @@
var mediaelement = webshims.mediaelement;
var id = new Date().getTime();
//descriptions are not really shown, but they are inserted into the dom
var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
var dummyTrack = $('<track />');
- var supportTrackMod = Modernizr.ES5 && Modernizr.objectAccessor;
+ var support = webshims.support;
+ var supportTrackMod = support.ES5 && support.objectAccessor;
var createEventTarget = function(obj){
var eventList = {};
obj.addEventListener = function(name, fn){
if(eventList[name]){
webshims.error('always use $.on to the shimed event: '+ name +' already bound fn was: '+ eventList[name] +' your fn was: '+ fn);
@@ -312,38 +313,44 @@
};
var ttmlTextToVTT = function(ttml){
ttml = $.parseXML(ttml) || [];
return $(ttml).find('[begin][end]').map(mapTtmlToVtt).get().join('\n\n') || '';
};
-
+ var loadingTracks = 0;
+
mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
- var loadEvents = 'play playing';
+ var loadEvents = 'play playing loadedmetadata loadstart';
var obj = trackData.track;
var load = function(){
var error, ajax, createAjax;
- var src = obj.mode != 'disabled' && ($.attr(track, 'src') && $.prop(track, 'src'));
+ var isDisabled = obj.mode == 'disabled';
+ var videoState = !!($.prop(mediaelem, 'readyState') > 0 || $.prop(mediaelem, 'networkState') == 2 || !$.prop(mediaelem, 'paused'));
+ var src = (!isDisabled || videoState) && ($.attr(track, 'src') && $.prop(track, 'src'));
if(src){
$(mediaelem).off(loadEvents, load).off('updatetrackdisplay', load);
if(!trackData.readyState){
error = function(){
+ loadingTracks--;
trackData.readyState = 3;
obj.cues = null;
obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = null;
$(track).triggerHandler('error');
};
trackData.readyState = 1;
try {
obj.cues = mediaelement.createCueList();
obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = mediaelement.createCueList();
+ loadingTracks++;
createAjax = function(){
ajax = $.ajax({
dataType: 'text',
url: src,
success: function(text){
- var contentType = ajax.getResponseHeader('content-type');
+ loadingTracks--;
+ var contentType = ajax.getResponseHeader('content-type') || '';
if(!contentType.indexOf('application/xml')){
text = ttmlTextToVTT(text);
} else if(contentType.indexOf('text/vtt')){
webshims.error('set the mime-type of your WebVTT files to text/vtt. see: http://dev.w3.org/html5/webvtt/#text/vtt');
@@ -355,17 +362,20 @@
$(mediaelem).triggerHandler('updatetrackdisplay');
} else {
error();
}
});
-
},
error: error
});
};
if($.ajax && $.ajaxSettings.xhr){
- createAjax();
+ if(isDisabled){
+ setTimeout(createAjax, loadingTracks * 2);
+ } else {
+ createAjax();
+ }
} else {
webshims.ready('jajax', createAjax);
webshims.loader.loadList(['jajax']);
}
} catch(er){
@@ -380,17 +390,16 @@
obj._shimActiveCues = null;
obj.activeCues = null;
obj.cues = null;
$(mediaelem).on(loadEvents, load);
+
if(_default){
obj.mode = showTracks[obj.kind] ? 'showing' : 'hidden';
- webshims.ready('WINDOWLOAD', load);
+ load();
} else {
- webshims.ready('WINDOWLOAD', function(){
- $(mediaelem).on('updatetrackdisplay', load);
- });
+ $(mediaelem).on('updatetrackdisplay', load);
}
};
mediaelement.createTextTrack = function(mediaelem, track){
var obj, trackData;
@@ -658,11 +667,11 @@
}
return baseData.textTracks;
};
- if(!Modernizr.track){
+ if(!support.track){
webshims.defineNodeNamesBooleanProperty(['track'], 'default');
webshims.reflectProperties(['track'], ['srclang', 'label']);
webshims.defineNodeNameProperties('track', {
src: {
@@ -673,11 +682,11 @@
});
}
webshims.defineNodeNameProperties('track', {
kind: {
- attr: Modernizr.track ? {
+ attr: support.track ? {
set: function(value){
var trackData = webshims.data(this, 'trackData');
this.setAttribute('data-kind', value);
if(trackData){
trackData.attrKind = value;
@@ -728,11 +737,10 @@
}
});
//
-
webshims.defineNodeNamesProperties(['track'], {
ERROR: {
value: 3
},
LOADED: {
@@ -838,11 +846,11 @@
.each(function(){
updateMediaTrackList.call(this);
})
.on('emptied updatetracklist wsmediareload', thUpdateList)
.each(function(){
- if(Modernizr.track){
+ if(support.track){
var shimedTextTracks = $.prop(this, 'textTracks');
var origTextTracks = this.textTracks;
if(shimedTextTracks.length != origTextTracks.length){
webshims.warn("textTracks couldn't be copied");
@@ -863,9 +871,9 @@
}, 9);
}
});
});
- if(Modernizr.texttrackapi){
+ if(support.texttrackapi){
$('video, audio').trigger('trackapichange');
}
});