webshims-rails 1.14.1 → 1.14.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +0 -0
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +3 -8
  5. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/canvas2png.js +0 -0
  6. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +0 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.swf +0 -0
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/proxy.php +0 -0
  9. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/save.php +0 -0
  10. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/canvas2png.js +0 -0
  11. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  13. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +0 -0
  14. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/proxy.php +0 -0
  15. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/save.php +0 -0
  16. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2 -2
  17. data/vendor/assets/javascripts/webshims/shims/combos/1.js +66 -43
  18. data/vendor/assets/javascripts/webshims/shims/combos/10.js +66 -31
  19. data/vendor/assets/javascripts/webshims/shims/combos/11.js +66 -31
  20. data/vendor/assets/javascripts/webshims/shims/combos/12.js +96 -59
  21. data/vendor/assets/javascripts/webshims/shims/combos/13.js +96 -59
  22. data/vendor/assets/javascripts/webshims/shims/combos/14.js +0 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/15.js +4 -1
  24. data/vendor/assets/javascripts/webshims/shims/combos/16.js +70 -44
  25. data/vendor/assets/javascripts/webshims/shims/combos/17.js +66 -31
  26. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1241 -1126
  27. data/vendor/assets/javascripts/webshims/shims/combos/19.js +1272 -1214
  28. data/vendor/assets/javascripts/webshims/shims/combos/2.js +66 -43
  29. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1272 -1214
  30. data/vendor/assets/javascripts/webshims/shims/combos/21.js +61 -92
  31. data/vendor/assets/javascripts/webshims/shims/combos/22.js +30 -16
  32. data/vendor/assets/javascripts/webshims/shims/combos/23.js +66 -43
  33. data/vendor/assets/javascripts/webshims/shims/combos/25.js +41 -85
  34. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1556 -2316
  35. data/vendor/assets/javascripts/webshims/shims/combos/27.js +12 -10
  36. data/vendor/assets/javascripts/webshims/shims/combos/28.js +4 -1
  37. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -0
  38. data/vendor/assets/javascripts/webshims/shims/combos/3.js +0 -0
  39. data/vendor/assets/javascripts/webshims/shims/combos/30.js +0 -0
  40. data/vendor/assets/javascripts/webshims/shims/combos/31.js +0 -0
  41. data/vendor/assets/javascripts/webshims/shims/combos/32.js +1175 -1095
  42. data/vendor/assets/javascripts/webshims/shims/combos/33.js +0 -0
  43. data/vendor/assets/javascripts/webshims/shims/combos/34.js +30 -16
  44. data/vendor/assets/javascripts/webshims/shims/combos/4.js +0 -0
  45. data/vendor/assets/javascripts/webshims/shims/combos/5.js +66 -31
  46. data/vendor/assets/javascripts/webshims/shims/combos/6.js +66 -31
  47. data/vendor/assets/javascripts/webshims/shims/combos/7.js +66 -43
  48. data/vendor/assets/javascripts/webshims/shims/combos/8.js +66 -43
  49. data/vendor/assets/javascripts/webshims/shims/combos/9.js +66 -31
  50. data/vendor/assets/javascripts/webshims/shims/combos/97.js +63 -28
  51. data/vendor/assets/javascripts/webshims/shims/combos/98.js +149 -74
  52. data/vendor/assets/javascripts/webshims/shims/combos/99.js +149 -74
  53. data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +1 -1
  54. data/vendor/assets/javascripts/webshims/shims/details.js +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +0 -0
  56. data/vendor/assets/javascripts/webshims/shims/es5.js +1175 -1095
  57. data/vendor/assets/javascripts/webshims/shims/excanvas.js +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/filereader.js +10 -9
  59. data/vendor/assets/javascripts/webshims/shims/form-combat.js +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/form-fixrangechange.js +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/form-message.js +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +40 -11
  68. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +4 -1
  69. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +2 -1
  70. data/vendor/assets/javascripts/webshims/shims/form-validation.js +80 -47
  71. data/vendor/assets/javascripts/webshims/shims/form-validators.js +19 -8
  72. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +21 -1
  73. data/vendor/assets/javascripts/webshims/shims/geolocation.js +0 -0
  74. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ar.js +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ch-CN.js +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-cs.js +0 -0
  77. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +0 -0
  78. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-el.js +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-es.js +0 -0
  81. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fa.js +130 -0
  82. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +0 -0
  83. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +0 -0
  84. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +0 -0
  85. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +0 -0
  86. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +0 -0
  87. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +0 -0
  88. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +0 -0
  89. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +0 -0
  90. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +0 -0
  91. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-BR.js +0 -0
  92. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +0 -0
  93. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt.js +0 -0
  94. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +0 -0
  95. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +0 -0
  96. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-CN.js +0 -0
  97. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-TW.js +130 -0
  98. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -0
  99. data/vendor/assets/javascripts/webshims/shims/jme/_icons.scss +186 -0
  100. data/vendor/assets/javascripts/webshims/shims/jme/b.js +63 -28
  101. data/vendor/assets/javascripts/webshims/shims/jme/c.js +86 -46
  102. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +317 -211
  103. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +59 -223
  104. data/vendor/assets/javascripts/webshims/shims/jme/jme.eot +0 -0
  105. data/vendor/assets/javascripts/webshims/shims/jme/jme.svg +0 -0
  106. data/vendor/assets/javascripts/webshims/shims/jme/jme.ttf +0 -0
  107. data/vendor/assets/javascripts/webshims/shims/jme/jme.woff +0 -0
  108. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +66 -14
  109. data/vendor/assets/javascripts/webshims/shims/jme/p.js +0 -0
  110. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +0 -0
  111. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +0 -0
  112. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  113. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  114. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  115. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  116. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  117. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  118. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  119. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  120. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  121. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  122. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +55 -48
  123. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +66 -43
  124. data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +833 -0
  125. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +31 -76
  126. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +0 -0
  127. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +0 -0
  128. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.cdn.swf +0 -0
  129. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.min.swf +0 -0
  130. data/vendor/assets/javascripts/webshims/shims/moxie/js/moxie.js +1542 -2303
  131. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  132. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
  133. data/vendor/assets/javascripts/webshims/shims/picture.js +160 -79
  134. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +0 -0
  135. data/vendor/assets/javascripts/webshims/shims/promise.js +0 -0
  136. data/vendor/assets/javascripts/webshims/shims/range-ui.js +26 -20
  137. data/vendor/assets/javascripts/webshims/shims/sizzle.js +0 -0
  138. data/vendor/assets/javascripts/webshims/shims/styles/color-picker.png +0 -0
  139. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +444 -326
  140. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +379 -300
  141. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  142. data/vendor/assets/javascripts/webshims/shims/styles/progress.png +0 -0
  143. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +8 -8
  144. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +0 -0
  145. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +0 -14
  146. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +104 -85
  147. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +20 -32
  148. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +0 -0
  149. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +14 -34
  150. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +920 -728
  151. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +471 -391
  152. data/vendor/assets/javascripts/webshims/shims/styles/widget.eot +0 -0
  153. data/vendor/assets/javascripts/webshims/shims/styles/widget.svg +0 -0
  154. data/vendor/assets/javascripts/webshims/shims/styles/widget.ttf +0 -0
  155. data/vendor/assets/javascripts/webshims/shims/styles/widget.woff +0 -0
  156. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  157. data/vendor/assets/javascripts/webshims/shims/swfmini-embed.js +0 -0
  158. data/vendor/assets/javascripts/webshims/shims/swfmini.js +0 -0
  159. data/vendor/assets/javascripts/webshims/shims/track-ui.js +0 -0
  160. data/vendor/assets/javascripts/webshims/shims/track.js +30 -16
  161. metadata +8 -4
  162. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +0 -12
  163. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
@@ -11,6 +11,23 @@
11
11
  return val * 1;
12
12
  };
13
13
  var createOpts = ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex'];
14
+ var normalizeTouch = (function(){
15
+ var types = {
16
+ touchstart: 1,
17
+ touchend: 1,
18
+ touchmove: 1
19
+ };
20
+ var normalize = ['pageX', 'pageY'];
21
+ return function(e){
22
+ if(types[e.type] && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length){
23
+ for(var i = 0; i < normalize.length; i++){
24
+ e[normalize[i]] = e.originalEvent.touches[0][normalize[i]];
25
+ }
26
+
27
+ }
28
+ return e;
29
+ };
30
+ })();
14
31
  var rangeProto = {
15
32
  _create: function(){
16
33
  var i;
@@ -329,23 +346,7 @@
329
346
  }
330
347
  };
331
348
  })();
332
- var normalizeTouch = (function(){
333
- var types = {
334
- touchstart: 1,
335
- touchend: 1,
336
- touchmove: 1
337
- };
338
- var normalize = ['pageX', 'pageY'];
339
- return function(e){
340
- if(types[e.type] && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length){
341
- for(var i = 0; i < normalize.length; i++){
342
- e[normalize[i]] = e.originalEvent.touches[0][normalize[i]];
343
- }
344
-
345
- }
346
- return e;
347
- };
348
- })();
349
+
349
350
  var updateValue = function(val, animate){
350
351
  if(val != o.value){
351
352
  that.value(val, false, animate);
@@ -365,7 +366,7 @@
365
366
  }
366
367
  };
367
368
  var remove = function(e){
368
- if(e && e.type == 'mouseup'){
369
+ if(e && (e.type == 'mouseup' || e.type == 'touchend')){
369
370
  eventTimer.call('input', o.value);
370
371
  eventTimer.call('change', o.value);
371
372
  }
@@ -386,6 +387,8 @@
386
387
  $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
387
388
  $(window).off('blur', removeWin);
388
389
  if(!o.readonly && !o.disabled){
390
+ eventTimer.init('input', o.value);
391
+ eventTimer.init('change', o.value);
389
392
  normalizeTouch(e);
390
393
  that.element.trigger('focus');
391
394
  that.addRemoveClass('ws-active', true);
@@ -421,8 +424,10 @@
421
424
  'touchstart mousedown': add,
422
425
  focus: function(e){
423
426
  if(!o.disabled && !hasFocus){
424
- eventTimer.init('input', o.value);
425
- eventTimer.init('change', o.value);
427
+ if(!isActive){
428
+ eventTimer.init('input', o.value);
429
+ eventTimer.init('change', o.value);
430
+ }
426
431
  that.addRemoveClass('ws-focus', true);
427
432
  that.updateMetrics();
428
433
  }
@@ -608,6 +613,7 @@
608
613
  obj._create.call(obj);
609
614
  });
610
615
  };
616
+ $.fn.rangeUI.normalizeTouch = normalizeTouch;
611
617
  if(window.webshims && webshims.isReady){
612
618
  webshims.isReady('range-ui', true);
613
619
  }
@@ -1315,11 +1321,7 @@
1315
1321
  if( steps[this.type] && typeof steps[this.type].start == 'object'){
1316
1322
  steps[this.type].start = this.asNumber(steps[this.type].start);
1317
1323
  }
1318
-
1319
- if(!webshims.picker[this.type]){
1320
- o.buttonOnly = false;
1321
- }
1322
-
1324
+
1323
1325
  for(i = 0; i < createOpts.length; i++){
1324
1326
  if(o[createOpts[i]] != null){
1325
1327
  this[createOpts[i]](o[createOpts[i]], o[createOpts[i]]);
@@ -1549,7 +1551,7 @@
1549
1551
  wsWidgetProto._create.apply(this, arguments);
1550
1552
  this._init = false;
1551
1553
 
1552
- this.buttonWrapper.html('<span unselectable="on" class="step-controls"><span class="step-up"></span><span class="step-down"></span></span>');
1554
+ this.buttonWrapper.html('<span unselectable="on" class="step-controls"><span class="step-up step-control"></span><span class="step-down step-control"></span></span>');
1553
1555
 
1554
1556
  if(this.type == 'number'){
1555
1557
  this.inputElements.attr('inputmode', 'numeric');
@@ -1732,7 +1734,7 @@
1732
1734
  }
1733
1735
 
1734
1736
  touch = changedTouches[0];
1735
- if(Math.abs(touchData.x - touch.pageX) > 40 || Math.abs(touchData.y - touch.pageY) > 40 || Date.now() - touchData.now > 600){
1737
+ if(Math.abs(touchData.x - touch.pageX) > 40 || Math.abs(touchData.y - touch.pageY) > 40 || Date.now() - touchData.now > 300){
1736
1738
  return;
1737
1739
  }
1738
1740
  e.preventDefault();
@@ -1930,7 +1932,7 @@
1930
1932
  }
1931
1933
  };
1932
1934
  return function(prop){
1933
- if(prop == 'value' && !data.options.inlinePicker){return;}
1935
+ if(prop == 'value' && (!data.options.inlinePicker || data._handledValue )){return;}
1934
1936
  popover.isDirty = true;
1935
1937
 
1936
1938
  if(popover.isVisible){
@@ -1989,6 +1991,13 @@
1989
1991
  }
1990
1992
  show();
1991
1993
  };
1994
+ var toogle = function(){
1995
+ if(popover.openedByFocus || !popover.isVisible){
1996
+ open();
1997
+ } else {
1998
+ popover.hide();
1999
+ }
2000
+ }
1992
2001
 
1993
2002
 
1994
2003
  options.containerElements.push(popover.element[0]);
@@ -2029,7 +2038,7 @@
2029
2038
  }
2030
2039
 
2031
2040
 
2032
- opener.wsTouchClick(open);
2041
+ opener.wsTouchClick(toogle);
2033
2042
 
2034
2043
  if(options.inlinePicker){
2035
2044
  popover.openedByFocus = true;
@@ -2381,9 +2390,9 @@
2381
2390
  }
2382
2391
 
2383
2392
  data.shim.element.on('change input', stopPropagation).addClass(cNames+' '+webshims.shadowClass);
2384
-
2393
+
2385
2394
  if(data.shim.buttonWrapper){
2386
-
2395
+
2387
2396
  data.shim.buttonWrapper.addClass('input-button-size-'+(data.shim.buttonWrapper.children().filter(isVisible).length)+' '+webshims.shadowClass);
2388
2397
 
2389
2398
  if(data.shim.buttonWrapper.filter(isVisible).length){
@@ -2540,6 +2549,32 @@
2540
2549
  ;
2541
2550
  });
2542
2551
  };
2552
+
2553
+
2554
+ if($('<input />').prop('labels') == null){
2555
+ webshims.defineNodeNamesProperty('button, input, keygen, meter, output, progress, select, textarea', 'labels', {
2556
+ prop: {
2557
+ get: function(){
2558
+ if(this.type == 'hidden'){return null;}
2559
+ var id = this.id;
2560
+ var labels = $(this)
2561
+ .closest('label')
2562
+ .filter(function(){
2563
+ var hFor = (this.attributes['for'] || {});
2564
+ return (!hFor.specified || hFor.value == id);
2565
+ })
2566
+ ;
2567
+
2568
+ if(id) {
2569
+ labels = labels.add('label[for="'+ id +'"]');
2570
+ }
2571
+ return labels.get();
2572
+ },
2573
+ writeable: false
2574
+ }
2575
+ });
2576
+ }
2577
+
2543
2578
  if(formcfg._isLoading){
2544
2579
  $(formcfg).one('change', init);
2545
2580
  } else {
@@ -238,7 +238,7 @@ webshims.isReady('swfmini', true);
238
238
 
239
239
  var wsCfg = webshims.cfg;
240
240
  var options = wsCfg.mediaelement;
241
- var hasSwf;
241
+ var isIE = navigator.userAgent.indexOf('MSIE') != -1;
242
242
  if(!options){
243
243
  webshims.error("mediaelement wasn't implemented but loaded");
244
244
  return;
@@ -253,7 +253,7 @@ webshims.isReady('swfmini', true);
253
253
 
254
254
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
255
255
 
256
- if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && navigator.userAgent.indexOf('MSIE') != -1 && 'ActiveXObject' in window) ){
256
+ if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && isIE && 'ActiveXObject' in window) ){
257
257
  webshims.addPolyfill('mediaelement-native-fix', {
258
258
  d: ['dom-support']
259
259
  });
@@ -281,7 +281,7 @@ webshims.isReady('swfmini', true);
281
281
  }
282
282
 
283
283
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
284
- hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
284
+ var hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
285
285
  var mediaelement = webshims.mediaelement;
286
286
 
287
287
  mediaelement.parseRtmp = function(data){
@@ -343,11 +343,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
343
343
  }
344
344
  }
345
345
  }
346
-
347
- if(!src.container){
348
- $(elem).attr('data-wsrecheckmimetype', '');
349
- }
350
-
346
+
351
347
  tmp = elem.attr('media');
352
348
  if(tmp){
353
349
  src.media = tmp;
@@ -477,11 +473,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
477
473
  }
478
474
  };
479
475
 
480
-
481
- $.fn.loadMediaSrc = function(){
482
- webshims.error('loadMediaSrc was removed.');
483
- };
484
-
485
476
  mediaelement.swfMimeTypes = ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'video/jarisplayer', 'jarisplayer/jarisplayer', 'video/youtube', 'video/rtmp', 'audio/rtmp'];
486
477
 
487
478
  mediaelement.canThirdPlaySrces = function(mediaElem, srces){
@@ -539,7 +530,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
539
530
  message = "can't play sources";
540
531
  }
541
532
  $(elem).pause().data('mediaerror', message);
542
- webshims.error('mediaelementError: '+ message);
533
+ webshims.error('mediaelementError: '+ message +'. Run the following line in your console to get more info: webshim.mediaelement.loadDebugger();');
543
534
  setTimeout(function(){
544
535
  if($(elem).data('mediaerror')){
545
536
  $(elem).addClass('media-error').trigger('mediaerror');
@@ -571,36 +562,49 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
571
562
  }
572
563
  };
573
564
  })();
574
-
575
- var stepSources = function(elem, data, useSwf, _srces, _noLoop){
576
- var ret;
577
- if(useSwf || (useSwf !== false && data && data.isActive == 'third')){
578
- ret = mediaelement.canThirdPlaySrces(elem, _srces);
579
- if(!ret){
580
- if(_noLoop){
581
- mediaelement.setError(elem, false);
582
- } else {
583
- stepSources(elem, data, false, _srces, true);
584
- }
585
- } else {
586
- handleThird(elem, ret, data);
565
+
566
+ var activate = {
567
+ native: function(elem, src, data){
568
+ if(data && data.isActive == 'third') {
569
+ mediaelement.setActive(elem, 'html5', data);
587
570
  }
588
- } else {
589
- ret = mediaelement.canNativePlaySrces(elem, _srces);
590
- if(!ret){
591
- if(_noLoop){
592
- mediaelement.setError(elem, false);
593
- if(data && data.isActive == 'third') {
594
- mediaelement.setActive(elem, 'html5', data);
595
- }
596
- } else {
597
- stepSources(elem, data, true, _srces, true);
598
- }
599
- } else if(data && data.isActive == 'third') {
571
+ },
572
+ third: handleThird
573
+ };
574
+
575
+ var stepSources = function(elem, data, srces){
576
+ var i, src;
577
+ var testOrder = [{test: 'canNativePlaySrces', activate: 'native'}, {test: 'canThirdPlaySrces', activate: 'third'}];
578
+ if(options.preferFlash || (data && data.isActive == 'third') ){
579
+ testOrder.reverse();
580
+ }
581
+ for(i = 0; i < 2; i++){
582
+ src = mediaelement[testOrder[i].test](elem, srces);
583
+ if(src){
584
+ activate[testOrder[i].activate](elem, src, data);
585
+ break;
586
+ }
587
+ }
588
+
589
+ if(!src){
590
+ mediaelement.setError(elem, false);
591
+ if(data && data.isActive == 'third') {
600
592
  mediaelement.setActive(elem, 'html5', data);
601
593
  }
602
594
  }
603
595
  };
596
+ var allowedPreload = {'metadata': 1, 'auto': 1, '': 1};
597
+ var fixPreload = function(elem){
598
+ var preload, img;
599
+ if(elem.getAttribute('preload') == 'none'){
600
+ if(allowedPreload[(preload = $.attr(elem, 'data-preload'))]){
601
+ $.attr(elem, 'preload', preload);
602
+ } else if(hasNative && (preload = elem.getAttribute('poster'))){
603
+ img = document.createElement('img');
604
+ img.src = preload;
605
+ }
606
+ }
607
+ };
604
608
  var stopParent = /^(?:embed|object|datalist)$/i;
605
609
  var selectSource = function(elem, data){
606
610
  var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
@@ -616,7 +620,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
616
620
  if(mediaelement.sortMedia){
617
621
  _srces.sort(mediaelement.sortMedia);
618
622
  }
619
- stepSources(elem, data, options.preferFlash || undefined, _srces);
623
+ fixPreload(elem);
624
+ stepSources(elem, data, _srces);
625
+
620
626
  };
621
627
  mediaelement.selectSource = selectSource;
622
628
 
@@ -627,20 +633,22 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
627
633
  setTimeout(function(){
628
634
  if( $.prop(e.target, 'paused') || !$.prop(e.target, 'loop') ){return;}
629
635
  $(e.target).prop('currentTime', 0).play();
630
- }, 1);
636
+ });
631
637
 
632
638
  });
633
639
 
634
640
  var handleMedia = false;
641
+
635
642
  var initMediaElements = function(){
636
643
  var testFixMedia = function(){
644
+
637
645
  if(webshims.implement(this, 'mediaelement')){
638
646
  selectSource(this);
639
647
  if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){
640
648
  $.prop(this, 'muted', true);
641
649
  }
650
+
642
651
  }
643
-
644
652
  };
645
653
 
646
654
  webshims.ready('dom-support', function(){
@@ -656,6 +664,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
656
664
  prop: {
657
665
  value: function(){
658
666
  var data = webshims.data(this, 'mediaelement');
667
+
659
668
  selectSource(this, data);
660
669
  if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
661
670
  supLoad.prop._supvalue.apply(this, arguments);
@@ -667,6 +676,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
667
676
  }
668
677
  }
669
678
  });
679
+
670
680
  nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
671
681
  prop: {
672
682
  value: function(type){
@@ -683,6 +693,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
683
693
  ret = 'maybe';
684
694
  }
685
695
  }
696
+ if(!ret && hasYt && type == 'video/youtube'){
697
+ ret = 'maybe';
698
+ }
686
699
  return ret;
687
700
  }
688
701
  }
@@ -732,8 +745,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
732
745
  });
733
746
  }
734
747
  };
735
-
736
748
 
749
+ mediaelement.loadDebugger = function(){
750
+ webshims.ready('dom-support', function(){
751
+ webshims.loader.loadScript('mediaelement-debug');
752
+ });
753
+ };
754
+
755
+ if(({noCombo: 1, media: 1})[webshims.cfg.debug]){
756
+ $(document).on('mediaerror', function(e){
757
+ mediaelement.loadDebugger();
758
+ });
759
+ }
737
760
  //set native implementation ready, before swf api is retested
738
761
  if(hasNative){
739
762
  webshims.isReady('mediaelement-core', true);
@@ -1042,6 +1065,26 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1042
1065
  return cueText.replace(tagSplits, replacer);
1043
1066
  };
1044
1067
  })();
1068
+ var mapTtmlToVtt = function(i){
1069
+ var content = i+'';
1070
+ var begin = this.getAttribute('begin') || '';
1071
+ var end = this.getAttribute('end') || '';
1072
+ var text = $.trim($.text(this));
1073
+ if(!/\./.test(begin)){
1074
+ begin += '.000';
1075
+ }
1076
+ if(!/\./.test(end)){
1077
+ end += '.000';
1078
+ }
1079
+ content += '\n';
1080
+ content += begin +' --> '+end+'\n';
1081
+ content += text;
1082
+ return content;
1083
+ };
1084
+ var ttmlTextToVTT = function(ttml){
1085
+ ttml = $.parseXML(ttml) || [];
1086
+ return $(ttml).find('[begin][end]').map(mapTtmlToVtt).get().join('\n\n') || '';
1087
+ };
1045
1088
 
1046
1089
  mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
1047
1090
  var loadEvents = 'play playing';
@@ -1069,7 +1112,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1069
1112
  dataType: 'text',
1070
1113
  url: src,
1071
1114
  success: function(text){
1072
- if(ajax.getResponseHeader('content-type') != 'text/vtt'){
1115
+ var contentType = ajax.getResponseHeader('content-type');
1116
+
1117
+ if(!contentType.indexOf('application/xml')){
1118
+ text = ttmlTextToVTT(text);
1119
+ } else if(contentType.indexOf('text/vtt')){
1073
1120
  webshims.error('set the mime-type of your WebVTT files to text/vtt. see: http://dev.w3.org/html5/webvtt/#text/vtt');
1074
1121
  }
1075
1122
  mediaelement.parseCaptions(text, obj, function(cues){
@@ -1189,25 +1236,20 @@ modified for webshims
1189
1236
  */
1190
1237
  mediaelement.parseCaptionChunk = (function(){
1191
1238
  // Set up timestamp parsers
1192
- var WebVTTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s*(.*)/;
1239
+ var WebVTTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s*(.*)/;
1193
1240
  var WebVTTDEFAULTSCueParser = /^(DEFAULTS|DEFAULT)\s+\-\-\>\s+(.*)/g;
1194
1241
  var WebVTTSTYLECueParser = /^(STYLE|STYLES)\s+\-\-\>\s*\n([\s\S]*)/g;
1195
1242
  var WebVTTCOMMENTCueParser = /^(COMMENT|COMMENTS)\s+\-\-\>\s+(.*)/g;
1243
+ var SRTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})[\.\,](\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})[\.\,](\d+)\s*(.*)/;
1196
1244
 
1197
1245
  return function(subtitleElement,objectCount){
1198
1246
 
1199
- var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id, specialCueData;
1247
+ var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id;
1200
1248
  var timestampMatch, tmpCue;
1201
1249
 
1202
1250
  // WebVTT Special Cue Logic
1203
- if (WebVTTDEFAULTSCueParser.exec(subtitleElement)) {
1204
- // cueDefaults = specialCueData.slice(2).join("");
1205
- // cueDefaults = cueDefaults.split(/\s+/g).filter(function(def) { return def && !!def.length; });
1206
- return null;
1207
- } else if ((specialCueData = WebVTTSTYLECueParser.exec(subtitleElement))) {
1251
+ if (WebVTTDEFAULTSCueParser.exec(subtitleElement) || WebVTTCOMMENTCueParser.exec(subtitleElement) || WebVTTSTYLECueParser.exec(subtitleElement)) {
1208
1252
  return null;
1209
- } else if ((specialCueData = WebVTTCOMMENTCueParser.exec(subtitleElement))) {
1210
- return null; // At this stage, we don't want to do anything with these.
1211
1253
  }
1212
1254
 
1213
1255
  subtitleParts = subtitleElement.split(/\n/g);
@@ -1225,7 +1267,7 @@ modified for webshims
1225
1267
  for (subtitlePartIndex = 0; subtitlePartIndex < subtitleParts.length; subtitlePartIndex ++) {
1226
1268
  var timestamp = subtitleParts[subtitlePartIndex];
1227
1269
 
1228
- if ((timestampMatch = WebVTTTimestampParser.exec(timestamp))) {
1270
+ if ((timestampMatch = WebVTTTimestampParser.exec(timestamp)) || (timestampMatch = SRTTimestampParser.exec(timestamp))) {
1229
1271
 
1230
1272
  // WebVTT
1231
1273
 
@@ -1312,11 +1354,6 @@ modified for webshims
1312
1354
  if(regWevVTT.test(cue)){
1313
1355
  isWEBVTT = true;
1314
1356
  } else if(cue.replace(/\s*/ig,"").length){
1315
- if(!isWEBVTT){
1316
- webshims.error('please use WebVTT format. This is the standard');
1317
- complete(null);
1318
- break;
1319
- }
1320
1357
  cue = mediaelement.parseCaptionChunk(cue, i);
1321
1358
  if(cue){
1322
1359
  track.addCue(cue);