webshims-rails 1.11.1 → 1.11.2

Sign up to get free protection for your applications and to get access to all the features.
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
  });