webshims-rails 1.12.5 → 1.12.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +111 -132
  4. data/vendor/assets/javascripts/webshims/shims/combos/1.js +40 -37
  5. data/vendor/assets/javascripts/webshims/shims/combos/10.js +217 -36
  6. data/vendor/assets/javascripts/webshims/shims/combos/11.js +151 -29
  7. data/vendor/assets/javascripts/webshims/shims/combos/12.js +70 -93
  8. data/vendor/assets/javascripts/webshims/shims/combos/13.js +70 -93
  9. data/vendor/assets/javascripts/webshims/shims/combos/14.js +90 -13
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +202 -59
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +208 -70
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +151 -29
  13. data/vendor/assets/javascripts/webshims/shims/combos/18.js +155 -30
  14. data/vendor/assets/javascripts/webshims/shims/combos/19.js +79 -20
  15. data/vendor/assets/javascripts/webshims/shims/combos/2.js +109 -47
  16. data/vendor/assets/javascripts/webshims/shims/combos/20.js +79 -20
  17. data/vendor/assets/javascripts/webshims/shims/combos/21.js +80 -87
  18. data/vendor/assets/javascripts/webshims/shims/combos/22.js +66 -83
  19. data/vendor/assets/javascripts/webshims/shims/combos/23.js +4 -10
  20. data/vendor/assets/javascripts/webshims/shims/combos/25.js +79 -20
  21. data/vendor/assets/javascripts/webshims/shims/combos/26.js +66 -7
  22. data/vendor/assets/javascripts/webshims/shims/combos/28.js +100 -25
  23. data/vendor/assets/javascripts/webshims/shims/combos/3.js +192 -47
  24. data/vendor/assets/javascripts/webshims/shims/combos/30.js +193 -49
  25. data/vendor/assets/javascripts/webshims/shims/combos/31.js +103 -36
  26. data/vendor/assets/javascripts/webshims/shims/combos/32.js +5 -3
  27. data/vendor/assets/javascripts/webshims/shims/combos/33.js +1 -2
  28. data/vendor/assets/javascripts/webshims/shims/combos/34.js +2048 -0
  29. data/vendor/assets/javascripts/webshims/shims/combos/4.js +156 -20
  30. data/vendor/assets/javascripts/webshims/shims/combos/5.js +151 -29
  31. data/vendor/assets/javascripts/webshims/shims/combos/6.js +152 -31
  32. data/vendor/assets/javascripts/webshims/shims/combos/7.js +199 -60
  33. data/vendor/assets/javascripts/webshims/shims/combos/8.js +197 -58
  34. data/vendor/assets/javascripts/webshims/shims/combos/9.js +218 -38
  35. data/vendor/assets/javascripts/webshims/shims/combos/97.js +1004 -0
  36. data/vendor/assets/javascripts/webshims/shims/combos/98.js +1283 -0
  37. data/vendor/assets/javascripts/webshims/shims/combos/99.js +204 -1248
  38. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +66 -7
  39. data/vendor/assets/javascripts/webshims/shims/es5.js +4 -1
  40. data/vendor/assets/javascripts/webshims/shims/form-combat.js +3 -3
  41. data/vendor/assets/javascripts/webshims/shims/form-core.js +36 -27
  42. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +1 -2
  43. data/vendor/assets/javascripts/webshims/shims/form-fixrangechange.js +137 -0
  44. data/vendor/assets/javascripts/webshims/shims/form-message.js +90 -13
  45. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +129 -15
  46. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +9 -10
  47. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +886 -985
  48. data/vendor/assets/javascripts/webshims/shims/form-validation.js +78 -174
  49. data/vendor/assets/javascripts/webshims/shims/form-validators.js +39 -26
  50. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +45 -17
  51. data/vendor/assets/javascripts/webshims/shims/geolocation.js +10 -3
  52. data/vendor/assets/javascripts/webshims/shims/jme/b.js +71 -246
  53. data/vendor/assets/javascripts/webshims/shims/jme/c.js +133 -1002
  54. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +62 -23
  55. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +73 -10
  56. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +1117 -0
  57. data/vendor/assets/javascripts/webshims/shims/jme/p.js +603 -0
  58. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +5 -2
  59. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +4 -10
  60. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +4 -1
  61. data/vendor/assets/javascripts/webshims/shims/range-ui.js +22 -14
  62. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +29 -344
  63. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +362 -0
  64. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +6 -483
  65. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +488 -0
  66. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +2 -0
  67. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +10 -2
  68. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +6 -2
  69. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  70. data/vendor/assets/javascripts/webshims/shims/track-ui.js +8 -1
  71. data/vendor/assets/javascripts/webshims/shims/track.js +66 -83
  72. metadata +12 -5
  73. data/vendor/assets/javascripts/webshims/shims/$ajax.js +0 -862
  74. data/vendor/assets/javascripts/webshims/shims/combos/24.js +0 -2087
@@ -238,7 +238,6 @@ webshims.isReady('swfmini', true);
238
238
 
239
239
  var wsCfg = webshims.cfg;
240
240
  var options = wsCfg.mediaelement;
241
- var hasFullTrackSupport;
242
241
  var hasSwf;
243
242
  if(!options){
244
243
  webshims.error("mediaelement wasn't implemented but loaded");
@@ -280,11 +279,9 @@ webshims.isReady('swfmini', true);
280
279
  }
281
280
  })();
282
281
  }
283
- hasFullTrackSupport = Modernizr.track && !bugs.track;
284
282
 
285
283
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
286
284
  hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
287
- $('html').addClass(hasSwf ? 'swf' : 'no-swf');
288
285
  var mediaelement = webshims.mediaelement;
289
286
 
290
287
  mediaelement.parseRtmp = function(data){
@@ -663,6 +660,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
663
660
  if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
664
661
  supLoad.prop._supvalue.apply(this, arguments);
665
662
  }
663
+ if(!loadTrackUi.loaded && $('track', this).length){
664
+ loadTrackUi();
665
+ }
666
666
  $(this).triggerHandler('wsmediareload');
667
667
  }
668
668
  }
@@ -733,13 +733,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
733
733
  }
734
734
  };
735
735
 
736
- if(hasFullTrackSupport){
737
- webshims.defineProperty(TextTrack.prototype, 'shimActiveCues', {
738
- get: function(){
739
- return this._shimActiveCues || this.activeCues;
740
- }
741
- });
742
- }
736
+
743
737
  //set native implementation ready, before swf api is retested
744
738
  if(hasNative){
745
739
  webshims.isReady('mediaelement-core', true);
@@ -756,12 +750,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
756
750
  "use strict";
757
751
  var mediaelement = webshims.mediaelement;
758
752
  var id = new Date().getTime();
759
- var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
760
753
  //descriptions are not really shown, but they are inserted into the dom
761
754
  var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
762
- var notImplemented = function(){
763
- webshims.error('not implemented yet');
764
- };
765
755
  var dummyTrack = $('<track />');
766
756
  var supportTrackMod = Modernizr.ES5 && Modernizr.objectAccessor;
767
757
  var createEventTarget = function(obj){
@@ -863,9 +853,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
863
853
  };
864
854
  var copyProps = ['kind', 'label', 'srclang'];
865
855
  var copyName = {srclang: 'language'};
866
-
867
- var owns = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
868
-
856
+
869
857
  var updateMediaTrackList = function(baseData, trackList){
870
858
  var removed = [];
871
859
  var added = [];
@@ -968,60 +956,44 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
968
956
  };
969
957
  })();
970
958
  var emptyDiv = $('<div />')[0];
959
+
971
960
  function VTTCue(startTime, endTime, text){
972
961
  if(arguments.length != 3){
973
962
  webshims.error("wrong arguments.length for VTTCue.constructor");
974
963
  }
975
-
964
+
976
965
  this.startTime = startTime;
977
966
  this.endTime = endTime;
978
967
  this.text = text;
979
-
980
-
981
- createEventTarget(this);
982
- }
983
-
984
- VTTCue.prototype = {
985
-
986
- onenter: null,
987
- onexit: null,
988
- pauseOnExit: false,
989
- getCueAsHTML: function(){
968
+ this.onenter = null;
969
+ this.onexit = null;
970
+ this.pauseOnExit = false;
971
+ this.track = null;
972
+ this.id = null;
973
+ this.getCueAsHTML = (function(){
990
974
  var lastText = "";
991
975
  var parsedText = "";
992
- var fragment = document.createDocumentFragment();
993
- var fn;
994
- if(!owns(this, 'getCueAsHTML')){
995
- fn = this.getCueAsHTML = function(){
996
- var i, len;
997
- if(lastText != this.text){
998
- lastText = this.text;
999
- parsedText = mediaelement.parseCueTextToHTML(lastText);
1000
- emptyDiv.innerHTML = parsedText;
1001
-
1002
- for(i = 0, len = emptyDiv.childNodes.length; i < len; i++){
1003
- fragment.appendChild(emptyDiv.childNodes[i].cloneNode(true));
1004
- }
976
+ var fragment;
977
+
978
+ return function(){
979
+ var i, len;
980
+ if(!fragment){
981
+ fragment = document.createDocumentFragment();
982
+ }
983
+ if(lastText != this.text){
984
+ lastText = this.text;
985
+ parsedText = mediaelement.parseCueTextToHTML(lastText);
986
+ emptyDiv.innerHTML = parsedText;
987
+
988
+ for(i = 0, len = emptyDiv.childNodes.length; i < len; i++){
989
+ fragment.appendChild(emptyDiv.childNodes[i].cloneNode(true));
1005
990
  }
1006
- return fragment.cloneNode(true);
1007
- };
1008
-
1009
- }
1010
- return fn ? fn.apply(this, arguments) : fragment.cloneNode(true);
1011
- },
1012
- track: null,
1013
-
1014
-
1015
- id: ''
1016
- //todo-->
1017
- // ,
1018
- // snapToLines: true,
1019
- // line: 'auto',
1020
- // size: 100,
1021
- // position: 50,
1022
- // vertical: '',
1023
- // align: 'middle'
1024
- };
991
+ }
992
+ return fragment.cloneNode(true);
993
+ };
994
+
995
+ })();
996
+ }
1025
997
 
1026
998
  window.VTTCue = VTTCue;
1027
999
  window.TextTrackCue = function(){
@@ -1072,14 +1044,15 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1072
1044
  })();
1073
1045
 
1074
1046
  mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
1075
- var loadEvents = 'play playing updatetrackdisplay';
1047
+ var loadEvents = 'play playing';
1076
1048
  var obj = trackData.track;
1077
1049
  var load = function(){
1078
1050
  var error, ajax, createAjax;
1079
-
1080
1051
  var src = obj.mode != 'disabled' && ($.attr(track, 'src') && $.prop(track, 'src'));
1052
+
1081
1053
  if(src){
1082
- $(mediaelem).off(loadEvents, load);
1054
+ $(mediaelem).off(loadEvents, load).off('updatetrackdisplay', load);
1055
+
1083
1056
  if(!trackData.readyState){
1084
1057
  error = function(){
1085
1058
  trackData.readyState = 3;
@@ -1113,7 +1086,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1113
1086
  error: error
1114
1087
  });
1115
1088
  };
1116
- if($.ajax){
1089
+ if($.ajax && $.ajaxSettings.xhr){
1117
1090
  createAjax();
1118
1091
  } else {
1119
1092
  webshims.ready('jajax', createAjax);
@@ -1131,11 +1104,15 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1131
1104
  obj._shimActiveCues = null;
1132
1105
  obj.activeCues = null;
1133
1106
  obj.cues = null;
1134
- $(mediaelem).off(loadEvents, load);
1107
+
1135
1108
  $(mediaelem).on(loadEvents, load);
1136
1109
  if(_default){
1137
1110
  obj.mode = showTracks[obj.kind] ? 'showing' : 'hidden';
1138
- load();
1111
+ webshims.ready('WINDOWLOAD', load);
1112
+ } else {
1113
+ webshims.ready('WINDOWLOAD', function(){
1114
+ $(mediaelem).on('updatetrackdisplay', load);
1115
+ });
1139
1116
  }
1140
1117
  };
1141
1118
 
@@ -1164,7 +1141,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1164
1141
 
1165
1142
 
1166
1143
  if(track.nodeName){
1167
-
1168
1144
  if(supportTrackMod){
1169
1145
  copyProps.forEach(function(copyProp){
1170
1146
  webshims.defineProperty(obj, copyName[copyProp] || copyProp, {
@@ -1199,8 +1175,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1199
1175
 
1200
1176
  return obj;
1201
1177
  };
1202
-
1203
-
1178
+
1179
+
1204
1180
  /*
1205
1181
  taken from:
1206
1182
  Captionator 0.5.1 [CaptionCrunch]
@@ -1217,7 +1193,7 @@ modified for webshims
1217
1193
  var WebVTTDEFAULTSCueParser = /^(DEFAULTS|DEFAULT)\s+\-\-\>\s+(.*)/g;
1218
1194
  var WebVTTSTYLECueParser = /^(STYLE|STYLES)\s+\-\-\>\s*\n([\s\S]*)/g;
1219
1195
  var WebVTTCOMMENTCueParser = /^(COMMENT|COMMENTS)\s+\-\-\>\s+(.*)/g;
1220
-
1196
+
1221
1197
  return function(subtitleElement,objectCount){
1222
1198
 
1223
1199
  var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id, specialCueData;
@@ -1233,33 +1209,33 @@ modified for webshims
1233
1209
  } else if ((specialCueData = WebVTTCOMMENTCueParser.exec(subtitleElement))) {
1234
1210
  return null; // At this stage, we don't want to do anything with these.
1235
1211
  }
1236
-
1212
+
1237
1213
  subtitleParts = subtitleElement.split(/\n/g);
1238
-
1214
+
1239
1215
  // Trim off any blank lines (logically, should only be max. one, but loop to be sure)
1240
1216
  while (!subtitleParts[0].replace(/\s+/ig,"").length && subtitleParts.length > 0) {
1241
1217
  subtitleParts.shift();
1242
1218
  }
1243
-
1219
+
1244
1220
  if (subtitleParts[0].match(/^\s*[a-z0-9-\_]+\s*$/ig)) {
1245
1221
  // The identifier becomes the cue ID (when *we* load the cues from file. Programatically created cues can have an ID of whatever.)
1246
1222
  id = String(subtitleParts.shift().replace(/\s*/ig,""));
1247
1223
  }
1248
-
1224
+
1249
1225
  for (subtitlePartIndex = 0; subtitlePartIndex < subtitleParts.length; subtitlePartIndex ++) {
1250
1226
  var timestamp = subtitleParts[subtitlePartIndex];
1251
-
1227
+
1252
1228
  if ((timestampMatch = WebVTTTimestampParser.exec(timestamp))) {
1253
-
1229
+
1254
1230
  // WebVTT
1255
-
1231
+
1256
1232
  timeData = timestampMatch.slice(1);
1257
-
1233
+
1258
1234
  timeIn = parseInt((timeData[0]||0) * 60 * 60,10) + // Hours
1259
1235
  parseInt((timeData[1]||0) * 60,10) + // Minutes
1260
1236
  parseInt((timeData[2]||0),10) + // Seconds
1261
1237
  parseFloat("0." + (timeData[3]||0)); // MS
1262
-
1238
+
1263
1239
  timeOut = parseInt((timeData[4]||0) * 60 * 60,10) + // Hours
1264
1240
  parseInt((timeData[5]||0) * 60,10) + // Minutes
1265
1241
  parseInt((timeData[6]||0),10) + // Seconds
@@ -1270,7 +1246,7 @@ modified for webshims
1270
1246
  }
1271
1247
  */
1272
1248
  }
1273
-
1249
+
1274
1250
  // We've got the timestamp - return all the other unmatched lines as the raw subtitle data
1275
1251
  subtitleParts = subtitleParts.slice(0,subtitlePartIndex).concat(subtitleParts.slice(subtitlePartIndex+1));
1276
1252
  break;
@@ -1289,7 +1265,7 @@ modified for webshims
1289
1265
  previous[current.split(":")[0]] = current.split(":")[1];
1290
1266
  return previous;
1291
1267
  },{});
1292
-
1268
+
1293
1269
  // Loop through cue settings, replace defaults with cue specific settings if they exist
1294
1270
  compositeCueSettings =
1295
1271
  cueSettings
@@ -1300,7 +1276,7 @@ modified for webshims
1300
1276
  previous[current.split(":")[0]] = current.split(":")[1];
1301
1277
  return previous;
1302
1278
  },compositeCueSettings);
1303
-
1279
+
1304
1280
  // Turn back into string like the VTTCue constructor expects
1305
1281
  cueSettings = "";
1306
1282
  for (var key in compositeCueSettings) {
@@ -1319,18 +1295,18 @@ modified for webshims
1319
1295
  return tmpCue;
1320
1296
  };
1321
1297
  })();
1322
-
1298
+
1323
1299
  mediaelement.parseCaptions = function(captionData, track, complete) {
1324
1300
 
1325
1301
  var cue, lazyProcess, regWevVTT, startDate, isWEBVTT;
1326
1302
 
1327
1303
  mediaelement.createCueList();
1328
1304
  if (captionData) {
1329
-
1305
+
1330
1306
  regWevVTT = /^WEBVTT(\s*FILE)?/ig;
1331
-
1307
+
1332
1308
  lazyProcess = function(i, len){
1333
-
1309
+
1334
1310
  for(; i < len; i++){
1335
1311
  cue = captionData[i];
1336
1312
  if(regWevVTT.test(cue)){
@@ -1352,7 +1328,7 @@ modified for webshims
1352
1328
  startDate = new Date().getTime();
1353
1329
  lazyProcess(i, len);
1354
1330
  }, 90);
1355
-
1331
+
1356
1332
  break;
1357
1333
  }
1358
1334
  }
@@ -1363,9 +1339,9 @@ modified for webshims
1363
1339
  complete(track.cues);
1364
1340
  }
1365
1341
  };
1366
-
1342
+
1367
1343
  captionData = captionData.replace(/\r\n/g,"\n");
1368
-
1344
+
1369
1345
  setTimeout(function(){
1370
1346
  captionData = captionData.replace(/\r/g,"\n");
1371
1347
  setTimeout(function(){
@@ -1374,12 +1350,12 @@ modified for webshims
1374
1350
  lazyProcess(0, captionData.length);
1375
1351
  }, 9);
1376
1352
  }, 9);
1377
-
1353
+
1378
1354
  } else {
1379
1355
  webshims.error("Required parameter captionData not supplied.");
1380
1356
  }
1381
1357
  };
1382
-
1358
+
1383
1359
 
1384
1360
  mediaelement.createTrackList = function(mediaelem, baseData){
1385
1361
  baseData = baseData || webshims.data(mediaelem, 'mediaelementBase') || webshims.data(mediaelem, 'mediaelementBase', {});
@@ -1601,8 +1577,9 @@ modified for webshims
1601
1577
  if(Modernizr.track){
1602
1578
  var shimedTextTracks = $.prop(this, 'textTracks');
1603
1579
  var origTextTracks = this.textTracks;
1580
+
1604
1581
  if(shimedTextTracks.length != origTextTracks.length){
1605
- webshims.error("textTracks couldn't be copied");
1582
+ webshims.warn("textTracks couldn't be copied");
1606
1583
  }
1607
1584
 
1608
1585
  $('track', this).each(hideNativeTracks);
@@ -15,7 +15,6 @@
15
15
 
16
16
  var wsCfg = webshims.cfg;
17
17
  var options = wsCfg.mediaelement;
18
- var hasFullTrackSupport;
19
18
  var hasSwf;
20
19
  if(!options){
21
20
  webshims.error("mediaelement wasn't implemented but loaded");
@@ -57,11 +56,9 @@
57
56
  }
58
57
  })();
59
58
  }
60
- hasFullTrackSupport = Modernizr.track && !bugs.track;
61
59
 
62
60
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
63
61
  hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
64
- $('html').addClass(hasSwf ? 'swf' : 'no-swf');
65
62
  var mediaelement = webshims.mediaelement;
66
63
 
67
64
  mediaelement.parseRtmp = function(data){
@@ -440,6 +437,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
440
437
  if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
441
438
  supLoad.prop._supvalue.apply(this, arguments);
442
439
  }
440
+ if(!loadTrackUi.loaded && $('track', this).length){
441
+ loadTrackUi();
442
+ }
443
443
  $(this).triggerHandler('wsmediareload');
444
444
  }
445
445
  }
@@ -510,13 +510,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
510
510
  }
511
511
  };
512
512
 
513
- if(hasFullTrackSupport){
514
- webshims.defineProperty(TextTrack.prototype, 'shimActiveCues', {
515
- get: function(){
516
- return this._shimActiveCues || this.activeCues;
517
- }
518
- });
519
- }
513
+
520
514
  //set native implementation ready, before swf api is retested
521
515
  if(hasNative){
522
516
  webshims.isReady('mediaelement-core', true);
@@ -533,12 +527,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
533
527
  "use strict";
534
528
  var mediaelement = webshims.mediaelement;
535
529
  var id = new Date().getTime();
536
- var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
537
530
  //descriptions are not really shown, but they are inserted into the dom
538
531
  var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
539
- var notImplemented = function(){
540
- webshims.error('not implemented yet');
541
- };
542
532
  var dummyTrack = $('<track />');
543
533
  var supportTrackMod = Modernizr.ES5 && Modernizr.objectAccessor;
544
534
  var createEventTarget = function(obj){
@@ -640,9 +630,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
640
630
  };
641
631
  var copyProps = ['kind', 'label', 'srclang'];
642
632
  var copyName = {srclang: 'language'};
643
-
644
- var owns = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
645
-
633
+
646
634
  var updateMediaTrackList = function(baseData, trackList){
647
635
  var removed = [];
648
636
  var added = [];
@@ -745,60 +733,44 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
745
733
  };
746
734
  })();
747
735
  var emptyDiv = $('<div />')[0];
736
+
748
737
  function VTTCue(startTime, endTime, text){
749
738
  if(arguments.length != 3){
750
739
  webshims.error("wrong arguments.length for VTTCue.constructor");
751
740
  }
752
-
741
+
753
742
  this.startTime = startTime;
754
743
  this.endTime = endTime;
755
744
  this.text = text;
756
-
757
-
758
- createEventTarget(this);
759
- }
760
-
761
- VTTCue.prototype = {
762
-
763
- onenter: null,
764
- onexit: null,
765
- pauseOnExit: false,
766
- getCueAsHTML: function(){
745
+ this.onenter = null;
746
+ this.onexit = null;
747
+ this.pauseOnExit = false;
748
+ this.track = null;
749
+ this.id = null;
750
+ this.getCueAsHTML = (function(){
767
751
  var lastText = "";
768
752
  var parsedText = "";
769
- var fragment = document.createDocumentFragment();
770
- var fn;
771
- if(!owns(this, 'getCueAsHTML')){
772
- fn = this.getCueAsHTML = function(){
773
- var i, len;
774
- if(lastText != this.text){
775
- lastText = this.text;
776
- parsedText = mediaelement.parseCueTextToHTML(lastText);
777
- emptyDiv.innerHTML = parsedText;
778
-
779
- for(i = 0, len = emptyDiv.childNodes.length; i < len; i++){
780
- fragment.appendChild(emptyDiv.childNodes[i].cloneNode(true));
781
- }
753
+ var fragment;
754
+
755
+ return function(){
756
+ var i, len;
757
+ if(!fragment){
758
+ fragment = document.createDocumentFragment();
759
+ }
760
+ if(lastText != this.text){
761
+ lastText = this.text;
762
+ parsedText = mediaelement.parseCueTextToHTML(lastText);
763
+ emptyDiv.innerHTML = parsedText;
764
+
765
+ for(i = 0, len = emptyDiv.childNodes.length; i < len; i++){
766
+ fragment.appendChild(emptyDiv.childNodes[i].cloneNode(true));
782
767
  }
783
- return fragment.cloneNode(true);
784
- };
785
-
786
- }
787
- return fn ? fn.apply(this, arguments) : fragment.cloneNode(true);
788
- },
789
- track: null,
790
-
791
-
792
- id: ''
793
- //todo-->
794
- // ,
795
- // snapToLines: true,
796
- // line: 'auto',
797
- // size: 100,
798
- // position: 50,
799
- // vertical: '',
800
- // align: 'middle'
801
- };
768
+ }
769
+ return fragment.cloneNode(true);
770
+ };
771
+
772
+ })();
773
+ }
802
774
 
803
775
  window.VTTCue = VTTCue;
804
776
  window.TextTrackCue = function(){
@@ -849,14 +821,15 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
849
821
  })();
850
822
 
851
823
  mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
852
- var loadEvents = 'play playing updatetrackdisplay';
824
+ var loadEvents = 'play playing';
853
825
  var obj = trackData.track;
854
826
  var load = function(){
855
827
  var error, ajax, createAjax;
856
-
857
828
  var src = obj.mode != 'disabled' && ($.attr(track, 'src') && $.prop(track, 'src'));
829
+
858
830
  if(src){
859
- $(mediaelem).off(loadEvents, load);
831
+ $(mediaelem).off(loadEvents, load).off('updatetrackdisplay', load);
832
+
860
833
  if(!trackData.readyState){
861
834
  error = function(){
862
835
  trackData.readyState = 3;
@@ -890,7 +863,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
890
863
  error: error
891
864
  });
892
865
  };
893
- if($.ajax){
866
+ if($.ajax && $.ajaxSettings.xhr){
894
867
  createAjax();
895
868
  } else {
896
869
  webshims.ready('jajax', createAjax);
@@ -908,11 +881,15 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
908
881
  obj._shimActiveCues = null;
909
882
  obj.activeCues = null;
910
883
  obj.cues = null;
911
- $(mediaelem).off(loadEvents, load);
884
+
912
885
  $(mediaelem).on(loadEvents, load);
913
886
  if(_default){
914
887
  obj.mode = showTracks[obj.kind] ? 'showing' : 'hidden';
915
- load();
888
+ webshims.ready('WINDOWLOAD', load);
889
+ } else {
890
+ webshims.ready('WINDOWLOAD', function(){
891
+ $(mediaelem).on('updatetrackdisplay', load);
892
+ });
916
893
  }
917
894
  };
918
895
 
@@ -941,7 +918,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
941
918
 
942
919
 
943
920
  if(track.nodeName){
944
-
945
921
  if(supportTrackMod){
946
922
  copyProps.forEach(function(copyProp){
947
923
  webshims.defineProperty(obj, copyName[copyProp] || copyProp, {
@@ -976,8 +952,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
976
952
 
977
953
  return obj;
978
954
  };
979
-
980
-
955
+
956
+
981
957
  /*
982
958
  taken from:
983
959
  Captionator 0.5.1 [CaptionCrunch]
@@ -994,7 +970,7 @@ modified for webshims
994
970
  var WebVTTDEFAULTSCueParser = /^(DEFAULTS|DEFAULT)\s+\-\-\>\s+(.*)/g;
995
971
  var WebVTTSTYLECueParser = /^(STYLE|STYLES)\s+\-\-\>\s*\n([\s\S]*)/g;
996
972
  var WebVTTCOMMENTCueParser = /^(COMMENT|COMMENTS)\s+\-\-\>\s+(.*)/g;
997
-
973
+
998
974
  return function(subtitleElement,objectCount){
999
975
 
1000
976
  var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id, specialCueData;
@@ -1010,33 +986,33 @@ modified for webshims
1010
986
  } else if ((specialCueData = WebVTTCOMMENTCueParser.exec(subtitleElement))) {
1011
987
  return null; // At this stage, we don't want to do anything with these.
1012
988
  }
1013
-
989
+
1014
990
  subtitleParts = subtitleElement.split(/\n/g);
1015
-
991
+
1016
992
  // Trim off any blank lines (logically, should only be max. one, but loop to be sure)
1017
993
  while (!subtitleParts[0].replace(/\s+/ig,"").length && subtitleParts.length > 0) {
1018
994
  subtitleParts.shift();
1019
995
  }
1020
-
996
+
1021
997
  if (subtitleParts[0].match(/^\s*[a-z0-9-\_]+\s*$/ig)) {
1022
998
  // The identifier becomes the cue ID (when *we* load the cues from file. Programatically created cues can have an ID of whatever.)
1023
999
  id = String(subtitleParts.shift().replace(/\s*/ig,""));
1024
1000
  }
1025
-
1001
+
1026
1002
  for (subtitlePartIndex = 0; subtitlePartIndex < subtitleParts.length; subtitlePartIndex ++) {
1027
1003
  var timestamp = subtitleParts[subtitlePartIndex];
1028
-
1004
+
1029
1005
  if ((timestampMatch = WebVTTTimestampParser.exec(timestamp))) {
1030
-
1006
+
1031
1007
  // WebVTT
1032
-
1008
+
1033
1009
  timeData = timestampMatch.slice(1);
1034
-
1010
+
1035
1011
  timeIn = parseInt((timeData[0]||0) * 60 * 60,10) + // Hours
1036
1012
  parseInt((timeData[1]||0) * 60,10) + // Minutes
1037
1013
  parseInt((timeData[2]||0),10) + // Seconds
1038
1014
  parseFloat("0." + (timeData[3]||0)); // MS
1039
-
1015
+
1040
1016
  timeOut = parseInt((timeData[4]||0) * 60 * 60,10) + // Hours
1041
1017
  parseInt((timeData[5]||0) * 60,10) + // Minutes
1042
1018
  parseInt((timeData[6]||0),10) + // Seconds
@@ -1047,7 +1023,7 @@ modified for webshims
1047
1023
  }
1048
1024
  */
1049
1025
  }
1050
-
1026
+
1051
1027
  // We've got the timestamp - return all the other unmatched lines as the raw subtitle data
1052
1028
  subtitleParts = subtitleParts.slice(0,subtitlePartIndex).concat(subtitleParts.slice(subtitlePartIndex+1));
1053
1029
  break;
@@ -1066,7 +1042,7 @@ modified for webshims
1066
1042
  previous[current.split(":")[0]] = current.split(":")[1];
1067
1043
  return previous;
1068
1044
  },{});
1069
-
1045
+
1070
1046
  // Loop through cue settings, replace defaults with cue specific settings if they exist
1071
1047
  compositeCueSettings =
1072
1048
  cueSettings
@@ -1077,7 +1053,7 @@ modified for webshims
1077
1053
  previous[current.split(":")[0]] = current.split(":")[1];
1078
1054
  return previous;
1079
1055
  },compositeCueSettings);
1080
-
1056
+
1081
1057
  // Turn back into string like the VTTCue constructor expects
1082
1058
  cueSettings = "";
1083
1059
  for (var key in compositeCueSettings) {
@@ -1096,18 +1072,18 @@ modified for webshims
1096
1072
  return tmpCue;
1097
1073
  };
1098
1074
  })();
1099
-
1075
+
1100
1076
  mediaelement.parseCaptions = function(captionData, track, complete) {
1101
1077
 
1102
1078
  var cue, lazyProcess, regWevVTT, startDate, isWEBVTT;
1103
1079
 
1104
1080
  mediaelement.createCueList();
1105
1081
  if (captionData) {
1106
-
1082
+
1107
1083
  regWevVTT = /^WEBVTT(\s*FILE)?/ig;
1108
-
1084
+
1109
1085
  lazyProcess = function(i, len){
1110
-
1086
+
1111
1087
  for(; i < len; i++){
1112
1088
  cue = captionData[i];
1113
1089
  if(regWevVTT.test(cue)){
@@ -1129,7 +1105,7 @@ modified for webshims
1129
1105
  startDate = new Date().getTime();
1130
1106
  lazyProcess(i, len);
1131
1107
  }, 90);
1132
-
1108
+
1133
1109
  break;
1134
1110
  }
1135
1111
  }
@@ -1140,9 +1116,9 @@ modified for webshims
1140
1116
  complete(track.cues);
1141
1117
  }
1142
1118
  };
1143
-
1119
+
1144
1120
  captionData = captionData.replace(/\r\n/g,"\n");
1145
-
1121
+
1146
1122
  setTimeout(function(){
1147
1123
  captionData = captionData.replace(/\r/g,"\n");
1148
1124
  setTimeout(function(){
@@ -1151,12 +1127,12 @@ modified for webshims
1151
1127
  lazyProcess(0, captionData.length);
1152
1128
  }, 9);
1153
1129
  }, 9);
1154
-
1130
+
1155
1131
  } else {
1156
1132
  webshims.error("Required parameter captionData not supplied.");
1157
1133
  }
1158
1134
  };
1159
-
1135
+
1160
1136
 
1161
1137
  mediaelement.createTrackList = function(mediaelem, baseData){
1162
1138
  baseData = baseData || webshims.data(mediaelem, 'mediaelementBase') || webshims.data(mediaelem, 'mediaelementBase', {});
@@ -1378,8 +1354,9 @@ modified for webshims
1378
1354
  if(Modernizr.track){
1379
1355
  var shimedTextTracks = $.prop(this, 'textTracks');
1380
1356
  var origTextTracks = this.textTracks;
1357
+
1381
1358
  if(shimedTextTracks.length != origTextTracks.length){
1382
- webshims.error("textTracks couldn't be copied");
1359
+ webshims.warn("textTracks couldn't be copied");
1383
1360
  }
1384
1361
 
1385
1362
  $('track', this).each(hideNativeTracks);