webshims-rails 1.10.3 → 1.10.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +96 -73
  4. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2415 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +248 -745
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +771 -1206
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +679 -1201
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +46 -65
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +45 -64
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +94 -7
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +557 -1189
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +598 -1249
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +697 -1208
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +697 -1208
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +145 -78
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +472 -1280
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +144 -77
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +14 -15
  19. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/23.js +45 -64
  21. data/vendor/assets/javascripts/webshims/shims/combos/24.js +848 -0
  22. data/vendor/assets/javascripts/webshims/shims/combos/25.js +4373 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1516 -0
  24. data/vendor/assets/javascripts/webshims/shims/combos/27.js +884 -0
  25. data/vendor/assets/javascripts/webshims/shims/combos/28.js +2067 -0
  26. data/vendor/assets/javascripts/webshims/shims/combos/29.js +1156 -0
  27. data/vendor/assets/javascripts/webshims/shims/combos/3.js +313 -700
  28. data/vendor/assets/javascripts/webshims/shims/combos/30.js +1868 -0
  29. data/vendor/assets/javascripts/webshims/shims/combos/31.js +1663 -0
  30. data/vendor/assets/javascripts/webshims/shims/combos/4.js +111 -20
  31. data/vendor/assets/javascripts/webshims/shims/combos/5.js +747 -1321
  32. data/vendor/assets/javascripts/webshims/shims/combos/6.js +837 -1809
  33. data/vendor/assets/javascripts/webshims/shims/combos/7.js +435 -1239
  34. data/vendor/assets/javascripts/webshims/shims/combos/8.js +360 -766
  35. data/vendor/assets/javascripts/webshims/shims/combos/9.js +843 -1676
  36. data/vendor/assets/javascripts/webshims/shims/details.js +1 -1
  37. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +90 -3
  38. data/vendor/assets/javascripts/webshims/shims/filereader.js +386 -0
  39. data/vendor/assets/javascripts/webshims/shims/form-core.js +201 -680
  40. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +418 -0
  41. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +69 -467
  42. data/vendor/assets/javascripts/webshims/shims/form-message.js +21 -17
  43. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +19 -82
  44. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +17 -6
  45. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +570 -1185
  46. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +181 -28
  47. data/vendor/assets/javascripts/webshims/shims/form-validation.js +599 -0
  48. data/vendor/assets/javascripts/webshims/{extras/custom-validity.js → shims/form-validators.js} +33 -38
  49. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +865 -0
  50. data/vendor/assets/javascripts/webshims/shims/geolocation.js +2 -2
  51. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.txt +37 -34
  52. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.txt +88 -48
  53. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +74 -0
  54. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +121 -0
  55. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +47 -0
  56. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  59. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Thumbs.db +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +257 -0
  68. data/vendor/assets/javascripts/webshims/shims/json-storage.js +4 -4
  69. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +44 -63
  70. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +10 -11
  71. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +2 -1
  72. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +5 -3
  73. data/vendor/assets/javascripts/webshims/shims/range-ui.js +110 -17
  74. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/styles/range-track.png +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +104 -21
  77. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +90 -16
  78. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
  81. data/vendor/assets/javascripts/webshims/shims/track-ui.js +35 -3
  82. data/vendor/assets/javascripts/webshims/shims/track.js +1 -1
  83. metadata +33 -3
@@ -1,4 +1,4 @@
1
- jQuery.webshims.register('details', function($, webshims, window, doc, undefined, options){
1
+ webshims.register('details', function($, webshims, window, doc, undefined, options){
2
2
  var isInterActiveSummary = function(summary){
3
3
  var details = $(summary).parent('details');
4
4
  if(details[0] && details.children(':first').get(0) === summary){
@@ -1,8 +1,8 @@
1
1
  //DOM-Extension helper
2
- jQuery.webshims.register('dom-extend', function($, webshims, window, document, undefined){
2
+ webshims.register('dom-extend', function($, webshims, window, document, undefined){
3
3
  "use strict";
4
4
 
5
- webshims.assumeARIA = Modernizr.localstorage || Modernizr.video || Modernizr.boxsizing;
5
+ webshims.assumeARIA = $.support.getSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
6
6
 
7
7
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
8
8
  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");
@@ -11,6 +11,57 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
11
11
  if(!$.parseHTML){
12
12
  webshims.error("Webshims needs jQuery 1.8+ to work properly. Please update your jQuery version or downgrade webshims.");
13
13
  }
14
+ if (!webshims.cfg.no$Switch) {
15
+ var switch$ = function(){
16
+ if (window.jQuery && (!window.$ || window.jQuery == window.$) && !window.jQuery.webshims) {
17
+ webshims.error("jQuery was included more than once. Make sure to include it only once! Webshims and other Plugins might not work properly.");
18
+ if (window.$) {
19
+ window.$ = webshims.$;
20
+ }
21
+ window.jQuery = webshims.$;
22
+ }
23
+ if(webshims.M != Modernizr){
24
+ webshims.error("Modernizr was included more than once. Make sure to include it only once! Webshims and other scripts might not work properly.");
25
+ for(var i in Modernizr){
26
+ if(!(i in webshims.M)){
27
+ webshims.M[i] = Modernizr[i];
28
+ }
29
+ }
30
+ Modernizr = webshims.M;
31
+ }
32
+ };
33
+ switch$();
34
+ setTimeout(switch$, 90);
35
+ $(switch$);
36
+ }
37
+ // (function(){
38
+ // var hostNames = {
39
+ // 'afarkas.github.io': 1,
40
+ // localhost: 1,
41
+ // '127.0.0.1': 1
42
+ // };
43
+ //
44
+ // if( webshims.debug && (hostNames[location.hostname] || location.protocol == 'file:') ){
45
+ // var list = $('<ul class="webshims-debug-list" />');
46
+ // webshims.errorLog.push = function(message){
47
+ // list.appendTo('body');
48
+ // $('<li style="display: none;">'+ message +'</li>')
49
+ // .appendTo(list)
50
+ // .slideDown()
51
+ // .delay(3000)
52
+ // .slideUp(function(){
53
+ // $(this).remove();
54
+ // if(!$('li', list).length){
55
+ // list.detach();
56
+ // }
57
+ // })
58
+ // ;
59
+ // };
60
+ // $.each(webshims.errorLog, function(i, message){
61
+ // webshims.errorLog.push(message);
62
+ // });
63
+ // }
64
+ // })();
14
65
 
15
66
  //shortcus
16
67
  var modules = webshims.modules;
@@ -28,6 +79,24 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
28
79
  return (_argless) ? oldVal.call($(elem)) : oldVal.call($(elem), val);
29
80
  };
30
81
 
82
+ //jquery mobile and jquery ui
83
+ if(!$.widget){
84
+ (function(){
85
+ var _cleanData = $.cleanData;
86
+ $.cleanData = function( elems ) {
87
+ if(!$.widget){
88
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
89
+ try {
90
+ $( elem ).triggerHandler( "remove" );
91
+ // http://bugs.jquery.com/ticket/8235
92
+ } catch( e ) {}
93
+ }
94
+ }
95
+ _cleanData( elems );
96
+ };
97
+ })();
98
+ }
99
+
31
100
 
32
101
  $.fn.val = function(val){
33
102
  var elem = this[0];
@@ -61,6 +130,18 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
61
130
  return this.on(evt, fn).each(fn);
62
131
  };
63
132
 
133
+ $.fn.onWSOff = function(evt, fn, trigger, evtDel){
134
+ if(!evtDel){
135
+ evtDel = document;
136
+ }
137
+ $(evtDel)[trigger ? 'onTrigger' : 'on'](evt, fn);
138
+ this.on('remove', function(e){
139
+ if(!e.originalEvent){
140
+ $(evtDel).off(evt, fn);
141
+ }
142
+ });
143
+ };
144
+
64
145
  var dataID = '_webshimsLib'+ (Math.round(Math.random() * 1000));
65
146
  var elementData = function(elem, key, val){
66
147
  elem = elem.jquery ? elem[0] : elem;
@@ -422,7 +503,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
422
503
  implement: function(elem, type){
423
504
  var data = elementData(elem, 'implemented') || elementData(elem, 'implemented', {});
424
505
  if(data[type]){
425
- webshims.info(type +' already implemented for element #'+elem.id);
506
+ webshims.warn(type +' already implemented for element #'+elem.id);
426
507
  return false;
427
508
  }
428
509
  data[type] = true;
@@ -566,6 +647,12 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
566
647
  shadowFocusElementData = $.data(opts.shadowFocusElement, dataID) || $.data(opts.shadowFocusElement, dataID, shadowFocusElementData);
567
648
  }
568
649
 
650
+ $(nativeElem).on('remove', function(e){
651
+ if (!e.originalEvent) {
652
+ $(shadowElem).remove();
653
+ }
654
+ });
655
+
569
656
  nativeData.hasShadow = shadowElem;
570
657
  shadowFocusElementData.nativeElement = shadowData.nativeElement = nativeElem;
571
658
  shadowFocusElementData.shadowData = shadowData.shadowData = nativeData.shadowData = {
@@ -0,0 +1,386 @@
1
+ webshims.register('filereader', function( $, webshims ){
2
+ "use strict";
3
+
4
+ (function(){
5
+ var swfobject = swfmini;
6
+
7
+ var readyCallbacks = $.Callbacks('once unique memory'),
8
+ inputsCount = 0,
9
+ currentTarget = null;
10
+
11
+ // if native FileReader support, then dont add the polyfill and make the plugin do nothing
12
+ if (window.FileReader) {
13
+ $.fn.fileReader = function () { return this; }
14
+ return ;
15
+ }
16
+
17
+ /**
18
+ * JQuery Plugin
19
+ */
20
+ $.fn.fileReader = function( options ) {
21
+ if(this.length){
22
+ options = $.extend($.fn.fileReader.defaults, options);
23
+
24
+ var self = this;
25
+ readyCallbacks.add(function() {
26
+ return main(self, options);
27
+ });
28
+ if ($.isFunction(options.callback)) readyCallbacks.add(options.callback);
29
+
30
+ if (!FileAPIProxy.ready) {
31
+ FileAPIProxy.init(options);
32
+ }
33
+ }
34
+ return this;
35
+ };
36
+
37
+ /**
38
+ * Default options
39
+ * allows user set default options
40
+ */
41
+ $.fn.fileReader.defaults = {
42
+ id : 'fileReaderSWFObject', // ID for the created swf object container,
43
+ multiple : null,
44
+ accept : null,
45
+ label : null,
46
+ extensions : null,
47
+ filereader : 'files/filereader.swf', // The path to the filereader swf file
48
+ expressInstall : null, // The path to the express install swf file
49
+ debugMode : false,
50
+ callback : false // Callback function when Filereader is ready
51
+ };
52
+
53
+ /**
54
+ * Plugin callback
55
+ * adds an input to registry
56
+ */
57
+ var main = function(el, options) {
58
+ return el.each(function(i, input) {
59
+ input = $(input);
60
+ var id = input.attr('id');
61
+ var multiple, accept, label;
62
+ if (!id) {
63
+ id = 'flashFileInput' + inputsCount;
64
+ input.attr('id', id);
65
+ inputsCount++;
66
+ }
67
+ multiple = input.prop('multiple');
68
+ accept = input.data('swfaccept') || input.prop('accept') || options.accept;
69
+ label = input.jProp('labels')
70
+ .map(function(){
71
+ return $(this).text();
72
+ }).get().join(' ') ||
73
+ input.data('swflabel') ||
74
+ options.label;
75
+
76
+ FileAPIProxy.inputs[id] = input;
77
+ FileAPIProxy.swfObject.add(id, multiple, accept, label, options.extensions);
78
+
79
+ input.css('z-index', 0)
80
+ .mouseover(function (e) {
81
+ if (id !== currentTarget) {
82
+ e = e || window.event;
83
+ currentTarget = id;
84
+ FileAPIProxy.swfObject.mouseover(id);
85
+ FileAPIProxy.container
86
+ .height(input.outerHeight())
87
+ .width(input.outerWidth())
88
+ .css(input.offset());
89
+ }
90
+ })
91
+ .click(function(e) {
92
+ e.preventDefault();
93
+ e.stopPropagation();
94
+ e.stopImmediatePropagation();
95
+ return false;
96
+ });
97
+ });
98
+ };
99
+
100
+ /**
101
+ * Flash FileReader Proxy
102
+ */
103
+ window.FileAPIProxy = {
104
+ ready: false,
105
+ _inititalized: false,
106
+ init: function(o) {
107
+ var self = this;
108
+ this.debugMode = o.debugMode;
109
+
110
+ if(!this.container){
111
+ this.container = $('<div>').attr('id', o.id)
112
+ .wrap('<div>')
113
+ .parent()
114
+ .css({
115
+ position:'fixed',
116
+ // top:'0px',
117
+ width:'1px',
118
+ height:'1px',
119
+ display:'inline-block',
120
+ background:'transparent',
121
+ 'z-index':99999
122
+ })
123
+ // Hands over mouse events to original input for css styles
124
+ .on('mouseover mouseout mousedown mouseup', function(evt) {
125
+ if(currentTarget){
126
+ $('#' + currentTarget).trigger(evt.type);
127
+ }
128
+ })
129
+ .appendTo('body');
130
+
131
+ swfobject.embedSWF(o.filereader, o.id, '100%', '100%', '10', o.expressInstall, {debugMode: o.debugMode ? true : ''}, {'wmode':'transparent','allowScriptAccess':'sameDomain'}, {}, function(e) {
132
+ self.swfObject = e.ref;
133
+ $(self.swfObject)
134
+ .css({
135
+ display: 'block',
136
+ outline: 0
137
+ })
138
+ .attr('tabindex', 0);
139
+
140
+ self.ready = e.success && typeof e.ref.add === "function";
141
+
142
+ if (self.ready) {
143
+ readyCallbacks.fire();
144
+ }
145
+ });
146
+ }
147
+ },
148
+ swfObject: null,
149
+ container: null,
150
+ // Inputs Registry
151
+ inputs: {},
152
+ // Readers Registry
153
+ readers: {},
154
+ // Receives FileInput events
155
+ onFileInputEvent: function(evt) {
156
+ if (this.debugMode) console.info('FileInput Event ', evt.type, evt);
157
+ if (evt.target in this.inputs) {
158
+ var el = this.inputs[evt.target];
159
+ evt.target = el[0];
160
+ if( evt.type === 'change') {
161
+ webshims.data(evt.target, 'fileList', new FileList(evt.files));
162
+ }
163
+ el.trigger(evt);
164
+ }
165
+ window.focus();
166
+ },
167
+ // Receives FileReader ProgressEvents
168
+ onFileReaderEvent: function(evt) {
169
+ if (this.debugMode) console.info('FileReader Event ', evt.type, evt, evt.target in this.readers);
170
+ if (evt.target in this.readers) {
171
+ var reader = this.readers[evt.target];
172
+ evt.target = reader;
173
+ reader._handleFlashEvent.call(reader, evt);
174
+ }
175
+ },
176
+ // Receives flash FileReader Error Events
177
+ onFileReaderError: function(error) {
178
+ if (this.debugMode) console.log(error);
179
+ },
180
+ onSWFReady: function() {
181
+ this.container.css({position: 'absolute'});
182
+ this.ready = typeof this.swfObject.add === "function";
183
+ if (this.ready) {
184
+ readyCallbacks.fire();
185
+ }
186
+
187
+ return true;
188
+ }
189
+ };
190
+
191
+
192
+ /**
193
+ * Add FileReader to the window object
194
+ */
195
+ window.FileReader = function () {
196
+ // states
197
+ this.EMPTY = 0;
198
+ this.LOADING = 1;
199
+ this.DONE = 2;
200
+
201
+ this.readyState = 0;
202
+
203
+ // File or Blob data
204
+ this.result = null;
205
+
206
+ this.error = null;
207
+
208
+ // event handler attributes
209
+ this.onloadstart = null;
210
+ this.onprogress = null;
211
+ this.onload = null;
212
+ this.onabort = null;
213
+ this.onerror = null;
214
+ this.onloadend = null;
215
+
216
+ // Event Listeners handling using JQuery Callbacks
217
+ this._callbacks = {
218
+ loadstart : $.Callbacks( "unique" ),
219
+ progress : $.Callbacks( "unique" ),
220
+ abort : $.Callbacks( "unique" ),
221
+ error : $.Callbacks( "unique" ),
222
+ load : $.Callbacks( "unique" ),
223
+ loadend : $.Callbacks( "unique" )
224
+ };
225
+
226
+ // Custom properties
227
+ this._id = null;
228
+ };
229
+
230
+ window.FileReader.prototype = {
231
+ // async read methods
232
+ readAsBinaryString: function (file) {
233
+ this._start(file);
234
+ FileAPIProxy.swfObject.read(file.input, file.name, 'readAsBinaryString');
235
+ },
236
+ readAsText: function (file, encoding) {
237
+ this._start(file);
238
+ FileAPIProxy.swfObject.read(file.input, file.name, 'readAsText');
239
+ },
240
+ readAsDataURL: function (file) {
241
+ this._start(file);
242
+ FileAPIProxy.swfObject.read(file.input, file.name, 'readAsDataURL');
243
+ },
244
+ readAsArrayBuffer: function(file){
245
+ throw("Whoops FileReader.readAsArrayBuffer is unimplemented");
246
+ },
247
+
248
+ abort: function () {
249
+ this.result = null;
250
+ if (this.readyState === this.EMPTY || this.readyState === this.DONE) return;
251
+ FileAPIProxy.swfObject.abort(this._id);
252
+ },
253
+
254
+ // Event Target interface
255
+ addEventListener: function (type, listener) {
256
+ if (type in this._callbacks) this._callbacks[type].add(listener);
257
+ },
258
+ removeEventListener: function (type, listener) {
259
+ if (type in this._callbacks) this._callbacks[type].remove(listener);
260
+ },
261
+ dispatchEvent: function (event) {
262
+ event.target = this;
263
+ if (event.type in this._callbacks) {
264
+ var fn = this['on' + event.type];
265
+ if ($.isFunction(fn)) fn(event);
266
+ this._callbacks[event.type].fire(event);
267
+ }
268
+ return true;
269
+ },
270
+
271
+ // Custom private methods
272
+
273
+ // Registers FileReader instance for flash callbacks
274
+ _register: function(file) {
275
+ this._id = file.input + '.' + file.name;
276
+ FileAPIProxy.readers[this._id] = this;
277
+ },
278
+ _start: function(file) {
279
+ this._register(file);
280
+ if (this.readyState === this.LOADING) throw {type: 'InvalidStateError', code: 11, message: 'The object is in an invalid state.'};
281
+ },
282
+ _handleFlashEvent: function(evt) {
283
+ switch (evt.type) {
284
+ case 'loadstart':
285
+ this.readyState = this.LOADING;
286
+ break;
287
+ case 'loadend':
288
+ this.readyState = this.DONE;
289
+ break;
290
+ case 'load':
291
+ this.readyState = this.DONE;
292
+ this.result = FileAPIProxy.swfObject.result(this._id);
293
+ break;
294
+ case 'error':
295
+ this.result = null;
296
+ this.error = {
297
+ name: 'NotReadableError',
298
+ message: 'The File cannot be read!'
299
+ };
300
+ }
301
+ this.dispatchEvent(new FileReaderEvent(evt));
302
+ }
303
+ };
304
+
305
+ /**
306
+ * FileReader ProgressEvent implenting Event interface
307
+ */
308
+ window.FileReaderEvent = function (e) {
309
+ this.initEvent(e);
310
+ };
311
+
312
+ window.FileReaderEvent.prototype = {
313
+ initEvent: function (event) {
314
+ $.extend(this, {
315
+ type: null,
316
+ target: null,
317
+ currentTarget: null,
318
+
319
+ eventPhase: 2,
320
+
321
+ bubbles: false,
322
+ cancelable: false,
323
+
324
+ defaultPrevented: false,
325
+
326
+ isTrusted: false,
327
+ timeStamp: new Date().getTime()
328
+ }, event);
329
+ },
330
+ stopPropagation: function (){
331
+ },
332
+ stopImmediatePropagation: function (){
333
+ },
334
+ preventDefault: function (){
335
+ }
336
+ };
337
+
338
+ /**
339
+ * FileList interface (Object with item function)
340
+ */
341
+ window.FileList = function(array) {
342
+ if (array) {
343
+ for (var i = 0; i < array.length; i++) {
344
+ this[i] = array[i];
345
+ }
346
+ this.length = array.length;
347
+ } else {
348
+ this.length = 0;
349
+ }
350
+ };
351
+
352
+ window.FileList.prototype = {
353
+ item: function(index) {
354
+ return (index in this) ? this[index] : null;
355
+ }
356
+ };
357
+ })();
358
+
359
+ webshims.defineNodeNameProperty('input', 'files', {
360
+ prop: {
361
+ writeable: false,
362
+ get: function(){
363
+ if(this.type != 'file'){return null;}
364
+ if(!$(this).is('.ws-filereader')){
365
+ webshims.error("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
366
+ }
367
+ return webshims.data(this, 'fileList') || webshims.data(this, 'fileList', new FileList());
368
+ }
369
+ }
370
+ }
371
+ );
372
+
373
+ webshims.defineNodeNamesBooleanProperty('input', 'multiple');
374
+
375
+ //webshims
376
+ $.fn.fileReader.defaults.filereader = webshims.cfg.basePath +'swf/filereader.swf';
377
+ var wait = ['DOM'];
378
+ if(webshims.modules["form-core"].loaded){
379
+ wait.push('forms');
380
+ }
381
+ webshims.ready(wait, function(){
382
+ webshims.addReady(function(context, contextElem){
383
+ $('input[type="file"].ws-filereader', context).fileReader();
384
+ });
385
+ });
386
+ });