rich_table_component 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/README.md +156 -139
  2. data/app/helpers/component_helper.rb +176 -0
  3. data/app/helpers/documents_helper.rb +22 -0
  4. data/app/helpers/menus_helper.rb +182 -0
  5. data/app/helpers/paragraph_helper.rb +57 -0
  6. data/app/helpers/translations_helper.rb +9 -0
  7. data/app/views/application/_document_fields.html.haml +20 -0
  8. data/app/views/application/_edit.html.haml +11 -0
  9. data/app/views/application/_new.html.haml +11 -0
  10. data/app/views/application/access_denied.js.erb +5 -0
  11. data/app/views/application/create.js.erb +19 -0
  12. data/app/views/application/destroy.js.erb +9 -0
  13. data/app/views/application/destroy_fail.js.erb +2 -0
  14. data/app/views/application/edit.html.haml +8 -0
  15. data/app/views/application/edit.js.erb +28 -0
  16. data/app/views/application/index.js.erb +7 -0
  17. data/app/views/application/index.pdf.haml +87 -0
  18. data/app/views/application/index.xls.haml +64 -0
  19. data/app/views/application/new.html.haml +7 -0
  20. data/app/views/application/new.js.erb +23 -0
  21. data/app/views/application/recapitulation.js.erb +12 -0
  22. data/app/views/application/recapitulation.pdf.haml +68 -0
  23. data/app/views/application/recapitulation.xls.haml +41 -0
  24. data/app/views/application/session_expired.js.erb +5 -0
  25. data/app/views/application/show.js.erb +29 -0
  26. data/app/views/application/update.js.erb +15 -0
  27. data/app/views/layouts/print/pdf.html.haml +8 -0
  28. data/app/views/layouts/print/recapitulation.html.haml +8 -0
  29. data/app/views/rich_table_component/_notification.html.haml +9 -0
  30. data/app/views/rich_table_component/_pagination.html.haml +11 -0
  31. data/app/views/rich_table_component/_recapitulation_matrix_groups.html.haml +42 -0
  32. data/app/views/rich_table_component/component/_ajax_upload.html.haml +6 -0
  33. data/app/views/rich_table_component/component/_ajax_upload_result.html.haml +2 -0
  34. data/app/views/rich_table_component/component/_breadcrumbs.html.haml +25 -0
  35. data/app/views/rich_table_component/component/_breadcrumbs_dropdown.html.haml +18 -0
  36. data/app/views/rich_table_component/component/_tabbed.html.haml +5 -0
  37. data/app/views/rich_table_component/rtc/_advanced_search.html.haml +95 -0
  38. data/app/views/rich_table_component/rtc/_advanced_search_recapitulation.html.haml +90 -0
  39. data/app/views/rich_table_component/rtc/_component.html.haml +62 -0
  40. data/app/views/rich_table_component/rtc/_component_actions.html.haml +69 -0
  41. data/app/views/rich_table_component/rtc/_component_content.html.haml +37 -0
  42. data/app/views/rich_table_component/rtc/_component_title.html.haml +37 -0
  43. data/app/views/rich_table_component/rtc/_content.html.haml +22 -0
  44. data/app/views/rich_table_component/rtc/_footer.html.haml +4 -0
  45. data/app/views/rich_table_component/rtc/_header.html.haml +56 -0
  46. data/app/views/rich_table_component/rtc/_recapitulation_matrix.html.haml +25 -0
  47. data/app/views/rich_table_component/rtc/_recapitulation_matrix_form.html.haml +47 -0
  48. data/app/views/rich_table_component/rtc/_table.html.haml +22 -0
  49. data/lib/pagination_list_link_renderer.rb +51 -0
  50. data/lib/rich_table_component/version.rb +1 -1
  51. data/lib/rich_table_component.rb +0 -8
  52. data/rich_table_component.gemspec +0 -1
  53. data/vendor/assets/images/icons/file_extension/file_extension_.png +0 -0
  54. data/vendor/assets/images/icons/file_extension/file_extension_3gp.png +0 -0
  55. data/vendor/assets/images/icons/file_extension/file_extension_7z.png +0 -0
  56. data/vendor/assets/images/icons/file_extension/file_extension_ace.png +0 -0
  57. data/vendor/assets/images/icons/file_extension/file_extension_ai.png +0 -0
  58. data/vendor/assets/images/icons/file_extension/file_extension_aif.png +0 -0
  59. data/vendor/assets/images/icons/file_extension/file_extension_aiff.png +0 -0
  60. data/vendor/assets/images/icons/file_extension/file_extension_amr.png +0 -0
  61. data/vendor/assets/images/icons/file_extension/file_extension_asf.png +0 -0
  62. data/vendor/assets/images/icons/file_extension/file_extension_asx.png +0 -0
  63. data/vendor/assets/images/icons/file_extension/file_extension_bat.png +0 -0
  64. data/vendor/assets/images/icons/file_extension/file_extension_bin.png +0 -0
  65. data/vendor/assets/images/icons/file_extension/file_extension_bmp.png +0 -0
  66. data/vendor/assets/images/icons/file_extension/file_extension_bup.png +0 -0
  67. data/vendor/assets/images/icons/file_extension/file_extension_cab.png +0 -0
  68. data/vendor/assets/images/icons/file_extension/file_extension_cbr.png +0 -0
  69. data/vendor/assets/images/icons/file_extension/file_extension_cda.png +0 -0
  70. data/vendor/assets/images/icons/file_extension/file_extension_cdl.png +0 -0
  71. data/vendor/assets/images/icons/file_extension/file_extension_cdr.png +0 -0
  72. data/vendor/assets/images/icons/file_extension/file_extension_chm.png +0 -0
  73. data/vendor/assets/images/icons/file_extension/file_extension_dat.png +0 -0
  74. data/vendor/assets/images/icons/file_extension/file_extension_divx.png +0 -0
  75. data/vendor/assets/images/icons/file_extension/file_extension_dll.png +0 -0
  76. data/vendor/assets/images/icons/file_extension/file_extension_dmg.png +0 -0
  77. data/vendor/assets/images/icons/file_extension/file_extension_doc.png +0 -0
  78. data/vendor/assets/images/icons/file_extension/file_extension_dss.png +0 -0
  79. data/vendor/assets/images/icons/file_extension/file_extension_dvf.png +0 -0
  80. data/vendor/assets/images/icons/file_extension/file_extension_dwg.png +0 -0
  81. data/vendor/assets/images/icons/file_extension/file_extension_eml.png +0 -0
  82. data/vendor/assets/images/icons/file_extension/file_extension_eps.png +0 -0
  83. data/vendor/assets/images/icons/file_extension/file_extension_exe.png +0 -0
  84. data/vendor/assets/images/icons/file_extension/file_extension_fla.png +0 -0
  85. data/vendor/assets/images/icons/file_extension/file_extension_flv.png +0 -0
  86. data/vendor/assets/images/icons/file_extension/file_extension_gif.png +0 -0
  87. data/vendor/assets/images/icons/file_extension/file_extension_gz.png +0 -0
  88. data/vendor/assets/images/icons/file_extension/file_extension_hqx.png +0 -0
  89. data/vendor/assets/images/icons/file_extension/file_extension_htm.png +0 -0
  90. data/vendor/assets/images/icons/file_extension/file_extension_html.png +0 -0
  91. data/vendor/assets/images/icons/file_extension/file_extension_ifo.png +0 -0
  92. data/vendor/assets/images/icons/file_extension/file_extension_indd.png +0 -0
  93. data/vendor/assets/images/icons/file_extension/file_extension_iso.png +0 -0
  94. data/vendor/assets/images/icons/file_extension/file_extension_jar.png +0 -0
  95. data/vendor/assets/images/icons/file_extension/file_extension_jpeg.png +0 -0
  96. data/vendor/assets/images/icons/file_extension/file_extension_jpg.png +0 -0
  97. data/vendor/assets/images/icons/file_extension/file_extension_lnk.png +0 -0
  98. data/vendor/assets/images/icons/file_extension/file_extension_log.png +0 -0
  99. data/vendor/assets/images/icons/file_extension/file_extension_m4a.png +0 -0
  100. data/vendor/assets/images/icons/file_extension/file_extension_m4b.png +0 -0
  101. data/vendor/assets/images/icons/file_extension/file_extension_m4p.png +0 -0
  102. data/vendor/assets/images/icons/file_extension/file_extension_m4v.png +0 -0
  103. data/vendor/assets/images/icons/file_extension/file_extension_mcd.png +0 -0
  104. data/vendor/assets/images/icons/file_extension/file_extension_mdb.png +0 -0
  105. data/vendor/assets/images/icons/file_extension/file_extension_mid.png +0 -0
  106. data/vendor/assets/images/icons/file_extension/file_extension_mov.png +0 -0
  107. data/vendor/assets/images/icons/file_extension/file_extension_mp2.png +0 -0
  108. data/vendor/assets/images/icons/file_extension/file_extension_mp4.png +0 -0
  109. data/vendor/assets/images/icons/file_extension/file_extension_mpeg.png +0 -0
  110. data/vendor/assets/images/icons/file_extension/file_extension_mpg.png +0 -0
  111. data/vendor/assets/images/icons/file_extension/file_extension_msi.png +0 -0
  112. data/vendor/assets/images/icons/file_extension/file_extension_mswmm.png +0 -0
  113. data/vendor/assets/images/icons/file_extension/file_extension_ogg.png +0 -0
  114. data/vendor/assets/images/icons/file_extension/file_extension_pdf.png +0 -0
  115. data/vendor/assets/images/icons/file_extension/file_extension_png.png +0 -0
  116. data/vendor/assets/images/icons/file_extension/file_extension_pps.png +0 -0
  117. data/vendor/assets/images/icons/file_extension/file_extension_ppt.png +0 -0
  118. data/vendor/assets/images/icons/file_extension/file_extension_ps.png +0 -0
  119. data/vendor/assets/images/icons/file_extension/file_extension_psd.png +0 -0
  120. data/vendor/assets/images/icons/file_extension/file_extension_pst.png +0 -0
  121. data/vendor/assets/images/icons/file_extension/file_extension_ptb.png +0 -0
  122. data/vendor/assets/images/icons/file_extension/file_extension_pub.png +0 -0
  123. data/vendor/assets/images/icons/file_extension/file_extension_qbb.png +0 -0
  124. data/vendor/assets/images/icons/file_extension/file_extension_qbw.png +0 -0
  125. data/vendor/assets/images/icons/file_extension/file_extension_qxd.png +0 -0
  126. data/vendor/assets/images/icons/file_extension/file_extension_ram.png +0 -0
  127. data/vendor/assets/images/icons/file_extension/file_extension_rar.png +0 -0
  128. data/vendor/assets/images/icons/file_extension/file_extension_rm.png +0 -0
  129. data/vendor/assets/images/icons/file_extension/file_extension_rmvb.png +0 -0
  130. data/vendor/assets/images/icons/file_extension/file_extension_rtf.png +0 -0
  131. data/vendor/assets/images/icons/file_extension/file_extension_sea.png +0 -0
  132. data/vendor/assets/images/icons/file_extension/file_extension_ses.png +0 -0
  133. data/vendor/assets/images/icons/file_extension/file_extension_sit.png +0 -0
  134. data/vendor/assets/images/icons/file_extension/file_extension_sitx.png +0 -0
  135. data/vendor/assets/images/icons/file_extension/file_extension_ss.png +0 -0
  136. data/vendor/assets/images/icons/file_extension/file_extension_swf.png +0 -0
  137. data/vendor/assets/images/icons/file_extension/file_extension_tgz.png +0 -0
  138. data/vendor/assets/images/icons/file_extension/file_extension_thm.png +0 -0
  139. data/vendor/assets/images/icons/file_extension/file_extension_tif.png +0 -0
  140. data/vendor/assets/images/icons/file_extension/file_extension_tmp.png +0 -0
  141. data/vendor/assets/images/icons/file_extension/file_extension_torrent.png +0 -0
  142. data/vendor/assets/images/icons/file_extension/file_extension_ttf.png +0 -0
  143. data/vendor/assets/images/icons/file_extension/file_extension_txt.png +0 -0
  144. data/vendor/assets/images/icons/file_extension/file_extension_vcd.png +0 -0
  145. data/vendor/assets/images/icons/file_extension/file_extension_vob.png +0 -0
  146. data/vendor/assets/images/icons/file_extension/file_extension_wav.png +0 -0
  147. data/vendor/assets/images/icons/file_extension/file_extension_wma.png +0 -0
  148. data/vendor/assets/images/icons/file_extension/file_extension_wmv.png +0 -0
  149. data/vendor/assets/images/icons/file_extension/file_extension_wps.png +0 -0
  150. data/vendor/assets/images/icons/file_extension/file_extension_xls.png +0 -0
  151. data/vendor/assets/images/icons/file_extension/file_extension_xpi.png +0 -0
  152. data/vendor/assets/images/icons/file_extension/file_extension_zip.png +0 -0
  153. data/vendor/assets/images/loading_image.gif +0 -0
  154. data/vendor/assets/images/pbar-ani.gif +0 -0
  155. data/vendor/assets/javascripts/admin/starqle.grid.js +708 -0
  156. data/vendor/assets/javascripts/admin/starqle.ui.jquery.js +927 -0
  157. data/vendor/assets/javascripts/ckeditor/config.js +112 -0
  158. data/vendor/assets/javascripts/jquery-ui-1.8.13.custom.min.js +445 -0
  159. data/vendor/assets/javascripts/jquery.fileupload-ui.js +533 -0
  160. data/vendor/assets/javascripts/jquery.fileupload.js +975 -0
  161. data/vendor/assets/javascripts/jquery.tmpl.min.js +1 -0
  162. data/vendor/assets/javascripts/jquery.tokeninput.js +860 -0
  163. data/vendor/assets/javascripts/nested_attribute_action.js +19 -0
  164. data/vendor/assets/javascripts/rich_table_component.js +51 -0
  165. data/vendor/assets/stylesheets/fontfaces/england_hand_db/Freeware License.txt +5 -0
  166. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.eot +0 -0
  167. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.svg +146 -0
  168. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.ttf +0 -0
  169. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.woff +0 -0
  170. data/vendor/assets/stylesheets/fontfaces/england_hand_db/stylesheet.css +16 -0
  171. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.eot +0 -0
  172. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.svg +249 -0
  173. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.ttf +0 -0
  174. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.woff +0 -0
  175. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.eot +0 -0
  176. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.svg +249 -0
  177. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.ttf +0 -0
  178. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.woff +0 -0
  179. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.eot +0 -0
  180. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.svg +249 -0
  181. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.ttf +0 -0
  182. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.woff +0 -0
  183. data/vendor/assets/stylesheets/partial/_base_functions.sass +101 -0
  184. data/vendor/assets/stylesheets/partial/_base_variables.sass +76 -0
  185. data/vendor/assets/stylesheets/partial/_form.sass +57 -0
  186. data/vendor/assets/stylesheets/partial/_grid.css +374 -0
  187. data/vendor/assets/stylesheets/partial/_notification.sass +33 -0
  188. data/vendor/assets/stylesheets/partial/_position.sass +122 -0
  189. data/vendor/assets/stylesheets/partial/_starqle.ui.grid.sass +495 -0
  190. data/vendor/assets/stylesheets/partial/_style.sass +674 -0
  191. data/vendor/assets/stylesheets/partial/_tabbed.sass +33 -0
  192. data/vendor/assets/stylesheets/partial/_user_component.sass +2 -0
  193. data/vendor/assets/stylesheets/rich_table_component/_custom.sass +0 -0
  194. data/vendor/assets/stylesheets/rich_table_component.css +18 -0
  195. data/vendor/assets/stylesheets/rtc_bootstrap_and_overrides.css.less +315 -0
  196. data/vendor/assets/stylesheets/rtc_config.sass +31 -0
  197. data/vendor/assets/stylesheets/rtc_jquery.fileupload-ui.css +155 -0
  198. data/vendor/assets/stylesheets/smoothness/images/Thumbs.db +0 -0
  199. data/vendor/assets/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  200. data/vendor/assets/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  201. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  202. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  203. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  204. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  205. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  206. data/vendor/assets/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  207. data/vendor/assets/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  208. data/vendor/assets/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  209. data/vendor/assets/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  210. data/vendor/assets/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  211. data/vendor/assets/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  212. data/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.11.custom.css +573 -0
  213. metadata +209 -17
@@ -0,0 +1,975 @@
1
+ /*
2
+ * jQuery File Upload Plugin 4.5.1
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2010, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://creativecommons.org/licenses/MIT/
10
+ */
11
+
12
+ /*jslint browser: true, unparam: true */
13
+ /*global XMLHttpRequestUpload, File, FileReader, FormData, ProgressEvent, unescape, jQuery, upload */
14
+
15
+ (function ($) {
16
+ 'use strict';
17
+
18
+ var defaultNamespace = 'file_upload',
19
+ undef = 'undefined',
20
+ func = 'function',
21
+ FileUpload,
22
+ methods,
23
+
24
+ MultiLoader = function (callBack, numOrList) {
25
+ var loaded = 0,
26
+ list = [];
27
+ if (numOrList) {
28
+ if (numOrList.length) {
29
+ list = numOrList;
30
+ } else {
31
+ list[numOrList - 1] = null;
32
+ }
33
+ }
34
+ this.complete = function () {
35
+ loaded += 1;
36
+ if (loaded === list.length) {
37
+ callBack(list);
38
+ loaded = 0;
39
+ list = [];
40
+ }
41
+ };
42
+ this.push = function (item) {
43
+ list.push(item);
44
+ };
45
+ this.getList = function () {
46
+ return list;
47
+ };
48
+ },
49
+
50
+ SequenceHandler = function () {
51
+ var sequence = [];
52
+ this.push = function (callBack) {
53
+ sequence.push(callBack);
54
+ if (sequence.length === 1) {
55
+ callBack();
56
+ }
57
+ };
58
+ this.next = function () {
59
+ sequence.shift();
60
+ if (sequence.length) {
61
+ sequence[0]();
62
+ }
63
+ };
64
+ };
65
+
66
+ FileUpload = function (container) {
67
+ var fileUpload = this,
68
+ uploadForm,
69
+ fileInput,
70
+ settings = {
71
+ namespace: defaultNamespace,
72
+ uploadFormFilter: function (index) {
73
+ return true;
74
+ },
75
+ fileInputFilter: function (index) {
76
+ return true;
77
+ },
78
+ cssClass: defaultNamespace,
79
+ dragDropSupport: true,
80
+ dropZone: container,
81
+ url: function (form) {
82
+ return form.attr('action');
83
+ },
84
+ method: function (form) {
85
+ return form.attr('method');
86
+ },
87
+ fieldName: function (input) {
88
+ return input.attr('name');
89
+ },
90
+ formData: function (form) {
91
+ return form.serializeArray();
92
+ },
93
+ requestHeaders: 'text/javascript',
94
+ multipart: true,
95
+ multiFileRequest: false,
96
+ withCredentials: false,
97
+ forceIframeUpload: false,
98
+ sequentialUploads: false,
99
+ maxChunkSize: null,
100
+ maxFileReaderSize: 50000000,
101
+ replaceFileInput: true
102
+ },
103
+ documentListeners = {},
104
+ dropZoneListeners = {},
105
+ protocolRegExp = /^http(s)?:\/\//,
106
+ optionsReference,
107
+ multiLoader = new MultiLoader(function (list) {
108
+ if (typeof settings.onLoadAll === func) {
109
+ settings.onLoadAll(list);
110
+ }
111
+ }),
112
+ sequenceHandler = new SequenceHandler(),
113
+
114
+ completeNext = function () {
115
+ multiLoader.complete();
116
+ sequenceHandler.next();
117
+ },
118
+
119
+ isXHRUploadCapable = function () {
120
+ return typeof XMLHttpRequest !== undef && typeof XMLHttpRequestUpload !== undef &&
121
+ typeof File !== undef && (!settings.multipart || typeof FormData !== undef ||
122
+ (typeof FileReader !== undef && typeof XMLHttpRequest.prototype.sendAsBinary === func));
123
+ },
124
+
125
+ initEventHandlers = function () {
126
+ if (settings.dragDropSupport) {
127
+ if (typeof settings.onDocumentDragEnter === func) {
128
+ documentListeners['dragenter.' + settings.namespace] = function (e) {
129
+ settings.onDocumentDragEnter(e);
130
+ };
131
+ }
132
+ if (typeof settings.onDocumentDragLeave === func) {
133
+ documentListeners['dragleave.' + settings.namespace] = function (e) {
134
+ settings.onDocumentDragLeave(e);
135
+ };
136
+ }
137
+ documentListeners['dragover.' + settings.namespace] = fileUpload.onDocumentDragOver;
138
+ documentListeners['drop.' + settings.namespace] = fileUpload.onDocumentDrop;
139
+ $(document).bind(documentListeners);
140
+ if (typeof settings.onDragEnter === func) {
141
+ dropZoneListeners['dragenter.' + settings.namespace] = function (e) {
142
+ settings.onDragEnter(e);
143
+ };
144
+ }
145
+ if (typeof settings.onDragLeave === func) {
146
+ dropZoneListeners['dragleave.' + settings.namespace] = function (e) {
147
+ settings.onDragLeave(e);
148
+ };
149
+ }
150
+ dropZoneListeners['dragover.' + settings.namespace] = fileUpload.onDragOver;
151
+ dropZoneListeners['drop.' + settings.namespace] = fileUpload.onDrop;
152
+ settings.dropZone.bind(dropZoneListeners);
153
+ }
154
+ fileInput.bind('change.' + settings.namespace, fileUpload.onChange);
155
+ },
156
+
157
+ removeEventHandlers = function () {
158
+ $.each(documentListeners, function (key, value) {
159
+ $(document).unbind(key, value);
160
+ });
161
+ $.each(dropZoneListeners, function (key, value) {
162
+ settings.dropZone.unbind(key, value);
163
+ });
164
+ fileInput.unbind('change.' + settings.namespace);
165
+ },
166
+
167
+ isChunkedUpload = function (settings) {
168
+ return typeof settings.uploadedBytes !== undef;
169
+ },
170
+
171
+ createProgressEvent = function (lengthComputable, loaded, total) {
172
+ var event;
173
+ if (typeof document.createEvent === func && typeof ProgressEvent !== undef) {
174
+ event = document.createEvent('ProgressEvent');
175
+ event.initProgressEvent(
176
+ 'progress',
177
+ false,
178
+ false,
179
+ lengthComputable,
180
+ loaded,
181
+ total
182
+ );
183
+ } else {
184
+ event = {
185
+ lengthComputable: true,
186
+ loaded: loaded,
187
+ total: total
188
+ };
189
+ }
190
+ return event;
191
+ },
192
+
193
+ getProgressTotal = function (files, index, settings) {
194
+ var i,
195
+ total;
196
+ if (typeof settings.progressTotal === undef) {
197
+ if (files[index]) {
198
+ total = files[index].size;
199
+ settings.progressTotal = total ? total : 1;
200
+ } else {
201
+ total = 0;
202
+ for (i = 0; i < files.length; i += 1) {
203
+ total += files[i].size;
204
+ }
205
+ settings.progressTotal = total;
206
+ }
207
+ }
208
+ return settings.progressTotal;
209
+ },
210
+
211
+ handleGlobalProgress = function (event, files, index, xhr, settings) {
212
+ var progressEvent,
213
+ loaderList,
214
+ globalLoaded = 0,
215
+ globalTotal = 0;
216
+ if (event.lengthComputable && typeof settings.onProgressAll === func) {
217
+ settings.progressLoaded = parseInt(
218
+ event.loaded / event.total * getProgressTotal(files, index, settings),
219
+ 10
220
+ );
221
+ loaderList = multiLoader.getList();
222
+ $.each(loaderList, function (index, item) {
223
+ // item is an array with [files, index, xhr, settings]
224
+ globalLoaded += item[3].progressLoaded || 0;
225
+ globalTotal += getProgressTotal(item[0], item[1], item[3]);
226
+ });
227
+ progressEvent = createProgressEvent(
228
+ true,
229
+ globalLoaded,
230
+ globalTotal
231
+ );
232
+ settings.onProgressAll(progressEvent, loaderList);
233
+ }
234
+ },
235
+
236
+ handleLoadEvent = function (event, files, index, xhr, settings) {
237
+ var progressEvent;
238
+ if (isChunkedUpload(settings)) {
239
+ settings.uploadedBytes += settings.chunkSize;
240
+ progressEvent = createProgressEvent(
241
+ true,
242
+ settings.uploadedBytes,
243
+ files[index].size
244
+ );
245
+ if (typeof settings.onProgress === func) {
246
+ settings.onProgress(progressEvent, files, index, xhr, settings);
247
+ }
248
+ handleGlobalProgress(progressEvent, files, index, xhr, settings);
249
+ if (settings.uploadedBytes < files[index].size) {
250
+ if (typeof settings.resumeUpload === func) {
251
+ settings.resumeUpload(
252
+ event,
253
+ files,
254
+ index,
255
+ xhr,
256
+ settings,
257
+ function () {
258
+ upload(event, files, index, xhr, settings, true);
259
+ }
260
+ );
261
+ } else {
262
+ upload(event, files, index, xhr, settings, true);
263
+ }
264
+ return;
265
+ }
266
+ }
267
+ settings.progressLoaded = getProgressTotal(files, index, settings);
268
+ if (typeof settings.onLoad === func) {
269
+ settings.onLoad(event, files, index, xhr, settings);
270
+ }
271
+ completeNext();
272
+ },
273
+
274
+ handleProgressEvent = function (event, files, index, xhr, settings) {
275
+ var progressEvent = event;
276
+ if (isChunkedUpload(settings) && event.lengthComputable) {
277
+ progressEvent = createProgressEvent(
278
+ true,
279
+ settings.uploadedBytes + parseInt(event.loaded / event.total * settings.chunkSize, 10),
280
+ files[index].size
281
+ );
282
+ }
283
+ if (typeof settings.onProgress === func) {
284
+ settings.onProgress(progressEvent, files, index, xhr, settings);
285
+ }
286
+ handleGlobalProgress(progressEvent, files, index, xhr, settings);
287
+ },
288
+
289
+ initUploadEventHandlers = function (files, index, xhr, settings) {
290
+ if (xhr.upload) {
291
+ xhr.upload.onprogress = function (e) {
292
+ handleProgressEvent(e, files, index, xhr, settings);
293
+ };
294
+ }
295
+ xhr.onload = function (e) {
296
+ handleLoadEvent(e, files, index, xhr, settings);
297
+ };
298
+ xhr.onabort = function (e) {
299
+ settings.progressTotal = settings.progressLoaded;
300
+ if (typeof settings.onAbort === func) {
301
+ settings.onAbort(e, files, index, xhr, settings);
302
+ }
303
+ completeNext();
304
+ };
305
+ xhr.onerror = function (e) {
306
+ settings.progressTotal = settings.progressLoaded;
307
+ if (typeof settings.onError === func) {
308
+ settings.onError(e, files, index, xhr, settings);
309
+ }
310
+ completeNext();
311
+ };
312
+ },
313
+
314
+ getUrl = function (settings) {
315
+ if (typeof settings.url === func) {
316
+ return settings.url(settings.uploadForm || uploadForm);
317
+ }
318
+ return settings.url;
319
+ },
320
+
321
+ getMethod = function (settings) {
322
+ if (typeof settings.method === func) {
323
+ return settings.method(settings.uploadForm || uploadForm);
324
+ }
325
+ return settings.method;
326
+ },
327
+
328
+ getFieldName = function (settings) {
329
+ if (typeof settings.fieldName === func) {
330
+ return settings.fieldName(settings.fileInput || fileInput);
331
+ }
332
+ return settings.fieldName;
333
+ },
334
+
335
+ getFormData = function (settings) {
336
+ var formData;
337
+ if (typeof settings.formData === func) {
338
+ return settings.formData(settings.uploadForm || uploadForm);
339
+ } else if ($.isArray(settings.formData)) {
340
+ return settings.formData;
341
+ } else if (settings.formData) {
342
+ formData = [];
343
+ $.each(settings.formData, function (name, value) {
344
+ formData.push({name: name, value: value});
345
+ });
346
+ return formData;
347
+ }
348
+ return [];
349
+ },
350
+
351
+ isSameDomain = function (url) {
352
+ if (protocolRegExp.test(url)) {
353
+ var host = location.host,
354
+ indexStart = location.protocol.length + 2,
355
+ index = url.indexOf(host, indexStart),
356
+ pathIndex = index + host.length;
357
+ if ((index === indexStart || index === url.indexOf('@', indexStart) + 1) &&
358
+ (url.length === pathIndex || $.inArray(url.charAt(pathIndex), ['/', '?', '#']) !== -1)) {
359
+ return true;
360
+ }
361
+ return false;
362
+ }
363
+ return true;
364
+ },
365
+
366
+ initUploadRequest = function (files, index, xhr, settings) {
367
+ var file = files[index],
368
+ url = getUrl(settings),
369
+ sameDomain = isSameDomain(url);
370
+ xhr.open(getMethod(settings), url, true);
371
+ if (sameDomain) {
372
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
373
+ if (!settings.multipart || isChunkedUpload(settings)) {
374
+ xhr.setRequestHeader('X-File-Name', file.name);
375
+ xhr.setRequestHeader('X-File-Type', file.type);
376
+ xhr.setRequestHeader('X-File-Size', file.size);
377
+ if (!isChunkedUpload(settings)) {
378
+ xhr.setRequestHeader('Content-Type', file.type);
379
+ } else if (!settings.multipart) {
380
+ xhr.setRequestHeader('Content-Type', 'application/octet-stream');
381
+ }
382
+ }
383
+ } else if (settings.withCredentials) {
384
+ xhr.withCredentials = true;
385
+ }
386
+ if ($.isArray(settings.requestHeaders)) {
387
+ $.each(settings.requestHeaders, function (index, header) {
388
+ xhr.setRequestHeader(header.name, header.value);
389
+ });
390
+ } else if (settings.requestHeaders) {
391
+ $.each(settings.requestHeaders, function (name, value) {
392
+ xhr.setRequestHeader(name, value);
393
+ });
394
+ }
395
+ },
396
+
397
+ formDataUpload = function (files, xhr, settings) {
398
+ var formData = new FormData(),
399
+ i;
400
+ $.each(getFormData(settings), function (index, field) {
401
+ formData.append(field.name, field.value);
402
+ });
403
+ for (i = 0; i < files.length; i += 1) {
404
+ formData.append(getFieldName(settings), files[i]);
405
+ }
406
+ xhr.send(formData);
407
+ },
408
+
409
+ loadFileContent = function (file, callBack) {
410
+ file.reader = new FileReader();
411
+ file.reader.onload = callBack;
412
+ file.reader.readAsBinaryString(file);
413
+ },
414
+
415
+ utf8encode = function (str) {
416
+ return unescape(encodeURIComponent(str));
417
+ },
418
+
419
+ buildMultiPartFormData = function (boundary, files, filesFieldName, fields) {
420
+ var doubleDash = '--',
421
+ crlf = '\r\n',
422
+ formData = '',
423
+ buffer = [];
424
+ $.each(fields, function (index, field) {
425
+ formData += doubleDash + boundary + crlf +
426
+ 'Content-Disposition: form-data; name="' +
427
+ utf8encode(field.name) +
428
+ '"' + crlf + crlf +
429
+ utf8encode(field.value) + crlf;
430
+ });
431
+ $.each(files, function (index, file) {
432
+ formData += doubleDash + boundary + crlf +
433
+ 'Content-Disposition: form-data; name="' +
434
+ utf8encode(filesFieldName) +
435
+ '"; filename="' + utf8encode(file.name) + '"' + crlf +
436
+ 'Content-Type: ' + utf8encode(file.type) + crlf + crlf;
437
+ buffer.push(formData);
438
+ buffer.push(file.reader.result);
439
+ delete file.reader;
440
+ formData = crlf;
441
+ });
442
+ formData += doubleDash + boundary + doubleDash + crlf;
443
+ buffer.push(formData);
444
+ return buffer.join('');
445
+ },
446
+
447
+ fileReaderUpload = function (files, xhr, settings) {
448
+ var boundary = '----MultiPartFormBoundary' + (new Date()).getTime(),
449
+ loader,
450
+ i;
451
+ xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
452
+ loader = new MultiLoader(function () {
453
+ xhr.sendAsBinary(buildMultiPartFormData(
454
+ boundary,
455
+ files,
456
+ getFieldName(settings),
457
+ getFormData(settings)
458
+ ));
459
+ }, files.length);
460
+ for (i = 0; i < files.length; i += 1) {
461
+ loadFileContent(files[i], loader.complete);
462
+ }
463
+ },
464
+
465
+ getBlob = function (file, settings) {
466
+ var blob,
467
+ ub = settings.uploadedBytes,
468
+ mcs = settings.maxChunkSize;
469
+ if (file && typeof file.slice === func && (ub || (mcs && mcs < file.size))) {
470
+ settings.uploadedBytes = ub = ub || 0;
471
+ blob = file.slice(ub, mcs || file.size - ub);
472
+ settings.chunkSize = blob.size;
473
+ return blob;
474
+ }
475
+ return file;
476
+ },
477
+
478
+ upload = function (event, files, index, xhr, settings, nextChunk) {
479
+ var send;
480
+ send = function () {
481
+ if (!nextChunk) {
482
+ if (typeof settings.onSend === func &&
483
+ settings.onSend(event, files, index, xhr, settings) === false) {
484
+ completeNext();
485
+ return;
486
+ }
487
+ }
488
+ var blob = getBlob(files[index], settings),
489
+ filesToUpload;
490
+ initUploadEventHandlers(files, index, xhr, settings);
491
+ initUploadRequest(files, index, xhr, settings);
492
+ if (!settings.multipart) {
493
+ if (xhr.upload) {
494
+ xhr.send(blob);
495
+ } else {
496
+ $.error('Browser does not support XHR file uploads');
497
+ }
498
+ } else {
499
+ filesToUpload = (typeof index === 'number') ? [blob] : files;
500
+ if (typeof FormData !== undef) {
501
+ formDataUpload(filesToUpload, xhr, settings);
502
+ } else if (typeof FileReader !== undef && typeof xhr.sendAsBinary === func) {
503
+ fileReaderUpload(filesToUpload, xhr, settings);
504
+ } else {
505
+ $.error('Browser does not support multipart/form-data XHR file uploads');
506
+ }
507
+ }
508
+ };
509
+ if (!nextChunk) {
510
+ multiLoader.push(Array.prototype.slice.call(arguments, 1));
511
+ if (settings.sequentialUploads) {
512
+ sequenceHandler.push(send);
513
+ return;
514
+ }
515
+ }
516
+ send();
517
+ },
518
+
519
+ handleUpload = function (event, files, input, form, index) {
520
+ var xhr = new XMLHttpRequest(),
521
+ uploadSettings = $.extend({}, settings);
522
+ uploadSettings.fileInput = input;
523
+ uploadSettings.uploadForm = form;
524
+ if (typeof uploadSettings.initUpload === func) {
525
+ uploadSettings.initUpload(
526
+ event,
527
+ files,
528
+ index,
529
+ xhr,
530
+ uploadSettings,
531
+ function () {
532
+ upload(event, files, index, xhr, uploadSettings);
533
+ }
534
+ );
535
+ } else {
536
+ upload(event, files, index, xhr, uploadSettings);
537
+ }
538
+ },
539
+
540
+ handleLegacyGlobalProgress = function (event, files, index, iframe, settings) {
541
+ var total = 0,
542
+ progressEvent;
543
+ if (typeof index === undef) {
544
+ $.each(files, function (index, file) {
545
+ total += file.size ? file.size : 1;
546
+ });
547
+ } else {
548
+ total = files[index].size ? files[index].size : 1;
549
+ }
550
+ progressEvent = createProgressEvent(true, total, total);
551
+ settings.progressLoaded = total;
552
+ handleGlobalProgress(progressEvent, files, index, iframe, settings);
553
+ },
554
+
555
+ legacyUploadFormDataInit = function (input, form, settings) {
556
+ var formData = getFormData(settings);
557
+ form.find(':input').not(':disabled')
558
+ .attr('disabled', true)
559
+ .addClass(settings.namespace + '_disabled');
560
+ $.each(formData, function (index, field) {
561
+ $('<input type="hidden"/>')
562
+ .attr('name', field.name)
563
+ .val(field.value)
564
+ .addClass(settings.namespace + '_form_data')
565
+ .appendTo(form);
566
+ });
567
+ input
568
+ .attr('name', getFieldName(settings))
569
+ .appendTo(form);
570
+ },
571
+
572
+ legacyUploadFormDataReset = function (input, form, settings) {
573
+ input.detach();
574
+ form.find('.' + settings.namespace + '_disabled')
575
+ .removeAttr('disabled')
576
+ .removeClass(settings.namespace + '_disabled');
577
+ form.find('.' + settings.namespace + '_form_data').remove();
578
+ },
579
+
580
+ legacyUpload = function (event, files, input, form, iframe, settings, index) {
581
+ var send;
582
+ send = function () {
583
+ if (typeof settings.onSend === func && settings.onSend(event, files, index, iframe, settings) === false) {
584
+ completeNext();
585
+ return;
586
+ }
587
+ var originalAttributes = {
588
+ 'action': form.attr('action'),
589
+ 'method': form.attr('method'),
590
+ 'target': form.attr('target'),
591
+ 'enctype': form.attr('enctype')
592
+ };
593
+ iframe
594
+ .unbind('abort')
595
+ .bind('abort', function (e) {
596
+ iframe.readyState = 0;
597
+ // javascript:false as iframe src prevents warning popups on HTTPS in IE6
598
+ // concat is used here to prevent the "Script URL" JSLint error:
599
+ iframe.unbind('load').attr('src', 'javascript'.concat(':false;'));
600
+ handleLegacyGlobalProgress(e, files, index, iframe, settings);
601
+ if (typeof settings.onAbort === func) {
602
+ settings.onAbort(e, files, index, iframe, settings);
603
+ }
604
+ completeNext();
605
+ })
606
+ .unbind('load')
607
+ .bind('load', function (e) {
608
+ iframe.readyState = 4;
609
+ handleLegacyGlobalProgress(e, files, index, iframe, settings);
610
+ if (typeof settings.onLoad === func) {
611
+ settings.onLoad(e, files, index, iframe, settings);
612
+ }
613
+ // Fix for IE endless progress bar activity bug
614
+ // (happens on form submits to iframe targets):
615
+ $('<iframe src="javascript:false;" style="display:none;"></iframe>')
616
+ .appendTo(form).remove();
617
+ completeNext();
618
+ });
619
+ form
620
+ .attr('action', getUrl(settings))
621
+ .attr('method', getMethod(settings))
622
+ .attr('target', iframe.attr('name'))
623
+ .attr('enctype', 'multipart/form-data');
624
+ legacyUploadFormDataInit(input, form, settings);
625
+ iframe.readyState = 2;
626
+ form.get(0).submit();
627
+ legacyUploadFormDataReset(input, form, settings);
628
+ $.each(originalAttributes, function (name, value) {
629
+ if (value) {
630
+ form.attr(name, value);
631
+ } else {
632
+ form.removeAttr(name);
633
+ }
634
+ });
635
+ };
636
+ multiLoader.push([files, index, iframe, settings]);
637
+ if (settings.sequentialUploads) {
638
+ sequenceHandler.push(send);
639
+ } else {
640
+ send();
641
+ }
642
+ },
643
+
644
+ normalizeFile = function (index, file) {
645
+ if (typeof file.name === undef && typeof file.size === undef) {
646
+ file.name = file.fileName;
647
+ file.size = file.fileSize;
648
+ }
649
+ },
650
+
651
+ handleLegacyUpload = function (event, input, form, index) {
652
+ if (!(event && input && form)) {
653
+ $.error('Iframe based File Upload requires a file input change event');
654
+ return;
655
+ }
656
+ // javascript:false as iframe src prevents warning popups on HTTPS in IE6:
657
+ var iframe = $('<iframe src="javascript:false;" style="display:none;" name="iframe_' +
658
+ settings.namespace + '_' + (new Date()).getTime() + '"></iframe>'),
659
+ uploadSettings = $.extend({}, settings),
660
+ files = event.target && event.target.files;
661
+ files = files ? Array.prototype.slice.call(files, 0) : [{name: input.val(), type: null, size: null}];
662
+ $.each(files, normalizeFile);
663
+ index = files.length === 1 ? 0 : index;
664
+ uploadSettings.fileInput = input;
665
+ uploadSettings.uploadForm = form;
666
+ iframe.readyState = 0;
667
+ iframe.abort = function () {
668
+ iframe.trigger('abort');
669
+ };
670
+ iframe.bind('load', function () {
671
+ iframe.unbind('load');
672
+ if (typeof uploadSettings.initUpload === func) {
673
+ uploadSettings.initUpload(
674
+ event,
675
+ files,
676
+ index,
677
+ iframe,
678
+ uploadSettings,
679
+ function () {
680
+ legacyUpload(event, files, input, form, iframe, uploadSettings, index);
681
+ }
682
+ );
683
+ } else {
684
+ legacyUpload(event, files, input, form, iframe, uploadSettings, index);
685
+ }
686
+ }).appendTo(form);
687
+ },
688
+
689
+ canHandleXHRUploadSize = function (files) {
690
+ var bytes = 0,
691
+ totalBytes = 0,
692
+ i;
693
+ if (settings.multipart && typeof FormData === undef) {
694
+ for (i = 0; i < files.length; i += 1) {
695
+ bytes = files[i].size;
696
+ if (bytes > settings.maxFileReaderSize) {
697
+ return false;
698
+ }
699
+ totalBytes += bytes;
700
+ }
701
+ if (settings.multiFileRequest && totalBytes > settings.maxFileReaderSize) {
702
+ return false;
703
+ }
704
+ }
705
+ return true;
706
+ },
707
+
708
+ handleFiles = function (event, files, input, form) {
709
+ if (!canHandleXHRUploadSize(files)) {
710
+ handleLegacyUpload(event, input, form);
711
+ return;
712
+ }
713
+ var i;
714
+ files = Array.prototype.slice.call(files, 0);
715
+ $.each(files, normalizeFile);
716
+ if (settings.multiFileRequest && settings.multipart && files.length) {
717
+ handleUpload(event, files, input, form);
718
+ } else {
719
+ for (i = 0; i < files.length; i += 1) {
720
+ handleUpload(event, files, input, form, i);
721
+ }
722
+ }
723
+ },
724
+
725
+ initUploadForm = function () {
726
+ uploadForm = (container.is('form') ? container : container.find('form'))
727
+ .filter(settings.uploadFormFilter);
728
+ },
729
+
730
+ initFileInput = function () {
731
+ fileInput = (uploadForm.length ? uploadForm : container).find('input:file')
732
+ .filter(settings.fileInputFilter);
733
+ },
734
+
735
+ replaceFileInput = function (input) {
736
+ var inputClone = input.clone(true);
737
+ $('<form/>').append(inputClone).get(0).reset();
738
+ input.after(inputClone).detach();
739
+ initFileInput();
740
+ };
741
+
742
+ this.onDocumentDragOver = function (e) {
743
+ if (typeof settings.onDocumentDragOver === func &&
744
+ settings.onDocumentDragOver(e) === false) {
745
+ return false;
746
+ }
747
+ e.preventDefault();
748
+ };
749
+
750
+ this.onDocumentDrop = function (e) {
751
+ if (typeof settings.onDocumentDrop === func &&
752
+ settings.onDocumentDrop(e) === false) {
753
+ return false;
754
+ }
755
+ e.preventDefault();
756
+ };
757
+
758
+ this.onDragOver = function (e) {
759
+ if (typeof settings.onDragOver === func &&
760
+ settings.onDragOver(e) === false) {
761
+ return false;
762
+ }
763
+ var dataTransfer = e.originalEvent.dataTransfer;
764
+ if (dataTransfer && dataTransfer.files) {
765
+ dataTransfer.dropEffect = dataTransfer.effectAllowed = 'copy';
766
+ e.preventDefault();
767
+ }
768
+ };
769
+
770
+ this.onDrop = function (e) {
771
+ if (typeof settings.onDrop === func &&
772
+ settings.onDrop(e) === false) {
773
+ return false;
774
+ }
775
+ var dataTransfer = e.originalEvent.dataTransfer;
776
+ if (dataTransfer && dataTransfer.files && isXHRUploadCapable()) {
777
+ handleFiles(e, dataTransfer.files);
778
+ }
779
+ e.preventDefault();
780
+ };
781
+
782
+ this.onChange = function (e) {
783
+ if (typeof settings.onChange === func &&
784
+ settings.onChange(e) === false) {
785
+ return false;
786
+ }
787
+ var input = $(e.target),
788
+ form = $(e.target.form);
789
+ if (form.length === 1) {
790
+ if (settings.replaceFileInput) {
791
+ input.data(defaultNamespace + '_form', form);
792
+ replaceFileInput(input);
793
+ }
794
+ } else {
795
+ form = input.data(defaultNamespace + '_form');
796
+ }
797
+ if (!settings.forceIframeUpload && e.target.files && isXHRUploadCapable()) {
798
+ handleFiles(e, e.target.files, input, form);
799
+ } else {
800
+ handleLegacyUpload(e, input, form);
801
+ }
802
+ };
803
+
804
+ this.init = function (options) {
805
+ if (options) {
806
+ $.extend(settings, options);
807
+ optionsReference = options;
808
+ }
809
+ initUploadForm();
810
+ initFileInput();
811
+ if (container.data(settings.namespace)) {
812
+ $.error('FileUpload with namespace "' + settings.namespace + '" already assigned to this element');
813
+ return;
814
+ }
815
+ container
816
+ .data(settings.namespace, fileUpload)
817
+ .addClass(settings.cssClass);
818
+ settings.dropZone.not(container).addClass(settings.cssClass);
819
+ initEventHandlers();
820
+ if (typeof settings.init === func) {
821
+ settings.init();
822
+ }
823
+ };
824
+
825
+ this.options = function (options) {
826
+ var oldCssClass,
827
+ oldDropZone,
828
+ uploadFormFilterUpdate,
829
+ fileInputFilterUpdate;
830
+ if (typeof options === undef) {
831
+ return $.extend({}, settings);
832
+ }
833
+ if (optionsReference) {
834
+ $.extend(optionsReference, options);
835
+ }
836
+ removeEventHandlers();
837
+ $.each(options, function (name, value) {
838
+ switch (name) {
839
+ case 'namespace':
840
+ $.error('The FileUpload namespace cannot be updated.');
841
+ return;
842
+ case 'uploadFormFilter':
843
+ uploadFormFilterUpdate = true;
844
+ fileInputFilterUpdate = true;
845
+ break;
846
+ case 'fileInputFilter':
847
+ fileInputFilterUpdate = true;
848
+ break;
849
+ case 'cssClass':
850
+ oldCssClass = settings.cssClass;
851
+ break;
852
+ case 'dropZone':
853
+ oldDropZone = settings.dropZone;
854
+ break;
855
+ }
856
+ settings[name] = value;
857
+ });
858
+ if (uploadFormFilterUpdate) {
859
+ initUploadForm();
860
+ }
861
+ if (fileInputFilterUpdate) {
862
+ initFileInput();
863
+ }
864
+ if (typeof oldCssClass !== undef) {
865
+ container
866
+ .removeClass(oldCssClass)
867
+ .addClass(settings.cssClass);
868
+ (oldDropZone ? oldDropZone : settings.dropZone).not(container)
869
+ .removeClass(oldCssClass);
870
+ settings.dropZone.not(container).addClass(settings.cssClass);
871
+ } else if (oldDropZone) {
872
+ oldDropZone.not(container).removeClass(settings.cssClass);
873
+ settings.dropZone.not(container).addClass(settings.cssClass);
874
+ }
875
+ initEventHandlers();
876
+ };
877
+
878
+ this.option = function (name, value) {
879
+ var options;
880
+ if (typeof value === undef) {
881
+ return settings[name];
882
+ }
883
+ options = {};
884
+ options[name] = value;
885
+ fileUpload.options(options);
886
+ };
887
+
888
+ this.destroy = function () {
889
+ if (typeof settings.destroy === func) {
890
+ settings.destroy();
891
+ }
892
+ removeEventHandlers();
893
+ container
894
+ .removeData(settings.namespace)
895
+ .removeClass(settings.cssClass);
896
+ settings.dropZone.not(container).removeClass(settings.cssClass);
897
+ };
898
+
899
+ this.upload = function (files) {
900
+ if (typeof files.length === undef) {
901
+ files = [files];
902
+ }
903
+ handleFiles(null, files);
904
+ };
905
+ };
906
+
907
+ methods = {
908
+ init : function (options) {
909
+ return this.each(function () {
910
+ (new FileUpload($(this))).init(options);
911
+ });
912
+ },
913
+
914
+ option: function (option, value, namespace) {
915
+ namespace = namespace ? namespace : defaultNamespace;
916
+ var fileUpload = $(this).data(namespace);
917
+ if (fileUpload) {
918
+ if (!option) {
919
+ return fileUpload.options();
920
+ } else if (typeof option === 'string' && typeof value === undef) {
921
+ return fileUpload.option(option);
922
+ }
923
+ } else {
924
+ $.error('No FileUpload with namespace "' + namespace + '" assigned to this element');
925
+ }
926
+ return this.each(function () {
927
+ var fu = $(this).data(namespace);
928
+ if (fu) {
929
+ if (typeof option === 'string') {
930
+ fu.option(option, value);
931
+ } else {
932
+ fu.options(option);
933
+ }
934
+ } else {
935
+ $.error('No FileUpload with namespace "' + namespace + '" assigned to this element');
936
+ }
937
+ });
938
+ },
939
+
940
+ destroy: function (namespace) {
941
+ namespace = namespace ? namespace : defaultNamespace;
942
+ return this.each(function () {
943
+ var fileUpload = $(this).data(namespace);
944
+ if (fileUpload) {
945
+ fileUpload.destroy();
946
+ } else {
947
+ $.error('No FileUpload with namespace "' + namespace + '" assigned to this element');
948
+ }
949
+ });
950
+ },
951
+
952
+ upload: function (files, namespace) {
953
+ namespace = namespace ? namespace : defaultNamespace;
954
+ return this.each(function () {
955
+ var fileUpload = $(this).data(namespace);
956
+ if (fileUpload) {
957
+ fileUpload.upload(files);
958
+ } else {
959
+ $.error('No FileUpload with namespace "' + namespace + '" assigned to this element');
960
+ }
961
+ });
962
+ }
963
+ };
964
+
965
+ $.fn.fileUpload = function (method) {
966
+ if (methods[method]) {
967
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
968
+ } else if (typeof method === 'object' || !method) {
969
+ return methods.init.apply(this, arguments);
970
+ } else {
971
+ $.error('Method "' + method + '" does not exist on jQuery.fileUpload');
972
+ }
973
+ };
974
+
975
+ }(jQuery));