webshims-rails 1.13.0 → 1.14.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) 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 +45 -26
  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 +0 -0
  17. data/vendor/assets/javascripts/webshims/shims/combos/1.js +33 -2
  18. data/vendor/assets/javascripts/webshims/shims/combos/10.js +82 -29
  19. data/vendor/assets/javascripts/webshims/shims/combos/11.js +50 -27
  20. data/vendor/assets/javascripts/webshims/shims/combos/12.js +0 -0
  21. data/vendor/assets/javascripts/webshims/shims/combos/13.js +0 -0
  22. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1 -1
  23. data/vendor/assets/javascripts/webshims/shims/combos/15.js +115 -43
  24. data/vendor/assets/javascripts/webshims/shims/combos/16.js +115 -43
  25. data/vendor/assets/javascripts/webshims/shims/combos/17.js +50 -27
  26. data/vendor/assets/javascripts/webshims/shims/combos/18.js +50 -27
  27. data/vendor/assets/javascripts/webshims/shims/combos/19.js +33 -3
  28. data/vendor/assets/javascripts/webshims/shims/combos/2.js +65 -4
  29. data/vendor/assets/javascripts/webshims/shims/combos/20.js +33 -3
  30. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1 -1
  31. data/vendor/assets/javascripts/webshims/shims/combos/22.js +0 -0
  32. data/vendor/assets/javascripts/webshims/shims/combos/23.js +0 -0
  33. data/vendor/assets/javascripts/webshims/shims/combos/25.js +492 -2580
  34. data/vendor/assets/javascripts/webshims/shims/combos/26.js +8314 -1432
  35. data/vendor/assets/javascripts/webshims/shims/combos/27.js +1642 -556
  36. data/vendor/assets/javascripts/webshims/shims/combos/28.js +50 -39
  37. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -0
  38. data/vendor/assets/javascripts/webshims/shims/combos/3.js +66 -5
  39. data/vendor/assets/javascripts/webshims/shims/combos/30.js +66 -5
  40. data/vendor/assets/javascripts/webshims/shims/combos/31.js +65 -4
  41. data/vendor/assets/javascripts/webshims/shims/combos/32.js +0 -0
  42. data/vendor/assets/javascripts/webshims/shims/combos/33.js +0 -0
  43. data/vendor/assets/javascripts/webshims/shims/combos/34.js +32 -2
  44. data/vendor/assets/javascripts/webshims/shims/combos/4.js +33 -3
  45. data/vendor/assets/javascripts/webshims/shims/combos/5.js +50 -27
  46. data/vendor/assets/javascripts/webshims/shims/combos/6.js +50 -27
  47. data/vendor/assets/javascripts/webshims/shims/combos/7.js +66 -5
  48. data/vendor/assets/javascripts/webshims/shims/combos/8.js +66 -5
  49. data/vendor/assets/javascripts/webshims/shims/combos/9.js +82 -29
  50. data/vendor/assets/javascripts/webshims/shims/combos/97.js +0 -0
  51. data/vendor/assets/javascripts/webshims/shims/combos/98.js +1 -2
  52. data/vendor/assets/javascripts/webshims/shims/combos/99.js +1 -2
  53. data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +1 -0
  54. data/vendor/assets/javascripts/webshims/shims/details.js +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +32 -2
  56. data/vendor/assets/javascripts/webshims/shims/es5.js +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/excanvas.js +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/filereader.js +441 -362
  59. data/vendor/assets/javascripts/webshims/shims/form-combat.js +19 -7
  60. data/vendor/assets/javascripts/webshims/shims/form-core.js +33 -2
  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 +1 -1
  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 +50 -27
  68. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +49 -38
  69. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +45 -14
  70. data/vendor/assets/javascripts/webshims/shims/form-validation.js +105 -7
  71. data/vendor/assets/javascripts/webshims/shims/form-validators.js +212 -134
  72. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +15 -12
  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-fr.js +0 -0
  82. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +0 -0
  83. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +0 -0
  84. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +0 -0
  85. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +0 -0
  86. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +0 -0
  87. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +0 -0
  88. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +0 -0
  89. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +0 -0
  90. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-BR.js +0 -0
  91. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +0 -0
  92. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt.js +0 -0
  93. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +0 -0
  94. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +0 -0
  95. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-CN.js +0 -0
  96. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -0
  97. data/vendor/assets/javascripts/webshims/shims/jme/b.js +0 -0
  98. data/vendor/assets/javascripts/webshims/shims/jme/c.js +1 -2
  99. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +0 -0
  100. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +0 -0
  101. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +3 -3
  102. data/vendor/assets/javascripts/webshims/shims/jme/p.js +0 -0
  103. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +0 -0
  104. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +0 -0
  105. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  106. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  107. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  108. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  109. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  110. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  111. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  112. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  113. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  114. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  115. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +0 -0
  116. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +0 -0
  117. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +1 -1
  118. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +0 -0
  119. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +1 -1
  120. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.cdn.swf +0 -0
  121. data/vendor/assets/javascripts/webshims/shims/moxie/js/moxie.js +7994 -0
  122. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  123. data/vendor/assets/javascripts/webshims/shims/picture.js +50 -43
  124. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +0 -0
  125. data/vendor/assets/javascripts/webshims/shims/promise.js +0 -0
  126. data/vendor/assets/javascripts/webshims/shims/range-ui.js +0 -0
  127. data/vendor/assets/javascripts/webshims/shims/sizzle.js +0 -0
  128. data/vendor/assets/javascripts/webshims/shims/styles/color-picker.png +0 -0
  129. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +0 -0
  130. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +7 -2
  131. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +0 -0
  132. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  133. data/vendor/assets/javascripts/webshims/shims/styles/progress.png +0 -0
  134. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +219 -0
  135. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +115 -0
  136. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +31 -0
  137. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +583 -0
  138. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +488 -0
  139. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +2 -0
  140. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +736 -0
  141. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +105 -21
  142. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +91 -19
  143. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  144. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
  145. data/vendor/assets/javascripts/webshims/shims/swfmini-embed.js +0 -0
  146. data/vendor/assets/javascripts/webshims/shims/swfmini.js +0 -0
  147. data/vendor/assets/javascripts/webshims/shims/track-ui.js +1 -1
  148. data/vendor/assets/javascripts/webshims/shims/track.js +0 -0
  149. metadata +13 -2
@@ -544,6 +544,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
544
544
  playerSize();
545
545
  webshims.ready('dom-support', function(){
546
546
  data.player.onWSOff('updateshadowdom', playerSize);
547
+ controls.add(data._controlbar).addClass(webshims.shadowClass);
547
548
  webshims.addShadowDom();
548
549
  });
549
550
  }
@@ -551,8 +552,6 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
551
552
  } else if(!value) {
552
553
  controlBar.detach();
553
554
  }
554
- controlBar = null;
555
- controls = null;
556
555
  return value;
557
556
  }
558
557
  });
@@ -544,6 +544,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
544
544
  playerSize();
545
545
  webshims.ready('dom-support', function(){
546
546
  data.player.onWSOff('updateshadowdom', playerSize);
547
+ controls.add(data._controlbar).addClass(webshims.shadowClass);
547
548
  webshims.addShadowDom();
548
549
  });
549
550
  }
@@ -551,8 +552,6 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
551
552
  } else if(!value) {
552
553
  controlBar.detach();
553
554
  }
554
- controlBar = null;
555
- controls = null;
556
555
  return value;
557
556
  }
558
557
  });
@@ -0,0 +1 @@
1
+ {"version":"1.14.1","features":{"swfmini":[16,7,2,8,1,12,19,23],"dom-support":[16,7,2,8,19,20,15,30,3,4,9,10,25,31,34],"forms":[16,7,2,8,1,32,15,30,3,4,9,31,6,5,14,29,28,27,33],"mediaelement":[16,7,2,8,1,12,19,23,20,25,21,13],"track":[12,34,21,22,13],"es5":[19,18,20,32],"forms-ext":[18,32,9,10,6,5,14,29,28,17,33,11],"range-ui":[18,9,10,6,5,17,11],"filereader":[25,27,26],"geolocation":[21],"details":[21,22],"moxie":[26],"jme":[98,99,97],"mediacontrols":[98,99],"playlist":[98,97]},"files":{"src/shims/combos/16.js":["src/shims/swfmini.js","src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-shim-extend.js","src/shims/form-message.js","src/shims/form-datalist.js","src/shims/mediaelement-core.js"],"src/shims/combos/7.js":["src/shims/swfmini.js","src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-message.js","src/shims/form-datalist.js","src/shims/mediaelement-core.js"],"src/shims/combos/2.js":["src/shims/swfmini.js","src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-datalist.js","src/shims/mediaelement-core.js"],"src/shims/combos/8.js":["src/shims/swfmini.js","src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-message.js","src/shims/mediaelement-core.js"],"src/shims/combos/1.js":["src/shims/swfmini.js","src/shims/form-core.js","src/shims/mediaelement-core.js"],"src/shims/combos/12.js":["src/shims/swfmini.js","src/shims/mediaelement-core.js","src/shims/track.js"],"src/shims/combos/19.js":["src/shims/swfmini.js","src/shims/es5.js","src/shims/dom-extend.js","src/shims/mediaelement-core.js","src/shims/mediaelement-jaris.js"],"src/shims/combos/23.js":["src/shims/swfmini.js","src/shims/mediaelement-core.js"],"src/shims/combos/18.js":["src/shims/es5.js","src/shims/form-number-date-api.js","src/shims/range-ui.js","src/shims/form-number-date-ui.js"],"src/shims/combos/20.js":["src/shims/es5.js","src/shims/dom-extend.js","src/shims/mediaelement-core.js","src/shims/mediaelement-jaris.js"],"src/shims/combos/32.js":["src/shims/es5.js","src/shims/form-number-date-api.js","src/shims/form-datalist.js"],"src/shims/combos/15.js":["src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-shim-extend.js","src/shims/form-message.js","src/shims/form-datalist.js"],"src/shims/combos/30.js":["src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-message.js","src/shims/form-datalist.js"],"src/shims/combos/3.js":["src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-message.js"],"src/shims/combos/4.js":["src/shims/dom-extend.js","src/shims/form-message.js"],"src/shims/combos/9.js":["src/shims/dom-extend.js","src/shims/range-ui.js","src/shims/form-number-date-ui.js","src/shims/form-datalist.js"],"src/shims/combos/10.js":["src/shims/dom-extend.js","src/shims/range-ui.js","src/shims/form-number-date-ui.js"],"src/shims/combos/25.js":["src/shims/dom-extend.js","src/shims/filereader.js","src/shims/mediaelement-jaris.js"],"src/shims/combos/31.js":["src/shims/dom-extend.js","src/shims/form-core.js","src/shims/form-datalist.js"],"src/shims/combos/34.js":["src/shims/dom-extend.js","src/shims/track.js"],"src/shims/combos/21.js":["src/shims/geolocation.js","src/shims/details.js","src/shims/mediaelement-jaris.js","src/shims/track.js"],"src/shims/combos/6.js":["src/shims/form-native-extend.js","src/shims/form-number-date-api.js","src/shims/range-ui.js","src/shims/form-number-date-ui.js","src/shims/form-datalist.js"],"src/shims/combos/5.js":["src/shims/form-native-extend.js","src/shims/form-number-date-api.js","src/shims/range-ui.js","src/shims/form-number-date-ui.js"],"src/shims/combos/14.js":["src/shims/form-native-extend.js","src/shims/form-message.js","src/shims/form-number-date-api.js"],"src/shims/combos/29.js":["src/shims/form-native-extend.js","src/shims/form-number-date-api.js"],"src/shims/combos/28.js":["src/shims/form-shim-extend.js","src/shims/form-message.js","src/shims/form-number-date-api.js","src/shims/form-datalist.js"],"src/shims/combos/27.js":["src/shims/form-shim-extend2.js","src/shims/filereader.js"],"src/shims/combos/17.js":["src/shims/form-number-date-api.js","src/shims/range-ui.js","src/shims/form-number-date-ui.js"],"src/shims/combos/33.js":["src/shims/form-number-date-api.js","src/shims/form-datalist.js"],"src/shims/combos/11.js":["src/shims/range-ui.js","src/shims/form-number-date-ui.js"],"src/shims/combos/26.js":["src/shims/moxie/js/moxie.js","src/shims/filereader.js"],"src/shims/combos/22.js":["src/shims/details.js","src/shims/track.js"],"src/shims/combos/13.js":["src/shims/mediaelement-core.js","src/shims/track.js"],"src/shims/combos/98.js":["src/shims/jme/b.js","src/shims/jme/c.js","src/shims/jme/p.js"],"src/shims/combos/99.js":["src/shims/jme/b.js","src/shims/jme/c.js"],"src/shims/combos/97.js":["src/shims/jme/b.js","src/shims/jme/p.js"]}}
File without changes
@@ -179,8 +179,8 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
179
179
  });
180
180
  return this;
181
181
  };
182
-
183
- var dataID = '_webshimsLib'+ (Math.round(Math.random() * 1000));
182
+ var idCount = 0;
183
+ var dataID = '_webshims'+ (Math.round(Math.random() * 1000));
184
184
  var elementData = function(elem, key, val){
185
185
  elem = elem.jquery ? elem[0] : elem;
186
186
  if(!elem){return val || {};}
@@ -211,6 +211,35 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
211
211
  return this.pushStack(elems);
212
212
  };
213
213
  });
214
+
215
+ function clone(elem, dataAndEvents, uniqueIds){
216
+ var cloned = $.clone( elem, dataAndEvents, false );
217
+ $(cloned.querySelectorAll('.'+webshims.shadowClass)).detach();
218
+ if(uniqueIds){
219
+ idCount++;
220
+ $(cloned.querySelectorAll('[id]')).prop('id', function(i, id){
221
+ return id +idCount;
222
+ });
223
+ } else {
224
+ $(cloned.querySelectorAll('audio[id^="ID-"], video[id^="ID-"], label[id^="ID-"]')).removeAttr('id');
225
+ }
226
+ return cloned;
227
+ }
228
+
229
+ $.fn.clonePolyfill = function(dataAndEvents, uniqueIds){
230
+ dataAndEvents = dataAndEvents || false;
231
+ return this
232
+ .map(function() {
233
+ var cloned = clone( this, dataAndEvents, uniqueIds );
234
+ setTimeout(function(){
235
+ if($.contains(document.body, cloned)){
236
+ $(cloned).updatePolyfill();
237
+ }
238
+ });
239
+ return cloned;
240
+ })
241
+ ;
242
+ };
214
243
 
215
244
  //add support for $('video').trigger('play') in case extendNative is set to false
216
245
  if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
@@ -522,6 +551,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
522
551
  return id;
523
552
  };
524
553
  })(),
554
+ shadowClass: 'wsshadow-'+(Date.now()),
525
555
  implement: function(elem, type){
526
556
  var data = elementData(elem, 'implemented') || elementData(elem, 'implemented', {});
527
557
  if(data[type]){
File without changes
File without changes
@@ -1,389 +1,468 @@
1
- webshims.register('filereader', function( $, webshims ){
1
+ webshim.register('filereader', function($, webshim, window, document, undefined, featureOptions){
2
2
  "use strict";
3
- /**
4
- * Code is based on https://github.com/Jahdrien/FileReader
5
- *
6
- */
7
- (function(){
8
- var swfobject = window.swfmini || window.swfobject;
9
-
10
- var readyCallbacks = $.Callbacks('once unique memory'),
11
- inputsCount = 0,
12
- currentTarget = null;
13
-
14
- // if native FileReader support, then dont add the polyfill and make the plugin do nothing
15
- if (window.FileReader) {
16
- $.fn.fileReader = function () { return this; }
17
- return ;
18
- }
19
-
20
- /**
21
- * JQuery Plugin
22
- */
23
- $.fn.fileReader = function( options ) {
24
- if(this.length){
25
- options = $.extend($.fn.fileReader.defaults, options);
26
-
27
- var self = this;
28
- readyCallbacks.add(function() {
29
- return main(self, options);
30
- });
31
- if ($.isFunction(options.callback)) readyCallbacks.add(options.callback);
32
-
33
- if (!FileAPIProxy.ready) {
34
- FileAPIProxy.init(options);
3
+ var mOxie, moxie, hasXDomain;
4
+ var FormData = $.noop;
5
+ var sel = 'input[type="file"].ws-filereader';
6
+ var loadMoxie = function (){
7
+ webshim.loader.loadList(['moxie']);
8
+ };
9
+ var _createFilePicker = function(){
10
+ var $input, picker, $parent, onReset;
11
+ var input = this;
12
+
13
+ if(webshim.implement(input, 'filepicker')){
14
+
15
+ input = this;
16
+ $input = $(this);
17
+ $parent = $input.parent();
18
+ onReset = function(){
19
+ if(!input.value){
20
+ $input.prop('value', '');
35
21
  }
22
+ };
23
+
24
+ $input.attr('tabindex', '-1').on('mousedown.filereaderwaiting click.filereaderwaiting', false);
25
+ $parent.addClass('ws-loading');
26
+ picker = new mOxie.FileInput({
27
+ browse_button: this,
28
+ accept: $.prop(this, 'accept'),
29
+ multiple: $.prop(this, 'multiple')
30
+ });
31
+
32
+ $input.jProp('form').on('reset', function(){
33
+ setTimeout(onReset);
34
+ });
35
+ picker.onready = function(){
36
+ $input.off('.fileraderwaiting');
37
+ $parent.removeClass('ws-waiting');
38
+ };
39
+
40
+ picker.onchange = function(e){
41
+ webshim.data(input, 'fileList', e.target.files);
42
+ $input.trigger('change');
43
+ };
44
+ picker.onmouseenter = function(){
45
+ $input.trigger('mouseover');
46
+ $parent.addClass('ws-mouseenter');
47
+ };
48
+ picker.onmouseleave = function(){
49
+ $input.trigger('mouseout');
50
+ $parent.removeClass('ws-mouseenter');
51
+ };
52
+ picker.onmousedown = function(){
53
+ $input.trigger('mousedown');
54
+ $parent.addClass('ws-active');
55
+ };
56
+ picker.onmouseup = function(){
57
+ $input.trigger('mouseup');
58
+ $parent.removeClass('ws-active');
59
+ };
60
+
61
+ webshim.data(input, 'filePicker', picker);
62
+
63
+ webshim.ready('WINDOWLOAD', function(){
64
+ var lastWidth;
65
+ $input.onWSOff('updateshadowdom', function(){
66
+ var curWitdth = input.offsetWidth;
67
+ if(curWitdth && lastWidth != curWitdth){
68
+ lastWidth = curWitdth;
69
+ picker.refresh();
70
+ }
71
+ });
72
+ });
73
+
74
+ webshim.addShadowDom();
75
+
76
+ picker.init();
77
+ if(input.disabled){
78
+ picker.disable(true);
36
79
  }
37
- return this;
38
- };
39
-
40
- /**
41
- * Default options
42
- * allows user set default options
43
- */
44
- $.fn.fileReader.defaults = {
45
- id : 'fileReaderSWFObject', // ID for the created swf object container,
46
- multiple : null,
47
- accept : null,
48
- label : null,
49
- extensions : null,
50
- filereader : 'files/filereader.swf', // The path to the filereader swf file
51
- expressInstall : null, // The path to the express install swf file
52
- debugMode : false,
53
- callback : false // Callback function when Filereader is ready
54
- };
55
-
56
- /**
57
- * Plugin callback
58
- * adds an input to registry
59
- */
60
- var main = function(el, options) {
61
- return el.each(function(i, input) {
62
- input = $(input);
63
- var id = input.attr('id');
64
- var multiple, accept, label;
65
- if (!id) {
66
- id = 'flashFileInput' + inputsCount;
67
- input.attr('id', id);
68
- inputsCount++;
80
+ }
81
+ };
82
+ var getFileNames = function(file){
83
+ return file.name;
84
+ };
85
+ var createFilePicker = function(){
86
+ var elem = this;
87
+ loadMoxie();
88
+ $(elem)
89
+ .on('mousedown.filereaderwaiting click.filereaderwaiting', false)
90
+ .parent()
91
+ .addClass('ws-loading')
92
+ ;
93
+ webshim.ready('moxie', function(){
94
+ createFilePicker.call(elem);
95
+ });
96
+ };
97
+ var noxhr = /^(?:script|jsonp)$/i;
98
+ var notReadyYet = function(){
99
+ loadMoxie();
100
+ webshim.error('filereader/formdata not ready yet. please wait for moxie to load `webshim.ready("moxie", callbackFn);`` or wait for the first change event on input[type="file"].ws-filereader.')
101
+ };
102
+ var inputValueDesc = webshim.defineNodeNameProperty('input', 'value', {
103
+ prop: {
104
+ get: function(){
105
+ var fileList = webshim.data(this, 'fileList');
106
+
107
+ if(fileList && fileList.map){
108
+ return fileList.map(getFileNames).join(', ');
109
+ }
110
+
111
+ return inputValueDesc.prop._supget.call(this);
112
+ },
113
+ set: function(val){
114
+ if(val === '' && this.type == 'file' && $(this).hasClass('ws-filereader')){
115
+ webshim.data(this, 'fileList', []);
116
+ }
117
+ inputValueDesc.prop._supset.call(this);
69
118
  }
70
- multiple = input.prop('multiple');
71
- accept = input.data('swfaccept') || input.prop('accept') || options.accept;
72
- label = input.jProp('labels')
73
- .map(function(){
74
- return $(this).text();
75
- }).get().join(' ') ||
76
- input.data('swflabel') ||
77
- options.label;
78
-
79
- FileAPIProxy.inputs[id] = input;
80
- FileAPIProxy.swfObject.add(id, multiple, accept, label, options.extensions);
81
-
82
- input.css('z-index', 0)
83
- .mouseover(function (e) {
84
- if (id !== currentTarget) {
85
- e = e || window.event;
86
- currentTarget = id;
87
- FileAPIProxy.swfObject.mouseover(id);
88
- FileAPIProxy.container
89
- .height(input.outerHeight())
90
- .width(input.outerWidth())
91
- .css(input.offset());
119
+ }
120
+ }
121
+ );
122
+ var shimMoxiePath = webshim.cfg.basePath+'moxie/';
123
+ 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"';
124
+ var testMoxie = function(options){
125
+ return (options.wsType == 'moxie' || (options.data && options.data instanceof mOxie.FormData) || (options.crossDomain && $.support.cors !== false && hasXDomain != 'no' && !noxhr.test(options.dataType || '')));
126
+ };
127
+ var createMoxieTransport = function (options){
128
+
129
+ if(testMoxie(options)){
130
+ var ajax;
131
+ webshim.info('moxie transfer used for $.ajax');
132
+ if(hasXDomain == 'no'){
133
+ webshim.error(crossXMLMessage);
134
+ }
135
+ return {
136
+ send: function( headers, completeCallback ) {
137
+
138
+ var proressEvent = function(obj, name){
139
+ if(options[name]){
140
+ var called = false;
141
+ ajax.addEventListener('load', function(e){
142
+ if(!called){
143
+ options[name]({type: 'progress', lengthComputable: true, total: 1, loaded: 1});
144
+ } else if(called.lengthComputable && called.total > called.loaded){
145
+ options[name]({type: 'progress', lengthComputable: true, total: called.total, loaded: called.total});
146
+ }
147
+ });
148
+ obj.addEventListener('progress', function(e){
149
+ called = e;
150
+ options[name](e);
151
+ });
92
152
  }
93
- })
94
- .click(function(e) {
95
- e.preventDefault();
96
- e.stopPropagation();
97
- e.stopImmediatePropagation();
98
- return false;
153
+ };
154
+ ajax = new moxie.xhr.XMLHttpRequest();
155
+
156
+ ajax.open(options.type, options.url, options.async, options.username, options.password);
157
+
158
+ proressEvent(ajax.upload, featureOptions.uploadprogress);
159
+ proressEvent(ajax.upload, featureOptions.progress);
160
+
161
+ ajax.addEventListener('load', function(e){
162
+ var responses = {
163
+ text: ajax.responseText,
164
+ xml: ajax.responseXML
165
+ };
166
+ completeCallback(ajax.status, ajax.statusText, responses, ajax.getAllResponseHeaders());
99
167
  });
100
- });
101
- };
102
-
103
- /**
104
- * Flash FileReader Proxy
105
- */
106
- window.FileAPIProxy = {
107
- ready: false,
108
- _inititalized: false,
109
- init: function(o) {
110
- var self = this;
111
- this.debugMode = o.debugMode;
112
-
113
- if(!this.container){
114
- this.container = $('<div>').attr('id', o.id)
115
- .wrap('<div>')
116
- .parent()
117
- .css({
118
- position:'fixed',
119
- // top:'0px',
120
- width:'1px',
121
- height:'1px',
122
- display:'inline-block',
123
- background:'transparent',
124
- 'z-index':99999
125
- })
126
- // Hands over mouse events to original input for css styles
127
- .on('mouseover mouseout mousedown mouseup', function(evt) {
128
- if(currentTarget){
129
- $('#' + currentTarget).trigger(evt.type);
130
- }
131
- })
132
- .appendTo('body');
133
-
134
- swfobject.embedSWF(o.filereader, o.id, '100%', '100%', '10', o.expressInstall, {debugMode: o.debugMode ? true : ''}, {'wmode':'transparent','allowScriptAccess':'sameDomain'}, {}, function(e) {
135
- self.swfObject = e.ref;
136
- $(self.swfObject)
137
- .css({
138
- display: 'block',
139
- outline: 0
140
- })
141
- .attr('tabindex', 0);
142
-
143
- self.ready = e.success && typeof e.ref.add === "function";
144
-
145
- if (self.ready) {
146
- readyCallbacks.fire();
147
- }
168
+
169
+ if(options.xhrFields && options.xhrFields.withCredentials){
170
+ ajax.withCredentials = true;
171
+ }
172
+
173
+ if(options.timeout){
174
+ ajax.timeout = options.timeout;
175
+ }
176
+
177
+ $.each(headers, function(name, value){
178
+ ajax.setRequestHeader(name, value);
148
179
  });
149
- }
150
- },
151
- swfObject: null,
152
- container: null,
153
- // Inputs Registry
154
- inputs: {},
155
- // Readers Registry
156
- readers: {},
157
- // Receives FileInput events
158
- onFileInputEvent: function(evt) {
159
- if (this.debugMode) console.info('FileInput Event ', evt.type, evt);
160
- if (evt.target in this.inputs) {
161
- var el = this.inputs[evt.target];
162
- evt.target = el[0];
163
- if( evt.type === 'change') {
164
- webshims.data(evt.target, 'fileList', new FileList(evt.files));
180
+
181
+
182
+ ajax.send(options.data);
183
+
184
+ },
185
+ abort: function() {
186
+ if(ajax){
187
+ ajax.abort();
165
188
  }
166
- el.trigger(evt);
167
189
  }
168
- window.focus();
169
- },
170
- // Receives FileReader ProgressEvents
171
- onFileReaderEvent: function(evt) {
172
- if (this.debugMode) console.info('FileReader Event ', evt.type, evt, evt.target in this.readers);
173
- if (evt.target in this.readers) {
174
- var reader = this.readers[evt.target];
175
- evt.target = reader;
176
- reader._handleFlashEvent.call(reader, evt);
177
- }
178
- },
179
- // Receives flash FileReader Error Events
180
- onFileReaderError: function(error) {
181
- if (this.debugMode) console.log(error);
182
- },
183
- onSWFReady: function() {
184
- this.container.css({position: 'absolute'});
185
- this.ready = typeof this.swfObject.add === "function";
186
- if (this.ready) {
187
- readyCallbacks.fire();
188
- }
189
-
190
- return true;
191
- }
192
- };
193
-
194
-
195
- /**
196
- * Add FileReader to the window object
197
- */
198
- window.FileReader = function () {
199
- // states
200
- this.EMPTY = 0;
201
- this.LOADING = 1;
202
- this.DONE = 2;
203
-
204
- this.readyState = 0;
205
-
206
- // File or Blob data
207
- this.result = null;
208
-
209
- this.error = null;
210
-
211
- // event handler attributes
212
- this.onloadstart = null;
213
- this.onprogress = null;
214
- this.onload = null;
215
- this.onabort = null;
216
- this.onerror = null;
217
- this.onloadend = null;
218
-
219
- // Event Listeners handling using JQuery Callbacks
220
- this._callbacks = {
221
- loadstart : $.Callbacks( "unique" ),
222
- progress : $.Callbacks( "unique" ),
223
- abort : $.Callbacks( "unique" ),
224
- error : $.Callbacks( "unique" ),
225
- load : $.Callbacks( "unique" ),
226
- loadend : $.Callbacks( "unique" )
227
190
  };
228
-
229
- // Custom properties
230
- this._id = null;
231
- };
232
-
233
- window.FileReader.prototype = {
234
- // async read methods
235
- readAsBinaryString: function (file) {
236
- this._start(file);
237
- FileAPIProxy.swfObject.read(file.input, file.name, 'readAsBinaryString');
238
- },
239
- readAsText: function (file, encoding) {
240
- this._start(file);
241
- FileAPIProxy.swfObject.read(file.input, file.name, 'readAsText');
242
- },
243
- readAsDataURL: function (file) {
244
- this._start(file);
245
- FileAPIProxy.swfObject.read(file.input, file.name, 'readAsDataURL');
246
- },
247
- readAsArrayBuffer: function(file){
248
- throw("Whoops FileReader.readAsArrayBuffer is unimplemented");
249
- },
250
-
251
- abort: function () {
252
- this.result = null;
253
- if (this.readyState === this.EMPTY || this.readyState === this.DONE) return;
254
- FileAPIProxy.swfObject.abort(this._id);
255
- },
256
-
257
- // Event Target interface
258
- addEventListener: function (type, listener) {
259
- if (type in this._callbacks) this._callbacks[type].add(listener);
260
- },
261
- removeEventListener: function (type, listener) {
262
- if (type in this._callbacks) this._callbacks[type].remove(listener);
263
- },
264
- dispatchEvent: function (event) {
265
- event.target = this;
266
- if (event.type in this._callbacks) {
267
- var fn = this['on' + event.type];
268
- if ($.isFunction(fn)) fn(event);
269
- this._callbacks[event.type].fire(event);
191
+ }
192
+ };
193
+ var transports = {
194
+ //based on script: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
195
+ xdomain: (function(){
196
+ var httpRegEx = /^https?:\/\//i;
197
+ var getOrPostRegEx = /^get|post$/i;
198
+ var sameSchemeRegEx = new RegExp('^'+location.protocol, 'i');
199
+ return function(options, userOptions, jqXHR) {
200
+
201
+ // Only continue if the request is: asynchronous, uses GET or POST method, has HTTP or HTTPS protocol, and has the same scheme as the calling page
202
+ if (!options.crossDomain || options.username || (options.xhrFields && options.xhrFields.withCredentials) || !options.async || !getOrPostRegEx.test(options.type) || !httpRegEx.test(options.url) || !sameSchemeRegEx.test(options.url) || (options.data && options.data instanceof mOxie.FormData) || noxhr.test(options.dataType || '')) {
203
+ return;
270
204
  }
271
- return true;
272
- },
273
-
274
- // Custom private methods
275
-
276
- // Registers FileReader instance for flash callbacks
277
- _register: function(file) {
278
- this._id = file.input + '.' + file.name;
279
- FileAPIProxy.readers[this._id] = this;
280
- },
281
- _start: function(file) {
282
- this._register(file);
283
- if (this.readyState === this.LOADING) throw {type: 'InvalidStateError', code: 11, message: 'The object is in an invalid state.'};
284
- },
285
- _handleFlashEvent: function(evt) {
286
- switch (evt.type) {
287
- case 'loadstart':
288
- this.readyState = this.LOADING;
289
- break;
290
- case 'loadend':
291
- this.readyState = this.DONE;
292
- break;
293
- case 'load':
294
- this.readyState = this.DONE;
295
- this.result = FileAPIProxy.swfObject.result(this._id);
296
- break;
297
- case 'error':
298
- this.result = null;
299
- this.error = {
300
- name: 'NotReadableError',
301
- message: 'The File cannot be read!'
205
+
206
+ var xdr = null;
207
+ webshim.info('xdomain transport used.');
208
+
209
+ return {
210
+ send: function(headers, complete) {
211
+ var postData = '';
212
+ var userType = (userOptions.dataType || '').toLowerCase();
213
+
214
+ xdr = new XDomainRequest();
215
+ if (/^\d+$/.test(userOptions.timeout)) {
216
+ xdr.timeout = userOptions.timeout;
217
+ }
218
+
219
+ xdr.ontimeout = function() {
220
+ complete(500, 'timeout');
302
221
  };
303
- }
304
- this.dispatchEvent(new FileReaderEvent(evt));
305
- }
306
- };
307
-
308
- /**
309
- * FileReader ProgressEvent implenting Event interface
310
- */
311
- window.FileReaderEvent = function (e) {
312
- this.initEvent(e);
313
- };
314
-
315
- window.FileReaderEvent.prototype = {
316
- initEvent: function (event) {
317
- $.extend(this, {
318
- type: null,
319
- target: null,
320
- currentTarget: null,
321
-
322
- eventPhase: 2,
323
-
324
- bubbles: false,
325
- cancelable: false,
326
-
327
- defaultPrevented: false,
328
-
329
- isTrusted: false,
330
- timeStamp: new Date().getTime()
331
- }, event);
332
- },
333
- stopPropagation: function (){
334
- },
335
- stopImmediatePropagation: function (){
336
- },
337
- preventDefault: function (){
338
- }
339
- };
340
-
341
- /**
342
- * FileList interface (Object with item function)
343
- */
344
- window.FileList = function(array) {
345
- if (array) {
346
- for (var i = 0; i < array.length; i++) {
347
- this[i] = array[i];
348
- }
349
- this.length = array.length;
350
- } else {
351
- this.length = 0;
222
+
223
+ xdr.onload = function() {
224
+ var allResponseHeaders = 'Content-Length: ' + xdr.responseText.length + '\r\nContent-Type: ' + xdr.contentType;
225
+ var status = {
226
+ code: xdr.status || 200,
227
+ message: xdr.statusText || 'OK'
228
+ };
229
+ var responses = {
230
+ text: xdr.responseText,
231
+ xml: xdr.responseXML
232
+ };
233
+ try {
234
+ if (userType === 'html' || /text\/html/i.test(xdr.contentType)) {
235
+ responses.html = xdr.responseText;
236
+ } else if (userType === 'json' || (userType !== 'text' && /\/json/i.test(xdr.contentType))) {
237
+ try {
238
+ responses.json = $.parseJSON(xdr.responseText);
239
+ } catch(e) {
240
+
241
+ }
242
+ } else if (userType === 'xml' && !xdr.responseXML) {
243
+ var doc;
244
+ try {
245
+ doc = new ActiveXObject('Microsoft.XMLDOM');
246
+ doc.async = false;
247
+ doc.loadXML(xdr.responseText);
248
+ } catch(e) {
249
+
250
+ }
251
+
252
+ responses.xml = doc;
253
+ }
254
+ } catch(parseMessage) {}
255
+ complete(status.code, status.message, responses, allResponseHeaders);
256
+ };
257
+
258
+ // set an empty handler for 'onprogress' so requests don't get aborted
259
+ xdr.onprogress = function(){};
260
+ xdr.onerror = function() {
261
+ complete(500, 'error', {
262
+ text: xdr.responseText
263
+ });
264
+ };
265
+
266
+ if (userOptions.data) {
267
+ postData = ($.type(userOptions.data) === 'string') ? userOptions.data : $.param(userOptions.data);
268
+ }
269
+ xdr.open(options.type, options.url);
270
+ xdr.send(postData);
271
+ },
272
+ abort: function() {
273
+ if (xdr) {
274
+ xdr.abort();
275
+ }
276
+ }
277
+ };
278
+ };
279
+ })(),
280
+ moxie: function (options, originalOptions, jqXHR){
281
+ if(testMoxie(options)){
282
+ loadMoxie(options);
283
+ var ajax;
284
+
285
+ var tmpTransport = {
286
+ send: function( headers, completeCallback ) {
287
+ ajax = true;
288
+ webshim.ready('moxie', function(){
289
+ if(ajax){
290
+ ajax = createMoxieTransport(options, originalOptions, jqXHR);
291
+ tmpTransport.send = ajax.send;
292
+ tmpTransport.abort = ajax.abort;
293
+ ajax.send(headers, completeCallback);
294
+ }
295
+ });
296
+ },
297
+ abort: function() {
298
+ ajax = false;
299
+ }
300
+ };
301
+ return tmpTransport;
352
302
  }
353
- };
354
-
355
- window.FileList.prototype = {
356
- item: function(index) {
357
- return (index in this) ? this[index] : null;
303
+ }
304
+ };
305
+
306
+ if(!featureOptions.progress){
307
+ featureOptions.progress = 'onprogress';
308
+ }
309
+
310
+ if(!featureOptions.uploadprogress){
311
+ featureOptions.uploadprogress = 'onuploadprogress';
312
+ }
313
+
314
+ if(!featureOptions.swfpath){
315
+ featureOptions.swfpath = shimMoxiePath+'flash/Moxie.cdn.swf';
316
+ }
317
+ if(!featureOptions.xappath){
318
+ featureOptions.xappath = shimMoxiePath+'silverlight/Moxie.cdn.xap';
319
+ }
320
+
321
+ if($.support.cors !== false || !window.XDomainRequest){
322
+ delete transports.xdomain;
323
+ }
324
+
325
+
326
+ $.ajaxTransport("+*", function( options, originalOptions, jqXHR ) {
327
+ var ajax, type;
328
+
329
+ if(options.wsType || transports[transports]){
330
+ ajax = transports[transports](options, originalOptions, jqXHR);
331
+ }
332
+ if(!ajax){
333
+ for(type in transports){
334
+ ajax = transports[type](options, originalOptions, jqXHR);
335
+ if(ajax){break;}
358
336
  }
359
- };
360
- })();
361
-
362
- webshims.defineNodeNameProperty('input', 'files', {
337
+ }
338
+ return ajax;
339
+ });
340
+
341
+ webshim.defineNodeNameProperty('input', 'files', {
363
342
  prop: {
364
343
  writeable: false,
365
344
  get: function(){
366
345
  if(this.type != 'file'){return null;}
367
346
  if(!$(this).is('.ws-filereader')){
368
- webshims.error("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
347
+ webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
369
348
  }
370
- return webshims.data(this, 'fileList') || webshims.data(this, 'fileList', new FileList());
349
+ return webshim.data(this, 'fileList') || [];
371
350
  }
372
351
  }
373
352
  }
374
353
  );
375
-
376
- webshims.defineNodeNamesBooleanProperty('input', 'multiple');
377
-
378
- //webshims
379
- $.fn.fileReader.defaults.filereader = webshims.cfg.basePath +'swf/filereader.swf';
380
- var wait = ['DOM'];
381
- if(webshims.modules["form-core"].loaded){
382
- wait.push('forms');
354
+
355
+ webshim.reflectProperties(['input'], ['accept']);
356
+
357
+ if($('<input />').prop('multiple') == null){
358
+ webshim.defineNodeNamesBooleanProperty(['input'], ['multiple']);
383
359
  }
384
- webshims.ready(wait, function(){
385
- webshims.addReady(function(context, contextElem){
386
- $('input[type="file"].ws-filereader', context).fileReader();
387
- });
360
+
361
+ webshim.onNodeNamesPropertyModify('input', 'disabled', function(value, boolVal, type){
362
+ var picker = webshim.data(this, 'filePicker');
363
+ if(picker){
364
+ picker.disable(boolVal);
365
+ }
366
+ });
367
+
368
+ window.FileReader = notReadyYet;
369
+ window.FormData = notReadyYet;
370
+ webshim.ready('moxie', function(){
371
+ var wsMimes = 'application/xml,xml';
372
+ moxie = window.moxie;
373
+ mOxie = window.mOxie;
374
+
375
+ mOxie.Env.swf_url = featureOptions.swfpath;
376
+ mOxie.Env.xap_url = featureOptions.xappath;
377
+
378
+ window.FileReader = mOxie.FileReader;
379
+
380
+ window.FormData = function(form){
381
+ var appendData, i, len, files, fileI, fileLen, inputName;
382
+ var moxieData = new mOxie.FormData();
383
+ if(form && $.nodeName(form, 'form')){
384
+ appendData = $(form).serializeArray();
385
+ for(i = 0; i < appendData.length; i++){
386
+ if(Array.isArray(appendData[i].value)){
387
+ appendData[i].value.forEach(function(val){
388
+ moxieData.append(appendData[i].name, val);
389
+ });
390
+ } else {
391
+ moxieData.append(appendData[i].name, appendData[i].value);
392
+ }
393
+ }
394
+
395
+ appendData = form.querySelectorAll('input[type="file"][name]');
396
+
397
+ for(i = 0, len = appendData.length; i < appendData.length; i++){
398
+ inputName = appendData[i].name;
399
+ if(inputName && !$(appendData[i]).is(':disabled')){
400
+ files = $.prop(appendData[i], 'files') || [];
401
+ if(files.length){
402
+ if(files.length > 1){
403
+ webshim.error('FormData shim can only handle one file per ajax. Use multiple ajax request. One per file.');
404
+ }
405
+ for(fileI = 0, fileLen = files.length; fileI < fileLen; fileI++){
406
+ moxieData.append(inputName, files[fileI]);
407
+ }
408
+ }
409
+ }
410
+ }
411
+ }
412
+
413
+ return moxieData;
414
+ };
415
+ FormData = window.FormData;
416
+
417
+ createFilePicker = _createFilePicker;
418
+ transports.moxie = createMoxieTransport;
419
+
420
+ featureOptions.mimeTypes = (featureOptions.mimeTypes) ? wsMimes+','+featureOptions.mimeTypes : wsMimes;
421
+ try {
422
+ mOxie.Mime.addMimeType(featureOptions.mimeTypes);
423
+ } catch(e){
424
+ webshim.warn('mimetype to moxie error: '+e);
425
+ }
426
+
427
+ });
428
+
429
+ webshim.addReady(function(context, contextElem){
430
+ $(context.querySelectorAll(sel)).add(contextElem.filter(sel)).each(createFilePicker);
388
431
  });
432
+ webshim.ready('WINDOWLOAD', loadMoxie);
433
+
434
+ if(webshim.cfg.debug !== false && featureOptions.swfpath.indexOf((location.protocol+'//'+location.hostname)) && featureOptions.swfpath.indexOf(('https://'+location.hostname))){
435
+ webshim.ready('WINDOWLOAD', function(){
436
+
437
+ var printMessage = function(){
438
+ if(hasXDomain == 'no'){
439
+ webshim.error(crossXMLMessage);
440
+ }
441
+ };
442
+
443
+ try {
444
+ hasXDomain = sessionStorage.getItem('wsXdomain.xml');
445
+ } catch(e){}
446
+ printMessage();
447
+ if(hasXDomain == null){
448
+ $.ajax({
449
+ url: 'crossdomain.xml',
450
+ type: 'HEAD',
451
+ dataType: 'xml',
452
+ success: function(){
453
+ hasXDomain = 'yes';
454
+ },
455
+ error: function(){
456
+ hasXDomain = 'no';
457
+ },
458
+ complete: function(){
459
+ try {
460
+ sessionStorage.setItem('wsXdomain.xml', hasXDomain);
461
+ } catch(e){}
462
+ printMessage();
463
+ }
464
+ });
465
+ }
466
+ });
467
+ }
389
468
  });