webshims-rails 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  });