refinerycms-6hoursdaily-photo-gallery 0.0.4.dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. data/Gemfile +27 -0
  2. data/LICENSE.md +8 -0
  3. data/README.md +224 -0
  4. data/app/assets/images/refinery/photo_gallery/admin/chosen-sprite.png +0 -0
  5. data/app/assets/images/refinery/photo_gallery/admin/icons/album.png +0 -0
  6. data/app/assets/images/refinery/photo_gallery/admin/icons/album_add.png +0 -0
  7. data/app/assets/images/refinery/photo_gallery/admin/icons/album_edit.png +0 -0
  8. data/app/assets/images/refinery/photo_gallery/admin/icons/cog.png +0 -0
  9. data/app/assets/images/refinery/photo_gallery/admin/icons/down.gif +0 -0
  10. data/app/assets/images/refinery/photo_gallery/admin/icons/folder.png +0 -0
  11. data/app/assets/images/refinery/photo_gallery/admin/icons/folder_add.png +0 -0
  12. data/app/assets/images/refinery/photo_gallery/admin/icons/folder_edit.png +0 -0
  13. data/app/assets/images/refinery/photo_gallery/admin/icons/loading.gif +0 -0
  14. data/app/assets/images/refinery/photo_gallery/admin/icons/page_copy.png +0 -0
  15. data/app/assets/images/refinery/photo_gallery/admin/icons/photo.png +0 -0
  16. data/app/assets/images/refinery/photo_gallery/admin/icons/photo_add.png +0 -0
  17. data/app/assets/images/refinery/photo_gallery/admin/icons/photo_edit.png +0 -0
  18. data/app/assets/images/refinery/photo_gallery/admin/icons/up.gif +0 -0
  19. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/backgrounds.gif +0 -0
  20. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/buttons-disabled.png +0 -0
  21. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/buttons.png +0 -0
  22. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/delete.gif +0 -0
  23. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/done.gif +0 -0
  24. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/error.gif +0 -0
  25. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/throbber.gif +0 -0
  26. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/transp50.png +0 -0
  27. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.ui.plupload/plupload-bw.png +0 -0
  28. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.ui.plupload/plupload.png +0 -0
  29. data/app/assets/images/refinery/photo_gallery/admin/rss-feed.png +0 -0
  30. data/app/assets/images/refinery/photo_gallery/fancybox/blank.gif +0 -0
  31. data/app/assets/images/refinery/photo_gallery/fancybox/fancybox_loading.gif +0 -0
  32. data/app/assets/images/refinery/photo_gallery/fancybox/fancybox_sprite.png +0 -0
  33. data/app/assets/images/refinery/photo_gallery/fancybox/helpers/fancybox_buttons.png +0 -0
  34. data/app/assets/javascripts/refinery/photo_gallery/admin/jquery.chosen.min.js +10 -0
  35. data/app/assets/javascripts/refinery/photo_gallery/admin/photo_gallery.js +28 -0
  36. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/changelog.txt +218 -0
  37. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/cs.js +14 -0
  38. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/da.js +12 -0
  39. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/de.js +24 -0
  40. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/el.js +14 -0
  41. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/es.js +25 -0
  42. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/et.js +33 -0
  43. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fi.js +33 -0
  44. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fr-ca.js +35 -0
  45. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fr.js +25 -0
  46. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/hr.js +25 -0
  47. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/hu.js +33 -0
  48. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/it.js +24 -0
  49. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ja.js +37 -0
  50. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ko.js +36 -0
  51. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/lv.js +33 -0
  52. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/nl.js +21 -0
  53. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/pl.js +24 -0
  54. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/pt-br.js +35 -0
  55. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ro.js +24 -0
  56. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ru.js +21 -0
  57. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/sk.js +37 -0
  58. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/sr.js +14 -0
  59. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/sv.js +12 -0
  60. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/jquery.plupload.queue.js +195 -0
  61. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/jquery.ui.plupload.js +383 -0
  62. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/license.txt +339 -0
  63. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.browserplus.js +1 -0
  64. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.flash.js +226 -0
  65. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.flash.swf +0 -0
  66. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.full.js +2525 -0
  67. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.full.js.default +2525 -0
  68. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.gears.js +1 -0
  69. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.html4.js +1 -0
  70. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.html5.js +765 -0
  71. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.html5.js.default +765 -0
  72. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.js +618 -0
  73. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.silverlight.js +1 -0
  74. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.silverlight.xap +0 -0
  75. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/readme.md +46 -0
  76. data/app/assets/javascripts/refinery/photo_gallery/fancybox/CHANGELOG.md +68 -0
  77. data/app/assets/javascripts/refinery/photo_gallery/fancybox/README.md +212 -0
  78. data/app/assets/javascripts/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-buttons.js +115 -0
  79. data/app/assets/javascripts/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-media.js +85 -0
  80. data/app/assets/javascripts/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-thumbs.js +157 -0
  81. data/app/assets/javascripts/refinery/photo_gallery/fancybox/jquery.fancybox.js +1463 -0
  82. data/app/assets/javascripts/refinery/photo_gallery/fancybox/jquery.fancybox.pack.js +35 -0
  83. data/app/assets/javascripts/refinery/photo_gallery/fancybox/lib/jquery.mousewheel-3.0.6.pack.js +13 -0
  84. data/app/assets/stylesheets/refinery/photo_gallery/admin/chosen.css.scss +396 -0
  85. data/app/assets/stylesheets/refinery/photo_gallery/admin/photo_gallery.css.scss +109 -0
  86. data/app/assets/stylesheets/refinery/photo_gallery/admin/plupload/jquery.plupload.queue.css.scss +177 -0
  87. data/app/assets/stylesheets/refinery/photo_gallery/admin/plupload/jquery.ui.plupload.css.scss +147 -0
  88. data/app/assets/stylesheets/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-buttons.css.scss +85 -0
  89. data/app/assets/stylesheets/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-thumbs.css +54 -0
  90. data/app/assets/stylesheets/refinery/photo_gallery/fancybox/jquery.fancybox.css.scss +234 -0
  91. data/app/controllers/refinery/photo_gallery/admin/albums_controller.rb +23 -0
  92. data/app/controllers/refinery/photo_gallery/admin/collections_controller.rb +10 -0
  93. data/app/controllers/refinery/photo_gallery/admin/photos_controller.rb +67 -0
  94. data/app/controllers/refinery/photo_gallery/albums_controller.rb +23 -0
  95. data/app/controllers/refinery/photo_gallery/collections_controller.rb +28 -0
  96. data/app/helpers/refinery/photo_gallery/admin/photos_helper.rb +10 -0
  97. data/app/helpers/refinery/photo_gallery/albums_helper.rb +11 -0
  98. data/app/helpers/refinery/photo_gallery/photo_gallery_helper.rb +113 -0
  99. data/app/middleware/refinery/photo_gallery/admin/flash_session_cookie_middleware.rb +27 -0
  100. data/app/models/refinery/photo_gallery/album.rb +63 -0
  101. data/app/models/refinery/photo_gallery/collection.rb +29 -0
  102. data/app/models/refinery/photo_gallery/collection_album.rb +8 -0
  103. data/app/models/refinery/photo_gallery/photo.rb +63 -0
  104. data/app/uploaders/refinery/photo_gallery/admin/file_uploader.rb +122 -0
  105. data/app/views/refinery/photo_gallery/admin/_submenu.html.erb +44 -0
  106. data/app/views/refinery/photo_gallery/admin/albums/_album.html.erb +31 -0
  107. data/app/views/refinery/photo_gallery/admin/albums/_form.html.erb +78 -0
  108. data/app/views/refinery/photo_gallery/admin/albums/_sortable_list.html.erb +7 -0
  109. data/app/views/refinery/photo_gallery/admin/albums/edit.html.erb +2 -0
  110. data/app/views/refinery/photo_gallery/admin/albums/index.html.erb +28 -0
  111. data/app/views/refinery/photo_gallery/admin/albums/new.html.erb +2 -0
  112. data/app/views/refinery/photo_gallery/admin/collections/_collection.html.erb +23 -0
  113. data/app/views/refinery/photo_gallery/admin/collections/_form.html.erb +32 -0
  114. data/app/views/refinery/photo_gallery/admin/collections/_sortable_list.html.erb +7 -0
  115. data/app/views/refinery/photo_gallery/admin/collections/edit.html.erb +2 -0
  116. data/app/views/refinery/photo_gallery/admin/collections/index.html.erb +28 -0
  117. data/app/views/refinery/photo_gallery/admin/collections/new.html.erb +2 -0
  118. data/app/views/refinery/photo_gallery/admin/collections/test.html.erb +39 -0
  119. data/app/views/refinery/photo_gallery/admin/photos/_destroy.js.erb +15 -0
  120. data/app/views/refinery/photo_gallery/admin/photos/_form.html.erb +7 -0
  121. data/app/views/refinery/photo_gallery/admin/photos/_form_actions.html.erb +6 -0
  122. data/app/views/refinery/photo_gallery/admin/photos/_form_fields.html.erb +31 -0
  123. data/app/views/refinery/photo_gallery/admin/photos/_form_fields_actions.html.erb +15 -0
  124. data/app/views/refinery/photo_gallery/admin/photos/edit_multiple.html.erb +9 -0
  125. data/app/views/refinery/photo_gallery/admin/photos/upload.html.erb +87 -0
  126. data/app/views/refinery/photo_gallery/albums/show.html.erb +49 -0
  127. data/app/views/refinery/photo_gallery/collections/index.html.erb +13 -0
  128. data/app/views/refinery/photo_gallery/collections/show.html.erb +33 -0
  129. data/app/views/refinery/photo_gallery/shared/_layout.html.erb +22 -0
  130. data/app/views/refinery/photo_gallery/shared/_submenu.html.erb +5 -0
  131. data/config/initializers/carrierwave.rb +5 -0
  132. data/config/initializers/form_builder.rb +26 -0
  133. data/config/initializers/refinery/core.rb +10 -0
  134. data/config/initializers/s3.rb +11 -0
  135. data/config/initializers/session_store.rb +10 -0
  136. data/config/locales/en.yml +95 -0
  137. data/config/locales/sk.yml +94 -0
  138. data/config/routes.rb +37 -0
  139. data/db/migrate/20120804063842_create_albums.rb +18 -0
  140. data/db/migrate/20120805131321_create_collections.rb +14 -0
  141. data/db/migrate/20120805131547_create_collection_albums.rb +12 -0
  142. data/db/migrate/20120805165238_create_photos.rb +19 -0
  143. data/db/migrate/20120805222125_add_indexes.rb +24 -0
  144. data/db/seeds.rb +21 -0
  145. data/lib/generators/refinery/photo_gallery_generator.rb +25 -0
  146. data/lib/generators/refinery/templates/config/initializers/refinery/photo_gallery.rb.erb +40 -0
  147. data/lib/refinery/photo_gallery/configuration.rb +33 -0
  148. data/lib/refinery/photo_gallery/engine.rb +33 -0
  149. data/lib/refinery/photo_gallery/version.rb +17 -0
  150. data/lib/refinery/photo_gallery.rb +30 -0
  151. data/lib/refinerycms-photo-gallery.rb +1 -0
  152. data/refinerycms-6hoursdaily-photo-gallery.gemspec +38 -0
  153. data/screenshots/01_collections#index.png +0 -0
  154. data/screenshots/02_albums#create.png +0 -0
  155. data/screenshots/03_photos#upload.png +0 -0
  156. data/screenshots/04_photos#upload- chooser.png +0 -0
  157. data/screenshots/05_photo#upoad-queue.png +0 -0
  158. data/screenshots/06_photos#upload-uploading.png +0 -0
  159. data/screenshots/07_photos#upload-uploading_2.png +0 -0
  160. data/screenshots/08_photos#edit_multiple.png +0 -0
  161. data/screenshots/09_albums#index.png +0 -0
  162. data/screenshots/10_albums_EXIF_reading.png +0 -0
  163. data/screenshots/11_frontend_show.png +0 -0
  164. data/screenshots/12_show_photo_using_fancybox.png +0 -0
  165. metadata +353 -0
@@ -0,0 +1,618 @@
1
+ /*1.5.4*/
2
+ (function () {
3
+ var f = 0, k = [], m = {}, i = {}, a = {"<":"lt", ">":"gt", "&":"amp", '"':"quot", "'":"#39"}, l = /[<>&\"\']/g, b, c = window.setTimeout, d = {}, e;
4
+
5
+ function h() {
6
+ this.returnValue = false
7
+ }
8
+
9
+ function j() {
10
+ this.cancelBubble = true
11
+ }
12
+
13
+ (function (n) {
14
+ var o = n.split(/,/), p, r, q;
15
+ for (p = 0; p < o.length; p += 2) {
16
+ q = o[p + 1].split(/ /);
17
+ for (r = 0; r < q.length; r++) {
18
+ i[q[r]] = o[p]
19
+ }
20
+ }
21
+ })("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mpga mpega mp2 mp3,audio/x-wav,wav,audio/mp4,m4a,image/bmp,bmp,image/gif,gif,image/jpeg,jpeg jpg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/vnd.rn-realvideo,rv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe");
22
+ var g = {VERSION:"1.5.4", STOPPED:1, STARTED:2, QUEUED:1, UPLOADING:2, FAILED:4, DONE:5, GENERIC_ERROR:-100, HTTP_ERROR:-200, IO_ERROR:-300, SECURITY_ERROR:-400, INIT_ERROR:-500, FILE_SIZE_ERROR:-600, FILE_EXTENSION_ERROR:-601, IMAGE_FORMAT_ERROR:-700, IMAGE_MEMORY_ERROR:-701, IMAGE_DIMENSIONS_ERROR:-702, mimeTypes:i, ua:(function () {
23
+ var r = navigator, q = r.userAgent, s = r.vendor, o, n, p;
24
+ o = /WebKit/.test(q);
25
+ p = o && s.indexOf("Apple") !== -1;
26
+ n = window.opera && window.opera.buildNumber;
27
+ return{windows:navigator.platform.indexOf("Win") !== -1, ie:!o && !n && (/MSIE/gi).test(q) && (/Explorer/gi).test(r.appName), webkit:o, gecko:!o && /Gecko/.test(q), safari:p, opera:!!n}
28
+ }()), typeOf:function (n) {
29
+ return({}).toString.call(n).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()
30
+ }, extend:function (n) {
31
+ g.each(arguments, function (o, p) {
32
+ if (p > 0) {
33
+ g.each(o, function (r, q) {
34
+ n[q] = r
35
+ })
36
+ }
37
+ });
38
+ return n
39
+ }, cleanName:function (n) {
40
+ var o, p;
41
+ p = [/[\300-\306]/g, "A", /[\340-\346]/g, "a", /\307/g, "C", /\347/g, "c", /[\310-\313]/g, "E", /[\350-\353]/g, "e", /[\314-\317]/g, "I", /[\354-\357]/g, "i", /\321/g, "N", /\361/g, "n", /[\322-\330]/g, "O", /[\362-\370]/g, "o", /[\331-\334]/g, "U", /[\371-\374]/g, "u"];
42
+ for (o = 0; o < p.length; o += 2) {
43
+ n = n.replace(p[o], p[o + 1])
44
+ }
45
+ n = n.replace(/\s+/g, "_");
46
+ n = n.replace(/[^a-z0-9_\-\.]+/gi, "");
47
+ return n
48
+ }, addRuntime:function (n, o) {
49
+ o.name = n;
50
+ k[n] = o;
51
+ k.push(o);
52
+ return o
53
+ }, guid:function () {
54
+ var n = new Date().getTime().toString(32), o;
55
+ for (o = 0; o < 5; o++) {
56
+ n += Math.floor(Math.random() * 65535).toString(32)
57
+ }
58
+ return(g.guidPrefix || "p") + n + (f++).toString(32)
59
+ }, buildUrl:function (o, n) {
60
+ var p = "";
61
+ g.each(n, function (r, q) {
62
+ p += (p ? "&" : "") + encodeURIComponent(q) + "=" + encodeURIComponent(r)
63
+ });
64
+ if (p) {
65
+ o += (o.indexOf("?") > 0 ? "&" : "?") + p
66
+ }
67
+ return o
68
+ }, each:function (q, r) {
69
+ var p, o, n;
70
+ if (q) {
71
+ p = q.length;
72
+ if (p === b) {
73
+ for (o in q) {
74
+ if (q.hasOwnProperty(o)) {
75
+ if (r(q[o], o) === false) {
76
+ return
77
+ }
78
+ }
79
+ }
80
+ } else {
81
+ for (n = 0; n < p; n++) {
82
+ if (r(q[n], n) === false) {
83
+ return
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }, formatSize:function (n) {
89
+ if (n === b || /\D/.test(n)) {
90
+ return g.translate("N/A")
91
+ }
92
+ if (n > 1073741824) {
93
+ return Math.round(n / 1073741824, 1) + " GB"
94
+ }
95
+ if (n > 1048576) {
96
+ return Math.round(n / 1048576, 1) + " MB"
97
+ }
98
+ if (n > 1024) {
99
+ return Math.round(n / 1024, 1) + " KB"
100
+ }
101
+ return n + " b"
102
+ }, getPos:function (o, s) {
103
+ var t = 0, r = 0, v, u = document, p, q;
104
+ o = o;
105
+ s = s || u.body;
106
+ function n(B) {
107
+ var z, A, w = 0, C = 0;
108
+ if (B) {
109
+ A = B.getBoundingClientRect();
110
+ z = u.compatMode === "CSS1Compat" ? u.documentElement : u.body;
111
+ w = A.left + z.scrollLeft;
112
+ C = A.top + z.scrollTop
113
+ }
114
+ return{x:w, y:C}
115
+ }
116
+
117
+ if (o && o.getBoundingClientRect && ((navigator.userAgent.indexOf("MSIE") > 0) && (u.documentMode < 8))) {
118
+ p = n(o);
119
+ q = n(s);
120
+ return{x:p.x - q.x, y:p.y - q.y}
121
+ }
122
+ v = o;
123
+ while (v && v != s && v.nodeType) {
124
+ t += v.offsetLeft || 0;
125
+ r += v.offsetTop || 0;
126
+ v = v.offsetParent
127
+ }
128
+ v = o.parentNode;
129
+ while (v && v != s && v.nodeType) {
130
+ t -= v.scrollLeft || 0;
131
+ r -= v.scrollTop || 0;
132
+ v = v.parentNode
133
+ }
134
+ return{x:t, y:r}
135
+ }, getSize:function (n) {
136
+ return{w:n.offsetWidth || n.clientWidth, h:n.offsetHeight || n.clientHeight}
137
+ }, parseSize:function (n) {
138
+ var o;
139
+ if (typeof(n) == "string") {
140
+ n = /^([0-9]+)([mgk]?)$/.exec(n.toLowerCase().replace(/[^0-9mkg]/g, ""));
141
+ o = n[2];
142
+ n = +n[1];
143
+ if (o == "g") {
144
+ n *= 1073741824
145
+ }
146
+ if (o == "m") {
147
+ n *= 1048576
148
+ }
149
+ if (o == "k") {
150
+ n *= 1024
151
+ }
152
+ }
153
+ return n
154
+ }, xmlEncode:function (n) {
155
+ return n ? ("" + n).replace(l, function (o) {
156
+ return a[o] ? "&" + a[o] + ";" : o
157
+ }) : n
158
+ }, toArray:function (p) {
159
+ var o, n = [];
160
+ for (o = 0; o < p.length; o++) {
161
+ n[o] = p[o]
162
+ }
163
+ return n
164
+ }, inArray:function (p, q) {
165
+ if (q) {
166
+ if (Array.prototype.indexOf) {
167
+ return Array.prototype.indexOf.call(q, p)
168
+ }
169
+ for (var n = 0, o = q.length; n < o; n++) {
170
+ if (q[n] === p) {
171
+ return n
172
+ }
173
+ }
174
+ }
175
+ return -1
176
+ }, addI18n:function (n) {
177
+ return g.extend(m, n)
178
+ }, translate:function (n) {
179
+ return m[n] || n
180
+ }, isEmptyObj:function (n) {
181
+ if (n === b) {
182
+ return true
183
+ }
184
+ for (var o in n) {
185
+ return false
186
+ }
187
+ return true
188
+ }, hasClass:function (p, o) {
189
+ var n;
190
+ if (p.className == "") {
191
+ return false
192
+ }
193
+ n = new RegExp("(^|\\s+)" + o + "(\\s+|$)");
194
+ return n.test(p.className)
195
+ }, addClass:function (o, n) {
196
+ if (!g.hasClass(o, n)) {
197
+ o.className = o.className == "" ? n : o.className.replace(/\s+$/, "") + " " + n
198
+ }
199
+ }, removeClass:function (p, o) {
200
+ var n = new RegExp("(^|\\s+)" + o + "(\\s+|$)");
201
+ p.className = p.className.replace(n, function (r, q, s) {
202
+ return q === " " && s === " " ? " " : ""
203
+ })
204
+ }, getStyle:function (o, n) {
205
+ if (o.currentStyle) {
206
+ return o.currentStyle[n]
207
+ } else {
208
+ if (window.getComputedStyle) {
209
+ return window.getComputedStyle(o, null)[n]
210
+ }
211
+ }
212
+ }, addEvent:function (s, n, t) {
213
+ var r, q, p, o;
214
+ o = arguments[3];
215
+ n = n.toLowerCase();
216
+ if (e === b) {
217
+ e = "Plupload_" + g.guid()
218
+ }
219
+ if (s.addEventListener) {
220
+ r = t;
221
+ s.addEventListener(n, r, false)
222
+ } else {
223
+ if (s.attachEvent) {
224
+ r = function () {
225
+ var u = window.event;
226
+ if (!u.target) {
227
+ u.target = u.srcElement
228
+ }
229
+ u.preventDefault = h;
230
+ u.stopPropagation = j;
231
+ t(u)
232
+ };
233
+ s.attachEvent("on" + n, r)
234
+ }
235
+ }
236
+ if (s[e] === b) {
237
+ s[e] = g.guid()
238
+ }
239
+ if (!d.hasOwnProperty(s[e])) {
240
+ d[s[e]] = {}
241
+ }
242
+ q = d[s[e]];
243
+ if (!q.hasOwnProperty(n)) {
244
+ q[n] = []
245
+ }
246
+ q[n].push({func:r, orig:t, key:o})
247
+ }, removeEvent:function (s, n) {
248
+ var q, t, p;
249
+ if (typeof(arguments[2]) == "function") {
250
+ t = arguments[2]
251
+ } else {
252
+ p = arguments[2]
253
+ }
254
+ n = n.toLowerCase();
255
+ if (s[e] && d[s[e]] && d[s[e]][n]) {
256
+ q = d[s[e]][n]
257
+ } else {
258
+ return
259
+ }
260
+ for (var o = q.length - 1; o >= 0; o--) {
261
+ if (q[o].key === p || q[o].orig === t) {
262
+ if (s.removeEventListener) {
263
+ s.removeEventListener(n, q[o].func, false)
264
+ } else {
265
+ if (s.detachEvent) {
266
+ s.detachEvent("on" + n, q[o].func)
267
+ }
268
+ }
269
+ q[o].orig = null;
270
+ q[o].func = null;
271
+ q.splice(o, 1);
272
+ if (t !== b) {
273
+ break
274
+ }
275
+ }
276
+ }
277
+ if (!q.length) {
278
+ delete d[s[e]][n]
279
+ }
280
+ if (g.isEmptyObj(d[s[e]])) {
281
+ delete d[s[e]];
282
+ try {
283
+ delete s[e]
284
+ } catch (r) {
285
+ s[e] = b
286
+ }
287
+ }
288
+ }, removeAllEvents:function (o) {
289
+ var n = arguments[1];
290
+ if (o[e] === b || !o[e]) {
291
+ return
292
+ }
293
+ g.each(d[o[e]], function (q, p) {
294
+ g.removeEvent(o, p, n)
295
+ })
296
+ }};
297
+ g.Uploader = function (r) {
298
+ var o = {}, u, t = [], q, p = false;
299
+ u = new g.QueueProgress();
300
+ r = g.extend({chunk_size:0, multipart:true, multi_selection:true, file_data_name:"file", filters:[]}, r);
301
+ function s() {
302
+ var w, x = 0, v;
303
+ if (this.state == g.STARTED) {
304
+ for (v = 0; v < t.length; v++) {
305
+ if (!w && t[v].status == g.QUEUED) {
306
+ w = t[v];
307
+ w.status = g.UPLOADING;
308
+ if (this.trigger("BeforeUpload", w)) {
309
+ this.trigger("UploadFile", w)
310
+ }
311
+ } else {
312
+ x++
313
+ }
314
+ }
315
+ if (x == t.length) {
316
+ this.stop();
317
+ this.trigger("UploadComplete", t)
318
+ }
319
+ }
320
+ }
321
+
322
+ function n() {
323
+ var w, v;
324
+ u.reset();
325
+ for (w = 0; w < t.length; w++) {
326
+ v = t[w];
327
+ if (v.size !== b) {
328
+ u.size += v.size;
329
+ u.loaded += v.loaded
330
+ } else {
331
+ u.size = b
332
+ }
333
+ if (v.status == g.DONE) {
334
+ u.uploaded++
335
+ } else {
336
+ if (v.status == g.FAILED) {
337
+ u.failed++
338
+ } else {
339
+ u.queued++
340
+ }
341
+ }
342
+ }
343
+ if (u.size === b) {
344
+ u.percent = t.length > 0 ? Math.ceil(u.uploaded / t.length * 100) : 0
345
+ } else {
346
+ u.bytesPerSec = Math.ceil(u.loaded / ((+new Date() - q || 1) / 1000));
347
+ u.percent = u.size > 0 ? Math.ceil(u.loaded / u.size * 100) : 0
348
+ }
349
+ }
350
+
351
+ g.extend(this, {state:g.STOPPED, runtime:"", features:{}, files:t, settings:r, total:u, id:g.guid(), init:function () {
352
+ var A = this, B, x, w, z = 0, y;
353
+ if (typeof(r.preinit) == "function") {
354
+ r.preinit(A)
355
+ } else {
356
+ g.each(r.preinit, function (D, C) {
357
+ A.bind(C, D)
358
+ })
359
+ }
360
+ r.page_url = r.page_url || document.location.pathname.replace(/\/[^\/]+$/g, "/");
361
+ if (!/^(\w+:\/\/|\/)/.test(r.url)) {
362
+ r.url = r.page_url + r.url
363
+ }
364
+ r.chunk_size = g.parseSize(r.chunk_size);
365
+ r.max_file_size = g.parseSize(r.max_file_size);
366
+ A.bind("FilesAdded", function (C, F) {
367
+ var E, D, H = 0, I, G = r.filters;
368
+ if (G && G.length) {
369
+ I = [];
370
+ g.each(G, function (J) {
371
+ g.each(J.extensions.split(/,/), function (K) {
372
+ if (/^\s*\*\s*$/.test(K)) {
373
+ I.push("\\.*")
374
+ } else {
375
+ I.push("\\." + K.replace(new RegExp("[" + ("/^$.*+?|()[]{}\\".replace(/./g, "\\$&")) + "]", "g"), "\\$&"))
376
+ }
377
+ })
378
+ });
379
+ I = new RegExp(I.join("|") + "$", "i")
380
+ }
381
+ for (E = 0; E < F.length; E++) {
382
+ D = F[E];
383
+ D.loaded = 0;
384
+ D.percent = 0;
385
+ D.status = g.QUEUED;
386
+ if (I && !I.test(D.name)) {
387
+ C.trigger("Error", {code:g.FILE_EXTENSION_ERROR, message:g.translate("File extension error."), file:D});
388
+ continue
389
+ }
390
+ if (D.size !== b && D.size > r.max_file_size) {
391
+ C.trigger("Error", {code:g.FILE_SIZE_ERROR, message:g.translate("File size error."), file:D});
392
+ continue
393
+ }
394
+ t.push(D);
395
+ H++
396
+ }
397
+ if (H) {
398
+ c(function () {
399
+ A.trigger("QueueChanged");
400
+ A.refresh()
401
+ }, 1)
402
+ } else {
403
+ return false
404
+ }
405
+ });
406
+ if (r.unique_names) {
407
+ A.bind("UploadFile", function (C, D) {
408
+ var F = D.name.match(/\.([^.]+)$/), E = "tmp";
409
+ if (F) {
410
+ E = F[1]
411
+ }
412
+ D.target_name = D.id + "." + E
413
+ })
414
+ }
415
+ A.bind("UploadProgress", function (C, D) {
416
+ D.percent = D.size > 0 ? Math.ceil(D.loaded / D.size * 100) : 100;
417
+ n()
418
+ });
419
+ A.bind("StateChanged", function (C) {
420
+ if (C.state == g.STARTED) {
421
+ q = (+new Date())
422
+ } else {
423
+ if (C.state == g.STOPPED) {
424
+ for (B = C.files.length - 1; B >= 0; B--) {
425
+ if (C.files[B].status == g.UPLOADING) {
426
+ C.files[B].status = g.QUEUED;
427
+ n()
428
+ }
429
+ }
430
+ }
431
+ }
432
+ });
433
+ A.bind("QueueChanged", n);
434
+ A.bind("Error", function (C, D) {
435
+ if (D.file) {
436
+ D.file.status = g.FAILED;
437
+ n();
438
+ if (C.state == g.STARTED) {
439
+ c(function () {
440
+ s.call(A)
441
+ }, 1)
442
+ }
443
+ }
444
+ });
445
+ A.bind("FileUploaded", function (C, D) {
446
+ D.status = g.DONE;
447
+ D.loaded = D.size;
448
+ C.trigger("UploadProgress", D);
449
+ c(function () {
450
+ s.call(A)
451
+ }, 1)
452
+ });
453
+ if (r.runtimes) {
454
+ x = [];
455
+ y = r.runtimes.split(/\s?,\s?/);
456
+ for (B = 0; B < y.length; B++) {
457
+ if (k[y[B]]) {
458
+ x.push(k[y[B]])
459
+ }
460
+ }
461
+ } else {
462
+ x = k
463
+ }
464
+ function v() {
465
+ var F = x[z++], E, C, D;
466
+ if (F) {
467
+ E = F.getFeatures();
468
+ C = A.settings.required_features;
469
+ if (C) {
470
+ C = C.split(",");
471
+ for (D = 0; D < C.length; D++) {
472
+ if (!E[C[D]]) {
473
+ v();
474
+ return
475
+ }
476
+ }
477
+ }
478
+ F.init(A, function (G) {
479
+ if (G && G.success) {
480
+ A.features = E;
481
+ A.runtime = F.name;
482
+ A.trigger("Init", {runtime:F.name});
483
+ A.trigger("PostInit");
484
+ A.refresh()
485
+ } else {
486
+ v()
487
+ }
488
+ })
489
+ } else {
490
+ A.trigger("Error", {code:g.INIT_ERROR, message:g.translate("Init error.")})
491
+ }
492
+ }
493
+
494
+ v();
495
+ if (typeof(r.init) == "function") {
496
+ r.init(A)
497
+ } else {
498
+ g.each(r.init, function (D, C) {
499
+ A.bind(C, D)
500
+ })
501
+ }
502
+ }, refresh:function () {
503
+ this.trigger("Refresh")
504
+ }, start:function () {
505
+ if (t.length && this.state != g.STARTED) {
506
+ this.state = g.STARTED;
507
+ this.trigger("StateChanged");
508
+ s.call(this)
509
+ }
510
+ }, stop:function () {
511
+ if (this.state != g.STOPPED) {
512
+ this.state = g.STOPPED;
513
+ this.trigger("CancelUpload");
514
+ this.trigger("StateChanged")
515
+ }
516
+ }, disableBrowse:function () {
517
+ p = arguments[0] !== b ? arguments[0] : true;
518
+ this.trigger("DisableBrowse", p)
519
+ }, getFile:function (w) {
520
+ var v;
521
+ for (v = t.length - 1; v >= 0; v--) {
522
+ if (t[v].id === w) {
523
+ return t[v]
524
+ }
525
+ }
526
+ }, removeFile:function (w) {
527
+ var v;
528
+ for (v = t.length - 1; v >= 0; v--) {
529
+ if (t[v].id === w.id) {
530
+ return this.splice(v, 1)[0]
531
+ }
532
+ }
533
+ }, splice:function (x, v) {
534
+ var w;
535
+ w = t.splice(x === b ? 0 : x, v === b ? t.length : v);
536
+ this.trigger("FilesRemoved", w);
537
+ this.trigger("QueueChanged");
538
+ return w
539
+ }, trigger:function (w) {
540
+ var y = o[w.toLowerCase()], x, v;
541
+ if (y) {
542
+ v = Array.prototype.slice.call(arguments);
543
+ v[0] = this;
544
+ for (x = 0; x < y.length; x++) {
545
+ if (y[x].func.apply(y[x].scope, v) === false) {
546
+ return false
547
+ }
548
+ }
549
+ }
550
+ return true
551
+ }, hasEventListener:function (v) {
552
+ return !!o[v.toLowerCase()]
553
+ }, bind:function (v, x, w) {
554
+ var y;
555
+ v = v.toLowerCase();
556
+ y = o[v] || [];
557
+ y.push({func:x, scope:w || this});
558
+ o[v] = y
559
+ }, unbind:function (v) {
560
+ v = v.toLowerCase();
561
+ var y = o[v], w, x = arguments[1];
562
+ if (y) {
563
+ if (x !== b) {
564
+ for (w = y.length - 1; w >= 0; w--) {
565
+ if (y[w].func === x) {
566
+ y.splice(w, 1);
567
+ break
568
+ }
569
+ }
570
+ } else {
571
+ y = []
572
+ }
573
+ if (!y.length) {
574
+ delete o[v]
575
+ }
576
+ }
577
+ }, unbindAll:function () {
578
+ var v = this;
579
+ g.each(o, function (x, w) {
580
+ v.unbind(w)
581
+ })
582
+ }, destroy:function () {
583
+ this.stop();
584
+ this.trigger("Destroy");
585
+ this.unbindAll()
586
+ }})
587
+ };
588
+ g.File = function (q, o, p) {
589
+ var n = this;
590
+ n.id = q;
591
+ n.name = o;
592
+ n.size = p;
593
+ n.loaded = 0;
594
+ n.percent = 0;
595
+ n.status = 0
596
+ };
597
+ g.Runtime = function () {
598
+ this.getFeatures = function () {
599
+ };
600
+ this.init = function (n, o) {
601
+ }
602
+ };
603
+ g.QueueProgress = function () {
604
+ var n = this;
605
+ n.size = 0;
606
+ n.loaded = 0;
607
+ n.uploaded = 0;
608
+ n.failed = 0;
609
+ n.queued = 0;
610
+ n.percent = 0;
611
+ n.bytesPerSec = 0;
612
+ n.reset = function () {
613
+ n.size = n.loaded = n.uploaded = n.failed = n.queued = n.percent = n.bytesPerSec = 0
614
+ }
615
+ };
616
+ g.runtimes = {};
617
+ window.plupload = g
618
+ })();
@@ -0,0 +1 @@
1
+ (function(g,b,d,e){var a={},h={};function c(o){var n,m=typeof o,j,l,k;if(o===e||o===null){return"null"}if(m==="string"){n="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(q,p){var i=n.indexOf(p);if(i+1){return"\\"+n.charAt(i+1)}q=p.charCodeAt().toString(16);return"\\u"+"0000".substring(q.length)+q})+'"'}if(m=="object"){j=o.length!==e;n="";if(j){for(l=0;l<o.length;l++){if(n){n+=","}n+=c(o[l])}n="["+n+"]"}else{for(k in o){if(o.hasOwnProperty(k)){if(n){n+=","}n+=c(k)+":"+c(o[k])}}n="{"+n+"}"}return n}return""+o}function f(r){var u=false,i=null,n=null,j,k,l,t,m,p=0;try{try{n=new ActiveXObject("AgControl.AgControl");if(n.IsVersionSupported(r)){u=true}n=null}catch(q){var o=navigator.plugins["Silverlight Plug-In"];if(o){j=o.description;if(j==="1.0.30226.2"){j="2.0.30226.2"}k=j.split(".");while(k.length>3){k.pop()}while(k.length<4){k.push(0)}l=r.split(".");while(l.length>4){l.pop()}do{t=parseInt(l[p],10);m=parseInt(k[p],10);p++}while(p<l.length&&t===m);if(t<=m&&!isNaN(t)){u=true}}}}catch(s){u=false}return u}d.silverlight={trigger:function(n,k){var m=a[n],l,j;if(m){j=d.toArray(arguments).slice(1);j[0]="Silverlight:"+k;setTimeout(function(){m.trigger.apply(m,j)},0)}}};d.runtimes.Silverlight=d.addRuntime("silverlight",{getFeatures:function(){return{jpgresize:true,pngresize:true,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(p,q){var o,m="",n=p.settings.filters,l,k=b.body;if(!f("2.0.31005.0")||(g.opera&&g.opera.buildNumber)){q({success:false});return}h[p.id]=false;a[p.id]=p;o=b.createElement("div");o.id=p.id+"_silverlight_container";d.extend(o.style,{position:"absolute",top:"0px",background:p.settings.shim_bgcolor||"transparent",zIndex:99999,width:"100px",height:"100px",overflow:"hidden",opacity:p.settings.shim_bgcolor||b.documentMode>8?"":0.01});o.className="plupload silverlight";if(p.settings.container){k=b.getElementById(p.settings.container);if(d.getStyle(k,"position")==="static"){k.style.position="relative"}}k.appendChild(o);for(l=0;l<n.length;l++){m+=(m!=""?"|":"")+n[l].title+" | *."+n[l].extensions.replace(/,/g,";*.")}o.innerHTML='<object id="'+p.id+'_silverlight" data="data:application/x-silverlight," type="application/x-silverlight-2" style="outline:none;" width="1024" height="1024"><param name="source" value="'+p.settings.silverlight_xap_url+'"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="id='+p.id+",filter="+m+",multiselect="+p.settings.multi_selection+'"/></object>';function j(){return b.getElementById(p.id+"_silverlight").content.Upload}p.bind("Silverlight:Init",function(){var i,r={};if(h[p.id]){return}h[p.id]=true;p.bind("Silverlight:StartSelectFiles",function(s){i=[]});p.bind("Silverlight:SelectFile",function(s,v,t,u){var w;w=d.guid();r[w]=v;r[v]=w;i.push(new d.File(w,t,u))});p.bind("Silverlight:SelectSuccessful",function(){if(i.length){p.trigger("FilesAdded",i)}});p.bind("Silverlight:UploadChunkError",function(s,v,t,w,u){p.trigger("Error",{code:d.IO_ERROR,message:"IO Error.",details:u,file:s.getFile(r[v])})});p.bind("Silverlight:UploadFileProgress",function(s,w,t,v){var u=s.getFile(r[w]);if(u.status!=d.FAILED){u.size=v;u.loaded=t;s.trigger("UploadProgress",u)}});p.bind("Refresh",function(s){var t,u,v;t=b.getElementById(s.settings.browse_button);if(t){u=d.getPos(t,b.getElementById(s.settings.container));v=d.getSize(t);d.extend(b.getElementById(s.id+"_silverlight_container").style,{top:u.y+"px",left:u.x+"px",width:v.w+"px",height:v.h+"px"})}});p.bind("Silverlight:UploadChunkSuccessful",function(s,v,t,y,x){var w,u=s.getFile(r[v]);w={chunk:t,chunks:y,response:x};s.trigger("ChunkUploaded",u,w);if(u.status!=d.FAILED&&s.state!==d.STOPPED){j().UploadNextChunk()}if(t==y-1){u.status=d.DONE;s.trigger("FileUploaded",u,{response:x})}});p.bind("Silverlight:UploadSuccessful",function(s,v,t){var u=s.getFile(r[v]);u.status=d.DONE;s.trigger("FileUploaded",u,{response:t})});p.bind("FilesRemoved",function(s,u){var t;for(t=0;t<u.length;t++){j().RemoveFile(r[u[t].id])}});p.bind("UploadFile",function(s,u){var v=s.settings,t=v.resize||{};j().UploadFile(r[u.id],s.settings.url,c({name:u.target_name||u.name,mime:d.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:v.chunk_size,image_width:t.width,image_height:t.height,image_quality:t.quality||90,multipart:!!v.multipart,multipart_params:v.multipart_params||{},file_data_name:v.file_data_name,headers:v.headers}))});p.bind("CancelUpload",function(){j().CancelUpload()});p.bind("Silverlight:MouseEnter",function(s){var t,u;t=b.getElementById(p.settings.browse_button);u=s.settings.browse_button_hover;if(t&&u){d.addClass(t,u)}});p.bind("Silverlight:MouseLeave",function(s){var t,u;t=b.getElementById(p.settings.browse_button);u=s.settings.browse_button_hover;if(t&&u){d.removeClass(t,u)}});p.bind("Silverlight:MouseLeftButtonDown",function(s){var t,u;t=b.getElementById(p.settings.browse_button);u=s.settings.browse_button_active;if(t&&u){d.addClass(t,u);d.addEvent(b.body,"mouseup",function(){d.removeClass(t,u)})}});p.bind("Sliverlight:StartSelectFiles",function(s){var t,u;t=b.getElementById(p.settings.browse_button);u=s.settings.browse_button_active;if(t&&u){d.removeClass(t,u)}});p.bind("DisableBrowse",function(s,t){j().DisableBrowse(t)});p.bind("Destroy",function(s){var t;d.removeAllEvents(b.body,s.id);delete h[s.id];delete a[s.id];t=b.getElementById(s.id+"_silverlight_container");if(t){k.removeChild(t)}});q({success:true})})}})})(window,document,plupload);
@@ -0,0 +1,46 @@
1
+ Plupload - Cross browser and platform uploader API
2
+ ===================================================
3
+
4
+ What is Plupload
5
+ -----------------
6
+ Plupload is a JavaScript API for dealing with file uploads it supports features like multiple file selection, file type filtering,
7
+ request chunking, client side image scaling and it uses different runtimes to achieve this such as HTML 5, Silverlight, Flash, Gears and BrowserPlus.
8
+
9
+ What you need to build Plupload
10
+ -------------------------------
11
+ * Install the Java JDK or JRE packages you can find it at: [http://java.sun.com/javase/downloads/index.jsp](http://java.sun.com/javase/downloads/index.jsp)
12
+ * Install Apache Ant you can find it at: [http://ant.apache.org/](http://ant.apache.org/)
13
+ * Add Apache Ant to your systems path environment variable, this is not required but makes it easier to issue commands to Ant without having to type the full path for it.
14
+
15
+ How to build Plupload
16
+ ----------------------
17
+
18
+ In the root directory of Plupload where the build.xml file is you can run ant against different targets.
19
+
20
+ `ant`
21
+
22
+ Will combine, preprocess and minify the Plupload classes into the js directory. It will not build the Silverlight and Flash .xap and .swf files.
23
+
24
+ `ant moxiedoc`
25
+
26
+ Will generate API Documentation for the project using the Moxiedoc tool. The docs will be generated to the docs/api directory.
27
+
28
+ `ant release`
29
+
30
+ Will produce release packages. The release packages will be placed in the tmp directory.
31
+
32
+ How to build Flash runtime
33
+ ---------------------------
34
+ The Flash runtime uses a .swf file that can be built using the Flex SDK. This SDK can be downloaded from Adobe. [http://www.adobe.com/products/flex/flexdownloads/](http://www.adobe.com/products/flex/flexdownloads/)
35
+
36
+ How to build Silverlight runtime
37
+ ---------------------------------
38
+ The Silverlight runtime uses a .xap file that can be built using the Silverlight SDK or Visual Studio. [http://silverlight.net/getstarted/](http://silverlight.net/getstarted/)
39
+
40
+ Running the development version
41
+ --------------------------------
42
+ The unminified development version of the javascript files can be executed by opening the examples/queue_widget_dev.html file running on a Web Server.
43
+
44
+ Contributing to the Plupload project
45
+ -------------------------------------
46
+ You can read more about how to contribute to this project at [http://www.plupload.com/contributing](http://www.plupload.com/contributing)