webshims-rails 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/lib/webshims-rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +30 -29
  3. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +12 -12
  4. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +76 -76
  5. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +12 -12
  6. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +12 -12
  7. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +27 -27
  8. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +12 -12
  9. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +14 -14
  10. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +63 -60
  11. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +59 -59
  12. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +1 -1
  13. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +1 -1
  14. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +67 -67
  15. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +59 -58
  16. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +81 -80
  17. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +103 -102
  18. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +34 -31
  19. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +41 -38
  20. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +35 -35
  21. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +67 -67
  22. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +17 -17
  23. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +10 -8
  24. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +24 -23
  25. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +1 -1
  26. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +9 -0
  27. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -9
  28. data/vendor/assets/javascripts/webshims/minified/shims/track.js +21 -20
  29. data/vendor/assets/javascripts/webshims/polyfiller.js +144 -140
  30. data/vendor/assets/javascripts/webshims/shims/combos/1.js +10 -6
  31. data/vendor/assets/javascripts/webshims/shims/combos/10.js +11 -7
  32. data/vendor/assets/javascripts/webshims/shims/combos/11.js +10 -6
  33. data/vendor/assets/javascripts/webshims/shims/combos/12.js +10 -6
  34. data/vendor/assets/javascripts/webshims/shims/combos/13.js +10 -6
  35. data/vendor/assets/javascripts/webshims/shims/combos/16.js +10 -6
  36. data/vendor/assets/javascripts/webshims/shims/combos/17.js +10 -6
  37. data/vendor/assets/javascripts/webshims/shims/combos/18.js +986 -924
  38. data/vendor/assets/javascripts/webshims/shims/combos/19.js +10 -6
  39. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1 -1
  40. data/vendor/assets/javascripts/webshims/shims/combos/22.js +1 -1
  41. data/vendor/assets/javascripts/webshims/shims/combos/24.js +10 -6
  42. data/vendor/assets/javascripts/webshims/shims/combos/25.js +820 -768
  43. data/vendor/assets/javascripts/webshims/shims/combos/26.js +820 -768
  44. data/vendor/assets/javascripts/webshims/shims/combos/27.js +821 -769
  45. data/vendor/assets/javascripts/webshims/shims/combos/6.js +986 -924
  46. data/vendor/assets/javascripts/webshims/shims/combos/7.js +986 -924
  47. data/vendor/assets/javascripts/webshims/shims/combos/8.js +10 -6
  48. data/vendor/assets/javascripts/webshims/shims/combos/9.js +11 -7
  49. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +10 -6
  50. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +77 -77
  51. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +909 -847
  52. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +1 -1
  53. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +9 -0
  54. data/vendor/assets/javascripts/webshims/shims/track-ui.js +300 -291
  55. data/vendor/assets/javascripts/webshims/shims/track.js +810 -762
  56. metadata +10 -5
@@ -811,7 +811,7 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
811
811
  if(flash[0].offsetWidth > 1 && flash[0].offsetHeight > 1 && location.protocol.indexOf('file:') === 0){
812
812
  webshims.error("Add your local development-directory to the local-trusted security sandbox: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html");
813
813
  } else if(flash[0].offsetWidth < 2 || flash[0].offsetHeight < 2) {
814
- webshims.info("JS-SWF connection can't be established on hidden or unconnected flash objects");
814
+ webshims.warn("JS-SWF connection can't be established on hidden or unconnected flash objects");
815
815
  }
816
816
  flash = null;
817
817
  }, 8000);
@@ -70,6 +70,15 @@ audio * {
70
70
  background: rgba(0,0,0,0.8);
71
71
  color: #fff;
72
72
  }
73
+ .cue-display .description-cues {
74
+ position: absolute;
75
+ top: -99px;
76
+ left: -99px;
77
+ display: block;
78
+ width: 5px;
79
+ height: 5px;
80
+ overflow: hidden;
81
+ }
73
82
  mark {
74
83
  background-color: #ff9;
75
84
  color: #000;
@@ -1,292 +1,301 @@
1
- jQuery.webshims.register('track-ui', function($, webshims, window, document, undefined){
2
- var options = webshims.cfg.track;
3
- var enterE = {type: 'enter'};
4
- var exitE = {type: 'exit'};
5
- var showTracks = {subtitles: 1, captions: 1};
6
- var mediaelement = webshims.mediaelement;
7
- var usesNativeTrack = function(){
8
- return !options.override && Modernizr.track;
9
- };
10
-
11
- var trackDisplay = {
12
- update: function(baseData, media){
13
- if(!baseData.activeCues.length){
14
- this.hide(baseData);
15
- } else {
16
- if(!this.compareArray(baseData.displayedActiveCues, baseData.activeCues)){
17
- baseData.displayedActiveCues = baseData.activeCues;
18
- if(!baseData.trackDisplay){
19
- baseData.trackDisplay = $('<div class="cue-display"></div>').insertAfter(media);
20
- this.addEvents(baseData, media);
21
- }
22
-
23
- if(baseData.hasDirtyTrackDisplay){
24
- media.triggerHandler('forceupdatetrackdisplay');
25
- }
26
- this.showCues(baseData);
27
- }
28
- }
29
- },
30
- showCues: function(baseData){
31
- var element = $('<span class="cue-wrapper" />');
32
- $.each(baseData.displayedActiveCues, function(i, cue){
33
- var id = (cue.id) ? 'id="cue-id-'+cue.id +'"' : '';
34
- element.append(
35
- $('<span '+ id+ ' class="cue" />').html(cue.getCueAsHTML())
36
- );
37
- });
38
- baseData.trackDisplay.html(element);
39
- },
40
- compareArray: function(a1, a2){
41
- var ret = true;
42
- var i = 0;
43
- var len = a1.length;
44
- if(len != a2.length){
45
- ret = false;
46
- } else {
47
- for(; i < len; i++){
48
- if(a1[i] != a2[i]){
49
- ret = false;
50
- break;
51
- }
52
- }
53
- }
54
- return ret;
55
- },
56
- addEvents: function(baseData, media){
57
- if(options.positionDisplay){
58
- var timer;
59
- var positionDisplay = function(_force){
60
- if(baseData.displayedActiveCues.length || _force === true){
61
- baseData.trackDisplay.css({display: 'none'});
62
- var uiElement = media.getShadowElement();
63
- var offsetElement = uiElement.offsetParent();
64
- var uiHeight = uiElement.innerHeight();
65
- var uiWidth = uiElement.innerWidth();
66
- var position = uiElement.position();
67
- var displaySize = uiHeight * uiWidth;
68
- baseData.trackDisplay.css({
69
- left: position.left,
70
- width: uiWidth,
71
- height: uiHeight - 45,
72
- top: position.top,
73
- display: 'block'
74
- });
75
-
76
- baseData.trackDisplay.css('fontSize', Math.max(Math.round(uiHeight / 30), 7));
77
- baseData.hasDirtyTrackDisplay = false;
78
- } else {
79
- baseData.hasDirtyTrackDisplay = true;
80
- }
81
- };
82
- var delayed = function(e){
83
- clearTimeout(timer);
84
- timer = setTimeout(positionDisplay, 0);
85
- };
86
- var forceUpdate = function(){
87
- positionDisplay(true);
88
- };
89
- media.bind('updateshadowdom playerdimensionchange mediaelementapichange updatetrackdisplay updatemediaelementdimensions swfstageresize', delayed);
90
- media.bind('forceupdatetrackdisplay', forceUpdate);
91
- forceUpdate();
92
- }
93
- },
94
- hide: function(baseData){
95
- if(baseData.trackDisplay && baseData.displayedActiveCues.length){
96
- baseData.displayedActiveCues = [];
97
- baseData.trackDisplay.empty();
98
- }
99
- }
100
- };
101
-
102
- $.extend($.event.customEvent, {
103
- updatetrackdisplay: true,
104
- forceupdatetrackdisplay: true
105
- });
106
-
107
- mediaelement.trackDisplay = trackDisplay;
108
-
109
- if(!mediaelement.createCueList){
110
-
111
- var cueListProto = {
112
- getCueById: function(id){
113
- var cue = null;
114
- for(var i = 0, len = this.length; i < len; i++){
115
- if(this[i].id === id){
116
- cue = this[i];
117
- break;
118
- }
119
- }
120
- return cue;
121
- }
122
- };
123
-
124
- mediaelement.createCueList = function(){
125
- return $.extend([], cueListProto);
126
- };
127
- }
128
-
129
- mediaelement.getActiveCue = function(track, media, time, baseData){
130
- if(!track._lastFoundCue){
131
- track._lastFoundCue = {index: 0, time: 0};
132
- }
133
-
134
- if(Modernizr.track && !options.override && !track._shimActiveCues){
135
- track._shimActiveCues = mediaelement.createCueList();
136
- }
137
-
138
- var i = 0;
139
- var len;
140
- var cue;
141
-
142
- for(; i < track.shimActiveCues.length; i++){
143
- cue = track.shimActiveCues[i];
144
- if(cue.startTime > time || cue.endTime < time){
145
- track.shimActiveCues.splice(i, 1);
146
- i--;
147
- if(cue.pauseOnExit){
148
- $(media).pause();
149
- }
150
- $(track).triggerHandler('cuechange');
151
- $(cue).triggerHandler('exit');
152
- } else if(track.mode == 'showing' && showTracks[track.kind] && $.inArray(cue, baseData.activeCues) == -1){
153
- baseData.activeCues.push(cue);
154
- }
155
- }
156
-
157
-
158
- len = track.cues.length;
159
- i = track._lastFoundCue.time < time ? track._lastFoundCue.index : 0;
160
-
161
- for(; i < len; i++){
162
- cue = track.cues[i];
163
-
164
- if(cue.startTime <= time && cue.endTime >= time && $.inArray(cue, track.shimActiveCues) == -1){
165
- track.shimActiveCues.push(cue);
166
- if(track.mode == 'showing' && showTracks[track.kind]){
167
- baseData.activeCues.push(cue);
168
- }
169
- $(track).triggerHandler('cuechange');
170
- $(cue).triggerHandler('enter');
171
-
172
- track._lastFoundCue.time = time;
173
- track._lastFoundCue.index = i;
174
-
175
-
176
- }
177
- if(cue.startTime > time){
178
- break;
179
- }
180
- }
181
- };
182
-
183
- if(usesNativeTrack()){
184
- (function(){
185
- var block;
186
- var triggerDisplayUpdate = function(elem){
187
- if(!block){
188
- setTimeout(function(){
189
- block = true;
190
- $(elem).triggerHandler('updatetrackdisplay');
191
- block = false;
192
- }, 9);
193
- }
194
- };
195
- var trackDesc = webshims.defineNodeNameProperty('track', 'track', {
196
- prop: {
197
- get: function(){
198
- triggerDisplayUpdate($(this).parent('audio, video'));
199
- return trackDesc.prop._supget.apply(this, arguments);
200
- }
201
- }
202
-
203
- });
204
- ['audio', 'video'].forEach(function(nodeName){
205
- var addTrack, textTracks;
206
- textTracks = webshims.defineNodeNameProperty(nodeName, 'textTracks', {
207
- prop: {
208
- get: function(){
209
- triggerDisplayUpdate(this);
210
- return textTracks.prop._supget.apply(this, arguments);
211
- }
212
- }
213
- });
214
-
215
- addTrack = webshims.defineNodeNameProperty(nodeName, 'addTextTrack', {
216
- prop: {
217
- value: function(){
218
- triggerDisplayUpdate(this);
219
- return addTrack.prop._supvalue.apply(this, arguments);
220
- }
221
- }
222
- });
223
- });
224
- })();
225
- }
226
-
227
- webshims.addReady(function(context, insertedElement){
228
- $('video, audio', context)
229
- .add(insertedElement.filter('video, audio'))
230
- .each(function(){
231
- var trackList;
232
- var elem = $(this);
233
- var baseData;
234
- var addTrackView = function(){
235
-
236
- elem
237
- .unbind('.trackview')
238
- .bind('play.trackview timeupdate.trackview updatetrackdisplay.trackview', function(e){
239
- var track;
240
- var time;
241
-
242
- if(!trackList || !baseData){
243
- trackList = elem.prop('textTracks');
244
- baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
245
- if(!baseData.displayedActiveCues){
246
- baseData.displayedActiveCues = [];
247
- }
248
- }
249
-
250
- if (!trackList){return;}
251
- time = elem.prop('currentTime');
252
-
253
- if(!time && time !== 0){return;}
254
- baseData.activeCues = [];
255
- for(var i = 0, len = trackList.length; i < len; i++){
256
- track = trackList[i];
257
- if(track.mode != 'disabled' && track.cues && track.cues.length){
258
- mediaelement.getActiveCue(track, elem, time, baseData);
259
-
260
- }
261
- }
262
-
263
- trackDisplay.update(baseData, elem);
264
-
265
- })
266
- ;
267
- };
268
- if(!usesNativeTrack()){
269
- addTrackView();
270
- } else {
271
- elem.bind('mediaelementapichange trackapichange', function(){
272
- if(!usesNativeTrack() || elem.is('.nonnative-api-active')){
273
- addTrackView();
274
- } else {
275
- trackList = elem.prop('textTracks');
276
- baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
277
-
278
- $.each(trackList, function(i, track){
279
-
280
- if(track._shimActiveCues){
281
- delete track._shimActiveCues;
282
- }
283
- });
284
- trackDisplay.hide(baseData);
285
- elem.unbind('.trackview');
286
- }
287
- });
288
- }
289
- })
290
- ;
291
- });
1
+ jQuery.webshims.register('track-ui', function($, webshims, window, document, undefined){
2
+ var options = webshims.cfg.track;
3
+ var enterE = {type: 'enter'};
4
+ var exitE = {type: 'exit'};
5
+ //descriptions are not really shown, but they are inserted into the dom
6
+ var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
7
+ var mediaelement = webshims.mediaelement;
8
+ var usesNativeTrack = function(){
9
+ return !options.override && Modernizr.track;
10
+ };
11
+
12
+ var trackDisplay = {
13
+ update: function(baseData, media){
14
+ if(!baseData.activeCues.length){
15
+ this.hide(baseData);
16
+ } else {
17
+ if(!compareArray(baseData.displayedActiveCues, baseData.activeCues)){
18
+ baseData.displayedActiveCues = baseData.activeCues;
19
+ if(!baseData.trackDisplay){
20
+ baseData.trackDisplay = $('<div class="cue-display"><span class="description-cues" aria-live="assertive" /></div>').insertAfter(media);
21
+ this.addEvents(baseData, media);
22
+ }
23
+
24
+ if(baseData.hasDirtyTrackDisplay){
25
+ media.triggerHandler('forceupdatetrackdisplay');
26
+ }
27
+ this.showCues(baseData);
28
+ }
29
+ }
30
+ },
31
+ showCues: function(baseData){
32
+ var element = $('<span class="cue-wrapper" />');
33
+ $.each(baseData.displayedActiveCues, function(i, cue){
34
+ var id = (cue.id) ? 'id="cue-id-'+cue.id +'"' : '';
35
+ var cueHTML = $('<span '+ id+ ' class="cue" />').html(cue.getCueAsHTML());
36
+ if(cue.track.kind == 'descriptions'){
37
+ setTimeout(function(){
38
+ $('span.description-cues', baseData.trackDisplay).html(cueHTML);
39
+ }, 0);
40
+ } else {
41
+ element.append(cueHTML);
42
+ }
43
+ });
44
+ $('span.cue-wrapper', baseData.trackDisplay).remove();
45
+ baseData.trackDisplay.append(element);
46
+ },
47
+ addEvents: function(baseData, media){
48
+ if(options.positionDisplay){
49
+ var timer;
50
+ var positionDisplay = function(_force){
51
+ if(baseData.displayedActiveCues.length || _force === true){
52
+ baseData.trackDisplay.css({display: 'none'});
53
+ var uiElement = media.getShadowElement();
54
+ var offsetElement = uiElement.offsetParent();
55
+ var uiHeight = uiElement.innerHeight();
56
+ var uiWidth = uiElement.innerWidth();
57
+ var position = uiElement.position();
58
+ var displaySize = uiHeight * uiWidth;
59
+ baseData.trackDisplay.css({
60
+ left: position.left,
61
+ width: uiWidth,
62
+ height: uiHeight - 45,
63
+ top: position.top,
64
+ display: 'block'
65
+ });
66
+
67
+ baseData.trackDisplay.css('fontSize', Math.max(Math.round(uiHeight / 30), 7));
68
+ baseData.hasDirtyTrackDisplay = false;
69
+ } else {
70
+ baseData.hasDirtyTrackDisplay = true;
71
+ }
72
+ };
73
+ var delayed = function(e){
74
+ clearTimeout(timer);
75
+ timer = setTimeout(positionDisplay, 0);
76
+ };
77
+ var forceUpdate = function(){
78
+ positionDisplay(true);
79
+ };
80
+ media.bind('updateshadowdom playerdimensionchange mediaelementapichange updatetrackdisplay updatemediaelementdimensions swfstageresize', delayed);
81
+ media.bind('forceupdatetrackdisplay', forceUpdate);
82
+ forceUpdate();
83
+ }
84
+ },
85
+ hide: function(baseData){
86
+ if(baseData.trackDisplay && baseData.displayedActiveCues.length){
87
+ baseData.displayedActiveCues = [];
88
+ $('span.cue-wrapper', baseData.trackDisplay).remove();
89
+ $('span.description-cues', baseData.trackDisplay).empty();
90
+ }
91
+ }
92
+ };
93
+
94
+ function compareArray(a1, a2){
95
+ var ret = true;
96
+ var i = 0;
97
+ var len = a1.length;
98
+ if(len != a2.length){
99
+ ret = false;
100
+ } else {
101
+ for(; i < len; i++){
102
+ if(a1[i] != a2[i]){
103
+ ret = false;
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ return ret;
109
+ }
110
+
111
+ $.extend($.event.customEvent, {
112
+ updatetrackdisplay: true,
113
+ forceupdatetrackdisplay: true
114
+ });
115
+
116
+ mediaelement.trackDisplay = trackDisplay;
117
+
118
+ if(!mediaelement.createCueList){
119
+
120
+ var cueListProto = {
121
+ getCueById: function(id){
122
+ var cue = null;
123
+ for(var i = 0, len = this.length; i < len; i++){
124
+ if(this[i].id === id){
125
+ cue = this[i];
126
+ break;
127
+ }
128
+ }
129
+ return cue;
130
+ }
131
+ };
132
+
133
+ mediaelement.createCueList = function(){
134
+ return $.extend([], cueListProto);
135
+ };
136
+ }
137
+
138
+ mediaelement.getActiveCue = function(track, media, time, baseData){
139
+ if(!track._lastFoundCue){
140
+ track._lastFoundCue = {index: 0, time: 0};
141
+ }
142
+
143
+ if(Modernizr.track && !options.override && !track._shimActiveCues){
144
+ track._shimActiveCues = mediaelement.createCueList();
145
+ }
146
+
147
+ var i = 0;
148
+ var len;
149
+ var cue;
150
+
151
+ for(; i < track.shimActiveCues.length; i++){
152
+ cue = track.shimActiveCues[i];
153
+ if(cue.startTime > time || cue.endTime < time){
154
+ track.shimActiveCues.splice(i, 1);
155
+ i--;
156
+ if(cue.pauseOnExit){
157
+ $(media).pause();
158
+ }
159
+ $(track).triggerHandler('cuechange');
160
+ $(cue).triggerHandler('exit');
161
+ } else if(track.mode == 'showing' && showTracks[track.kind] && $.inArray(cue, baseData.activeCues) == -1){
162
+ baseData.activeCues.push(cue);
163
+ }
164
+ }
165
+
166
+
167
+ len = track.cues.length;
168
+ i = track._lastFoundCue.time < time ? track._lastFoundCue.index : 0;
169
+
170
+ for(; i < len; i++){
171
+ cue = track.cues[i];
172
+
173
+ if(cue.startTime <= time && cue.endTime >= time && $.inArray(cue, track.shimActiveCues) == -1){
174
+ track.shimActiveCues.push(cue);
175
+ if(track.mode == 'showing' && showTracks[track.kind]){
176
+ baseData.activeCues.push(cue);
177
+ }
178
+ $(track).triggerHandler('cuechange');
179
+ $(cue).triggerHandler('enter');
180
+
181
+ track._lastFoundCue.time = time;
182
+ track._lastFoundCue.index = i;
183
+
184
+
185
+ }
186
+ if(cue.startTime > time){
187
+ break;
188
+ }
189
+ }
190
+ };
191
+
192
+ if(usesNativeTrack()){
193
+ (function(){
194
+ var block;
195
+ var triggerDisplayUpdate = function(elem){
196
+ setTimeout(function(){
197
+ block = true;
198
+ $(elem).triggerHandler('updatetrackdisplay');
199
+ block = false;
200
+ }, 9);
201
+ };
202
+
203
+ var createUpdateFn = function(nodeName, prop, type){
204
+ var superType = '_sup'+type;
205
+ var desc = {prop: {}};
206
+ var superDesc;
207
+ desc.prop[type] = function(){
208
+ if(!block && usesNativeTrack()){
209
+ triggerDisplayUpdate($(this).closest('audio, video'));
210
+ }
211
+ return superDesc.prop[superType].apply(this, arguments);
212
+ };
213
+ superDesc = webshims.defineNodeNameProperty(nodeName, prop, desc);
214
+ };
215
+
216
+ createUpdateFn('track', 'track', 'get');
217
+
218
+ ['audio', 'video'].forEach(function(nodeName){
219
+ createUpdateFn(nodeName, 'textTracks', 'get');
220
+ createUpdateFn('nodeName', 'addTextTrack', 'value');
221
+ });
222
+ })();
223
+ }
224
+
225
+ webshims.addReady(function(context, insertedElement){
226
+ $('video, audio', context)
227
+ .add(insertedElement.filter('video, audio'))
228
+ .each(function(){
229
+ var elem = $(this);
230
+
231
+ var getDisplayCues = function(e){
232
+ var track;
233
+ var time;
234
+
235
+ if(!trackList || !baseData){
236
+ trackList = elem.prop('textTracks');
237
+ baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
238
+ if(!baseData.displayedActiveCues){
239
+ baseData.displayedActiveCues = [];
240
+ }
241
+ }
242
+
243
+ if (!trackList){return;}
244
+ time = elem.prop('currentTime');
245
+
246
+ if(!time && time !== 0){return;}
247
+ baseData.activeCues = [];
248
+ for(var i = 0, len = trackList.length; i < len; i++){
249
+ track = trackList[i];
250
+ if(track.mode != 'disabled' && track.cues && track.cues.length){
251
+ mediaelement.getActiveCue(track, elem, time, baseData);
252
+
253
+ }
254
+ }
255
+
256
+ trackDisplay.update(baseData, elem);
257
+
258
+ };
259
+ var onUpdate = function(e){
260
+ clearTimeout(updateTimer);
261
+ if(e && e.type == 'timeupdate'){
262
+ getDisplayCues();
263
+ setTimeout(onUpdate, 90);
264
+ } else {
265
+ updateTimer = setTimeout(getDisplayCues, 9);
266
+ }
267
+ };
268
+
269
+ var addTrackView = function(){
270
+
271
+ elem
272
+ .unbind('.trackview')
273
+ .bind('play.trackview timeupdate.trackview updatetrackdisplay.trackview', onUpdate)
274
+ ;
275
+ };
276
+ var baseData, trackList, updateTimer;
277
+
278
+ if(!usesNativeTrack()){
279
+ addTrackView();
280
+ } else {
281
+ elem.bind('mediaelementapichange trackapichange', function(){
282
+ if(!usesNativeTrack() || elem.is('.nonnative-api-active')){
283
+ addTrackView();
284
+ } else {
285
+ trackList = elem.prop('textTracks');
286
+ baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
287
+
288
+ $.each(trackList, function(i, track){
289
+ if(track._shimActiveCues){
290
+ delete track._shimActiveCues;
291
+ }
292
+ });
293
+ trackDisplay.hide(baseData);
294
+ elem.unbind('.trackview');
295
+ }
296
+ });
297
+ }
298
+ })
299
+ ;
300
+ });
292
301
  });