webshims-rails 1.14.6 → 1.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +145 -139
  4. data/vendor/assets/javascripts/webshims/shims/canvas-blob.js +97 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +13 -15
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +29 -28
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2 -1
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +22 -10
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +22 -10
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +28 -43
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +41 -44
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2 -1
  13. data/vendor/assets/javascripts/webshims/shims/combos/2.js +40 -42
  14. data/vendor/assets/javascripts/webshims/shims/combos/21.js +98 -71
  15. data/vendor/assets/javascripts/webshims/shims/combos/22.js +9 -9
  16. data/vendor/assets/javascripts/webshims/shims/combos/23.js +13 -1
  17. data/vendor/assets/javascripts/webshims/shims/combos/25.js +141 -51
  18. data/vendor/assets/javascripts/webshims/shims/combos/27.js +66 -12
  19. data/vendor/assets/javascripts/webshims/shims/combos/28.js +1 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/3.js +27 -41
  21. data/vendor/assets/javascripts/webshims/shims/combos/30.js +27 -41
  22. data/vendor/assets/javascripts/webshims/shims/combos/31.js +27 -41
  23. data/vendor/assets/javascripts/webshims/shims/combos/34.js +36 -36
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +27 -27
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +2 -1
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +2 -1
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +40 -42
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +40 -42
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +29 -28
  30. data/vendor/assets/javascripts/webshims/shims/combos/98.js +4 -2
  31. data/vendor/assets/javascripts/webshims/shims/combos/99.js +4 -2
  32. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +27 -27
  33. data/vendor/assets/javascripts/webshims/shims/es6.js +23 -29
  34. data/vendor/assets/javascripts/webshims/shims/{filereader.js → filereader-xhr.js} +66 -12
  35. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -14
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2 -1
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1 -2
  38. data/vendor/assets/javascripts/webshims/shims/form-validation.js +18 -5
  39. data/vendor/assets/javascripts/webshims/shims/form-validators.js +15 -14
  40. data/vendor/assets/javascripts/webshims/shims/geolocation.js +41 -50
  41. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +4 -4
  42. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +2 -1
  43. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols.js +4 -2
  44. data/vendor/assets/javascripts/webshims/shims/mediacapture-picker.js +42 -0
  45. data/vendor/assets/javascripts/webshims/shims/mediacapture.js +159 -0
  46. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +13 -1
  47. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +48 -12
  48. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +20 -8
  49. data/vendor/assets/javascripts/webshims/shims/{combos/26.js → moxie/js/moxie-html4.js} +2121 -1257
  50. data/vendor/assets/javascripts/webshims/shims/moxie/js/{moxie.js → moxie-swf.js} +1125 -1741
  51. data/vendor/assets/javascripts/webshims/shims/sticky.js +585 -0
  52. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +20 -0
  53. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +23 -0
  54. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +74 -34
  55. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +78 -31
  56. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +78 -31
  57. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/track-ui.js +214 -111
  59. data/vendor/assets/javascripts/webshims/shims/track.js +9 -9
  60. data/vendor/assets/javascripts/webshims/shims/usermedia-core.js +27 -0
  61. data/vendor/assets/javascripts/webshims/shims/usermedia-shim.js +34 -37
  62. metadata +9 -8
  63. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -1262
  64. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
@@ -214,8 +214,12 @@ webshims.register('details', function($, webshims, window, doc, undefined, optio
214
214
  var lastCue = this.cues[this.cues.length-1];
215
215
  if(lastCue && lastCue.startTime > cue.startTime){
216
216
  webshims.error("cue startTime higher than previous cue's startTime");
217
+ return;
217
218
  }
218
219
  }
220
+ if(cue.startTime >= cue.endTime ){
221
+ webshim.error('startTime >= endTime of cue: '+ cue.text);
222
+ }
219
223
  if(cue.track && cue.track.removeCue){
220
224
  cue.track.removeCue(cue);
221
225
  }
@@ -307,6 +311,7 @@ webshims.register('details', function($, webshims, window, doc, undefined, optio
307
311
  for(i = 0, len = added.length; i < len; i++){
308
312
  $([trackList]).triggerHandler($.Event({type: 'addtrack', track: added[i]}));
309
313
  }
314
+ //todo: remove
310
315
  if(baseData.scriptedTextTracks || removed.length){
311
316
  $(this).triggerHandler('updatetrackdisplay');
312
317
  }
@@ -323,7 +328,7 @@ webshims.register('details', function($, webshims, window, doc, undefined, optio
323
328
  setTimeout(function(){
324
329
  $(track).closest('audio, video').triggerHandler('updatetrackdisplay');
325
330
  trackData.isTriggering = false;
326
- }, 1);
331
+ }, 9);
327
332
  }
328
333
  };
329
334
  var isDefaultTrack = (function(){
@@ -516,15 +521,10 @@ webshims.register('details', function($, webshims, window, doc, undefined, optio
516
521
  error: error
517
522
  });
518
523
  };
519
- if($.ajax && $.ajaxSettings.xhr){
520
- if(isDisabled){
521
- setTimeout(createAjax, loadingTracks * 2);
522
- } else {
523
- createAjax();
524
- }
524
+ if(isDisabled){
525
+ setTimeout(createAjax, loadingTracks * 2);
525
526
  } else {
526
- webshims.ready('jajax', createAjax);
527
- webshims.loader.loadList(['jajax']);
527
+ createAjax();
528
528
  }
529
529
  } catch(er){
530
530
  error();
@@ -281,9 +281,16 @@ webshims.isReady('swfmini', true);
281
281
  })();
282
282
  }
283
283
 
284
+ if(window.CanvasRenderingContext2D && CanvasRenderingContext2D.prototype){
285
+ CanvasRenderingContext2D.prototype.wsImageComplete = function(cb){
286
+ cb.call(this, this);
287
+ };
288
+ }
289
+
284
290
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
285
291
  var hasSwf = swfmini.hasFlashPlayerVersion('11.3');
286
292
  var mediaelement = webshims.mediaelement;
293
+ var allowYtLoading = false;
287
294
 
288
295
  mediaelement.parseRtmp = function(data){
289
296
  var src = data.src.split('://');
@@ -379,7 +386,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
379
386
  return function(){
380
387
  if(loaded || !hasYt){return;}
381
388
  loaded = true;
382
- webshims.loader.loadScript("https://www.youtube.com/player_api");
389
+ if(allowYtLoading){
390
+ webshims.loader.loadScript("https://www.youtube.com/player_api");
391
+ }
383
392
  $(function(){
384
393
  webshims._polyfill(["mediaelement-yt"]);
385
394
  });
@@ -565,6 +574,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
565
574
  }
566
575
  });
567
576
  if(!requested && hasYt && !mediaelement.createSWF){
577
+ allowYtLoading = true;
568
578
  loadYt();
569
579
  }
570
580
  };
@@ -729,6 +739,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
729
739
  .add(insertedElement.filter('video, audio'))
730
740
  .each(function(){
731
741
  if(!mediaelement.canNativePlaySrces(this)){
742
+ allowYtLoading = true;
732
743
  loadThird();
733
744
  handleMedia = true;
734
745
  return false;
@@ -751,6 +762,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
751
762
  mediaelement.loadDebugger();
752
763
  });
753
764
  }
765
+
754
766
  //set native implementation ready, before swf api is retested
755
767
  if(hasNative){
756
768
  webshims.isReady('mediaelement-core', true);
@@ -64,11 +64,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
64
64
  webshims.assumeARIA = true;
65
65
 
66
66
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
67
- webshims.error("IE browser modes are busted in IE10+. Please test your HTML/CSS/JS with a real IE version or at least IETester or similiar tools");
68
- }
69
-
70
- if('debug' in webshims){
71
- webshims.error('Use webshims.setOptions("debug", true||false||"noCombo"); to debug flag');
67
+ webshims.error("IE browser modes are busted in IE10+. Make sure to run IE in edge mode (X-UA-Compatible). Please test your HTML/CSS/JS with a real IE version or at least IETester or similar tools. ");
72
68
  }
73
69
 
74
70
  if (!webshims.cfg.no$Switch) {
@@ -681,33 +677,37 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
681
677
  }
682
678
  },
683
679
  handler: (function(){
680
+ var evt;
684
681
  var trigger = function(){
685
- $(document).triggerHandler('updateshadowdom');
682
+ $(document).triggerHandler('updateshadowdom', [evt]);
686
683
  };
687
- return function(e){
688
- clearTimeout(resizeTimer);
689
- resizeTimer = setTimeout(function(){
690
- if(e.type == 'resize'){
691
- var width = $window.width();
692
- var height = $window.width();
684
+ var timed = function(){
685
+ if(evt && evt.type == 'resize'){
686
+ var width = $window.width();
687
+ var height = $window.width();
693
688
 
694
- if(height == lastHeight && width == lastWidth){
695
- return;
696
- }
697
- lastHeight = height;
698
- lastWidth = width;
699
-
700
- docObserve.height = docObserve.getHeight();
701
- docObserve.width = docObserve.getWidth();
689
+ if(height == lastHeight && width == lastWidth){
690
+ return;
702
691
  }
692
+ lastHeight = height;
693
+ lastWidth = width;
694
+ }
703
695
 
704
- if(window.requestAnimationFrame){
705
- requestAnimationFrame(trigger);
706
- } else {
707
- setTimeout(trigger, 0);
708
- }
709
-
710
- }, (e.type == 'resize' && !window.requestAnimationFrame) ? 50 : 9);
696
+ if(evt && evt.type != 'docresize'){
697
+ docObserve.height = docObserve.getHeight();
698
+ docObserve.width = docObserve.getWidth();
699
+ }
700
+
701
+ if(window.requestAnimationFrame){
702
+ requestAnimationFrame(trigger);
703
+ } else {
704
+ setTimeout(trigger, 0);
705
+ }
706
+ };
707
+ return function(e){
708
+ clearTimeout(resizeTimer);
709
+ evt = e;
710
+ resizeTimer = setTimeout(timed, (e.type == 'resize' && !window.requestAnimationFrame) ? 50 : 9);
711
711
  };
712
712
  })(),
713
713
  _create: function(){
@@ -1229,11 +1229,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1229
1229
 
1230
1230
  })();
1231
1231
  });
1232
- ;webshim.register('filereader', function($, webshim, window, document, undefined, featureOptions){
1232
+ ;webshim.register('filereader-xhr', function($, webshim, window, document, undefined, featureOptions){
1233
1233
  "use strict";
1234
1234
  var mOxie, moxie, hasXDomain;
1235
- var FormData = $.noop;
1236
- var sel = 'input[type="file"].ws-filereader';
1235
+ var sel = 'input[type="file"].ws-filereader, input[type="file"].ws-capture';
1236
+ var hasFlash = swfmini.hasFlashPlayerVersion('10.3');
1237
1237
  var loadMoxie = function (){
1238
1238
  webshim.loader.loadList(['moxie']);
1239
1239
  };
@@ -1345,7 +1345,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1345
1345
  }
1346
1346
  );
1347
1347
  var shimMoxiePath = webshim.cfg.basePath+'moxie/';
1348
- var crossXMLMessage = 'You nedd a crossdomain.xml to get all "filereader" / "XHR2" / "CORS" features to work. Or host moxie.swf/moxie.xap on your server an configure filereader options: "swfpath"/"xappath"';
1348
+ var crossXMLMessage = 'You nedd a crossdomain.xml to get all "filereader" / "XHR2" / "CORS" features to work. Or host moxie.swf on your server an configure filereader options: "swfpath"';
1349
1349
  var testMoxie = function(options){
1350
1350
  return (options.wsType == 'moxie' || (options.data && options.data instanceof mOxie.FormData) || (options.crossDomain && $.support.cors !== false && hasXDomain != 'no' && !noxhr.test(options.dataType || '')));
1351
1351
  };
@@ -1528,6 +1528,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1528
1528
  }
1529
1529
  };
1530
1530
 
1531
+ webshim.loader.addModule('moxie', {
1532
+ src: 'moxie/js/moxie-'+ (hasFlash ? 'swf' : 'html4')
1533
+ });
1534
+
1531
1535
  if(!featureOptions.progress){
1532
1536
  featureOptions.progress = 'onprogress';
1533
1537
  }
@@ -1539,9 +1543,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1539
1543
  if(!featureOptions.swfpath){
1540
1544
  featureOptions.swfpath = shimMoxiePath+'flash/Moxie.min.swf';
1541
1545
  }
1542
- if(!featureOptions.xappath){
1543
- featureOptions.xappath = shimMoxiePath+'silverlight/Moxie.min.xap';
1544
- }
1545
1546
 
1546
1547
  if($.support.cors !== false || !window.XDomainRequest){
1547
1548
  delete transports.xdomain;
@@ -1568,8 +1569,8 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1568
1569
  writeable: false,
1569
1570
  get: function(){
1570
1571
  if(this.type != 'file'){return null;}
1571
- if(!$(this).hasClass('ws-filereader')){
1572
- webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
1572
+ if(!$(this).is('.ws-filereader, .ws-capture')){
1573
+ webshim.info("please add the 'ws-filereader'/'ws-capture' class to your input[type='file'] to implement files-property");
1573
1574
  }
1574
1575
  return webshim.data(this, 'fileList') || [];
1575
1576
  }
@@ -1591,11 +1592,66 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1591
1592
  });
1592
1593
 
1593
1594
  webshim.onNodeNamesPropertyModify('input', 'value', function(value, boolVal, type){
1594
- if(value === '' && this.type == 'file' && $(this).hasClass('ws-filereader')){
1595
+ if(value === '' && this.type == 'file' && $(this).is('.ws-filereader, .ws-capture')){
1595
1596
  webshim.data(this, 'fileList', []);
1596
1597
  }
1597
1598
  });
1598
1599
 
1600
+ if(!document.createElement('canvas').toBlob){
1601
+
1602
+ webshim.defineNodeNameProperty('canvas', 'toBlob', {
1603
+ prop: {
1604
+ value: function(cb, type, qualitiy){
1605
+ var dataURL;
1606
+ var $canvas = $(this);
1607
+ if(!type){
1608
+ type = 'image/jpeg';
1609
+ }
1610
+ if(type == 'image/jpeg' && !qualitiy){
1611
+ qualitiy = 0.8;
1612
+ }
1613
+ loadMoxie();
1614
+ setTimeout(function(){
1615
+ dataURL = $canvas.callProp('getAsDataURL', [type, qualitiy]);
1616
+ webshim.ready('moxie', function(){
1617
+ var img = new mOxie.Image();
1618
+
1619
+ img.onload = function() {
1620
+ var blob = img.getAsBlob();
1621
+ webshim.defineProperty(blob, '_wsDataURL', {
1622
+ value: dataURL,
1623
+ enumerable: false
1624
+ });
1625
+ cb(blob);
1626
+ };
1627
+ img.load(dataURL);
1628
+ });
1629
+ }, 9);
1630
+ }
1631
+ }
1632
+ });
1633
+
1634
+ webshim.ready('url', function(){
1635
+ var _nativeCreateObjectURL = URL.createObjectURL;
1636
+ var _nativeRevokeObjectURL = URL.revokeObjectURL;
1637
+
1638
+ URL.createObjectURL = function(obj){
1639
+ var url = obj;
1640
+ if(obj._wsimgDataURL) {
1641
+ url = obj._wsimgDataURL;
1642
+ } else if(_nativeCreateObjectURL){
1643
+ return _nativeCreateObjectURL.apply(this, arguments);
1644
+ }
1645
+ return url;
1646
+ };
1647
+
1648
+ URL.revokeObjectURL = function(url){
1649
+ if (_nativeRevokeObjectURL){
1650
+ return _nativeRevokeObjectURL.apply(this, arguments);
1651
+ }
1652
+ };
1653
+ });
1654
+ }
1599
1655
 
1600
1656
  window.FileReader = notReadyYet;
1601
1657
  window.FormData = notReadyYet;
@@ -1605,7 +1661,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1605
1661
  mOxie = window.mOxie;
1606
1662
 
1607
1663
  mOxie.Env.swf_url = featureOptions.swfpath;
1608
- mOxie.Env.xap_url = featureOptions.xappath;
1609
1664
 
1610
1665
  window.FileReader = mOxie.FileReader;
1611
1666
 
@@ -1644,7 +1699,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1644
1699
 
1645
1700
  return moxieData;
1646
1701
  };
1647
- FormData = window.FormData;
1648
1702
 
1649
1703
  createFilePicker = _createFilePicker;
1650
1704
  transports.moxie = createMoxieTransport;
@@ -1829,12 +1883,13 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1829
1883
  };
1830
1884
 
1831
1885
 
1832
- mediaelement.jarisEvent = {};
1886
+ mediaelement.jarisEvent = mediaelement.jarisEvent || {};
1833
1887
  var localConnectionTimer;
1834
1888
  var onEvent = {
1835
1889
  onPlayPause: function(jaris, data, override){
1836
1890
  var playing, type;
1837
1891
  var idled = data.paused || data.ended;
1892
+
1838
1893
  if(override == null){
1839
1894
  try {
1840
1895
  playing = data.api.api_get("isPlaying");
@@ -1848,12 +1903,15 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1848
1903
  type = data.paused ? 'pause' : 'play';
1849
1904
  data._ppFlag = true;
1850
1905
  trigger(data._elem, type);
1906
+
1907
+ }
1908
+ if(!data.paused || playing == idled || playing == null){
1851
1909
  if(data.readyState < 3){
1852
1910
  setReadyState(3, data);
1853
1911
  }
1854
- if(!data.paused){
1855
- trigger(data._elem, 'playing');
1856
- }
1912
+ }
1913
+ if(!data.paused){
1914
+ trigger(data._elem, 'playing');
1857
1915
  }
1858
1916
  },
1859
1917
  onSeek: function(jaris, data){
@@ -2605,11 +2663,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2605
2663
  options.changeSWF(vars, elem, canPlaySrc, data, 'embed');
2606
2664
  clearTimeout(data.flashBlock);
2607
2665
 
2608
- swfmini.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.115", false, vars, params, attrs, function(swfData){
2666
+ swfmini.embedSWF(playerSwfPath, elemId, "100%", "100%", "11.3", false, vars, params, attrs, function(swfData){
2609
2667
  if(swfData.success){
2610
2668
  var fBlocker = function(){
2611
- if((!swfData.ref.parentNode && box[0].parentNode) || swfData.ref.style.display == "none"){
2612
- box.addClass('flashblocker-assumed');
2669
+ if((!swfData.ref.parentNode) || swfData.ref.style.display == "none"){
2670
+
2613
2671
  $(elem).trigger('flashblocker');
2614
2672
  webshims.warn("flashblocker assumed");
2615
2673
  }
@@ -2843,8 +2901,19 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2843
2901
  webshim.error('canvas.drawImage feature is needed. In IE8 flashvanvas pro can be used');
2844
2902
  }
2845
2903
 
2904
+ CanvasRenderingContext2D.prototype.wsImageComplete = function(cb){
2905
+ if(this._wsIsLoading){
2906
+ if(!this._wsLoadingCbs){
2907
+ this._wsLoadingCbs = [];
2908
+ }
2909
+ this._wsLoadingCbs.push(cb);
2910
+ } else {
2911
+ cb.call(this, this);
2912
+ }
2913
+ };
2914
+
2846
2915
  CanvasRenderingContext2D.prototype.drawImage = function(elem){
2847
- var data, img, args, imgData;
2916
+ var data, img, args, imgData, hadCachedImg;
2848
2917
  var context = this;
2849
2918
 
2850
2919
  if(isVideo[elem.nodeName] && (data = webshims.data(elem, 'mediaelement')) && data.isActive == 'third' && data.api.api_image){
@@ -2862,18 +2931,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2862
2931
  }
2863
2932
 
2864
2933
  args = slice.call(arguments, 1);
2865
- img = new Image();
2934
+
2935
+ if(options.canvasSync && data.canvasImg){
2936
+ args.unshift(data.canvasImg);
2937
+ _drawImage.apply(context, args);
2938
+ args = slice.call(arguments, 1);
2939
+ hadCachedImg = true;
2940
+ }
2941
+
2942
+ img = document.createElement('img');
2866
2943
 
2867
2944
  //todo find a performant sync way
2868
2945
  img.onload = function(){
2869
2946
  args.unshift(this);
2870
- _drawImage.apply(context, args);
2871
2947
  img.onload = null;
2948
+
2949
+ if(options.canvasSync){
2950
+ data.canvasImg = img;
2951
+ if(hadCachedImg && options.noDoubbleDraw){
2952
+ return;
2953
+ }
2954
+ }
2955
+ _drawImage.apply(context, args);
2956
+ context._wsIsLoading = false;
2957
+ if(context._wsLoadingCbs && context._wsLoadingCbs.length){
2958
+ while(context._wsLoadingCbs.length){
2959
+ context._wsLoadingCbs.shift().call(context, context);
2960
+ }
2961
+ }
2872
2962
  };
2873
2963
 
2874
2964
  img.src = 'data:image/jpeg;base64,'+imgData;
2875
-
2876
- if(img.complete){
2965
+ this._wsIsLoading = true;
2966
+ if(img.complete && img.onload){
2877
2967
  img.onload();
2878
2968
  }
2879
2969
  return;
@@ -1250,11 +1250,11 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1250
1250
 
1251
1251
 
1252
1252
  });
1253
- ;webshim.register('filereader', function($, webshim, window, document, undefined, featureOptions){
1253
+ ;webshim.register('filereader-xhr', function($, webshim, window, document, undefined, featureOptions){
1254
1254
  "use strict";
1255
1255
  var mOxie, moxie, hasXDomain;
1256
- var FormData = $.noop;
1257
- var sel = 'input[type="file"].ws-filereader';
1256
+ var sel = 'input[type="file"].ws-filereader, input[type="file"].ws-capture';
1257
+ var hasFlash = swfmini.hasFlashPlayerVersion('10.3');
1258
1258
  var loadMoxie = function (){
1259
1259
  webshim.loader.loadList(['moxie']);
1260
1260
  };
@@ -1366,7 +1366,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1366
1366
  }
1367
1367
  );
1368
1368
  var shimMoxiePath = webshim.cfg.basePath+'moxie/';
1369
- var crossXMLMessage = 'You nedd a crossdomain.xml to get all "filereader" / "XHR2" / "CORS" features to work. Or host moxie.swf/moxie.xap on your server an configure filereader options: "swfpath"/"xappath"';
1369
+ var crossXMLMessage = 'You nedd a crossdomain.xml to get all "filereader" / "XHR2" / "CORS" features to work. Or host moxie.swf on your server an configure filereader options: "swfpath"';
1370
1370
  var testMoxie = function(options){
1371
1371
  return (options.wsType == 'moxie' || (options.data && options.data instanceof mOxie.FormData) || (options.crossDomain && $.support.cors !== false && hasXDomain != 'no' && !noxhr.test(options.dataType || '')));
1372
1372
  };
@@ -1549,6 +1549,10 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1549
1549
  }
1550
1550
  };
1551
1551
 
1552
+ webshim.loader.addModule('moxie', {
1553
+ src: 'moxie/js/moxie-'+ (hasFlash ? 'swf' : 'html4')
1554
+ });
1555
+
1552
1556
  if(!featureOptions.progress){
1553
1557
  featureOptions.progress = 'onprogress';
1554
1558
  }
@@ -1560,9 +1564,6 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1560
1564
  if(!featureOptions.swfpath){
1561
1565
  featureOptions.swfpath = shimMoxiePath+'flash/Moxie.min.swf';
1562
1566
  }
1563
- if(!featureOptions.xappath){
1564
- featureOptions.xappath = shimMoxiePath+'silverlight/Moxie.min.xap';
1565
- }
1566
1567
 
1567
1568
  if($.support.cors !== false || !window.XDomainRequest){
1568
1569
  delete transports.xdomain;
@@ -1589,8 +1590,8 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1589
1590
  writeable: false,
1590
1591
  get: function(){
1591
1592
  if(this.type != 'file'){return null;}
1592
- if(!$(this).hasClass('ws-filereader')){
1593
- webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
1593
+ if(!$(this).is('.ws-filereader, .ws-capture')){
1594
+ webshim.info("please add the 'ws-filereader'/'ws-capture' class to your input[type='file'] to implement files-property");
1594
1595
  }
1595
1596
  return webshim.data(this, 'fileList') || [];
1596
1597
  }
@@ -1612,11 +1613,66 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1612
1613
  });
1613
1614
 
1614
1615
  webshim.onNodeNamesPropertyModify('input', 'value', function(value, boolVal, type){
1615
- if(value === '' && this.type == 'file' && $(this).hasClass('ws-filereader')){
1616
+ if(value === '' && this.type == 'file' && $(this).is('.ws-filereader, .ws-capture')){
1616
1617
  webshim.data(this, 'fileList', []);
1617
1618
  }
1618
1619
  });
1619
1620
 
1621
+ if(!document.createElement('canvas').toBlob){
1622
+
1623
+ webshim.defineNodeNameProperty('canvas', 'toBlob', {
1624
+ prop: {
1625
+ value: function(cb, type, qualitiy){
1626
+ var dataURL;
1627
+ var $canvas = $(this);
1628
+ if(!type){
1629
+ type = 'image/jpeg';
1630
+ }
1631
+ if(type == 'image/jpeg' && !qualitiy){
1632
+ qualitiy = 0.8;
1633
+ }
1634
+ loadMoxie();
1635
+ setTimeout(function(){
1636
+ dataURL = $canvas.callProp('getAsDataURL', [type, qualitiy]);
1637
+ webshim.ready('moxie', function(){
1638
+ var img = new mOxie.Image();
1639
+
1640
+ img.onload = function() {
1641
+ var blob = img.getAsBlob();
1642
+ webshim.defineProperty(blob, '_wsDataURL', {
1643
+ value: dataURL,
1644
+ enumerable: false
1645
+ });
1646
+ cb(blob);
1647
+ };
1648
+ img.load(dataURL);
1649
+ });
1650
+ }, 9);
1651
+ }
1652
+ }
1653
+ });
1654
+
1655
+ webshim.ready('url', function(){
1656
+ var _nativeCreateObjectURL = URL.createObjectURL;
1657
+ var _nativeRevokeObjectURL = URL.revokeObjectURL;
1658
+
1659
+ URL.createObjectURL = function(obj){
1660
+ var url = obj;
1661
+ if(obj._wsimgDataURL) {
1662
+ url = obj._wsimgDataURL;
1663
+ } else if(_nativeCreateObjectURL){
1664
+ return _nativeCreateObjectURL.apply(this, arguments);
1665
+ }
1666
+ return url;
1667
+ };
1668
+
1669
+ URL.revokeObjectURL = function(url){
1670
+ if (_nativeRevokeObjectURL){
1671
+ return _nativeRevokeObjectURL.apply(this, arguments);
1672
+ }
1673
+ };
1674
+ });
1675
+ }
1620
1676
 
1621
1677
  window.FileReader = notReadyYet;
1622
1678
  window.FormData = notReadyYet;
@@ -1626,7 +1682,6 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1626
1682
  mOxie = window.mOxie;
1627
1683
 
1628
1684
  mOxie.Env.swf_url = featureOptions.swfpath;
1629
- mOxie.Env.xap_url = featureOptions.xappath;
1630
1685
 
1631
1686
  window.FileReader = mOxie.FileReader;
1632
1687
 
@@ -1665,7 +1720,6 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
1665
1720
 
1666
1721
  return moxieData;
1667
1722
  };
1668
- FormData = window.FormData;
1669
1723
 
1670
1724
  createFilePicker = _createFilePicker;
1671
1725
  transports.moxie = createMoxieTransport;