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