webshims-rails 1.11.1 → 1.11.2

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 (55) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +41 -20
  4. data/vendor/assets/javascripts/webshims/shims/combos/10.js +212 -42
  5. data/vendor/assets/javascripts/webshims/shims/combos/11.js +196 -37
  6. data/vendor/assets/javascripts/webshims/shims/combos/12.js +82 -36
  7. data/vendor/assets/javascripts/webshims/shims/combos/13.js +82 -36
  8. data/vendor/assets/javascripts/webshims/shims/combos/14.js +17 -6
  9. data/vendor/assets/javascripts/webshims/shims/combos/15.js +234 -1247
  10. data/vendor/assets/javascripts/webshims/shims/combos/16.js +234 -1247
  11. data/vendor/assets/javascripts/webshims/shims/combos/17.js +202 -45
  12. data/vendor/assets/javascripts/webshims/shims/combos/18.js +202 -45
  13. data/vendor/assets/javascripts/webshims/shims/combos/19.js +16 -5
  14. data/vendor/assets/javascripts/webshims/shims/combos/2.js +51 -11
  15. data/vendor/assets/javascripts/webshims/shims/combos/20.js +16 -5
  16. data/vendor/assets/javascripts/webshims/shims/combos/21.js +82 -36
  17. data/vendor/assets/javascripts/webshims/shims/combos/22.js +82 -36
  18. data/vendor/assets/javascripts/webshims/shims/combos/24.js +1689 -997
  19. data/vendor/assets/javascripts/webshims/shims/combos/25.js +16 -5
  20. data/vendor/assets/javascripts/webshims/shims/combos/26.js +16 -5
  21. data/vendor/assets/javascripts/webshims/shims/combos/3.js +16 -5
  22. data/vendor/assets/javascripts/webshims/shims/combos/30.js +51 -11
  23. data/vendor/assets/javascripts/webshims/shims/combos/31.js +51 -11
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +16 -5
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +202 -45
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +237 -51
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +51 -11
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +16 -5
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +247 -48
  30. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +17 -5
  31. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +21 -3
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +35 -6
  33. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +6 -8
  34. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +134 -24
  35. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +152 -1205
  36. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +1076 -0
  37. data/vendor/assets/javascripts/webshims/shims/form-validation.js +47 -20
  38. data/vendor/assets/javascripts/webshims/shims/form-validators.js +2 -2
  39. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +1 -1
  40. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-de.txt → formcfg-de.js} +3 -0
  41. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-en.txt → formcfg-en.js} +5 -1
  42. data/vendor/assets/javascripts/webshims/shims/json-storage.js +1 -1
  43. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +1 -1
  44. data/vendor/assets/javascripts/webshims/shims/range-ui.js +62 -13
  45. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +610 -0
  46. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +10 -0
  47. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +743 -0
  48. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +1 -755
  49. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +0 -606
  50. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  51. data/vendor/assets/javascripts/webshims/shims/track-ui.js +36 -23
  52. data/vendor/assets/javascripts/webshims/shims/track.js +82 -36
  53. metadata +8 -6
  54. data/vendor/assets/javascripts/webshims/shims/combos/28.js +0 -2196
  55. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -1167
@@ -1193,8 +1193,8 @@ webshims.register('track', function($, webshims, window, document, undefined){
1193
1193
  kind: 'subtitles',
1194
1194
  label: '',
1195
1195
  language: '',
1196
+ id: '',
1196
1197
  mode: 'disabled',
1197
- readyState: 0,
1198
1198
  oncuechange: null,
1199
1199
  toString: function() {
1200
1200
  return "[object TextTrack]";
@@ -1234,7 +1234,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
1234
1234
  webshims.error("cue not part of track");
1235
1235
  return;
1236
1236
  }
1237
- },
1237
+ }/*,
1238
1238
  DISABLED: 'disabled',
1239
1239
  OFF: 'disabled',
1240
1240
  HIDDEN: 'hidden',
@@ -1242,7 +1242,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
1242
1242
  ERROR: 3,
1243
1243
  LOADED: 2,
1244
1244
  LOADING: 1,
1245
- NONE: 0
1245
+ NONE: 0*/
1246
1246
  };
1247
1247
  var copyProps = ['kind', 'label', 'srclang'];
1248
1248
  var copyName = {srclang: 'language'};
@@ -1311,21 +1311,47 @@ webshims.register('track', function($, webshims, window, document, undefined){
1311
1311
  if(!trackData){
1312
1312
  trackData = webshims.data(track, 'trackData');
1313
1313
  }
1314
+
1314
1315
  if(trackData && !trackData.isTriggering){
1315
1316
  trackData.isTriggering = true;
1316
1317
  setTimeout(function(){
1317
- if(!(trackData.track || {}).readyState){
1318
- $(track).triggerHandler('checktrackmode');
1319
- } else {
1320
- $(track).closest('audio, video').triggerHandler('updatetrackdisplay');
1321
- }
1318
+ $(track).closest('audio, video').triggerHandler('updatetrackdisplay');
1322
1319
  trackData.isTriggering = false;
1323
1320
  }, 1);
1324
1321
  }
1325
1322
  };
1326
-
1323
+ var isDefaultTrack = (function(){
1324
+ var defaultKinds = {
1325
+ subtitles: {
1326
+ subtitles: 1,
1327
+ captions: 1
1328
+ },
1329
+ descriptions: {descriptions: 1},
1330
+ chapters: {chapters: 1}
1331
+ };
1332
+ defaultKinds.captions = defaultKinds.subtitles;
1333
+
1334
+ return function(track){
1335
+ var kind, firstDefaultTrack;
1336
+ var isDefault = $.prop(track, 'default');
1337
+ if(isDefault && (kind = $.prop(track, 'kind')) != 'metadata'){
1338
+ firstDefaultTrack = $(track)
1339
+ .parent()
1340
+ .find('track[default]')
1341
+ .filter(function(){
1342
+ return !!(defaultKinds[kind][$.prop(this, 'kind')]);
1343
+ })[0]
1344
+ ;
1345
+ if(firstDefaultTrack != track){
1346
+ isDefault = false;
1347
+ webshims.error('more than one default track of a specific kind detected. Fall back to default = false');
1348
+ }
1349
+ }
1350
+ return isDefault;
1351
+ };
1352
+ })();
1327
1353
  var emptyDiv = $('<div />')[0];
1328
- window.TextTrackCue = function(startTime, endTime, text){
1354
+ var TextTrackCue = function(startTime, endTime, text){
1329
1355
  if(arguments.length != 3){
1330
1356
  webshims.error("wrong arguments.length for TextTrackCue.constructor");
1331
1357
  }
@@ -1334,13 +1360,11 @@ webshims.register('track', function($, webshims, window, document, undefined){
1334
1360
  this.endTime = endTime;
1335
1361
  this.text = text;
1336
1362
 
1337
- this.id = "";
1338
- this.pauseOnExit = false;
1339
1363
 
1340
1364
  createEventTarget(this);
1341
1365
  };
1342
1366
 
1343
- window.TextTrackCue.prototype = {
1367
+ TextTrackCue.prototype = {
1344
1368
 
1345
1369
  onenter: null,
1346
1370
  onexit: null,
@@ -1382,6 +1406,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
1382
1406
  // align: 'middle'
1383
1407
  };
1384
1408
 
1409
+ window.TextTrackCue = TextTrackCue;
1385
1410
 
1386
1411
 
1387
1412
 
@@ -1427,23 +1452,20 @@ webshims.register('track', function($, webshims, window, document, undefined){
1427
1452
  })();
1428
1453
 
1429
1454
  mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
1430
- var loadEvents = 'play playing timeupdate updatetrackdisplay';
1455
+ var loadEvents = 'play playing updatetrackdisplay';
1431
1456
  var obj = trackData.track;
1432
1457
  var load = function(){
1433
- var src = $.prop(track, 'src');
1434
- var error;
1435
- var ajax;
1436
- if(obj.mode != 'disabled' && src && $.attr(track, 'src')){
1458
+ var error, ajax, src;
1459
+ if(obj.mode != 'disabled' && $.attr(track, 'src') && (src = $.prop(track, 'src'))){
1437
1460
  $(mediaelem).unbind(loadEvents, load);
1438
- $(track).unbind('checktrackmode', load);
1439
- if(!obj.readyState){
1461
+ if(!trackData.readyState){
1440
1462
  error = function(){
1441
- obj.readyState = 3;
1463
+ trackData.readyState = 3;
1442
1464
  obj.cues = null;
1443
1465
  obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = null;
1444
1466
  $(track).triggerHandler('error');
1445
1467
  };
1446
- obj.readyState = 1;
1468
+ trackData.readyState = 1;
1447
1469
  try {
1448
1470
  obj.cues = mediaelement.createCueList();
1449
1471
  obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = mediaelement.createCueList();
@@ -1456,7 +1478,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
1456
1478
  }
1457
1479
  mediaelement.parseCaptions(text, obj, function(cues){
1458
1480
  if(cues && 'length' in cues){
1459
- obj.readyState = 2;
1481
+ trackData.readyState = 2;
1460
1482
  $(track).triggerHandler('load');
1461
1483
  $(mediaelem).triggerHandler('updatetrackdisplay');
1462
1484
  } else {
@@ -1469,20 +1491,18 @@ webshims.register('track', function($, webshims, window, document, undefined){
1469
1491
  });
1470
1492
  } catch(er){
1471
1493
  error();
1472
- webshims.warn(er);
1494
+ webshims.error(er);
1473
1495
  }
1474
1496
  }
1475
1497
  }
1476
1498
  };
1477
- obj.readyState = 0;
1499
+ trackData.readyState = 0;
1478
1500
  obj.shimActiveCues = null;
1479
1501
  obj._shimActiveCues = null;
1480
1502
  obj.activeCues = null;
1481
1503
  obj.cues = null;
1482
1504
  $(mediaelem).unbind(loadEvents, load);
1483
- $(track).unbind('checktrackmode', load);
1484
1505
  $(mediaelem).on(loadEvents, load);
1485
- $(track).on('checktrackmode', load);
1486
1506
  if(_default){
1487
1507
  obj.mode = showTracks[obj.kind] ? 'showing' : 'hidden';
1488
1508
  load();
@@ -1524,9 +1544,9 @@ webshims.register('track', function($, webshims, window, document, undefined){
1524
1544
  });
1525
1545
  });
1526
1546
  }
1527
-
1547
+ obj.id = $(track).prop('id');
1528
1548
  trackData = webshims.data(track, 'trackData', {track: obj});
1529
- mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]')[ADDBACK]()[0] == track));
1549
+ mediaelement.loadTextTrack(mediaelem, track, trackData, isDefaultTrack(track));
1530
1550
  } else {
1531
1551
  if(supportTrackMod){
1532
1552
  copyProps.forEach(function(copyProp){
@@ -1541,7 +1561,12 @@ webshims.register('track', function($, webshims, window, document, undefined){
1541
1561
  obj.mode = 'hidden';
1542
1562
  obj.readyState = 2;
1543
1563
  }
1564
+ if(obj.kind == 'subtitles' && !obj.language){
1565
+ webshims.error('you must provide a language for track in subtitles state');
1566
+ }
1567
+ obj.__wsmode = obj.mode;
1544
1568
  }
1569
+
1545
1570
  return obj;
1546
1571
  };
1547
1572
 
@@ -1734,9 +1759,33 @@ modified for webshims
1734
1759
  baseData.textTracks = [];
1735
1760
  webshims.defineProperties(baseData.textTracks, {
1736
1761
  onaddtrack: {value: null},
1737
- onremovetrack: {value: null}
1762
+ onremovetrack: {value: null},
1763
+ onchange: {value: null},
1764
+ getTrackById: {
1765
+ value: function(id){
1766
+ var track = null;
1767
+ for(var i = 0; i < baseData.textTracks.length; i++){
1768
+ if(id == baseData.textTracks[i].id){
1769
+ track = baseData.textTracks[i];
1770
+ break;
1771
+ }
1772
+ }
1773
+ return track;
1774
+ }
1775
+ }
1738
1776
  });
1739
1777
  createEventTarget(baseData.textTracks);
1778
+ $(mediaelem).on('updatetrackdisplay', function(){
1779
+ var track;
1780
+ for(var i = 0; i < baseData.textTracks.length; i++){
1781
+ track = baseData.textTracks[i];
1782
+ if(track.__wsmode != track.mode){
1783
+ track.__wsmode = track.mode;
1784
+ $([ baseData.textTracks ]).triggerHandler('change');
1785
+ }
1786
+ }
1787
+ });
1788
+
1740
1789
  }
1741
1790
  return baseData.textTracks;
1742
1791
  };
@@ -1791,10 +1840,6 @@ modified for webshims
1791
1840
  if(!supportTrackMod){
1792
1841
  trackData.track[name] = $.prop(this, copyProp);
1793
1842
  }
1794
- clearTimeout(trackData.changedTrackPropTimer);
1795
- trackData.changedTrackPropTimer = setTimeout(function(){
1796
- $(track).trigger('updatesubtitlestate');
1797
- }, 1);
1798
1843
  }
1799
1844
  });
1800
1845
  });
@@ -1831,7 +1876,8 @@ modified for webshims
1831
1876
  },
1832
1877
  readyState: {
1833
1878
  get: function(){
1834
- return ($.prop(this, 'track') || {readyState: 0}).readyState;
1879
+
1880
+ return (webshims.data(this, 'trackData') || {readyState: 0}).readyState;
1835
1881
  },
1836
1882
  writeable: false
1837
1883
  },
@@ -1949,7 +1995,7 @@ modified for webshims
1949
1995
  });
1950
1996
  });
1951
1997
 
1952
- if(Modernizr.track){
1998
+ if(Modernizr.texttrackapi){
1953
1999
  $('video, audio').trigger('trackapichange');
1954
2000
  }
1955
2001
  });
@@ -741,8 +741,8 @@ webshims.register('track', function($, webshims, window, document, undefined){
741
741
  kind: 'subtitles',
742
742
  label: '',
743
743
  language: '',
744
+ id: '',
744
745
  mode: 'disabled',
745
- readyState: 0,
746
746
  oncuechange: null,
747
747
  toString: function() {
748
748
  return "[object TextTrack]";
@@ -782,7 +782,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
782
782
  webshims.error("cue not part of track");
783
783
  return;
784
784
  }
785
- },
785
+ }/*,
786
786
  DISABLED: 'disabled',
787
787
  OFF: 'disabled',
788
788
  HIDDEN: 'hidden',
@@ -790,7 +790,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
790
790
  ERROR: 3,
791
791
  LOADED: 2,
792
792
  LOADING: 1,
793
- NONE: 0
793
+ NONE: 0*/
794
794
  };
795
795
  var copyProps = ['kind', 'label', 'srclang'];
796
796
  var copyName = {srclang: 'language'};
@@ -859,21 +859,47 @@ webshims.register('track', function($, webshims, window, document, undefined){
859
859
  if(!trackData){
860
860
  trackData = webshims.data(track, 'trackData');
861
861
  }
862
+
862
863
  if(trackData && !trackData.isTriggering){
863
864
  trackData.isTriggering = true;
864
865
  setTimeout(function(){
865
- if(!(trackData.track || {}).readyState){
866
- $(track).triggerHandler('checktrackmode');
867
- } else {
868
- $(track).closest('audio, video').triggerHandler('updatetrackdisplay');
869
- }
866
+ $(track).closest('audio, video').triggerHandler('updatetrackdisplay');
870
867
  trackData.isTriggering = false;
871
868
  }, 1);
872
869
  }
873
870
  };
874
-
871
+ var isDefaultTrack = (function(){
872
+ var defaultKinds = {
873
+ subtitles: {
874
+ subtitles: 1,
875
+ captions: 1
876
+ },
877
+ descriptions: {descriptions: 1},
878
+ chapters: {chapters: 1}
879
+ };
880
+ defaultKinds.captions = defaultKinds.subtitles;
881
+
882
+ return function(track){
883
+ var kind, firstDefaultTrack;
884
+ var isDefault = $.prop(track, 'default');
885
+ if(isDefault && (kind = $.prop(track, 'kind')) != 'metadata'){
886
+ firstDefaultTrack = $(track)
887
+ .parent()
888
+ .find('track[default]')
889
+ .filter(function(){
890
+ return !!(defaultKinds[kind][$.prop(this, 'kind')]);
891
+ })[0]
892
+ ;
893
+ if(firstDefaultTrack != track){
894
+ isDefault = false;
895
+ webshims.error('more than one default track of a specific kind detected. Fall back to default = false');
896
+ }
897
+ }
898
+ return isDefault;
899
+ };
900
+ })();
875
901
  var emptyDiv = $('<div />')[0];
876
- window.TextTrackCue = function(startTime, endTime, text){
902
+ var TextTrackCue = function(startTime, endTime, text){
877
903
  if(arguments.length != 3){
878
904
  webshims.error("wrong arguments.length for TextTrackCue.constructor");
879
905
  }
@@ -882,13 +908,11 @@ webshims.register('track', function($, webshims, window, document, undefined){
882
908
  this.endTime = endTime;
883
909
  this.text = text;
884
910
 
885
- this.id = "";
886
- this.pauseOnExit = false;
887
911
 
888
912
  createEventTarget(this);
889
913
  };
890
914
 
891
- window.TextTrackCue.prototype = {
915
+ TextTrackCue.prototype = {
892
916
 
893
917
  onenter: null,
894
918
  onexit: null,
@@ -930,6 +954,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
930
954
  // align: 'middle'
931
955
  };
932
956
 
957
+ window.TextTrackCue = TextTrackCue;
933
958
 
934
959
 
935
960
 
@@ -975,23 +1000,20 @@ webshims.register('track', function($, webshims, window, document, undefined){
975
1000
  })();
976
1001
 
977
1002
  mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
978
- var loadEvents = 'play playing timeupdate updatetrackdisplay';
1003
+ var loadEvents = 'play playing updatetrackdisplay';
979
1004
  var obj = trackData.track;
980
1005
  var load = function(){
981
- var src = $.prop(track, 'src');
982
- var error;
983
- var ajax;
984
- if(obj.mode != 'disabled' && src && $.attr(track, 'src')){
1006
+ var error, ajax, src;
1007
+ if(obj.mode != 'disabled' && $.attr(track, 'src') && (src = $.prop(track, 'src'))){
985
1008
  $(mediaelem).unbind(loadEvents, load);
986
- $(track).unbind('checktrackmode', load);
987
- if(!obj.readyState){
1009
+ if(!trackData.readyState){
988
1010
  error = function(){
989
- obj.readyState = 3;
1011
+ trackData.readyState = 3;
990
1012
  obj.cues = null;
991
1013
  obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = null;
992
1014
  $(track).triggerHandler('error');
993
1015
  };
994
- obj.readyState = 1;
1016
+ trackData.readyState = 1;
995
1017
  try {
996
1018
  obj.cues = mediaelement.createCueList();
997
1019
  obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = mediaelement.createCueList();
@@ -1004,7 +1026,7 @@ webshims.register('track', function($, webshims, window, document, undefined){
1004
1026
  }
1005
1027
  mediaelement.parseCaptions(text, obj, function(cues){
1006
1028
  if(cues && 'length' in cues){
1007
- obj.readyState = 2;
1029
+ trackData.readyState = 2;
1008
1030
  $(track).triggerHandler('load');
1009
1031
  $(mediaelem).triggerHandler('updatetrackdisplay');
1010
1032
  } else {
@@ -1017,20 +1039,18 @@ webshims.register('track', function($, webshims, window, document, undefined){
1017
1039
  });
1018
1040
  } catch(er){
1019
1041
  error();
1020
- webshims.warn(er);
1042
+ webshims.error(er);
1021
1043
  }
1022
1044
  }
1023
1045
  }
1024
1046
  };
1025
- obj.readyState = 0;
1047
+ trackData.readyState = 0;
1026
1048
  obj.shimActiveCues = null;
1027
1049
  obj._shimActiveCues = null;
1028
1050
  obj.activeCues = null;
1029
1051
  obj.cues = null;
1030
1052
  $(mediaelem).unbind(loadEvents, load);
1031
- $(track).unbind('checktrackmode', load);
1032
1053
  $(mediaelem).on(loadEvents, load);
1033
- $(track).on('checktrackmode', load);
1034
1054
  if(_default){
1035
1055
  obj.mode = showTracks[obj.kind] ? 'showing' : 'hidden';
1036
1056
  load();
@@ -1072,9 +1092,9 @@ webshims.register('track', function($, webshims, window, document, undefined){
1072
1092
  });
1073
1093
  });
1074
1094
  }
1075
-
1095
+ obj.id = $(track).prop('id');
1076
1096
  trackData = webshims.data(track, 'trackData', {track: obj});
1077
- mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]')[ADDBACK]()[0] == track));
1097
+ mediaelement.loadTextTrack(mediaelem, track, trackData, isDefaultTrack(track));
1078
1098
  } else {
1079
1099
  if(supportTrackMod){
1080
1100
  copyProps.forEach(function(copyProp){
@@ -1089,7 +1109,12 @@ webshims.register('track', function($, webshims, window, document, undefined){
1089
1109
  obj.mode = 'hidden';
1090
1110
  obj.readyState = 2;
1091
1111
  }
1112
+ if(obj.kind == 'subtitles' && !obj.language){
1113
+ webshims.error('you must provide a language for track in subtitles state');
1114
+ }
1115
+ obj.__wsmode = obj.mode;
1092
1116
  }
1117
+
1093
1118
  return obj;
1094
1119
  };
1095
1120
 
@@ -1282,9 +1307,33 @@ modified for webshims
1282
1307
  baseData.textTracks = [];
1283
1308
  webshims.defineProperties(baseData.textTracks, {
1284
1309
  onaddtrack: {value: null},
1285
- onremovetrack: {value: null}
1310
+ onremovetrack: {value: null},
1311
+ onchange: {value: null},
1312
+ getTrackById: {
1313
+ value: function(id){
1314
+ var track = null;
1315
+ for(var i = 0; i < baseData.textTracks.length; i++){
1316
+ if(id == baseData.textTracks[i].id){
1317
+ track = baseData.textTracks[i];
1318
+ break;
1319
+ }
1320
+ }
1321
+ return track;
1322
+ }
1323
+ }
1286
1324
  });
1287
1325
  createEventTarget(baseData.textTracks);
1326
+ $(mediaelem).on('updatetrackdisplay', function(){
1327
+ var track;
1328
+ for(var i = 0; i < baseData.textTracks.length; i++){
1329
+ track = baseData.textTracks[i];
1330
+ if(track.__wsmode != track.mode){
1331
+ track.__wsmode = track.mode;
1332
+ $([ baseData.textTracks ]).triggerHandler('change');
1333
+ }
1334
+ }
1335
+ });
1336
+
1288
1337
  }
1289
1338
  return baseData.textTracks;
1290
1339
  };
@@ -1339,10 +1388,6 @@ modified for webshims
1339
1388
  if(!supportTrackMod){
1340
1389
  trackData.track[name] = $.prop(this, copyProp);
1341
1390
  }
1342
- clearTimeout(trackData.changedTrackPropTimer);
1343
- trackData.changedTrackPropTimer = setTimeout(function(){
1344
- $(track).trigger('updatesubtitlestate');
1345
- }, 1);
1346
1391
  }
1347
1392
  });
1348
1393
  });
@@ -1379,7 +1424,8 @@ modified for webshims
1379
1424
  },
1380
1425
  readyState: {
1381
1426
  get: function(){
1382
- return ($.prop(this, 'track') || {readyState: 0}).readyState;
1427
+
1428
+ return (webshims.data(this, 'trackData') || {readyState: 0}).readyState;
1383
1429
  },
1384
1430
  writeable: false
1385
1431
  },
@@ -1497,7 +1543,7 @@ modified for webshims
1497
1543
  });
1498
1544
  });
1499
1545
 
1500
- if(Modernizr.track){
1546
+ if(Modernizr.texttrackapi){
1501
1547
  $('video, audio').trigger('trackapichange');
1502
1548
  }
1503
1549
  });