webshims-rails 1.14.6 → 1.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +145 -139
  4. data/vendor/assets/javascripts/webshims/shims/canvas-blob.js +97 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +13 -15
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +29 -28
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2 -1
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +22 -10
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +22 -10
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +28 -43
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +41 -44
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2 -1
  13. data/vendor/assets/javascripts/webshims/shims/combos/2.js +40 -42
  14. data/vendor/assets/javascripts/webshims/shims/combos/21.js +98 -71
  15. data/vendor/assets/javascripts/webshims/shims/combos/22.js +9 -9
  16. data/vendor/assets/javascripts/webshims/shims/combos/23.js +13 -1
  17. data/vendor/assets/javascripts/webshims/shims/combos/25.js +141 -51
  18. data/vendor/assets/javascripts/webshims/shims/combos/27.js +66 -12
  19. data/vendor/assets/javascripts/webshims/shims/combos/28.js +1 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/3.js +27 -41
  21. data/vendor/assets/javascripts/webshims/shims/combos/30.js +27 -41
  22. data/vendor/assets/javascripts/webshims/shims/combos/31.js +27 -41
  23. data/vendor/assets/javascripts/webshims/shims/combos/34.js +36 -36
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +27 -27
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +2 -1
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +2 -1
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +40 -42
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +40 -42
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +29 -28
  30. data/vendor/assets/javascripts/webshims/shims/combos/98.js +4 -2
  31. data/vendor/assets/javascripts/webshims/shims/combos/99.js +4 -2
  32. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +27 -27
  33. data/vendor/assets/javascripts/webshims/shims/es6.js +23 -29
  34. data/vendor/assets/javascripts/webshims/shims/{filereader.js → filereader-xhr.js} +66 -12
  35. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -14
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2 -1
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1 -2
  38. data/vendor/assets/javascripts/webshims/shims/form-validation.js +18 -5
  39. data/vendor/assets/javascripts/webshims/shims/form-validators.js +15 -14
  40. data/vendor/assets/javascripts/webshims/shims/geolocation.js +41 -50
  41. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +4 -4
  42. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +2 -1
  43. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols.js +4 -2
  44. data/vendor/assets/javascripts/webshims/shims/mediacapture-picker.js +42 -0
  45. data/vendor/assets/javascripts/webshims/shims/mediacapture.js +159 -0
  46. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +13 -1
  47. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +48 -12
  48. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +20 -8
  49. data/vendor/assets/javascripts/webshims/shims/{combos/26.js → moxie/js/moxie-html4.js} +2121 -1257
  50. data/vendor/assets/javascripts/webshims/shims/moxie/js/{moxie.js → moxie-swf.js} +1125 -1741
  51. data/vendor/assets/javascripts/webshims/shims/sticky.js +585 -0
  52. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +20 -0
  53. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +23 -0
  54. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +74 -34
  55. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +78 -31
  56. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +78 -31
  57. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/track-ui.js +214 -111
  59. data/vendor/assets/javascripts/webshims/shims/track.js +9 -9
  60. data/vendor/assets/javascripts/webshims/shims/usermedia-core.js +27 -0
  61. data/vendor/assets/javascripts/webshims/shims/usermedia-shim.js +34 -37
  62. metadata +9 -8
  63. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -1262
  64. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
@@ -48,7 +48,10 @@ webshims.register('track-ui', function($, webshims, window, document, undefined)
48
48
  var usesNativeTrack = function(){
49
49
  return !options.override && support.texttrackapi;
50
50
  };
51
-
51
+ var requestAnimationFrame = window.cancelAnimationFrame && window.requestAnimationFrame || function(fn){
52
+ setTimeout(fn, 17);
53
+ };
54
+ var cancelAnimationFrame = window.cancelAnimationFrame || window.clearTimeout;
52
55
  var trackDisplay = {
53
56
  update: function(baseData, media){
54
57
  if(!baseData.activeCues.length){
@@ -169,20 +172,42 @@ webshims.register('track-ui', function($, webshims, window, document, undefined)
169
172
  return $.extend([], cueListProto);
170
173
  };
171
174
  }
175
+
176
+ function triggerCueEvent(cue, type, baseData, media, trackIndex){
177
+ var trackElem, compareTrack;
178
+ var cueChange = $.Event('cuechange');
179
+ if(!baseData.trackElements){
180
+ baseData.trackElements = media[0].getElementsByTagName('track');
181
+ }
182
+
183
+ trackElem = baseData.trackElements[trackIndex];
184
+
185
+ if(trackElem){
186
+ compareTrack = (webshims.data(trackElem, 'trackData') || {track: $.prop(trackElem, 'track')}).track;
187
+ if(compareTrack != cue.track){
188
+ trackElem = null;
189
+ }
190
+ }
191
+ $.event.trigger(cueChange, null, cue.track, true);
192
+
193
+ if(trackElem){
194
+ $.event.trigger(cueChange, null, trackElem, true);
195
+ }
196
+
197
+ $.event.trigger(type, null, cue, true);
198
+ }
172
199
 
173
- mediaelement.getActiveCue = function(track, media, time, baseData){
200
+ mediaelement.getActiveCue = function(track, media, time, baseData, trackIndex){
174
201
  if(!track._lastFoundCue){
175
202
  track._lastFoundCue = {index: 0, time: 0};
176
203
  }
177
204
 
178
- if(support.texttrackapi && !options.override && !track._shimActiveCues){
205
+ if(!track._shimActiveCues && support.texttrackapi && !options.override){
179
206
  track._shimActiveCues = mediaelement.createCueList();
180
207
  }
181
208
 
182
209
  var i = 0;
183
- var len;
184
- var cue;
185
-
210
+ var len, cue, delay;
186
211
  for(; i < track.shimActiveCues.length; i++){
187
212
  cue = track.shimActiveCues[i];
188
213
  if(cue.startTime > time || cue.endTime < time){
@@ -191,10 +216,20 @@ webshims.register('track-ui', function($, webshims, window, document, undefined)
191
216
  if(cue.pauseOnExit){
192
217
  $(media).pause();
193
218
  }
194
- $(track).triggerHandler('cuechange');
195
- $(cue).triggerHandler('exit');
196
- } else if(track.mode == 'showing' && showTracks[track.kind] && $.inArray(cue, baseData.activeCues) == -1){
197
- baseData.activeCues.push(cue);
219
+
220
+
221
+ triggerCueEvent(cue, 'exit', baseData, media, trackIndex);
222
+
223
+
224
+ } else {
225
+ delay = cue.endTime - time;
226
+ if(baseData.nextUpdateDelay > delay){
227
+ baseData.nextUpdateDelay = delay;
228
+ baseData.nextEvent = cue.endTime;
229
+ }
230
+ if(track.mode == 'showing' && showTracks[track.kind] && $.inArray(cue, baseData.activeCues) == -1){
231
+ baseData.activeCues.push(cue);
232
+ }
198
233
  }
199
234
  }
200
235
 
@@ -210,20 +245,182 @@ webshims.register('track-ui', function($, webshims, window, document, undefined)
210
245
  if(track.mode == 'showing' && showTracks[track.kind]){
211
246
  baseData.activeCues.push(cue);
212
247
  }
213
- $(track).triggerHandler('cuechange');
214
- $(cue).triggerHandler('enter');
215
-
248
+
249
+ triggerCueEvent(cue, 'enter', baseData, media, trackIndex);
250
+
216
251
  track._lastFoundCue.time = time;
217
252
  track._lastFoundCue.index = i;
218
-
253
+
254
+ delay = cue.endTime - time;
255
+ if(baseData.nextUpdateDelay > delay){
256
+ baseData.nextUpdateDelay = delay;
257
+ baseData.nextEvent = cue.endTime;
258
+ }
219
259
 
220
260
  }
221
261
  if(cue.startTime > time){
262
+ delay = cue.startTime - time;
263
+ if(baseData.nextUpdateDelay > delay){
264
+ baseData.nextUpdateDelay = delay;
265
+ baseData.nextEvent = cue.startTime;
266
+ }
222
267
  break;
223
268
  }
224
269
  }
225
270
  };
226
-
271
+ var filterTrackImplementation = function(){
272
+ return webshims.implement(this, 'trackui');
273
+ };
274
+ var implementTrackUi = function(){
275
+ var baseData, trackList, updateTimer, updateTimer2, lastDelay, lastTime, invalidTracksTimer;
276
+ var treshHold = 0.27;
277
+ var elem = $(this);
278
+ var recheckI = 0;
279
+ var recheckId;
280
+ var reCheck = function(){
281
+ recheckI++;
282
+
283
+ //if recheckI is over 5 video might be paused, stalled or waiting,
284
+ //in this case abort and wait for the next play, playing or timeupdate event
285
+ if(recheckI < 9){
286
+ if(elem.prop('currentTime') > baseData.nextEvent){
287
+ recheckI = undefined;
288
+ getDisplayCues();
289
+ } else {
290
+ recheckId = requestAnimationFrame(reCheck);
291
+ }
292
+ } else {
293
+ recheckI = undefined;
294
+ }
295
+ };
296
+ var getDisplayCues = function(e){
297
+ var track, time;
298
+ if(!trackList || !baseData){
299
+ trackList = elem.prop('textTracks');
300
+ baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
301
+
302
+ if(!baseData.displayedActiveCues){
303
+ baseData.displayedActiveCues = [];
304
+ }
305
+ }
306
+
307
+ if (!trackList){return;}
308
+ time = elem.prop('currentTime');
309
+
310
+ if(!time && time !== 0){return;}
311
+
312
+ if(baseData.nextEvent && e && e.type == 'timeupdate' && time >= lastTime && baseData.nextEvent - time > treshHold && time - lastTime < 9){
313
+ return;
314
+ }
315
+
316
+ lastTime = time;
317
+ lastDelay = baseData.nextUpdateDelay;
318
+ baseData.nextUpdateDelay = Number.MAX_VALUE;
319
+ baseData.activeCues = [];
320
+ for(var i = 0, len = trackList.length; i < len; i++){
321
+ track = trackList[i];
322
+ if(track.mode != 'disabled' && track.cues && track.cues.length){
323
+ mediaelement.getActiveCue(track, elem, time, baseData, i);
324
+ }
325
+ }
326
+ trackDisplay.update(baseData, elem);
327
+
328
+ clearTimeout(updateTimer);
329
+
330
+ if(baseData.nextUpdateDelay <= treshHold && (e || lastDelay != baseData.nextUpdateDelay) && baseData.nextUpdateDelay > 0){
331
+
332
+ lastDelay = baseData.nextUpdateDelay;
333
+
334
+ clearTimeout(updateTimer2);
335
+
336
+ if(recheckId){
337
+ cancelAnimationFrame(recheckId);
338
+ }
339
+ recheckI = 0;
340
+ updateTimer2 = setTimeout(reCheck, (baseData.nextUpdateDelay * 1000) + 9);
341
+ } else if(baseData.nextUpdateDelay >= Number.MAX_VALUE){
342
+ baseData.nextEvent = time + 2;
343
+ }
344
+ };
345
+ var invalidateTrackElems = function(){
346
+ if(baseData && baseData.trackElements){
347
+ delete baseData.trackElements;
348
+ }
349
+ };
350
+ var onUpdatCues = function(e){
351
+ if(baseData && e && (e.type == 'addtrack' || e.type == 'removetrack')){
352
+ clearTimeout(invalidTracksTimer);
353
+ invalidTracksTimer = setTimeout(invalidateTrackElems, 39);
354
+ }
355
+ clearTimeout(updateTimer);
356
+ updateTimer = setTimeout(getDisplayCues, 40);
357
+ };
358
+ var addTrackView = function(){
359
+ if(!trackList) {
360
+ if(baseData && 'blockTrackListUpdate' in baseData){
361
+ baseData.blockTrackListUpdate = true;
362
+ }
363
+ trackList = elem.prop('textTracks');
364
+ if(baseData && baseData.blockTrackListUpdate){
365
+ baseData.blockTrackListUpdate = false;
366
+ }
367
+ }
368
+ //as soon as change on trackList is implemented in all browsers we do not need to have 'updatetrackdisplay' anymore
369
+ $( [trackList] )
370
+ .off('.trackview')
371
+ .on('change.trackview addtrack.trackview removetrack.trackview', onUpdatCues)
372
+ ;
373
+ elem
374
+ .off('.trackview')
375
+ .on('emptied.trackview', invalidateTrackElems)
376
+ .on('play.trackview playing.trackview updatetrackdisplay.trackview seeked.trackview', onUpdatCues)
377
+ .on('timeupdate.trackview', getDisplayCues)
378
+ ;
379
+ };
380
+
381
+ elem.on('remove', function(e){
382
+ if(!e.originalEvent && baseData && baseData.trackDisplay){
383
+ setTimeout(function(){
384
+ baseData.trackDisplay.remove();
385
+ }, 4);
386
+ }
387
+ });
388
+
389
+ if(!usesNativeTrack()){
390
+ addTrackView();
391
+ } else {
392
+
393
+ if(elem.hasClass('nonnative-api-active')){
394
+ addTrackView();
395
+ }
396
+ elem
397
+ .on('mediaelementapichange trackapichange', function(){
398
+
399
+ if(!usesNativeTrack() || elem.hasClass('nonnative-api-active')){
400
+ addTrackView();
401
+ } else {
402
+ clearTimeout(updateTimer);
403
+ clearTimeout(updateTimer2);
404
+ if(recheckId){
405
+ cancelAnimationFrame(recheckId);
406
+ }
407
+
408
+ trackList = elem.prop('textTracks');
409
+ baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
410
+ $.each(trackList, function(i, track){
411
+ if(track._shimActiveCues){
412
+ delete track._shimActiveCues;
413
+ }
414
+ });
415
+ $( [trackList] ).off('.trackview');
416
+ trackDisplay.hide(baseData);
417
+ elem.off('.trackview');
418
+ }
419
+ })
420
+ ;
421
+ }
422
+ };
423
+
227
424
  if(usesNativeTrack()){
228
425
  (function(){
229
426
  var block;
@@ -265,102 +462,8 @@ webshims.register('track-ui', function($, webshims, window, document, undefined)
265
462
  webshims.addReady(function(context, insertedElement){
266
463
  $('video, audio', context)
267
464
  .add(insertedElement.filter('video, audio'))
268
- .filter(function(){
269
- return webshims.implement(this, 'trackui');
270
- })
271
- .each(function(){
272
- var baseData, trackList, updateTimer, updateTimer2;
273
-
274
- var elem = $(this);
275
- var getDisplayCues = function(e){
276
- var track;
277
- var time;
278
-
279
- if(!trackList || !baseData){
280
- trackList = elem.prop('textTracks');
281
- baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
282
- if(!baseData.displayedActiveCues){
283
- baseData.displayedActiveCues = [];
284
- }
285
- }
286
-
287
- if (!trackList){return;}
288
- time = elem.prop('currentTime');
289
-
290
- if(!time && time !== 0){return;}
291
- baseData.activeCues = [];
292
- for(var i = 0, len = trackList.length; i < len; i++){
293
- track = trackList[i];
294
- if(track.mode != 'disabled' && track.cues && track.cues.length){
295
- mediaelement.getActiveCue(track, elem, time, baseData);
296
- }
297
- }
298
-
299
- trackDisplay.update(baseData, elem);
300
-
301
- };
302
- var onUpdate = function(e){
303
- clearTimeout(updateTimer);
304
- if(e){
305
- if(e.type == 'timeupdate'){
306
- getDisplayCues();
307
- }
308
- updateTimer2 = setTimeout(onUpdate, 90);
309
- } else {
310
- updateTimer = setTimeout(getDisplayCues, 9);
311
- }
312
- };
313
- var addTrackView = function(){
314
- if(!trackList) {
315
- trackList = elem.prop('textTracks');
316
- }
317
- //as soon as change on trackList is implemented in all browsers we do not need to have 'updatetrackdisplay' anymore
318
- $( [trackList] ).on('change', onUpdate);
319
- elem
320
- .off('.trackview')
321
- .on('play.trackview timeupdate.trackview updatetrackdisplay.trackview', onUpdate)
322
- ;
323
- };
324
-
325
- elem.on('remove', function(e){
326
- if(!e.originalEvent && baseData && baseData.trackDisplay){
327
- setTimeout(function(){
328
- baseData.trackDisplay.remove();
329
- }, 4);
330
- }
331
- });
332
-
333
- if(!usesNativeTrack()){
334
- addTrackView();
335
- } else {
336
-
337
- if(elem.hasClass('nonnative-api-active')){
338
- addTrackView();
339
- }
340
- elem
341
- .on('mediaelementapichange trackapichange', function(){
342
-
343
- if(!usesNativeTrack() || elem.hasClass('nonnative-api-active')){
344
- addTrackView();
345
- } else {
346
- clearTimeout(updateTimer);
347
- clearTimeout(updateTimer2);
348
-
349
- trackList = elem.prop('textTracks');
350
- baseData = webshims.data(elem[0], 'mediaelementBase') || webshims.data(elem[0], 'mediaelementBase', {});
351
-
352
- $.each(trackList, function(i, track){
353
- if(track._shimActiveCues){
354
- delete track._shimActiveCues;
355
- }
356
- });
357
- trackDisplay.hide(baseData);
358
- elem.off('.trackview');
359
- }
360
- })
361
- ;
362
- }
363
- })
465
+ .filter(filterTrackImplementation)
466
+ .each(implementTrackUi)
364
467
  ;
365
468
  });
366
469
  });
@@ -66,8 +66,12 @@ webshims.register('track', function($, webshims, window, document, undefined){
66
66
  var lastCue = this.cues[this.cues.length-1];
67
67
  if(lastCue && lastCue.startTime > cue.startTime){
68
68
  webshims.error("cue startTime higher than previous cue's startTime");
69
+ return;
69
70
  }
70
71
  }
72
+ if(cue.startTime >= cue.endTime ){
73
+ webshim.error('startTime >= endTime of cue: '+ cue.text);
74
+ }
71
75
  if(cue.track && cue.track.removeCue){
72
76
  cue.track.removeCue(cue);
73
77
  }
@@ -159,6 +163,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
159
163
  for(i = 0, len = added.length; i < len; i++){
160
164
  $([trackList]).triggerHandler($.Event({type: 'addtrack', track: added[i]}));
161
165
  }
166
+ //todo: remove
162
167
  if(baseData.scriptedTextTracks || removed.length){
163
168
  $(this).triggerHandler('updatetrackdisplay');
164
169
  }
@@ -175,7 +180,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
175
180
  setTimeout(function(){
176
181
  $(track).closest('audio, video').triggerHandler('updatetrackdisplay');
177
182
  trackData.isTriggering = false;
178
- }, 1);
183
+ }, 9);
179
184
  }
180
185
  };
181
186
  var isDefaultTrack = (function(){
@@ -368,15 +373,10 @@ webshims.register('track', function($, webshims, window, document, undefined){
368
373
  error: error
369
374
  });
370
375
  };
371
- if($.ajax && $.ajaxSettings.xhr){
372
- if(isDisabled){
373
- setTimeout(createAjax, loadingTracks * 2);
374
- } else {
375
- createAjax();
376
- }
376
+ if(isDisabled){
377
+ setTimeout(createAjax, loadingTracks * 2);
377
378
  } else {
378
- webshims.ready('jajax', createAjax);
379
- webshims.loader.loadList(['jajax']);
379
+ createAjax();
380
380
  }
381
381
  } catch(er){
382
382
  error();
@@ -5,6 +5,7 @@ webshim.register('usermedia-core', function($, webshim, window, document, undefi
5
5
  var addUnPrefixed = function(){
6
6
  navigator.getUserMedia = navigator[webshim.prefixed('getUserMedia', navigator)];
7
7
  };
8
+
8
9
  if(srcObjectName != 'srcObject'){
9
10
  var hasURL = !!(window.URL && URL.createObjectURL);
10
11
  webshim.defineNodeNamesProperty(['audio', 'video'], 'srcObject', {
@@ -23,6 +24,32 @@ webshim.register('usermedia-core', function($, webshim, window, document, undefi
23
24
  });
24
25
  }
25
26
 
27
+ (function(){
28
+ var streams = {};
29
+ var _nativeCreateObjectURL = URL.createObjectURL;
30
+ var _nativeRevokeObjectURL = URL.revokeObjectURL;
31
+
32
+ URL.createObjectURL = function(stream){
33
+
34
+ var url = stream;
35
+ if(_nativeCreateObjectURL && !stream._wsStreamId){
36
+ url = _nativeCreateObjectURL.apply(this, arguments);
37
+ } else if(stream._wsStreamId) {
38
+ url = stream._wsStreamId;
39
+ streams[url] = stream;
40
+ }
41
+ return url;
42
+ };
43
+
44
+ URL.revokeObjectURL = function(url){
45
+ if(streams[url]){
46
+ delete streams[url];
47
+ } else if (_nativeRevokeObjectURL){
48
+ return _nativeRevokeObjectURL.apply(this, arguments);
49
+ }
50
+ };
51
+ })();
52
+
26
53
 
27
54
  webshim.ready(webshim.modules["usermedia-shim"].loaded ? 'usermedia-api' : 'usermedia-shim', addUnPrefixed);
28
55
  });