boss-cms 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1029) hide show
  1. data/COPYING +16 -0
  2. data/README.rdoc +63 -0
  3. data/Rakefile +38 -0
  4. data/app/assets/images/boss/ajax-loader.gif +0 -0
  5. data/app/assets/images/boss/icons/Small Icons/accdb.ico +0 -0
  6. data/app/assets/images/boss/icons/Small Icons/avi.ico +0 -0
  7. data/app/assets/images/boss/icons/Small Icons/bmp.ico +0 -0
  8. data/app/assets/images/boss/icons/Small Icons/css.ico +0 -0
  9. data/app/assets/images/boss/icons/Small Icons/docx_mac.ico +0 -0
  10. data/app/assets/images/boss/icons/Small Icons/docx_win.ico +0 -0
  11. data/app/assets/images/boss/icons/Small Icons/eml.ico +0 -0
  12. data/app/assets/images/boss/icons/Small Icons/eps.ico +0 -0
  13. data/app/assets/images/boss/icons/Small Icons/fla.ico +0 -0
  14. data/app/assets/images/boss/icons/Small Icons/gif.ico +0 -0
  15. data/app/assets/images/boss/icons/Small Icons/html.ico +0 -0
  16. data/app/assets/images/boss/icons/Small Icons/ind.ico +0 -0
  17. data/app/assets/images/boss/icons/Small Icons/ini.ico +0 -0
  18. data/app/assets/images/boss/icons/Small Icons/jpeg.ico +0 -0
  19. data/app/assets/images/boss/icons/Small Icons/jsf.ico +0 -0
  20. data/app/assets/images/boss/icons/Small Icons/midi.ico +0 -0
  21. data/app/assets/images/boss/icons/Small Icons/mov.ico +0 -0
  22. data/app/assets/images/boss/icons/Small Icons/mp3.ico +0 -0
  23. data/app/assets/images/boss/icons/Small Icons/mpeg.ico +0 -0
  24. data/app/assets/images/boss/icons/Small Icons/pdf.ico +0 -0
  25. data/app/assets/images/boss/icons/Small Icons/png.ico +0 -0
  26. data/app/assets/images/boss/icons/Small Icons/pptx_mac.ico +0 -0
  27. data/app/assets/images/boss/icons/Small Icons/pptx_win.ico +0 -0
  28. data/app/assets/images/boss/icons/Small Icons/proj.ico +0 -0
  29. data/app/assets/images/boss/icons/Small Icons/psd.ico +0 -0
  30. data/app/assets/images/boss/icons/Small Icons/pst.ico +0 -0
  31. data/app/assets/images/boss/icons/Small Icons/pub.ico +0 -0
  32. data/app/assets/images/boss/icons/Small Icons/rar.ico +0 -0
  33. data/app/assets/images/boss/icons/Small Icons/readme.ico +0 -0
  34. data/app/assets/images/boss/icons/Small Icons/settings.ico +0 -0
  35. data/app/assets/images/boss/icons/Small Icons/text.ico +0 -0
  36. data/app/assets/images/boss/icons/Small Icons/tiff.ico +0 -0
  37. data/app/assets/images/boss/icons/Small Icons/url.ico +0 -0
  38. data/app/assets/images/boss/icons/Small Icons/vsd.ico +0 -0
  39. data/app/assets/images/boss/icons/Small Icons/wav.ico +0 -0
  40. data/app/assets/images/boss/icons/Small Icons/wma.ico +0 -0
  41. data/app/assets/images/boss/icons/Small Icons/wmv.ico +0 -0
  42. data/app/assets/images/boss/icons/Small Icons/xlsx_mac.ico +0 -0
  43. data/app/assets/images/boss/icons/Small Icons/xlsx_win.ico +0 -0
  44. data/app/assets/images/boss/icons/Small Icons/zip.ico +0 -0
  45. data/app/assets/images/boss/icons/accdb/accdb-128_32.png +0 -0
  46. data/app/assets/images/boss/icons/accdb/accdb-16_32.png +0 -0
  47. data/app/assets/images/boss/icons/accdb/accdb-24_32.png +0 -0
  48. data/app/assets/images/boss/icons/accdb/accdb-256_32.png +0 -0
  49. data/app/assets/images/boss/icons/accdb/accdb-32_32.png +0 -0
  50. data/app/assets/images/boss/icons/accdb/accdb-48_32.png +0 -0
  51. data/app/assets/images/boss/icons/accdb/accdb-64_32.png +0 -0
  52. data/app/assets/images/boss/icons/accdb/accdb-72_32.png +0 -0
  53. data/app/assets/images/boss/icons/accdb/accdb-80_32.png +0 -0
  54. data/app/assets/images/boss/icons/accdb/accdb-96_32.png +0 -0
  55. data/app/assets/images/boss/icons/accdb/accdb-sm-16_32.png +0 -0
  56. data/app/assets/images/boss/icons/accdb/accdb-sm-24_32.png +0 -0
  57. data/app/assets/images/boss/icons/accdb/accdb-sm-32_32.png +0 -0
  58. data/app/assets/images/boss/icons/accdb/accdb-sm.ico +0 -0
  59. data/app/assets/images/boss/icons/accdb/accdb.ico +0 -0
  60. data/app/assets/images/boss/icons/avi/avi-128_32.png +0 -0
  61. data/app/assets/images/boss/icons/avi/avi-16_32.png +0 -0
  62. data/app/assets/images/boss/icons/avi/avi-24_32.png +0 -0
  63. data/app/assets/images/boss/icons/avi/avi-256_32.png +0 -0
  64. data/app/assets/images/boss/icons/avi/avi-32_32.png +0 -0
  65. data/app/assets/images/boss/icons/avi/avi-48_32.png +0 -0
  66. data/app/assets/images/boss/icons/avi/avi-64_32.png +0 -0
  67. data/app/assets/images/boss/icons/avi/avi-72_32.png +0 -0
  68. data/app/assets/images/boss/icons/avi/avi-80_32.png +0 -0
  69. data/app/assets/images/boss/icons/avi/avi-96_32.png +0 -0
  70. data/app/assets/images/boss/icons/avi/avi-sm-16_32.png +0 -0
  71. data/app/assets/images/boss/icons/avi/avi-sm-24_32.png +0 -0
  72. data/app/assets/images/boss/icons/avi/avi-sm-32_32.png +0 -0
  73. data/app/assets/images/boss/icons/avi/avi-sm.ico +0 -0
  74. data/app/assets/images/boss/icons/avi/avi.icns +0 -0
  75. data/app/assets/images/boss/icons/avi/avi.ico +0 -0
  76. data/app/assets/images/boss/icons/bmp/bmp-128_32.png +0 -0
  77. data/app/assets/images/boss/icons/bmp/bmp-16_32.png +0 -0
  78. data/app/assets/images/boss/icons/bmp/bmp-24_32.png +0 -0
  79. data/app/assets/images/boss/icons/bmp/bmp-256_32.png +0 -0
  80. data/app/assets/images/boss/icons/bmp/bmp-32_32.png +0 -0
  81. data/app/assets/images/boss/icons/bmp/bmp-48_32.png +0 -0
  82. data/app/assets/images/boss/icons/bmp/bmp-64_32.png +0 -0
  83. data/app/assets/images/boss/icons/bmp/bmp-72_32.png +0 -0
  84. data/app/assets/images/boss/icons/bmp/bmp-80_32.png +0 -0
  85. data/app/assets/images/boss/icons/bmp/bmp-96_32.png +0 -0
  86. data/app/assets/images/boss/icons/bmp/bmp-sm-16_32.png +0 -0
  87. data/app/assets/images/boss/icons/bmp/bmp-sm-24_32.png +0 -0
  88. data/app/assets/images/boss/icons/bmp/bmp-sm-32_32.png +0 -0
  89. data/app/assets/images/boss/icons/bmp/bmp-sm.ico +0 -0
  90. data/app/assets/images/boss/icons/bmp/bmp.icns +0 -0
  91. data/app/assets/images/boss/icons/bmp/bmp.ico +0 -0
  92. data/app/assets/images/boss/icons/css/css-128_32.png +0 -0
  93. data/app/assets/images/boss/icons/css/css-16_32.png +0 -0
  94. data/app/assets/images/boss/icons/css/css-24_32.png +0 -0
  95. data/app/assets/images/boss/icons/css/css-256_32.png +0 -0
  96. data/app/assets/images/boss/icons/css/css-32_32.png +0 -0
  97. data/app/assets/images/boss/icons/css/css-48_32.png +0 -0
  98. data/app/assets/images/boss/icons/css/css-64_32.png +0 -0
  99. data/app/assets/images/boss/icons/css/css-72_32.png +0 -0
  100. data/app/assets/images/boss/icons/css/css-80_32.png +0 -0
  101. data/app/assets/images/boss/icons/css/css-96_32.png +0 -0
  102. data/app/assets/images/boss/icons/css/css-sm-16_32.png +0 -0
  103. data/app/assets/images/boss/icons/css/css-sm-24_32.png +0 -0
  104. data/app/assets/images/boss/icons/css/css-sm-32_32.png +0 -0
  105. data/app/assets/images/boss/icons/css/css-sm.ico +0 -0
  106. data/app/assets/images/boss/icons/css/css.icns +0 -0
  107. data/app/assets/images/boss/icons/css/css.ico +0 -0
  108. data/app/assets/images/boss/icons/docx_mac/docx_mac-128_32.png +0 -0
  109. data/app/assets/images/boss/icons/docx_mac/docx_mac-16_32.png +0 -0
  110. data/app/assets/images/boss/icons/docx_mac/docx_mac-24_32.png +0 -0
  111. data/app/assets/images/boss/icons/docx_mac/docx_mac-256_32.png +0 -0
  112. data/app/assets/images/boss/icons/docx_mac/docx_mac-32_32.png +0 -0
  113. data/app/assets/images/boss/icons/docx_mac/docx_mac-48_32.png +0 -0
  114. data/app/assets/images/boss/icons/docx_mac/docx_mac-64_32.png +0 -0
  115. data/app/assets/images/boss/icons/docx_mac/docx_mac-72_32.png +0 -0
  116. data/app/assets/images/boss/icons/docx_mac/docx_mac-80_32.png +0 -0
  117. data/app/assets/images/boss/icons/docx_mac/docx_mac-96_32.png +0 -0
  118. data/app/assets/images/boss/icons/docx_mac/docx_mac-sm-16_32.png +0 -0
  119. data/app/assets/images/boss/icons/docx_mac/docx_mac-sm-24_32.png +0 -0
  120. data/app/assets/images/boss/icons/docx_mac/docx_mac-sm-32_32.png +0 -0
  121. data/app/assets/images/boss/icons/docx_mac/docx_mac-sm.ico +0 -0
  122. data/app/assets/images/boss/icons/docx_mac/docx_mac.icns +0 -0
  123. data/app/assets/images/boss/icons/docx_mac/docx_mac.ico +0 -0
  124. data/app/assets/images/boss/icons/docx_win/docx_win-128_32.png +0 -0
  125. data/app/assets/images/boss/icons/docx_win/docx_win-16_32.png +0 -0
  126. data/app/assets/images/boss/icons/docx_win/docx_win-24_32.png +0 -0
  127. data/app/assets/images/boss/icons/docx_win/docx_win-256_32.png +0 -0
  128. data/app/assets/images/boss/icons/docx_win/docx_win-32_32.png +0 -0
  129. data/app/assets/images/boss/icons/docx_win/docx_win-48_32.png +0 -0
  130. data/app/assets/images/boss/icons/docx_win/docx_win-64_32.png +0 -0
  131. data/app/assets/images/boss/icons/docx_win/docx_win-72_32.png +0 -0
  132. data/app/assets/images/boss/icons/docx_win/docx_win-80_32.png +0 -0
  133. data/app/assets/images/boss/icons/docx_win/docx_win-96_32.png +0 -0
  134. data/app/assets/images/boss/icons/docx_win/docx_win-sm-16_32.png +0 -0
  135. data/app/assets/images/boss/icons/docx_win/docx_win-sm-24_32.png +0 -0
  136. data/app/assets/images/boss/icons/docx_win/docx_win-sm-32_32.png +0 -0
  137. data/app/assets/images/boss/icons/docx_win/docx_win-sm.ico +0 -0
  138. data/app/assets/images/boss/icons/docx_win/docx_win.ico +0 -0
  139. data/app/assets/images/boss/icons/eml/eml-128_32.png +0 -0
  140. data/app/assets/images/boss/icons/eml/eml-16_32.png +0 -0
  141. data/app/assets/images/boss/icons/eml/eml-24_32.png +0 -0
  142. data/app/assets/images/boss/icons/eml/eml-256_32.png +0 -0
  143. data/app/assets/images/boss/icons/eml/eml-32_32.png +0 -0
  144. data/app/assets/images/boss/icons/eml/eml-48_32.png +0 -0
  145. data/app/assets/images/boss/icons/eml/eml-64_32.png +0 -0
  146. data/app/assets/images/boss/icons/eml/eml-72_32.png +0 -0
  147. data/app/assets/images/boss/icons/eml/eml-80_32.png +0 -0
  148. data/app/assets/images/boss/icons/eml/eml-96_32.png +0 -0
  149. data/app/assets/images/boss/icons/eml/eml-sm-16_32.png +0 -0
  150. data/app/assets/images/boss/icons/eml/eml-sm-24_32.png +0 -0
  151. data/app/assets/images/boss/icons/eml/eml-sm-32_32.png +0 -0
  152. data/app/assets/images/boss/icons/eml/eml-sm.ico +0 -0
  153. data/app/assets/images/boss/icons/eml/eml.icns +0 -0
  154. data/app/assets/images/boss/icons/eml/eml.ico +0 -0
  155. data/app/assets/images/boss/icons/eps/eps-128_32.png +0 -0
  156. data/app/assets/images/boss/icons/eps/eps-16_32.png +0 -0
  157. data/app/assets/images/boss/icons/eps/eps-24_32.png +0 -0
  158. data/app/assets/images/boss/icons/eps/eps-256_32.png +0 -0
  159. data/app/assets/images/boss/icons/eps/eps-32_32.png +0 -0
  160. data/app/assets/images/boss/icons/eps/eps-48_32.png +0 -0
  161. data/app/assets/images/boss/icons/eps/eps-64_32.png +0 -0
  162. data/app/assets/images/boss/icons/eps/eps-72_32.png +0 -0
  163. data/app/assets/images/boss/icons/eps/eps-80_32.png +0 -0
  164. data/app/assets/images/boss/icons/eps/eps-96_32.png +0 -0
  165. data/app/assets/images/boss/icons/eps/eps-sm-16_32.png +0 -0
  166. data/app/assets/images/boss/icons/eps/eps-sm-24_32.png +0 -0
  167. data/app/assets/images/boss/icons/eps/eps-sm-32_32.png +0 -0
  168. data/app/assets/images/boss/icons/eps/eps-sm.ico +0 -0
  169. data/app/assets/images/boss/icons/eps/eps.icns +0 -0
  170. data/app/assets/images/boss/icons/eps/eps.ico +0 -0
  171. data/app/assets/images/boss/icons/fla/fla-128_32.png +0 -0
  172. data/app/assets/images/boss/icons/fla/fla-16_32.png +0 -0
  173. data/app/assets/images/boss/icons/fla/fla-24_32.png +0 -0
  174. data/app/assets/images/boss/icons/fla/fla-256_32.png +0 -0
  175. data/app/assets/images/boss/icons/fla/fla-32_32.png +0 -0
  176. data/app/assets/images/boss/icons/fla/fla-48_32.png +0 -0
  177. data/app/assets/images/boss/icons/fla/fla-64_32.png +0 -0
  178. data/app/assets/images/boss/icons/fla/fla-72_32.png +0 -0
  179. data/app/assets/images/boss/icons/fla/fla-80_32.png +0 -0
  180. data/app/assets/images/boss/icons/fla/fla-96_32.png +0 -0
  181. data/app/assets/images/boss/icons/fla/fla-sm-16_32.png +0 -0
  182. data/app/assets/images/boss/icons/fla/fla-sm-24_32.png +0 -0
  183. data/app/assets/images/boss/icons/fla/fla-sm-32_32.png +0 -0
  184. data/app/assets/images/boss/icons/fla/fla-sm.ico +0 -0
  185. data/app/assets/images/boss/icons/fla/fla.icns +0 -0
  186. data/app/assets/images/boss/icons/fla/fla.ico +0 -0
  187. data/app/assets/images/boss/icons/gif/gif-128_32.png +0 -0
  188. data/app/assets/images/boss/icons/gif/gif-16_32.png +0 -0
  189. data/app/assets/images/boss/icons/gif/gif-24_32.png +0 -0
  190. data/app/assets/images/boss/icons/gif/gif-256_32.png +0 -0
  191. data/app/assets/images/boss/icons/gif/gif-32_32.png +0 -0
  192. data/app/assets/images/boss/icons/gif/gif-48_32.png +0 -0
  193. data/app/assets/images/boss/icons/gif/gif-64_32.png +0 -0
  194. data/app/assets/images/boss/icons/gif/gif-72_32.png +0 -0
  195. data/app/assets/images/boss/icons/gif/gif-80_32.png +0 -0
  196. data/app/assets/images/boss/icons/gif/gif-96_32.png +0 -0
  197. data/app/assets/images/boss/icons/gif/gif-sm-16_32.png +0 -0
  198. data/app/assets/images/boss/icons/gif/gif-sm-24_32.png +0 -0
  199. data/app/assets/images/boss/icons/gif/gif-sm-32_32.png +0 -0
  200. data/app/assets/images/boss/icons/gif/gif-sm.ico +0 -0
  201. data/app/assets/images/boss/icons/gif/gif.icns +0 -0
  202. data/app/assets/images/boss/icons/gif/gif.ico +0 -0
  203. data/app/assets/images/boss/icons/html/html-128_32.png +0 -0
  204. data/app/assets/images/boss/icons/html/html-16_32.png +0 -0
  205. data/app/assets/images/boss/icons/html/html-24_32.png +0 -0
  206. data/app/assets/images/boss/icons/html/html-256_32.png +0 -0
  207. data/app/assets/images/boss/icons/html/html-32_32.png +0 -0
  208. data/app/assets/images/boss/icons/html/html-48_32.png +0 -0
  209. data/app/assets/images/boss/icons/html/html-64_32.png +0 -0
  210. data/app/assets/images/boss/icons/html/html-72_32.png +0 -0
  211. data/app/assets/images/boss/icons/html/html-80_32.png +0 -0
  212. data/app/assets/images/boss/icons/html/html-96_32.png +0 -0
  213. data/app/assets/images/boss/icons/html/html-sm-16_32.png +0 -0
  214. data/app/assets/images/boss/icons/html/html-sm-24_32.png +0 -0
  215. data/app/assets/images/boss/icons/html/html-sm-32_32.png +0 -0
  216. data/app/assets/images/boss/icons/html/html-sm.ico +0 -0
  217. data/app/assets/images/boss/icons/html/html.icns +0 -0
  218. data/app/assets/images/boss/icons/html/html.ico +0 -0
  219. data/app/assets/images/boss/icons/ind/ind-128_32.png +0 -0
  220. data/app/assets/images/boss/icons/ind/ind-16_32.png +0 -0
  221. data/app/assets/images/boss/icons/ind/ind-24_32.png +0 -0
  222. data/app/assets/images/boss/icons/ind/ind-256_32.png +0 -0
  223. data/app/assets/images/boss/icons/ind/ind-32_32.png +0 -0
  224. data/app/assets/images/boss/icons/ind/ind-48_32.png +0 -0
  225. data/app/assets/images/boss/icons/ind/ind-64_32.png +0 -0
  226. data/app/assets/images/boss/icons/ind/ind-72_32.png +0 -0
  227. data/app/assets/images/boss/icons/ind/ind-80_32.png +0 -0
  228. data/app/assets/images/boss/icons/ind/ind-96_32.png +0 -0
  229. data/app/assets/images/boss/icons/ind/ind-sm-16_32.png +0 -0
  230. data/app/assets/images/boss/icons/ind/ind-sm-24_32.png +0 -0
  231. data/app/assets/images/boss/icons/ind/ind-sm-32_32.png +0 -0
  232. data/app/assets/images/boss/icons/ind/ind-sm.ico +0 -0
  233. data/app/assets/images/boss/icons/ind/ind.icns +0 -0
  234. data/app/assets/images/boss/icons/ind/ind.ico +0 -0
  235. data/app/assets/images/boss/icons/ini/ini-128_32.png +0 -0
  236. data/app/assets/images/boss/icons/ini/ini-16_32.png +0 -0
  237. data/app/assets/images/boss/icons/ini/ini-24_32.png +0 -0
  238. data/app/assets/images/boss/icons/ini/ini-256_32.png +0 -0
  239. data/app/assets/images/boss/icons/ini/ini-32_32.png +0 -0
  240. data/app/assets/images/boss/icons/ini/ini-48_32.png +0 -0
  241. data/app/assets/images/boss/icons/ini/ini-64_32.png +0 -0
  242. data/app/assets/images/boss/icons/ini/ini-72_32.png +0 -0
  243. data/app/assets/images/boss/icons/ini/ini-80_32.png +0 -0
  244. data/app/assets/images/boss/icons/ini/ini-96_32.png +0 -0
  245. data/app/assets/images/boss/icons/ini/ini-sm-16_32.png +0 -0
  246. data/app/assets/images/boss/icons/ini/ini-sm-24_32.png +0 -0
  247. data/app/assets/images/boss/icons/ini/ini-sm-32_32.png +0 -0
  248. data/app/assets/images/boss/icons/ini/ini-sm.ico +0 -0
  249. data/app/assets/images/boss/icons/ini/ini.icns +0 -0
  250. data/app/assets/images/boss/icons/ini/ini.ico +0 -0
  251. data/app/assets/images/boss/icons/jpeg/jpeg-128_32.png +0 -0
  252. data/app/assets/images/boss/icons/jpeg/jpeg-16_32.png +0 -0
  253. data/app/assets/images/boss/icons/jpeg/jpeg-24_32.png +0 -0
  254. data/app/assets/images/boss/icons/jpeg/jpeg-256_32.png +0 -0
  255. data/app/assets/images/boss/icons/jpeg/jpeg-32_32.png +0 -0
  256. data/app/assets/images/boss/icons/jpeg/jpeg-48_32.png +0 -0
  257. data/app/assets/images/boss/icons/jpeg/jpeg-64_32.png +0 -0
  258. data/app/assets/images/boss/icons/jpeg/jpeg-72_32.png +0 -0
  259. data/app/assets/images/boss/icons/jpeg/jpeg-80_32.png +0 -0
  260. data/app/assets/images/boss/icons/jpeg/jpeg-96_32.png +0 -0
  261. data/app/assets/images/boss/icons/jpeg/jpeg-sm-16_32.png +0 -0
  262. data/app/assets/images/boss/icons/jpeg/jpeg-sm-24_32.png +0 -0
  263. data/app/assets/images/boss/icons/jpeg/jpeg-sm-32_32.png +0 -0
  264. data/app/assets/images/boss/icons/jpeg/jpeg-sm.ico +0 -0
  265. data/app/assets/images/boss/icons/jpeg/jpeg.icns +0 -0
  266. data/app/assets/images/boss/icons/jpeg/jpeg.ico +0 -0
  267. data/app/assets/images/boss/icons/jsf/jsf-128_32.png +0 -0
  268. data/app/assets/images/boss/icons/jsf/jsf-16_32.png +0 -0
  269. data/app/assets/images/boss/icons/jsf/jsf-24_32.png +0 -0
  270. data/app/assets/images/boss/icons/jsf/jsf-256_32.png +0 -0
  271. data/app/assets/images/boss/icons/jsf/jsf-32_32.png +0 -0
  272. data/app/assets/images/boss/icons/jsf/jsf-48_32.png +0 -0
  273. data/app/assets/images/boss/icons/jsf/jsf-64_32.png +0 -0
  274. data/app/assets/images/boss/icons/jsf/jsf-72_32.png +0 -0
  275. data/app/assets/images/boss/icons/jsf/jsf-80_32.png +0 -0
  276. data/app/assets/images/boss/icons/jsf/jsf-96_32.png +0 -0
  277. data/app/assets/images/boss/icons/jsf/jsf-sm-16_32.png +0 -0
  278. data/app/assets/images/boss/icons/jsf/jsf-sm-24_32.png +0 -0
  279. data/app/assets/images/boss/icons/jsf/jsf-sm-32_32.png +0 -0
  280. data/app/assets/images/boss/icons/jsf/jsf-sm.ico +0 -0
  281. data/app/assets/images/boss/icons/jsf/jsf.icns +0 -0
  282. data/app/assets/images/boss/icons/jsf/jsf.ico +0 -0
  283. data/app/assets/images/boss/icons/midi/midi-128_32.png +0 -0
  284. data/app/assets/images/boss/icons/midi/midi-16_32.png +0 -0
  285. data/app/assets/images/boss/icons/midi/midi-24_32.png +0 -0
  286. data/app/assets/images/boss/icons/midi/midi-256_32.png +0 -0
  287. data/app/assets/images/boss/icons/midi/midi-32_32.png +0 -0
  288. data/app/assets/images/boss/icons/midi/midi-48_32.png +0 -0
  289. data/app/assets/images/boss/icons/midi/midi-64_32.png +0 -0
  290. data/app/assets/images/boss/icons/midi/midi-72_32.png +0 -0
  291. data/app/assets/images/boss/icons/midi/midi-80_32.png +0 -0
  292. data/app/assets/images/boss/icons/midi/midi-96_32.png +0 -0
  293. data/app/assets/images/boss/icons/midi/midi-sm-16_32.png +0 -0
  294. data/app/assets/images/boss/icons/midi/midi-sm-24_32.png +0 -0
  295. data/app/assets/images/boss/icons/midi/midi-sm-32_32.png +0 -0
  296. data/app/assets/images/boss/icons/midi/midi-sm.ico +0 -0
  297. data/app/assets/images/boss/icons/midi/midi.icns +0 -0
  298. data/app/assets/images/boss/icons/midi/midi.ico +0 -0
  299. data/app/assets/images/boss/icons/mov/mov-128_32.png +0 -0
  300. data/app/assets/images/boss/icons/mov/mov-16_32.png +0 -0
  301. data/app/assets/images/boss/icons/mov/mov-24_32.png +0 -0
  302. data/app/assets/images/boss/icons/mov/mov-256_32.png +0 -0
  303. data/app/assets/images/boss/icons/mov/mov-32_32.png +0 -0
  304. data/app/assets/images/boss/icons/mov/mov-48_32.png +0 -0
  305. data/app/assets/images/boss/icons/mov/mov-64_32.png +0 -0
  306. data/app/assets/images/boss/icons/mov/mov-72_32.png +0 -0
  307. data/app/assets/images/boss/icons/mov/mov-80_32.png +0 -0
  308. data/app/assets/images/boss/icons/mov/mov-96_32.png +0 -0
  309. data/app/assets/images/boss/icons/mov/mov-sm-16_32.png +0 -0
  310. data/app/assets/images/boss/icons/mov/mov-sm-24_32.png +0 -0
  311. data/app/assets/images/boss/icons/mov/mov-sm-32_32.png +0 -0
  312. data/app/assets/images/boss/icons/mov/mov-sm.ico +0 -0
  313. data/app/assets/images/boss/icons/mov/mov.icns +0 -0
  314. data/app/assets/images/boss/icons/mov/mov.ico +0 -0
  315. data/app/assets/images/boss/icons/mp3/mp3-128_32.png +0 -0
  316. data/app/assets/images/boss/icons/mp3/mp3-16_32.png +0 -0
  317. data/app/assets/images/boss/icons/mp3/mp3-24_32.png +0 -0
  318. data/app/assets/images/boss/icons/mp3/mp3-256_32.png +0 -0
  319. data/app/assets/images/boss/icons/mp3/mp3-32_32.png +0 -0
  320. data/app/assets/images/boss/icons/mp3/mp3-48_32.png +0 -0
  321. data/app/assets/images/boss/icons/mp3/mp3-64_32.png +0 -0
  322. data/app/assets/images/boss/icons/mp3/mp3-72_32.png +0 -0
  323. data/app/assets/images/boss/icons/mp3/mp3-80_32.png +0 -0
  324. data/app/assets/images/boss/icons/mp3/mp3-96_32.png +0 -0
  325. data/app/assets/images/boss/icons/mp3/mp3-sm-16_32.png +0 -0
  326. data/app/assets/images/boss/icons/mp3/mp3-sm-24_32.png +0 -0
  327. data/app/assets/images/boss/icons/mp3/mp3-sm-32_32.png +0 -0
  328. data/app/assets/images/boss/icons/mp3/mp3-sm.ico +0 -0
  329. data/app/assets/images/boss/icons/mp3/mp3.icns +0 -0
  330. data/app/assets/images/boss/icons/mp3/mp3.ico +0 -0
  331. data/app/assets/images/boss/icons/mpeg/mpeg-128_32.png +0 -0
  332. data/app/assets/images/boss/icons/mpeg/mpeg-16_32.png +0 -0
  333. data/app/assets/images/boss/icons/mpeg/mpeg-24_32.png +0 -0
  334. data/app/assets/images/boss/icons/mpeg/mpeg-256_32.png +0 -0
  335. data/app/assets/images/boss/icons/mpeg/mpeg-32_32.png +0 -0
  336. data/app/assets/images/boss/icons/mpeg/mpeg-48_32.png +0 -0
  337. data/app/assets/images/boss/icons/mpeg/mpeg-64_32.png +0 -0
  338. data/app/assets/images/boss/icons/mpeg/mpeg-72_32.png +0 -0
  339. data/app/assets/images/boss/icons/mpeg/mpeg-80_32.png +0 -0
  340. data/app/assets/images/boss/icons/mpeg/mpeg-96_32.png +0 -0
  341. data/app/assets/images/boss/icons/mpeg/mpeg-sm-16_32.png +0 -0
  342. data/app/assets/images/boss/icons/mpeg/mpeg-sm-24_32.png +0 -0
  343. data/app/assets/images/boss/icons/mpeg/mpeg-sm-32_32.png +0 -0
  344. data/app/assets/images/boss/icons/mpeg/mpeg-sm.ico +0 -0
  345. data/app/assets/images/boss/icons/mpeg/mpeg.icns +0 -0
  346. data/app/assets/images/boss/icons/mpeg/mpeg.ico +0 -0
  347. data/app/assets/images/boss/icons/pdf/pdf-128_32.png +0 -0
  348. data/app/assets/images/boss/icons/pdf/pdf-16_32.png +0 -0
  349. data/app/assets/images/boss/icons/pdf/pdf-24_32.png +0 -0
  350. data/app/assets/images/boss/icons/pdf/pdf-256_32.png +0 -0
  351. data/app/assets/images/boss/icons/pdf/pdf-32_32.png +0 -0
  352. data/app/assets/images/boss/icons/pdf/pdf-48_32.png +0 -0
  353. data/app/assets/images/boss/icons/pdf/pdf-64_32.png +0 -0
  354. data/app/assets/images/boss/icons/pdf/pdf-72_32.png +0 -0
  355. data/app/assets/images/boss/icons/pdf/pdf-80_32.png +0 -0
  356. data/app/assets/images/boss/icons/pdf/pdf-96_32.png +0 -0
  357. data/app/assets/images/boss/icons/pdf/pdf-sm-16_32.png +0 -0
  358. data/app/assets/images/boss/icons/pdf/pdf-sm-24_32.png +0 -0
  359. data/app/assets/images/boss/icons/pdf/pdf-sm-32_32.png +0 -0
  360. data/app/assets/images/boss/icons/pdf/pdf-sm.ico +0 -0
  361. data/app/assets/images/boss/icons/pdf/pdf.icns +0 -0
  362. data/app/assets/images/boss/icons/pdf/pdf.ico +0 -0
  363. data/app/assets/images/boss/icons/png/png-128_32.png +0 -0
  364. data/app/assets/images/boss/icons/png/png-16_32.png +0 -0
  365. data/app/assets/images/boss/icons/png/png-24_32.png +0 -0
  366. data/app/assets/images/boss/icons/png/png-256_32.png +0 -0
  367. data/app/assets/images/boss/icons/png/png-32_32.png +0 -0
  368. data/app/assets/images/boss/icons/png/png-48_32.png +0 -0
  369. data/app/assets/images/boss/icons/png/png-64_32.png +0 -0
  370. data/app/assets/images/boss/icons/png/png-72_32.png +0 -0
  371. data/app/assets/images/boss/icons/png/png-80_32.png +0 -0
  372. data/app/assets/images/boss/icons/png/png-96_32.png +0 -0
  373. data/app/assets/images/boss/icons/png/png-sm-16_32.png +0 -0
  374. data/app/assets/images/boss/icons/png/png-sm-24_32.png +0 -0
  375. data/app/assets/images/boss/icons/png/png-sm-32_32.png +0 -0
  376. data/app/assets/images/boss/icons/png/png-sm.ico +0 -0
  377. data/app/assets/images/boss/icons/png/png.icns +0 -0
  378. data/app/assets/images/boss/icons/png/png.ico +0 -0
  379. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-128_32.png +0 -0
  380. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-16_32.png +0 -0
  381. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-24_32.png +0 -0
  382. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-256_32.png +0 -0
  383. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-32_32.png +0 -0
  384. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-48_32.png +0 -0
  385. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-64_32.png +0 -0
  386. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-72_32.png +0 -0
  387. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-80_32.png +0 -0
  388. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-96_32.png +0 -0
  389. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-sm-16_32.png +0 -0
  390. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-sm-24_32.png +0 -0
  391. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-sm-32_32.png +0 -0
  392. data/app/assets/images/boss/icons/pptx_mac/pptx_mac-sm.ico +0 -0
  393. data/app/assets/images/boss/icons/pptx_mac/pptx_mac.icns +0 -0
  394. data/app/assets/images/boss/icons/pptx_mac/pptx_mac.ico +0 -0
  395. data/app/assets/images/boss/icons/pptx_win/pptx_win-128_32.png +0 -0
  396. data/app/assets/images/boss/icons/pptx_win/pptx_win-16_32.png +0 -0
  397. data/app/assets/images/boss/icons/pptx_win/pptx_win-24_32.png +0 -0
  398. data/app/assets/images/boss/icons/pptx_win/pptx_win-256_32.png +0 -0
  399. data/app/assets/images/boss/icons/pptx_win/pptx_win-32_32.png +0 -0
  400. data/app/assets/images/boss/icons/pptx_win/pptx_win-48_32.png +0 -0
  401. data/app/assets/images/boss/icons/pptx_win/pptx_win-64_32.png +0 -0
  402. data/app/assets/images/boss/icons/pptx_win/pptx_win-72_32.png +0 -0
  403. data/app/assets/images/boss/icons/pptx_win/pptx_win-80_32.png +0 -0
  404. data/app/assets/images/boss/icons/pptx_win/pptx_win-96_32.png +0 -0
  405. data/app/assets/images/boss/icons/pptx_win/pptx_win-sm-16_32.png +0 -0
  406. data/app/assets/images/boss/icons/pptx_win/pptx_win-sm-24_32.png +0 -0
  407. data/app/assets/images/boss/icons/pptx_win/pptx_win-sm-32_32.png +0 -0
  408. data/app/assets/images/boss/icons/pptx_win/pptx_win-sm.ico +0 -0
  409. data/app/assets/images/boss/icons/pptx_win/pptx_win.ico +0 -0
  410. data/app/assets/images/boss/icons/proj/proj-128_32.png +0 -0
  411. data/app/assets/images/boss/icons/proj/proj-16_32.png +0 -0
  412. data/app/assets/images/boss/icons/proj/proj-24_32.png +0 -0
  413. data/app/assets/images/boss/icons/proj/proj-256_32.png +0 -0
  414. data/app/assets/images/boss/icons/proj/proj-32_32.png +0 -0
  415. data/app/assets/images/boss/icons/proj/proj-48_32.png +0 -0
  416. data/app/assets/images/boss/icons/proj/proj-64_32.png +0 -0
  417. data/app/assets/images/boss/icons/proj/proj-72_32.png +0 -0
  418. data/app/assets/images/boss/icons/proj/proj-80_32.png +0 -0
  419. data/app/assets/images/boss/icons/proj/proj-96_32.png +0 -0
  420. data/app/assets/images/boss/icons/proj/proj-sm-16_32.png +0 -0
  421. data/app/assets/images/boss/icons/proj/proj-sm-24_32.png +0 -0
  422. data/app/assets/images/boss/icons/proj/proj-sm-32_32.png +0 -0
  423. data/app/assets/images/boss/icons/proj/proj-sm.ico +0 -0
  424. data/app/assets/images/boss/icons/proj/proj.icns +0 -0
  425. data/app/assets/images/boss/icons/proj/proj.ico +0 -0
  426. data/app/assets/images/boss/icons/psd/psd-128_32.png +0 -0
  427. data/app/assets/images/boss/icons/psd/psd-16_32.png +0 -0
  428. data/app/assets/images/boss/icons/psd/psd-24_32.png +0 -0
  429. data/app/assets/images/boss/icons/psd/psd-256_32.png +0 -0
  430. data/app/assets/images/boss/icons/psd/psd-32_32.png +0 -0
  431. data/app/assets/images/boss/icons/psd/psd-48_32.png +0 -0
  432. data/app/assets/images/boss/icons/psd/psd-64_32.png +0 -0
  433. data/app/assets/images/boss/icons/psd/psd-72_32.png +0 -0
  434. data/app/assets/images/boss/icons/psd/psd-80_32.png +0 -0
  435. data/app/assets/images/boss/icons/psd/psd-96_32.png +0 -0
  436. data/app/assets/images/boss/icons/psd/psd-sm-16_32.png +0 -0
  437. data/app/assets/images/boss/icons/psd/psd-sm-24_32.png +0 -0
  438. data/app/assets/images/boss/icons/psd/psd-sm-32_32.png +0 -0
  439. data/app/assets/images/boss/icons/psd/psd-sm.ico +0 -0
  440. data/app/assets/images/boss/icons/psd/psd.icns +0 -0
  441. data/app/assets/images/boss/icons/psd/psd.ico +0 -0
  442. data/app/assets/images/boss/icons/pst/pst-128_32.png +0 -0
  443. data/app/assets/images/boss/icons/pst/pst-16_32.png +0 -0
  444. data/app/assets/images/boss/icons/pst/pst-24_32.png +0 -0
  445. data/app/assets/images/boss/icons/pst/pst-256_32.png +0 -0
  446. data/app/assets/images/boss/icons/pst/pst-32_32.png +0 -0
  447. data/app/assets/images/boss/icons/pst/pst-48_32.png +0 -0
  448. data/app/assets/images/boss/icons/pst/pst-64_32.png +0 -0
  449. data/app/assets/images/boss/icons/pst/pst-72_32.png +0 -0
  450. data/app/assets/images/boss/icons/pst/pst-80_32.png +0 -0
  451. data/app/assets/images/boss/icons/pst/pst-96_32.png +0 -0
  452. data/app/assets/images/boss/icons/pst/pst-sm-16_32.png +0 -0
  453. data/app/assets/images/boss/icons/pst/pst-sm-24_32.png +0 -0
  454. data/app/assets/images/boss/icons/pst/pst-sm-32_32.png +0 -0
  455. data/app/assets/images/boss/icons/pst/pst-sm.ico +0 -0
  456. data/app/assets/images/boss/icons/pst/pst.ico +0 -0
  457. data/app/assets/images/boss/icons/pub/pub-128_32.png +0 -0
  458. data/app/assets/images/boss/icons/pub/pub-16_32.png +0 -0
  459. data/app/assets/images/boss/icons/pub/pub-24_32.png +0 -0
  460. data/app/assets/images/boss/icons/pub/pub-256_32.png +0 -0
  461. data/app/assets/images/boss/icons/pub/pub-32_32.png +0 -0
  462. data/app/assets/images/boss/icons/pub/pub-48_32.png +0 -0
  463. data/app/assets/images/boss/icons/pub/pub-64_32.png +0 -0
  464. data/app/assets/images/boss/icons/pub/pub-72_32.png +0 -0
  465. data/app/assets/images/boss/icons/pub/pub-80_32.png +0 -0
  466. data/app/assets/images/boss/icons/pub/pub-96_32.png +0 -0
  467. data/app/assets/images/boss/icons/pub/pub-sm-16_32.png +0 -0
  468. data/app/assets/images/boss/icons/pub/pub-sm-24_32.png +0 -0
  469. data/app/assets/images/boss/icons/pub/pub-sm-32_32.png +0 -0
  470. data/app/assets/images/boss/icons/pub/pub-sm.ico +0 -0
  471. data/app/assets/images/boss/icons/pub/pub.ico +0 -0
  472. data/app/assets/images/boss/icons/rar/rar-128_32.png +0 -0
  473. data/app/assets/images/boss/icons/rar/rar-16_32.png +0 -0
  474. data/app/assets/images/boss/icons/rar/rar-24_32.png +0 -0
  475. data/app/assets/images/boss/icons/rar/rar-256_32.png +0 -0
  476. data/app/assets/images/boss/icons/rar/rar-32_32.png +0 -0
  477. data/app/assets/images/boss/icons/rar/rar-48_32.png +0 -0
  478. data/app/assets/images/boss/icons/rar/rar-64_32.png +0 -0
  479. data/app/assets/images/boss/icons/rar/rar-72_32.png +0 -0
  480. data/app/assets/images/boss/icons/rar/rar-80_32.png +0 -0
  481. data/app/assets/images/boss/icons/rar/rar-96_32.png +0 -0
  482. data/app/assets/images/boss/icons/rar/rar-sm-16_32.png +0 -0
  483. data/app/assets/images/boss/icons/rar/rar-sm-24_32.png +0 -0
  484. data/app/assets/images/boss/icons/rar/rar-sm-32_32.png +0 -0
  485. data/app/assets/images/boss/icons/rar/rar-sm.ico +0 -0
  486. data/app/assets/images/boss/icons/rar/rar.ico +0 -0
  487. data/app/assets/images/boss/icons/readme/readme-128_32.png +0 -0
  488. data/app/assets/images/boss/icons/readme/readme-16_32.png +0 -0
  489. data/app/assets/images/boss/icons/readme/readme-24_32.png +0 -0
  490. data/app/assets/images/boss/icons/readme/readme-256_32.png +0 -0
  491. data/app/assets/images/boss/icons/readme/readme-32_32.png +0 -0
  492. data/app/assets/images/boss/icons/readme/readme-48_32.png +0 -0
  493. data/app/assets/images/boss/icons/readme/readme-64_32.png +0 -0
  494. data/app/assets/images/boss/icons/readme/readme-72_32.png +0 -0
  495. data/app/assets/images/boss/icons/readme/readme-80_32.png +0 -0
  496. data/app/assets/images/boss/icons/readme/readme-96_32.png +0 -0
  497. data/app/assets/images/boss/icons/readme/readme-sm-16_32.png +0 -0
  498. data/app/assets/images/boss/icons/readme/readme-sm-24_32.png +0 -0
  499. data/app/assets/images/boss/icons/readme/readme-sm-32_32.png +0 -0
  500. data/app/assets/images/boss/icons/readme/readme-sm.ico +0 -0
  501. data/app/assets/images/boss/icons/readme/readme.icns +0 -0
  502. data/app/assets/images/boss/icons/readme/readme.ico +0 -0
  503. data/app/assets/images/boss/icons/settings/settings-128_32.png +0 -0
  504. data/app/assets/images/boss/icons/settings/settings-16_32.png +0 -0
  505. data/app/assets/images/boss/icons/settings/settings-24_32.png +0 -0
  506. data/app/assets/images/boss/icons/settings/settings-256_32.png +0 -0
  507. data/app/assets/images/boss/icons/settings/settings-32_32.png +0 -0
  508. data/app/assets/images/boss/icons/settings/settings-48_32.png +0 -0
  509. data/app/assets/images/boss/icons/settings/settings-64_32.png +0 -0
  510. data/app/assets/images/boss/icons/settings/settings-72_32.png +0 -0
  511. data/app/assets/images/boss/icons/settings/settings-80_32.png +0 -0
  512. data/app/assets/images/boss/icons/settings/settings-96_32.png +0 -0
  513. data/app/assets/images/boss/icons/settings/settings-sm-16_32.png +0 -0
  514. data/app/assets/images/boss/icons/settings/settings-sm-24_32.png +0 -0
  515. data/app/assets/images/boss/icons/settings/settings-sm-32_32.png +0 -0
  516. data/app/assets/images/boss/icons/settings/settings-sm.ico +0 -0
  517. data/app/assets/images/boss/icons/settings/settings.icns +0 -0
  518. data/app/assets/images/boss/icons/settings/settings.ico +0 -0
  519. data/app/assets/images/boss/icons/text/text-128_32.png +0 -0
  520. data/app/assets/images/boss/icons/text/text-16_32.png +0 -0
  521. data/app/assets/images/boss/icons/text/text-24_32.png +0 -0
  522. data/app/assets/images/boss/icons/text/text-256_32.png +0 -0
  523. data/app/assets/images/boss/icons/text/text-32_32.png +0 -0
  524. data/app/assets/images/boss/icons/text/text-48_32.png +0 -0
  525. data/app/assets/images/boss/icons/text/text-64_32.png +0 -0
  526. data/app/assets/images/boss/icons/text/text-72_32.png +0 -0
  527. data/app/assets/images/boss/icons/text/text-80_32.png +0 -0
  528. data/app/assets/images/boss/icons/text/text-96_32.png +0 -0
  529. data/app/assets/images/boss/icons/text/text-sm-16_32.png +0 -0
  530. data/app/assets/images/boss/icons/text/text-sm-24_32.png +0 -0
  531. data/app/assets/images/boss/icons/text/text-sm-32_32.png +0 -0
  532. data/app/assets/images/boss/icons/text/text-sm.ico +0 -0
  533. data/app/assets/images/boss/icons/text/text.icns +0 -0
  534. data/app/assets/images/boss/icons/text/text.ico +0 -0
  535. data/app/assets/images/boss/icons/tiff/tiff-128_32.png +0 -0
  536. data/app/assets/images/boss/icons/tiff/tiff-16_32.png +0 -0
  537. data/app/assets/images/boss/icons/tiff/tiff-24_32.png +0 -0
  538. data/app/assets/images/boss/icons/tiff/tiff-256_32.png +0 -0
  539. data/app/assets/images/boss/icons/tiff/tiff-32_32.png +0 -0
  540. data/app/assets/images/boss/icons/tiff/tiff-48_32.png +0 -0
  541. data/app/assets/images/boss/icons/tiff/tiff-64_32.png +0 -0
  542. data/app/assets/images/boss/icons/tiff/tiff-72_32.png +0 -0
  543. data/app/assets/images/boss/icons/tiff/tiff-80_32.png +0 -0
  544. data/app/assets/images/boss/icons/tiff/tiff-96_32.png +0 -0
  545. data/app/assets/images/boss/icons/tiff/tiff-sm-16_32.png +0 -0
  546. data/app/assets/images/boss/icons/tiff/tiff-sm-24_32.png +0 -0
  547. data/app/assets/images/boss/icons/tiff/tiff-sm-32_32.png +0 -0
  548. data/app/assets/images/boss/icons/tiff/tiff-sm.ico +0 -0
  549. data/app/assets/images/boss/icons/tiff/tiff.icns +0 -0
  550. data/app/assets/images/boss/icons/tiff/tiff.ico +0 -0
  551. data/app/assets/images/boss/icons/url/url-128_32.png +0 -0
  552. data/app/assets/images/boss/icons/url/url-16_32.png +0 -0
  553. data/app/assets/images/boss/icons/url/url-24_32.png +0 -0
  554. data/app/assets/images/boss/icons/url/url-256_32.png +0 -0
  555. data/app/assets/images/boss/icons/url/url-32_32.png +0 -0
  556. data/app/assets/images/boss/icons/url/url-48_32.png +0 -0
  557. data/app/assets/images/boss/icons/url/url-64_32.png +0 -0
  558. data/app/assets/images/boss/icons/url/url-72_32.png +0 -0
  559. data/app/assets/images/boss/icons/url/url-80_32.png +0 -0
  560. data/app/assets/images/boss/icons/url/url-96_32.png +0 -0
  561. data/app/assets/images/boss/icons/url/url-sm-16_32.png +0 -0
  562. data/app/assets/images/boss/icons/url/url-sm-24_32.png +0 -0
  563. data/app/assets/images/boss/icons/url/url-sm-32_32.png +0 -0
  564. data/app/assets/images/boss/icons/url/url-sm.ico +0 -0
  565. data/app/assets/images/boss/icons/url/url.icns +0 -0
  566. data/app/assets/images/boss/icons/url/url.ico +0 -0
  567. data/app/assets/images/boss/icons/vsd/vsd-128_32.png +0 -0
  568. data/app/assets/images/boss/icons/vsd/vsd-16_32.png +0 -0
  569. data/app/assets/images/boss/icons/vsd/vsd-24_32.png +0 -0
  570. data/app/assets/images/boss/icons/vsd/vsd-256_32.png +0 -0
  571. data/app/assets/images/boss/icons/vsd/vsd-32_32.png +0 -0
  572. data/app/assets/images/boss/icons/vsd/vsd-48_32.png +0 -0
  573. data/app/assets/images/boss/icons/vsd/vsd-64_32.png +0 -0
  574. data/app/assets/images/boss/icons/vsd/vsd-72_32.png +0 -0
  575. data/app/assets/images/boss/icons/vsd/vsd-80_32.png +0 -0
  576. data/app/assets/images/boss/icons/vsd/vsd-96_32.png +0 -0
  577. data/app/assets/images/boss/icons/vsd/vsd-sm-16_32.png +0 -0
  578. data/app/assets/images/boss/icons/vsd/vsd-sm-24_32.png +0 -0
  579. data/app/assets/images/boss/icons/vsd/vsd-sm-32_32.png +0 -0
  580. data/app/assets/images/boss/icons/vsd/vsd-sm.ico +0 -0
  581. data/app/assets/images/boss/icons/vsd/vsd.ico +0 -0
  582. data/app/assets/images/boss/icons/wav/wav-128_32.png +0 -0
  583. data/app/assets/images/boss/icons/wav/wav-16_32.png +0 -0
  584. data/app/assets/images/boss/icons/wav/wav-24_32.png +0 -0
  585. data/app/assets/images/boss/icons/wav/wav-256_32.png +0 -0
  586. data/app/assets/images/boss/icons/wav/wav-32_32.png +0 -0
  587. data/app/assets/images/boss/icons/wav/wav-48_32.png +0 -0
  588. data/app/assets/images/boss/icons/wav/wav-64_32.png +0 -0
  589. data/app/assets/images/boss/icons/wav/wav-72_32.png +0 -0
  590. data/app/assets/images/boss/icons/wav/wav-80_32.png +0 -0
  591. data/app/assets/images/boss/icons/wav/wav-96_32.png +0 -0
  592. data/app/assets/images/boss/icons/wav/wav-sm-16_32.png +0 -0
  593. data/app/assets/images/boss/icons/wav/wav-sm-24_32.png +0 -0
  594. data/app/assets/images/boss/icons/wav/wav-sm-32_32.png +0 -0
  595. data/app/assets/images/boss/icons/wav/wav-sm.ico +0 -0
  596. data/app/assets/images/boss/icons/wav/wav.icns +0 -0
  597. data/app/assets/images/boss/icons/wav/wav.ico +0 -0
  598. data/app/assets/images/boss/icons/wma/wma-128_32.png +0 -0
  599. data/app/assets/images/boss/icons/wma/wma-16_32.png +0 -0
  600. data/app/assets/images/boss/icons/wma/wma-24_32.png +0 -0
  601. data/app/assets/images/boss/icons/wma/wma-256_32.png +0 -0
  602. data/app/assets/images/boss/icons/wma/wma-32_32.png +0 -0
  603. data/app/assets/images/boss/icons/wma/wma-48_32.png +0 -0
  604. data/app/assets/images/boss/icons/wma/wma-64_32.png +0 -0
  605. data/app/assets/images/boss/icons/wma/wma-72_32.png +0 -0
  606. data/app/assets/images/boss/icons/wma/wma-80_32.png +0 -0
  607. data/app/assets/images/boss/icons/wma/wma-96_32.png +0 -0
  608. data/app/assets/images/boss/icons/wma/wma-sm-16_32.png +0 -0
  609. data/app/assets/images/boss/icons/wma/wma-sm-24_32.png +0 -0
  610. data/app/assets/images/boss/icons/wma/wma-sm-32_32.png +0 -0
  611. data/app/assets/images/boss/icons/wma/wma-sm.ico +0 -0
  612. data/app/assets/images/boss/icons/wma/wma.icns +0 -0
  613. data/app/assets/images/boss/icons/wma/wma.ico +0 -0
  614. data/app/assets/images/boss/icons/wmv/wmv-128_32.png +0 -0
  615. data/app/assets/images/boss/icons/wmv/wmv-16_32.png +0 -0
  616. data/app/assets/images/boss/icons/wmv/wmv-24_32.png +0 -0
  617. data/app/assets/images/boss/icons/wmv/wmv-256_32.png +0 -0
  618. data/app/assets/images/boss/icons/wmv/wmv-32_32.png +0 -0
  619. data/app/assets/images/boss/icons/wmv/wmv-48_32.png +0 -0
  620. data/app/assets/images/boss/icons/wmv/wmv-64_32.png +0 -0
  621. data/app/assets/images/boss/icons/wmv/wmv-72_32.png +0 -0
  622. data/app/assets/images/boss/icons/wmv/wmv-80_32.png +0 -0
  623. data/app/assets/images/boss/icons/wmv/wmv-96_32.png +0 -0
  624. data/app/assets/images/boss/icons/wmv/wmv-sm-16_32.png +0 -0
  625. data/app/assets/images/boss/icons/wmv/wmv-sm-24_32.png +0 -0
  626. data/app/assets/images/boss/icons/wmv/wmv-sm-32_32.png +0 -0
  627. data/app/assets/images/boss/icons/wmv/wmv-sm.ico +0 -0
  628. data/app/assets/images/boss/icons/wmv/wmv.icns +0 -0
  629. data/app/assets/images/boss/icons/wmv/wmv.ico +0 -0
  630. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-128_32.png +0 -0
  631. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-16_32.png +0 -0
  632. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-24_32.png +0 -0
  633. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-256_32.png +0 -0
  634. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-32_32.png +0 -0
  635. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-48_32.png +0 -0
  636. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-64_32.png +0 -0
  637. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-72_32.png +0 -0
  638. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-80_32.png +0 -0
  639. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-96_32.png +0 -0
  640. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-sm-16_32.png +0 -0
  641. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-sm-24_32.png +0 -0
  642. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-sm-32_32.png +0 -0
  643. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac-sm.ico +0 -0
  644. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac.icns +0 -0
  645. data/app/assets/images/boss/icons/xlsx_mac/xlsx_mac.ico +0 -0
  646. data/app/assets/images/boss/icons/xlsx_win/xlsx-win.ico +0 -0
  647. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-128_32.png +0 -0
  648. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-16_32.png +0 -0
  649. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-24_32.png +0 -0
  650. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-256_32.png +0 -0
  651. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-32_32.png +0 -0
  652. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-48_32.png +0 -0
  653. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-64_32.png +0 -0
  654. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-72_32.png +0 -0
  655. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-80_32.png +0 -0
  656. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-96_32.png +0 -0
  657. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-sm-16_32.png +0 -0
  658. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-sm-24_32.png +0 -0
  659. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-sm-32_32.png +0 -0
  660. data/app/assets/images/boss/icons/xlsx_win/xlsx_win-sm.ico +0 -0
  661. data/app/assets/images/boss/icons/zip/zip-128_32.png +0 -0
  662. data/app/assets/images/boss/icons/zip/zip-16_32.png +0 -0
  663. data/app/assets/images/boss/icons/zip/zip-24_32.png +0 -0
  664. data/app/assets/images/boss/icons/zip/zip-256_32.png +0 -0
  665. data/app/assets/images/boss/icons/zip/zip-32_32.png +0 -0
  666. data/app/assets/images/boss/icons/zip/zip-48_32.png +0 -0
  667. data/app/assets/images/boss/icons/zip/zip-64_32.png +0 -0
  668. data/app/assets/images/boss/icons/zip/zip-72_32.png +0 -0
  669. data/app/assets/images/boss/icons/zip/zip-80_32.png +0 -0
  670. data/app/assets/images/boss/icons/zip/zip-96_32.png +0 -0
  671. data/app/assets/images/boss/icons/zip/zip-sm-16_32.png +0 -0
  672. data/app/assets/images/boss/icons/zip/zip-sm-24_32.png +0 -0
  673. data/app/assets/images/boss/icons/zip/zip-sm-32_32.png +0 -0
  674. data/app/assets/images/boss/icons/zip/zip-sm.ico +0 -0
  675. data/app/assets/images/boss/icons/zip/zip.icns +0 -0
  676. data/app/assets/images/boss/icons/zip/zip.ico +0 -0
  677. data/app/assets/javascripts/boss.js +25 -0
  678. data/app/assets/javascripts/boss/banners.js.coffee +14 -0
  679. data/app/assets/javascripts/boss/better-pagination.js.coffee +84 -0
  680. data/app/assets/javascripts/boss/posts.js.coffee.erb +42 -0
  681. data/app/assets/javascripts/boss/resources.js.coffee.erb +13 -0
  682. data/app/assets/javascripts/boss/utils.js.coffee +17 -0
  683. data/app/assets/javascripts/datepicker-locales/jquery.ui.datepicker-en-GB.js +23 -0
  684. data/app/assets/javascripts/datepicker-locales/jquery.ui.datepicker-pt-BR.js +23 -0
  685. data/app/assets/javascripts/jQueryFileUpload/jquery.fileupload-fp.js +219 -0
  686. data/app/assets/javascripts/jQueryFileUpload/jquery.fileupload-ui.js +736 -0
  687. data/app/assets/javascripts/jQueryFileUpload/jquery.fileupload.js +975 -0
  688. data/app/assets/javascripts/jQueryFileUpload/jquery.iframe-transport.js +172 -0
  689. data/app/assets/javascripts/jQueryFileUpload/load-image.min.js +1 -0
  690. data/app/assets/javascripts/jQueryFileUpload/locale.js +29 -0
  691. data/app/assets/javascripts/jQueryFileUpload/tmpl.min.js +1 -0
  692. data/app/assets/javascripts/jquery-ui-1.8.23.custom.min.js +9 -0
  693. data/app/assets/javascripts/redactor/langs/bg.js +67 -0
  694. data/app/assets/javascripts/redactor/langs/by.js +65 -0
  695. data/app/assets/javascripts/redactor/langs/cs.js +77 -0
  696. data/app/assets/javascripts/redactor/langs/de.js +70 -0
  697. data/app/assets/javascripts/redactor/langs/en.js +66 -0
  698. data/app/assets/javascripts/redactor/langs/es.js +66 -0
  699. data/app/assets/javascripts/redactor/langs/fi.js +69 -0
  700. data/app/assets/javascripts/redactor/langs/fr.js +76 -0
  701. data/app/assets/javascripts/redactor/langs/hr.js +69 -0
  702. data/app/assets/javascripts/redactor/langs/hu.js +67 -0
  703. data/app/assets/javascripts/redactor/langs/it.js +68 -0
  704. data/app/assets/javascripts/redactor/langs/ja.js +66 -0
  705. data/app/assets/javascripts/redactor/langs/ko.js +66 -0
  706. data/app/assets/javascripts/redactor/langs/lv.js +65 -0
  707. data/app/assets/javascripts/redactor/langs/nl.js +69 -0
  708. data/app/assets/javascripts/redactor/langs/pl.js +66 -0
  709. data/app/assets/javascripts/redactor/langs/pt_br.js +72 -0
  710. data/app/assets/javascripts/redactor/langs/ru.js +66 -0
  711. data/app/assets/javascripts/redactor/langs/sk.js +66 -0
  712. data/app/assets/javascripts/redactor/langs/sq.js +69 -0
  713. data/app/assets/javascripts/redactor/langs/tr.js +66 -0
  714. data/app/assets/javascripts/redactor/langs/ua.js +67 -0
  715. data/app/assets/javascripts/redactor/langs/zh_cn.js +67 -0
  716. data/app/assets/javascripts/redactor/redactor.js +3254 -0
  717. data/app/assets/javascripts/redactor/redactor.min.js +1 -0
  718. data/app/assets/javascripts/slides/slides.jquery.js +555 -0
  719. data/app/assets/javascripts/slides/slides.min.jquery.js +20 -0
  720. data/app/assets/javascripts/yepnope.1.5.4-min.js +2 -0
  721. data/app/assets/stylesheets/boss.css +15 -0
  722. data/app/assets/stylesheets/boss/structure.sass +14 -0
  723. data/app/assets/stylesheets/boss/style.sass +15 -0
  724. data/app/assets/stylesheets/jQueryFileUpload/jquery.fileupload-ui.css +84 -0
  725. data/app/assets/stylesheets/redactor.css +13 -0
  726. data/app/assets/stylesheets/redactor/css/docstyle.css +139 -0
  727. data/app/assets/stylesheets/redactor/css/redactor.css +409 -0
  728. data/app/assets/stylesheets/redactor/css/style.css +135 -0
  729. data/app/assets/stylesheets/redactor/css/wym.css +151 -0
  730. data/app/assets/stylesheets/redactor/img/icons.png +0 -0
  731. data/app/assets/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  732. data/app/assets/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  733. data/app/assets/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  734. data/app/assets/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  735. data/app/assets/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  736. data/app/assets/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  737. data/app/assets/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  738. data/app/assets/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  739. data/app/assets/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  740. data/app/assets/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  741. data/app/assets/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  742. data/app/assets/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  743. data/app/assets/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  744. data/app/assets/stylesheets/smoothness/jquery-ui-1.8.23.custom.css +563 -0
  745. data/app/controllers/boss/admin/application_controller.rb +14 -0
  746. data/app/controllers/boss/admin/banners_controller.rb +19 -0
  747. data/app/controllers/boss/admin/posts_controller.rb +14 -0
  748. data/app/controllers/boss/admin/resources_controller.rb +44 -0
  749. data/app/controllers/boss/application_controller.rb +2 -0
  750. data/app/controllers/boss/posts_controller.rb +86 -0
  751. data/app/controllers/boss/resources_controller.rb +33 -0
  752. data/app/helpers/boss/application_helper.rb +23 -0
  753. data/app/models/boss/banner.rb +28 -0
  754. data/app/models/boss/category.rb +5 -0
  755. data/app/models/boss/post.rb +20 -0
  756. data/app/models/boss/resource.rb +52 -0
  757. data/app/views/boss/admin/banners/new.html.erb +38 -0
  758. data/app/views/boss/admin/posts/_post.html.erb +8 -0
  759. data/app/views/boss/admin/posts/index.html.erb +3 -0
  760. data/app/views/boss/admin/resources/_resource.html.erb +5 -0
  761. data/app/views/boss/admin/resources/_upload.html.erb +22 -0
  762. data/app/views/boss/admin/resources/index.html.erb +75 -0
  763. data/app/views/boss/banners/_banner_viewer.html.erb +14 -0
  764. data/app/views/boss/posts/_footer.html.erb +7 -0
  765. data/app/views/boss/posts/_header.html.erb +3 -0
  766. data/app/views/boss/posts/_meta.html.erb +1 -0
  767. data/app/views/boss/posts/_post.html.erb +4 -0
  768. data/app/views/boss/posts/archive.html.erb +0 -0
  769. data/app/views/boss/posts/edit.html.erb +18 -0
  770. data/app/views/boss/posts/index.html.erb +11 -0
  771. data/app/views/boss/posts/new.html.erb +24 -0
  772. data/app/views/boss/posts/show.html.erb +11 -0
  773. data/app/views/layouts/admin.html.erb +21 -0
  774. data/app/views/layouts/application.html.erb +21 -0
  775. data/config/initializers/add_stuff_to_main_app.rb +32 -0
  776. data/config/initializers/generate_post_tmpl.rb +7 -0
  777. data/config/initializers/load_config.rb +3 -0
  778. data/config/locales/controllers/banners/en.yml +5 -0
  779. data/config/locales/controllers/posts/en.yml +5 -0
  780. data/config/locales/models/banners/en.yml +3 -0
  781. data/config/locales/models/posts/en.yml +3 -0
  782. data/config/locales/views/banners/form/en.yml +9 -0
  783. data/config/locales/views/banners/form/pt.yml +9 -0
  784. data/config/locales/views/pagination/en.yml +8 -0
  785. data/config/locales/views/posts/new/en.yml +8 -0
  786. data/config/locales/views/posts/post/en.yml +9 -0
  787. data/config/locales/views/posts/publish/en.yml +5 -0
  788. data/config/locales/views/resources/form/en.yml +5 -0
  789. data/config/posts_config.yml +1 -0
  790. data/config/resource_styles.yml +2 -0
  791. data/config/resources_config.yml +1 -0
  792. data/config/routes.rb +39 -0
  793. data/db/migrate/20120624233540_create_boss_posts.rb +12 -0
  794. data/db/migrate/20120706130424_create_resources_table.rb +10 -0
  795. data/db/migrate/20120706155028_add_content_type_index_to_resources.rb +5 -0
  796. data/db/migrate/20120810095209_add_extension_column_to_resources.rb +8 -0
  797. data/db/migrate/20120810170007_change_start_date_to_published_date.rb +5 -0
  798. data/db/migrate/20120814163213_create_banners.rb +11 -0
  799. data/db/migrate/20120903112923_create_categories.rb +18 -0
  800. data/db/migrate/20120907014143_acts_as_taggable_on_migration.rb +30 -0
  801. data/db/seeds.rb +8 -0
  802. data/lib/boss.rb +5 -0
  803. data/lib/boss/engine.rb +11 -0
  804. data/lib/boss/pagination.rb +26 -0
  805. data/lib/boss/post_generator.rb +32 -0
  806. data/lib/boss/version.rb +3 -0
  807. data/lib/tasks/boss_tasks.rake +4 -0
  808. data/spec/dummy/README.rdoc +261 -0
  809. data/spec/dummy/Rakefile +17 -0
  810. data/spec/dummy/app/assets/javascripts/application.js +17 -0
  811. data/spec/dummy/app/assets/stylesheets/application.css +14 -0
  812. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  813. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  814. data/spec/dummy/app/views/layouts/application.html.erb +19 -0
  815. data/spec/dummy/config.ru +4 -0
  816. data/spec/dummy/config/accounts.yml +3 -0
  817. data/spec/dummy/config/application.rb +59 -0
  818. data/spec/dummy/config/boot.rb +10 -0
  819. data/spec/dummy/config/cucumber.yml +8 -0
  820. data/spec/dummy/config/database.yml +28 -0
  821. data/spec/dummy/config/environment.rb +5 -0
  822. data/spec/dummy/config/environments/development.rb +39 -0
  823. data/spec/dummy/config/environments/production.rb +67 -0
  824. data/spec/dummy/config/environments/test.rb +37 -0
  825. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  826. data/spec/dummy/config/initializers/inflections.rb +15 -0
  827. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  828. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  829. data/spec/dummy/config/initializers/session_store.rb +8 -0
  830. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  831. data/spec/dummy/config/locales/en.yml +5 -0
  832. data/spec/dummy/config/routes.rb +3 -0
  833. data/spec/dummy/db/development.sqlite3 +0 -0
  834. data/spec/dummy/db/migrate/20120712230935_devise_create_users.citygate.rb +50 -0
  835. data/spec/dummy/db/migrate/20120712230936_add_name_to_users.citygate.rb +7 -0
  836. data/spec/dummy/db/migrate/20120712230937_add_confirmable_to_users.citygate.rb +12 -0
  837. data/spec/dummy/db/migrate/20120712230938_devise_invitable_add_to_users.citygate.rb +24 -0
  838. data/spec/dummy/db/migrate/20120712230939_add_omniauth_to_devise.citygate.rb +20 -0
  839. data/spec/dummy/db/migrate/20120712230940_create_roles.citygate.rb +11 -0
  840. data/spec/dummy/db/migrate/20120712230950_create_boss_posts.boss.rb +13 -0
  841. data/spec/dummy/db/migrate/20120712230951_create_resources_table.boss.rb +11 -0
  842. data/spec/dummy/db/migrate/20120712230952_add_content_type_index_to_resources.boss.rb +6 -0
  843. data/spec/dummy/db/migrate/20120727151629_create_permissions_table.citygate.rb +13 -0
  844. data/spec/dummy/db/migrate/20120810095503_add_extension_column_to_resources.boss.rb +9 -0
  845. data/spec/dummy/db/migrate/20120810170148_change_start_date_to_published_date.boss.rb +6 -0
  846. data/spec/dummy/db/migrate/20120814170416_create_banners.boss.rb +12 -0
  847. data/spec/dummy/db/migrate/20120903135116_create_categories.boss.rb +19 -0
  848. data/spec/dummy/db/migrate/20120907014721_acts_as_taggable_on_migration.boss.rb +31 -0
  849. data/spec/dummy/db/migrate/20121008164320_add_conditions_to_permissions.citygate.rb +6 -0
  850. data/spec/dummy/db/production.sqlite3 +0 -0
  851. data/spec/dummy/db/schema.rb +134 -0
  852. data/spec/dummy/db/seeds.rb +2 -0
  853. data/spec/dummy/db/test.sqlite3 +0 -0
  854. data/spec/dummy/features/support/env.rb +59 -0
  855. data/spec/dummy/lib/ability.rb +26 -0
  856. data/spec/dummy/lib/tasks/cucumber.rake +65 -0
  857. data/spec/dummy/log/development.log +148449 -0
  858. data/spec/dummy/log/production.log +2 -0
  859. data/spec/dummy/log/test.log +82744 -0
  860. data/spec/dummy/public/404.html +26 -0
  861. data/spec/dummy/public/422.html +26 -0
  862. data/spec/dummy/public/500.html +25 -0
  863. data/spec/dummy/public/favicon.ico +0 -0
  864. data/spec/dummy/public/system/boss/resources/resources/000/000/001/original/basketball.pdf +0 -0
  865. data/spec/dummy/public/system/boss/resources/resources/000/000/001/original/computer_0050.jpg +0 -0
  866. data/spec/dummy/public/system/boss/resources/resources/000/000/001/original/gb_logo100.png +0 -0
  867. data/spec/dummy/public/system/boss/resources/resources/000/000/002/original/basketball.pdf +0 -0
  868. data/spec/dummy/public/system/boss/resources/resources/000/000/002/original/computer_0050.jpg +0 -0
  869. data/spec/dummy/public/system/boss/resources/resources/000/000/002/original/example_file.txt +3 -0
  870. data/spec/dummy/public/system/boss/resources/resources/000/000/003/original/computer_0050.jpg +0 -0
  871. data/spec/dummy/public/system/boss/resources/resources/000/000/003/original/example_file.txt +3 -0
  872. data/spec/dummy/public/system/boss/resources/resources/000/000/004/original/example_file.txt +3 -0
  873. data/spec/dummy/public/system/boss/resources/resources/000/000/004/original/gb_logo100.png +0 -0
  874. data/spec/dummy/public/system/resources/1/original/56883622_18f242e114_b.jpg +0 -0
  875. data/spec/dummy/public/system/resources/1/original/basketball.pdf +0 -0
  876. data/spec/dummy/public/system/resources/1/original/computer_0050.jpg +0 -0
  877. data/spec/dummy/public/system/resources/10/original/1310855824664.jpg +0 -0
  878. data/spec/dummy/public/system/resources/2/original/1310855824664.jpg +0 -0
  879. data/spec/dummy/public/system/resources/2/original/basketball.pdf +0 -0
  880. data/spec/dummy/public/system/resources/2/original/computer_0050.jpg +0 -0
  881. data/spec/dummy/public/system/resources/3/original/1310856290635.jpg +0 -0
  882. data/spec/dummy/public/system/resources/4/original/1310856399167.jpg +0 -0
  883. data/spec/dummy/public/system/resources/5/original/158_7915_0.jpg +0 -0
  884. data/spec/dummy/public/system/resources/6/original/1310855824664.jpg +0 -0
  885. data/spec/dummy/public/system/resources/7/original/1310856290635.jpg +0 -0
  886. data/spec/dummy/public/system/resources/8/original/1310855824664.jpg +0 -0
  887. data/spec/dummy/public/system/resources/9/original/2257284249_4620b85e05.jpg +0 -0
  888. data/spec/dummy/script/cucumber +10 -0
  889. data/spec/dummy/script/rails +6 -0
  890. data/spec/dummy/spec/controllers/admin/banners_controller_spec.rb +41 -0
  891. data/spec/dummy/spec/controllers/admin/posts_controller_spec.rb +11 -0
  892. data/spec/dummy/spec/controllers/admin/resources_controller_spec.rb +33 -0
  893. data/spec/dummy/spec/controllers/posts_controller_spec.rb +171 -0
  894. data/spec/dummy/spec/controllers/resources_controller_spec.rb +49 -0
  895. data/spec/dummy/spec/fixtures/boss_banners.yml +17 -0
  896. data/spec/dummy/spec/fixtures/boss_posts.yml +14 -0
  897. data/spec/dummy/spec/fixtures/citygate_users.yml +16 -0
  898. data/spec/dummy/spec/fixtures/files/basketball.pdf +0 -0
  899. data/spec/dummy/spec/fixtures/files/computer_0050.jpg +0 -0
  900. data/spec/dummy/spec/helpers/boss_application_helper_spec.rb +23 -0
  901. data/spec/dummy/spec/models/banners_spec.rb +24 -0
  902. data/spec/dummy/spec/models/posts_spec.rb +41 -0
  903. data/spec/dummy/spec/models/resource_spec.rb +60 -0
  904. data/spec/dummy/spec/routing/routing_spec.rb +61 -0
  905. data/spec/dummy/spec/spec_helper.rb +42 -0
  906. data/spec/dummy/tmp/cache/assets/BC2/850/sprockets%2F878400110743687d61711159c65f8c22 +0 -0
  907. data/spec/dummy/tmp/cache/assets/C24/520/sprockets%2F2f3a8489d25374d44119141585f115e5 +0 -0
  908. data/spec/dummy/tmp/cache/assets/C40/030/sprockets%2F54436c0d13893197751ee6999856ad68 +0 -0
  909. data/spec/dummy/tmp/cache/assets/C53/0E0/sprockets%2F121790135397621ab7af6984cb91566b +0 -0
  910. data/spec/dummy/tmp/cache/assets/C5A/5F0/sprockets%2F52259544bea2a61627b95987a6d86044 +0 -0
  911. data/spec/dummy/tmp/cache/assets/C5D/7D0/sprockets%2Faa929f78240346438e0086eca2977087 +0 -0
  912. data/spec/dummy/tmp/cache/assets/C63/E40/sprockets%2F36a675f52eb281488964b58be8971051 +0 -0
  913. data/spec/dummy/tmp/cache/assets/C6F/580/sprockets%2F22851f7af64e526bab14507232230e55 +0 -0
  914. data/spec/dummy/tmp/cache/assets/C72/B10/sprockets%2F21a4b8118f1f4254bf815e306027b951 +0 -0
  915. data/spec/dummy/tmp/cache/assets/C79/470/sprockets%2F7247bad709a775b6100a0864e463e704 +0 -0
  916. data/spec/dummy/tmp/cache/assets/C79/600/sprockets%2F3b480b741c938623c715006562f7a5bd +0 -0
  917. data/spec/dummy/tmp/cache/assets/C7A/C80/sprockets%2Fd520714793fb36dc6631414827206ade +0 -0
  918. data/spec/dummy/tmp/cache/assets/C88/300/sprockets%2F423f0a9f7a3b8f3395957d890e105900 +0 -0
  919. data/spec/dummy/tmp/cache/assets/C89/540/sprockets%2F606a455261f8f047c994c4b9a582f126 +0 -0
  920. data/spec/dummy/tmp/cache/assets/C90/E00/sprockets%2F0e5cc463f8d36795635981b11d9819c1 +0 -0
  921. data/spec/dummy/tmp/cache/assets/C92/F90/sprockets%2F920438082fee7d6098e3cd0278b49287 +0 -0
  922. data/spec/dummy/tmp/cache/assets/CA2/A80/sprockets%2F7b2db319590bc1c8134a3e338e604506 +0 -0
  923. data/spec/dummy/tmp/cache/assets/CA6/B10/sprockets%2F3111836e637405cf7106ecf0d37c70a7 +0 -0
  924. data/spec/dummy/tmp/cache/assets/CA8/F30/sprockets%2Fd74b20422f5218a62a02c7f48628d83d +0 -0
  925. data/spec/dummy/tmp/cache/assets/CAD/200/sprockets%2F50793597dc52344a9e10c12a79b264ea +0 -0
  926. data/spec/dummy/tmp/cache/assets/CAD/860/sprockets%2Fd73482fc43b147c1c401c2569dd92393 +0 -0
  927. data/spec/dummy/tmp/cache/assets/CAF/7B0/sprockets%2F9143406f63303f9fd28ab3658e161a4e +0 -0
  928. data/spec/dummy/tmp/cache/assets/CAF/FD0/sprockets%2F6026648844c17c73d917e3cda02d08a7 +0 -0
  929. data/spec/dummy/tmp/cache/assets/CB5/850/sprockets%2F011afbabcc10d620043300f28f499101 +0 -0
  930. data/spec/dummy/tmp/cache/assets/CB8/120/sprockets%2F46e2c48936a7976a3cb1f04aa8571278 +0 -0
  931. data/spec/dummy/tmp/cache/assets/CB9/940/sprockets%2Fd292ab0519813823cf786f6f620c4e94 +0 -0
  932. data/spec/dummy/tmp/cache/assets/CBF/370/sprockets%2F4e92e9ef55274628e8a46a27f23196b0 +0 -0
  933. data/spec/dummy/tmp/cache/assets/CC5/020/sprockets%2Ffa39f3f719158fea829829617391b42c +0 -0
  934. data/spec/dummy/tmp/cache/assets/CCF/230/sprockets%2F75a20a5e4f06832a4224a5f4a6314d8d +0 -0
  935. data/spec/dummy/tmp/cache/assets/CD5/180/sprockets%2F1e035230c4b6e464f1146973f0c7bc5e +0 -0
  936. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  937. data/spec/dummy/tmp/cache/assets/CD9/C70/sprockets%2Fb120f38a079fa9924c79c7a8101d53c0 +0 -0
  938. data/spec/dummy/tmp/cache/assets/CD9/CC0/sprockets%2F0c3ccc56507dd6594d72265d72c0318a +0 -0
  939. data/spec/dummy/tmp/cache/assets/CDA/3C0/sprockets%2F7413c4409dccf4fb698a42d020c02688 +0 -0
  940. data/spec/dummy/tmp/cache/assets/CDE/400/sprockets%2F58e8203723604e6bde11c0eb480c85f9 +0 -0
  941. data/spec/dummy/tmp/cache/assets/CDF/140/sprockets%2Fb5f8e1000e499f4b6787017ce16322af +0 -0
  942. data/spec/dummy/tmp/cache/assets/CE1/400/sprockets%2F25fe90052e1eaac8751c1960196d865d +0 -0
  943. data/spec/dummy/tmp/cache/assets/CE1/760/sprockets%2F6485f6d500193d364be392c118e4ebd5 +0 -0
  944. data/spec/dummy/tmp/cache/assets/CE3/150/sprockets%2F7d7a09e1df5c7510266a8d752683c4b3 +0 -0
  945. data/spec/dummy/tmp/cache/assets/CE6/D70/sprockets%2Fdf419b464fb39e134b7354fb933e0565 +0 -0
  946. data/spec/dummy/tmp/cache/assets/CE8/510/sprockets%2F0d85ab6e3972f70636a990e91fec8301 +0 -0
  947. data/spec/dummy/tmp/cache/assets/CE8/830/sprockets%2Fbc45b7ec3697c73450861834ee1336de +0 -0
  948. data/spec/dummy/tmp/cache/assets/CE9/5C0/sprockets%2Fdbe1c3a9e49d07916422e46149e8f318 +0 -0
  949. data/spec/dummy/tmp/cache/assets/CEF/C10/sprockets%2Fee370705f1ec41a8f49d30066798ef67 +0 -0
  950. data/spec/dummy/tmp/cache/assets/CF6/600/sprockets%2Fbcad79f4640490fa8743c56693e4e794 +0 -0
  951. data/spec/dummy/tmp/cache/assets/CF9/DB0/sprockets%2F2c0c81d15b23ec2123be4e299b047d42 +0 -0
  952. data/spec/dummy/tmp/cache/assets/CFA/080/sprockets%2F332a10f033129bd16ecfc2d9fc629023 +0 -0
  953. data/spec/dummy/tmp/cache/assets/D00/6D0/sprockets%2Fbb3256f3c4232c8a34543ae1f82e165b +0 -0
  954. data/spec/dummy/tmp/cache/assets/D00/980/sprockets%2Fe4eaa22e351f850345723ac2429c2f5b +0 -0
  955. data/spec/dummy/tmp/cache/assets/D07/3E0/sprockets%2Fbc15323161b84e2c1764d726aec772fd +0 -0
  956. data/spec/dummy/tmp/cache/assets/D0C/870/sprockets%2F47b59bc508d38b0709f3be16ccd12572 +0 -0
  957. data/spec/dummy/tmp/cache/assets/D0D/DE0/sprockets%2Fa35442f02b0b2479f22d83d639d8c4fd +0 -0
  958. data/spec/dummy/tmp/cache/assets/D10/870/sprockets%2F113a9b82b3ca5f41b5c9dac767646881 +0 -0
  959. data/spec/dummy/tmp/cache/assets/D15/5F0/sprockets%2F60f459141be5f877fb1f8cf38ca12452 +0 -0
  960. data/spec/dummy/tmp/cache/assets/D19/8B0/sprockets%2Fe8e7c72b55150f9a3f6917b0a7dd0299 +0 -0
  961. data/spec/dummy/tmp/cache/assets/D1A/400/sprockets%2F68bf61e296672914dcad81f9d1c806a3 +0 -0
  962. data/spec/dummy/tmp/cache/assets/D1C/B60/sprockets%2F4562fff067923d7e68b607c2f360d6dc +0 -0
  963. data/spec/dummy/tmp/cache/assets/D24/F60/sprockets%2Fe36a043fa2b3b9a221b015dffc471462 +0 -0
  964. data/spec/dummy/tmp/cache/assets/D2C/720/sprockets%2Fe4490972a26bb2f531212009dfcafa1f +0 -0
  965. data/spec/dummy/tmp/cache/assets/D2F/100/sprockets%2F95ffc0bd9499bacd4991f99f29381722 +0 -0
  966. data/spec/dummy/tmp/cache/assets/D31/1A0/sprockets%2Fe4e3cb247a17e0b1b89b510f70d380b8 +0 -0
  967. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  968. data/spec/dummy/tmp/cache/assets/D32/B30/sprockets%2F6ea2d01e1b76df9a9a003f35074d7f21 +0 -0
  969. data/spec/dummy/tmp/cache/assets/D38/0E0/sprockets%2F14794728d5ac05d5bace06f724f6c11b +0 -0
  970. data/spec/dummy/tmp/cache/assets/D39/8A0/sprockets%2F9a7afbe1b38452ba73fd008fd2562274 +0 -0
  971. data/spec/dummy/tmp/cache/assets/D40/580/sprockets%2Fe0e2cce283e3539345a7c317ea58c83d +0 -0
  972. data/spec/dummy/tmp/cache/assets/D41/3B0/sprockets%2F905d433e4ccd08f1c83aac66f4d95480 +0 -0
  973. data/spec/dummy/tmp/cache/assets/D41/B60/sprockets%2Ffc2aa47706f31fc127476ef51e37e5d4 +0 -0
  974. data/spec/dummy/tmp/cache/assets/D41/BC0/sprockets%2Ff0542487ca3fd0d2d9a8f66fc2557d02 +0 -0
  975. data/spec/dummy/tmp/cache/assets/D44/100/sprockets%2F5740af7d5182613d7ca172e87ecef37b +0 -0
  976. data/spec/dummy/tmp/cache/assets/D4A/B80/sprockets%2F9c633774f5ed1a90dcf2082bb874d6e6 +0 -0
  977. data/spec/dummy/tmp/cache/assets/D4C/B00/sprockets%2F3977e1b47c9709026f354f47fbc0dbef +0 -0
  978. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  979. data/spec/dummy/tmp/cache/assets/D54/DC0/sprockets%2Fc135f87fe97a983cb7f6129251c6edd5 +0 -0
  980. data/spec/dummy/tmp/cache/assets/D55/4A0/sprockets%2F9f3585d6944fecfd21b9f37e97043b2d +0 -0
  981. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  982. data/spec/dummy/tmp/cache/assets/D5B/E80/sprockets%2F799adf29fe5a95e34f60f607ae37a759 +0 -0
  983. data/spec/dummy/tmp/cache/assets/D62/280/sprockets%2Fbe1d43fe20a23e4593bd52af6455e1b6 +0 -0
  984. data/spec/dummy/tmp/cache/assets/D68/920/sprockets%2Fb7eb6668f9387c950b87e57f48d9bbb9 +0 -0
  985. data/spec/dummy/tmp/cache/assets/D69/320/sprockets%2F79251cf5abbd4fa5ef49c48383021cb1 +0 -0
  986. data/spec/dummy/tmp/cache/assets/D6D/040/sprockets%2F8ce54cfeeabda42540f18e3751631d57 +0 -0
  987. data/spec/dummy/tmp/cache/assets/D6D/2D0/sprockets%2Fb7137c8c11def4ce710a890d95c3f09a +0 -0
  988. data/spec/dummy/tmp/cache/assets/D70/DD0/sprockets%2F76aa685bacba69f3578ee40ab6211e85 +0 -0
  989. data/spec/dummy/tmp/cache/assets/D73/010/sprockets%2F834fa37dfa7f28148e125baf3f9d91b0 +0 -0
  990. data/spec/dummy/tmp/cache/assets/D74/CC0/sprockets%2F0883849eeadbcaf588706f6c1a5f103c +0 -0
  991. data/spec/dummy/tmp/cache/assets/D75/DB0/sprockets%2F9ab37622fdef7070f42a0d37a757f8de +0 -0
  992. data/spec/dummy/tmp/cache/assets/D76/360/sprockets%2F3ff9a318f34d309c6d4c7be4737ec60c +0 -0
  993. data/spec/dummy/tmp/cache/assets/D77/0A0/sprockets%2Fd388097cc8fda1663fa0d805faa592b9 +0 -0
  994. data/spec/dummy/tmp/cache/assets/D77/400/sprockets%2F3f9e137933597c5abf943eb401e8aead +0 -0
  995. data/spec/dummy/tmp/cache/assets/D78/BD0/sprockets%2Fd0c9ac69560ea197444b7f759ecd06da +0 -0
  996. data/spec/dummy/tmp/cache/assets/D7B/530/sprockets%2F994683a9d7bd17be1814cd8ce84cb13d +0 -0
  997. data/spec/dummy/tmp/cache/assets/D7D/FE0/sprockets%2Fdc33f319e81df25ef8f283e179b0c5c9 +0 -0
  998. data/spec/dummy/tmp/cache/assets/D99/BF0/sprockets%2F2fd8d582e234f8d0a741c1b4cafb716e +0 -0
  999. data/spec/dummy/tmp/cache/assets/D9A/070/sprockets%2Fcf06bf41615e3c42efaab85673ecb591 +0 -0
  1000. data/spec/dummy/tmp/cache/assets/D9B/0B0/sprockets%2F609a6d0b06eb3752679f6e1f0adcb4fc +0 -0
  1001. data/spec/dummy/tmp/cache/assets/D9E/F10/sprockets%2F9ab223df888d724dcad09eb1163cc5f4 +0 -0
  1002. data/spec/dummy/tmp/cache/assets/D9E/F70/sprockets%2Fc5d4a6e7d907804c52cbf910339dafdb +0 -0
  1003. data/spec/dummy/tmp/cache/assets/DA1/A00/sprockets%2Fc20a87edd6bfdcca68f83b81471770e1 +0 -0
  1004. data/spec/dummy/tmp/cache/assets/DB0/A60/sprockets%2F543dcca95ec9c45dd5f88d64fc9f1620 +0 -0
  1005. data/spec/dummy/tmp/cache/assets/DBB/F90/sprockets%2Fba83ff631b0cae1097016bf1acecb863 +0 -0
  1006. data/spec/dummy/tmp/cache/assets/DC9/A10/sprockets%2F8af6bbb4c92572eafb144047bbfb76c4 +0 -0
  1007. data/spec/dummy/tmp/cache/assets/DCC/AB0/sprockets%2F666d2c1f4eb7d60e9b27d5b52ad3f0ed +0 -0
  1008. data/spec/dummy/tmp/cache/assets/DCD/2C0/sprockets%2F70bed510995762fcd03cc5adf38eba6d +0 -0
  1009. data/spec/dummy/tmp/cache/assets/DD0/CC0/sprockets%2F5dc3e3dd4a62a8f03f9382c3dc9b5f3d +0 -0
  1010. data/spec/dummy/tmp/cache/assets/DD5/DF0/sprockets%2F5fcfa0c08af9e7eda4660905e491d7eb +0 -0
  1011. data/spec/dummy/tmp/cache/assets/DD7/B50/sprockets%2F52b6bca7ef09caf889327a0d19edcd76 +0 -0
  1012. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  1013. data/spec/dummy/tmp/cache/assets/DE3/490/sprockets%2F08c27bc6c1fc0f4f363e1a1ad4c0bda4 +0 -0
  1014. data/spec/dummy/tmp/cache/assets/DE4/E60/sprockets%2F9ca060c2613d9e0ee003e7babcdd06cb +0 -0
  1015. data/spec/dummy/tmp/cache/assets/DF8/930/sprockets%2F73e117a1d3fd83fbcfe7a21e6b68eb2a +0 -0
  1016. data/spec/dummy/tmp/cache/assets/DFD/2A0/sprockets%2Fb5ea1d5e0e1cefdde6fe0982ab051878 +0 -0
  1017. data/spec/dummy/tmp/cache/assets/DFD/810/sprockets%2F6a607a98f71d7eec0fa22eced69a1ca4 +0 -0
  1018. data/spec/dummy/tmp/cache/assets/E03/BA0/sprockets%2Ffc0b3e556a2adbef7659cdd773a9b1c8 +0 -0
  1019. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  1020. data/spec/dummy/tmp/cache/assets/E05/CF0/sprockets%2Fd3e87cf247dcc6c74cacb13c9f14af96 +0 -0
  1021. data/spec/dummy/tmp/cache/assets/E11/560/sprockets%2Fe5be2e9dd3ce26fb822c6d93fbe8369e +0 -0
  1022. data/spec/dummy/tmp/cache/assets/E18/240/sprockets%2Ff2f4de0be24db7a3b7b60c216adc0df4 +0 -0
  1023. data/spec/dummy/tmp/cache/assets/E29/D30/sprockets%2F8df60efdb80e123c26a8bb7be1dc4be8 +0 -0
  1024. data/spec/dummy/tmp/cache/assets/E2B/670/sprockets%2Feac21904ecb266ce92aecadb8681b7fe +0 -0
  1025. data/spec/dummy/tmp/cache/assets/E98/710/sprockets%2Fd95dbf0cd6cefb9477f7efba5d410cee +0 -0
  1026. data/spec/dummy/tmp/cache/assets/EA4/0A0/sprockets%2Ffabaa55761ccaaabaeb0bba2fd55e990 +0 -0
  1027. data/spec/dummy/tmp/restart.txt +0 -0
  1028. data/spec/spec_helper.rb +34 -0
  1029. metadata +1454 -0
@@ -0,0 +1,975 @@
1
+ /*
2
+ * jQuery File Upload Plugin 5.14
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://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint nomen: true, unparam: true, regexp: true */
13
+ /*global define, window, document, Blob, FormData, location */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define([
20
+ 'jquery',
21
+ 'jquery.ui.widget'
22
+ ], factory);
23
+ } else {
24
+ // Browser globals:
25
+ factory(window.jQuery);
26
+ }
27
+ }(function ($) {
28
+ 'use strict';
29
+
30
+ // The FileReader API is not actually used, but works as feature detection,
31
+ // as e.g. Safari supports XHR file uploads via the FormData API,
32
+ // but not non-multipart XHR file uploads:
33
+ $.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
34
+ $.support.xhrFormDataFileUpload = !!window.FormData;
35
+
36
+ // The fileupload widget listens for change events on file input fields defined
37
+ // via fileInput setting and paste or drop events of the given dropZone.
38
+ // In addition to the default jQuery Widget methods, the fileupload widget
39
+ // exposes the "add" and "send" methods, to add or directly send files using
40
+ // the fileupload API.
41
+ // By default, files added via file input selection, paste, drag & drop or
42
+ // "add" method are uploaded immediately, but it is possible to override
43
+ // the "add" callback option to queue file uploads.
44
+ $.widget('blueimp.fileupload', {
45
+
46
+ options: {
47
+ // The namespace used for event handler binding on the dropZone and
48
+ // fileInput collections.
49
+ // If not set, the name of the widget ("fileupload") is used.
50
+ namespace: undefined,
51
+ // The drop target collection, by the default the complete document.
52
+ // Set to null or an empty collection to disable drag & drop support:
53
+ dropZone: $(document),
54
+ // The file input field collection, that is listened for change events.
55
+ // If undefined, it is set to the file input fields inside
56
+ // of the widget element on plugin initialization.
57
+ // Set to null or an empty collection to disable the change listener.
58
+ fileInput: undefined,
59
+ // By default, the file input field is replaced with a clone after
60
+ // each input field change event. This is required for iframe transport
61
+ // queues and allows change events to be fired for the same file
62
+ // selection, but can be disabled by setting the following option to false:
63
+ replaceFileInput: true,
64
+ // The parameter name for the file form data (the request argument name).
65
+ // If undefined or empty, the name property of the file input field is
66
+ // used, or "files[]" if the file input name property is also empty,
67
+ // can be a string or an array of strings:
68
+ paramName: undefined,
69
+ // By default, each file of a selection is uploaded using an individual
70
+ // request for XHR type uploads. Set to false to upload file
71
+ // selections in one request each:
72
+ singleFileUploads: true,
73
+ // To limit the number of files uploaded with one XHR request,
74
+ // set the following option to an integer greater than 0:
75
+ limitMultiFileUploads: undefined,
76
+ // Set the following option to true to issue all file upload requests
77
+ // in a sequential order:
78
+ sequentialUploads: false,
79
+ // To limit the number of concurrent uploads,
80
+ // set the following option to an integer greater than 0:
81
+ limitConcurrentUploads: undefined,
82
+ // Set the following option to true to force iframe transport uploads:
83
+ forceIframeTransport: false,
84
+ // Set the following option to the location of a redirect url on the
85
+ // origin server, for cross-domain iframe transport uploads:
86
+ redirect: undefined,
87
+ // The parameter name for the redirect url, sent as part of the form
88
+ // data and set to 'redirect' if this option is empty:
89
+ redirectParamName: undefined,
90
+ // Set the following option to the location of a postMessage window,
91
+ // to enable postMessage transport uploads:
92
+ postMessage: undefined,
93
+ // By default, XHR file uploads are sent as multipart/form-data.
94
+ // The iframe transport is always using multipart/form-data.
95
+ // Set to false to enable non-multipart XHR uploads:
96
+ multipart: true,
97
+ // To upload large files in smaller chunks, set the following option
98
+ // to a preferred maximum chunk size. If set to 0, null or undefined,
99
+ // or the browser does not support the required Blob API, files will
100
+ // be uploaded as a whole.
101
+ maxChunkSize: undefined,
102
+ // When a non-multipart upload or a chunked multipart upload has been
103
+ // aborted, this option can be used to resume the upload by setting
104
+ // it to the size of the already uploaded bytes. This option is most
105
+ // useful when modifying the options object inside of the "add" or
106
+ // "send" callbacks, as the options are cloned for each file upload.
107
+ uploadedBytes: undefined,
108
+ // By default, failed (abort or error) file uploads are removed from the
109
+ // global progress calculation. Set the following option to false to
110
+ // prevent recalculating the global progress data:
111
+ recalculateProgress: true,
112
+ // Interval in milliseconds to calculate and trigger progress events:
113
+ progressInterval: 100,
114
+ // Interval in milliseconds to calculate progress bitrate:
115
+ bitrateInterval: 500,
116
+
117
+ // Additional form data to be sent along with the file uploads can be set
118
+ // using this option, which accepts an array of objects with name and
119
+ // value properties, a function returning such an array, a FormData
120
+ // object (for XHR file uploads), or a simple object.
121
+ // The form of the first fileInput is given as parameter to the function:
122
+ formData: function (form) {
123
+ return form.serializeArray();
124
+ },
125
+
126
+ // The add callback is invoked as soon as files are added to the fileupload
127
+ // widget (via file input selection, drag & drop, paste or add API call).
128
+ // If the singleFileUploads option is enabled, this callback will be
129
+ // called once for each file in the selection for XHR file uplaods, else
130
+ // once for each file selection.
131
+ // The upload starts when the submit method is invoked on the data parameter.
132
+ // The data object contains a files property holding the added files
133
+ // and allows to override plugin options as well as define ajax settings.
134
+ // Listeners for this callback can also be bound the following way:
135
+ // .bind('fileuploadadd', func);
136
+ // data.submit() returns a Promise object and allows to attach additional
137
+ // handlers using jQuery's Deferred callbacks:
138
+ // data.submit().done(func).fail(func).always(func);
139
+ add: function (e, data) {
140
+ data.submit();
141
+ },
142
+
143
+ // Other callbacks:
144
+ // Callback for the submit event of each file upload:
145
+ // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
146
+ // Callback for the start of each file upload request:
147
+ // send: function (e, data) {}, // .bind('fileuploadsend', func);
148
+ // Callback for successful uploads:
149
+ // done: function (e, data) {}, // .bind('fileuploaddone', func);
150
+ // Callback for failed (abort or error) uploads:
151
+ // fail: function (e, data) {}, // .bind('fileuploadfail', func);
152
+ // Callback for completed (success, abort or error) requests:
153
+ // always: function (e, data) {}, // .bind('fileuploadalways', func);
154
+ // Callback for upload progress events:
155
+ // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
156
+ // Callback for global upload progress events:
157
+ // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
158
+ // Callback for uploads start, equivalent to the global ajaxStart event:
159
+ // start: function (e) {}, // .bind('fileuploadstart', func);
160
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
161
+ // stop: function (e) {}, // .bind('fileuploadstop', func);
162
+ // Callback for change events of the fileInput collection:
163
+ // change: function (e, data) {}, // .bind('fileuploadchange', func);
164
+ // Callback for paste events to the dropZone collection:
165
+ // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
166
+ // Callback for drop events of the dropZone collection:
167
+ // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
168
+ // Callback for dragover events of the dropZone collection:
169
+ // dragover: function (e) {}, // .bind('fileuploaddragover', func);
170
+
171
+ // The plugin options are used as settings object for the ajax calls.
172
+ // The following are jQuery ajax settings required for the file uploads:
173
+ processData: false,
174
+ contentType: false,
175
+ cache: false
176
+ },
177
+
178
+ // A list of options that require a refresh after assigning a new value:
179
+ _refreshOptionsList: [
180
+ 'namespace',
181
+ 'dropZone',
182
+ 'fileInput',
183
+ 'multipart',
184
+ 'forceIframeTransport'
185
+ ],
186
+
187
+ _BitrateTimer: function () {
188
+ this.timestamp = +(new Date());
189
+ this.loaded = 0;
190
+ this.bitrate = 0;
191
+ this.getBitrate = function (now, loaded, interval) {
192
+ var timeDiff = now - this.timestamp;
193
+ if (!this.bitrate || !interval || timeDiff > interval) {
194
+ this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
195
+ this.loaded = loaded;
196
+ this.timestamp = now;
197
+ }
198
+ return this.bitrate;
199
+ };
200
+ },
201
+
202
+ _isXHRUpload: function (options) {
203
+ return !options.forceIframeTransport &&
204
+ ((!options.multipart && $.support.xhrFileUpload) ||
205
+ $.support.xhrFormDataFileUpload);
206
+ },
207
+
208
+ _getFormData: function (options) {
209
+ var formData;
210
+ if (typeof options.formData === 'function') {
211
+ return options.formData(options.form);
212
+ }
213
+ if ($.isArray(options.formData)) {
214
+ return options.formData;
215
+ }
216
+ if (options.formData) {
217
+ formData = [];
218
+ $.each(options.formData, function (name, value) {
219
+ formData.push({name: name, value: value});
220
+ });
221
+ return formData;
222
+ }
223
+ return [];
224
+ },
225
+
226
+ _getTotal: function (files) {
227
+ var total = 0;
228
+ $.each(files, function (index, file) {
229
+ total += file.size || 1;
230
+ });
231
+ return total;
232
+ },
233
+
234
+ _onProgress: function (e, data) {
235
+ if (e.lengthComputable) {
236
+ var now = +(new Date()),
237
+ total,
238
+ loaded;
239
+ if (data._time && data.progressInterval &&
240
+ (now - data._time < data.progressInterval) &&
241
+ e.loaded !== e.total) {
242
+ return;
243
+ }
244
+ data._time = now;
245
+ total = data.total || this._getTotal(data.files);
246
+ loaded = parseInt(
247
+ e.loaded / e.total * (data.chunkSize || total),
248
+ 10
249
+ ) + (data.uploadedBytes || 0);
250
+ this._loaded += loaded - (data.loaded || data.uploadedBytes || 0);
251
+ data.lengthComputable = true;
252
+ data.loaded = loaded;
253
+ data.total = total;
254
+ data.bitrate = data._bitrateTimer.getBitrate(
255
+ now,
256
+ loaded,
257
+ data.bitrateInterval
258
+ );
259
+ // Trigger a custom progress event with a total data property set
260
+ // to the file size(s) of the current upload and a loaded data
261
+ // property calculated accordingly:
262
+ this._trigger('progress', e, data);
263
+ // Trigger a global progress event for all current file uploads,
264
+ // including ajax calls queued for sequential file uploads:
265
+ this._trigger('progressall', e, {
266
+ lengthComputable: true,
267
+ loaded: this._loaded,
268
+ total: this._total,
269
+ bitrate: this._bitrateTimer.getBitrate(
270
+ now,
271
+ this._loaded,
272
+ data.bitrateInterval
273
+ )
274
+ });
275
+ }
276
+ },
277
+
278
+ _initProgressListener: function (options) {
279
+ var that = this,
280
+ xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
281
+ // Accesss to the native XHR object is required to add event listeners
282
+ // for the upload progress event:
283
+ if (xhr.upload) {
284
+ $(xhr.upload).bind('progress', function (e) {
285
+ var oe = e.originalEvent;
286
+ // Make sure the progress event properties get copied over:
287
+ e.lengthComputable = oe.lengthComputable;
288
+ e.loaded = oe.loaded;
289
+ e.total = oe.total;
290
+ that._onProgress(e, options);
291
+ });
292
+ options.xhr = function () {
293
+ return xhr;
294
+ };
295
+ }
296
+ },
297
+
298
+ _initXHRData: function (options) {
299
+ var formData,
300
+ file = options.files[0],
301
+ // Ignore non-multipart setting if not supported:
302
+ multipart = options.multipart || !$.support.xhrFileUpload,
303
+ paramName = options.paramName[0];
304
+ if (!multipart || options.blob) {
305
+ // For non-multipart uploads and chunked uploads,
306
+ // file meta data is not part of the request body,
307
+ // so we transmit this data as part of the HTTP headers.
308
+ // For cross domain requests, these headers must be allowed
309
+ // via Access-Control-Allow-Headers or removed using
310
+ // the beforeSend callback:
311
+ options.headers = $.extend(options.headers, {
312
+ 'X-File-Name': file.name,
313
+ 'X-File-Type': file.type,
314
+ 'X-File-Size': file.size
315
+ });
316
+ if (!options.blob) {
317
+ // Non-chunked non-multipart upload:
318
+ options.contentType = file.type;
319
+ options.data = file;
320
+ } else if (!multipart) {
321
+ // Chunked non-multipart upload:
322
+ options.contentType = 'application/octet-stream';
323
+ options.data = options.blob;
324
+ }
325
+ }
326
+ if (multipart && $.support.xhrFormDataFileUpload) {
327
+ if (options.postMessage) {
328
+ // window.postMessage does not allow sending FormData
329
+ // objects, so we just add the File/Blob objects to
330
+ // the formData array and let the postMessage window
331
+ // create the FormData object out of this array:
332
+ formData = this._getFormData(options);
333
+ if (options.blob) {
334
+ formData.push({
335
+ name: paramName,
336
+ value: options.blob
337
+ });
338
+ } else {
339
+ $.each(options.files, function (index, file) {
340
+ formData.push({
341
+ name: options.paramName[index] || paramName,
342
+ value: file
343
+ });
344
+ });
345
+ }
346
+ } else {
347
+ if (options.formData instanceof FormData) {
348
+ formData = options.formData;
349
+ } else {
350
+ formData = new FormData();
351
+ $.each(this._getFormData(options), function (index, field) {
352
+ formData.append(field.name, field.value);
353
+ });
354
+ }
355
+ if (options.blob) {
356
+ formData.append(paramName, options.blob, file.name);
357
+ } else {
358
+ $.each(options.files, function (index, file) {
359
+ // File objects are also Blob instances.
360
+ // This check allows the tests to run with
361
+ // dummy objects:
362
+ if (file instanceof Blob) {
363
+ formData.append(
364
+ options.paramName[index] || paramName,
365
+ file,
366
+ file.name
367
+ );
368
+ }
369
+ });
370
+ }
371
+ }
372
+ options.data = formData;
373
+ }
374
+ // Blob reference is not needed anymore, free memory:
375
+ options.blob = null;
376
+ },
377
+
378
+ _initIframeSettings: function (options) {
379
+ // Setting the dataType to iframe enables the iframe transport:
380
+ options.dataType = 'iframe ' + (options.dataType || '');
381
+ // The iframe transport accepts a serialized array as form data:
382
+ options.formData = this._getFormData(options);
383
+ // Add redirect url to form data on cross-domain uploads:
384
+ if (options.redirect && $('<a></a>').prop('href', options.url)
385
+ .prop('host') !== location.host) {
386
+ options.formData.push({
387
+ name: options.redirectParamName || 'redirect',
388
+ value: options.redirect
389
+ });
390
+ }
391
+ },
392
+
393
+ _initDataSettings: function (options) {
394
+ if (this._isXHRUpload(options)) {
395
+ if (!this._chunkedUpload(options, true)) {
396
+ if (!options.data) {
397
+ this._initXHRData(options);
398
+ }
399
+ this._initProgressListener(options);
400
+ }
401
+ if (options.postMessage) {
402
+ // Setting the dataType to postmessage enables the
403
+ // postMessage transport:
404
+ options.dataType = 'postmessage ' + (options.dataType || '');
405
+ }
406
+ } else {
407
+ this._initIframeSettings(options, 'iframe');
408
+ }
409
+ },
410
+
411
+ _getParamName: function (options) {
412
+ var fileInput = $(options.fileInput),
413
+ paramName = options.paramName;
414
+ if (!paramName) {
415
+ paramName = [];
416
+ fileInput.each(function () {
417
+ var input = $(this),
418
+ name = input.prop('name') || 'files[]',
419
+ i = (input.prop('files') || [1]).length;
420
+ while (i) {
421
+ paramName.push(name);
422
+ i -= 1;
423
+ }
424
+ });
425
+ if (!paramName.length) {
426
+ paramName = [fileInput.prop('name') || 'files[]'];
427
+ }
428
+ } else if (!$.isArray(paramName)) {
429
+ paramName = [paramName];
430
+ }
431
+ return paramName;
432
+ },
433
+
434
+ _initFormSettings: function (options) {
435
+ // Retrieve missing options from the input field and the
436
+ // associated form, if available:
437
+ if (!options.form || !options.form.length) {
438
+ options.form = $(options.fileInput.prop('form'));
439
+ }
440
+ options.paramName = this._getParamName(options);
441
+ if (!options.url) {
442
+ options.url = options.form.prop('action') || location.href;
443
+ }
444
+ // The HTTP request method must be "POST" or "PUT":
445
+ options.type = (options.type || options.form.prop('method') || '')
446
+ .toUpperCase();
447
+ if (options.type !== 'POST' && options.type !== 'PUT') {
448
+ options.type = 'POST';
449
+ }
450
+ if (!options.formAcceptCharset) {
451
+ options.formAcceptCharset = options.form.attr('accept-charset');
452
+ }
453
+ },
454
+
455
+ _getAJAXSettings: function (data) {
456
+ var options = $.extend({}, this.options, data);
457
+ this._initFormSettings(options);
458
+ this._initDataSettings(options);
459
+ return options;
460
+ },
461
+
462
+ // Maps jqXHR callbacks to the equivalent
463
+ // methods of the given Promise object:
464
+ _enhancePromise: function (promise) {
465
+ promise.success = promise.done;
466
+ promise.error = promise.fail;
467
+ promise.complete = promise.always;
468
+ return promise;
469
+ },
470
+
471
+ // Creates and returns a Promise object enhanced with
472
+ // the jqXHR methods abort, success, error and complete:
473
+ _getXHRPromise: function (resolveOrReject, context, args) {
474
+ var dfd = $.Deferred(),
475
+ promise = dfd.promise();
476
+ context = context || this.options.context || promise;
477
+ if (resolveOrReject === true) {
478
+ dfd.resolveWith(context, args);
479
+ } else if (resolveOrReject === false) {
480
+ dfd.rejectWith(context, args);
481
+ }
482
+ promise.abort = dfd.promise;
483
+ return this._enhancePromise(promise);
484
+ },
485
+
486
+ // Uploads a file in multiple, sequential requests
487
+ // by splitting the file up in multiple blob chunks.
488
+ // If the second parameter is true, only tests if the file
489
+ // should be uploaded in chunks, but does not invoke any
490
+ // upload requests:
491
+ _chunkedUpload: function (options, testOnly) {
492
+ var that = this,
493
+ file = options.files[0],
494
+ fs = file.size,
495
+ ub = options.uploadedBytes = options.uploadedBytes || 0,
496
+ mcs = options.maxChunkSize || fs,
497
+ // Use the Blob methods with the slice implementation
498
+ // according to the W3C Blob API specification:
499
+ slice = file.webkitSlice || file.mozSlice || file.slice,
500
+ upload,
501
+ n,
502
+ jqXHR,
503
+ pipe;
504
+ if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
505
+ options.data) {
506
+ return false;
507
+ }
508
+ if (testOnly) {
509
+ return true;
510
+ }
511
+ if (ub >= fs) {
512
+ file.error = 'uploadedBytes';
513
+ return this._getXHRPromise(
514
+ false,
515
+ options.context,
516
+ [null, 'error', file.error]
517
+ );
518
+ }
519
+ // n is the number of blobs to upload,
520
+ // calculated via filesize, uploaded bytes and max chunk size:
521
+ n = Math.ceil((fs - ub) / mcs);
522
+ // The chunk upload method accepting the chunk number as parameter:
523
+ upload = function (i) {
524
+ if (!i) {
525
+ return that._getXHRPromise(true, options.context);
526
+ }
527
+ // Upload the blobs in sequential order:
528
+ return upload(i -= 1).pipe(function () {
529
+ // Clone the options object for each chunk upload:
530
+ var o = $.extend({}, options);
531
+ o.blob = slice.call(
532
+ file,
533
+ ub + i * mcs,
534
+ ub + (i + 1) * mcs
535
+ );
536
+ // Expose the chunk index:
537
+ o.chunkIndex = i;
538
+ // Expose the number of chunks:
539
+ o.chunksNumber = n;
540
+ // Store the current chunk size, as the blob itself
541
+ // will be dereferenced after data processing:
542
+ o.chunkSize = o.blob.size;
543
+ // Process the upload data (the blob and potential form data):
544
+ that._initXHRData(o);
545
+ // Add progress listeners for this chunk upload:
546
+ that._initProgressListener(o);
547
+ jqXHR = ($.ajax(o) || that._getXHRPromise(false, o.context))
548
+ .done(function () {
549
+ // Create a progress event if upload is done and
550
+ // no progress event has been invoked for this chunk:
551
+ if (!o.loaded) {
552
+ that._onProgress($.Event('progress', {
553
+ lengthComputable: true,
554
+ loaded: o.chunkSize,
555
+ total: o.chunkSize
556
+ }), o);
557
+ }
558
+ options.uploadedBytes = o.uploadedBytes +=
559
+ o.chunkSize;
560
+ });
561
+ return jqXHR;
562
+ });
563
+ };
564
+ // Return the piped Promise object, enhanced with an abort method,
565
+ // which is delegated to the jqXHR object of the current upload,
566
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
567
+ pipe = upload(n);
568
+ pipe.abort = function () {
569
+ return jqXHR.abort();
570
+ };
571
+ return this._enhancePromise(pipe);
572
+ },
573
+
574
+ _beforeSend: function (e, data) {
575
+ if (this._active === 0) {
576
+ // the start callback is triggered when an upload starts
577
+ // and no other uploads are currently running,
578
+ // equivalent to the global ajaxStart event:
579
+ this._trigger('start');
580
+ // Set timer for global bitrate progress calculation:
581
+ this._bitrateTimer = new this._BitrateTimer();
582
+ }
583
+ this._active += 1;
584
+ // Initialize the global progress values:
585
+ this._loaded += data.uploadedBytes || 0;
586
+ this._total += this._getTotal(data.files);
587
+ },
588
+
589
+ _onDone: function (result, textStatus, jqXHR, options) {
590
+ if (!this._isXHRUpload(options)) {
591
+ // Create a progress event for each iframe load:
592
+ this._onProgress($.Event('progress', {
593
+ lengthComputable: true,
594
+ loaded: 1,
595
+ total: 1
596
+ }), options);
597
+ }
598
+ options.result = result;
599
+ options.textStatus = textStatus;
600
+ options.jqXHR = jqXHR;
601
+ this._trigger('done', null, options);
602
+ },
603
+
604
+ _onFail: function (jqXHR, textStatus, errorThrown, options) {
605
+ options.jqXHR = jqXHR;
606
+ options.textStatus = textStatus;
607
+ options.errorThrown = errorThrown;
608
+ this._trigger('fail', null, options);
609
+ if (options.recalculateProgress) {
610
+ // Remove the failed (error or abort) file upload from
611
+ // the global progress calculation:
612
+ this._loaded -= options.loaded || options.uploadedBytes || 0;
613
+ this._total -= options.total || this._getTotal(options.files);
614
+ }
615
+ },
616
+
617
+ _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
618
+ this._active -= 1;
619
+ options.textStatus = textStatus;
620
+ if (jqXHRorError && jqXHRorError.always) {
621
+ options.jqXHR = jqXHRorError;
622
+ options.result = jqXHRorResult;
623
+ } else {
624
+ options.jqXHR = jqXHRorResult;
625
+ options.errorThrown = jqXHRorError;
626
+ }
627
+ this._trigger('always', null, options);
628
+ if (this._active === 0) {
629
+ // The stop callback is triggered when all uploads have
630
+ // been completed, equivalent to the global ajaxStop event:
631
+ this._trigger('stop');
632
+ // Reset the global progress values:
633
+ this._loaded = this._total = 0;
634
+ this._bitrateTimer = null;
635
+ }
636
+ },
637
+
638
+ _onSend: function (e, data) {
639
+ var that = this,
640
+ jqXHR,
641
+ slot,
642
+ pipe,
643
+ options = that._getAJAXSettings(data),
644
+ send = function (resolve, args) {
645
+ that._sending += 1;
646
+ // Set timer for bitrate progress calculation:
647
+ options._bitrateTimer = new that._BitrateTimer();
648
+ jqXHR = jqXHR || (
649
+ (resolve !== false &&
650
+ that._trigger('send', e, options) !== false &&
651
+ (that._chunkedUpload(options) || $.ajax(options))) ||
652
+ that._getXHRPromise(false, options.context, args)
653
+ ).done(function (result, textStatus, jqXHR) {
654
+ that._onDone(result, textStatus, jqXHR, options);
655
+ }).fail(function (jqXHR, textStatus, errorThrown) {
656
+ that._onFail(jqXHR, textStatus, errorThrown, options);
657
+ }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
658
+ that._sending -= 1;
659
+ that._onAlways(
660
+ jqXHRorResult,
661
+ textStatus,
662
+ jqXHRorError,
663
+ options
664
+ );
665
+ if (options.limitConcurrentUploads &&
666
+ options.limitConcurrentUploads > that._sending) {
667
+ // Start the next queued upload,
668
+ // that has not been aborted:
669
+ var nextSlot = that._slots.shift();
670
+ while (nextSlot) {
671
+ if (!nextSlot.isRejected()) {
672
+ nextSlot.resolve();
673
+ break;
674
+ }
675
+ nextSlot = that._slots.shift();
676
+ }
677
+ }
678
+ });
679
+ return jqXHR;
680
+ };
681
+ this._beforeSend(e, options);
682
+ if (this.options.sequentialUploads ||
683
+ (this.options.limitConcurrentUploads &&
684
+ this.options.limitConcurrentUploads <= this._sending)) {
685
+ if (this.options.limitConcurrentUploads > 1) {
686
+ slot = $.Deferred();
687
+ this._slots.push(slot);
688
+ pipe = slot.pipe(send);
689
+ } else {
690
+ pipe = (this._sequence = this._sequence.pipe(send, send));
691
+ }
692
+ // Return the piped Promise object, enhanced with an abort method,
693
+ // which is delegated to the jqXHR object of the current upload,
694
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
695
+ pipe.abort = function () {
696
+ var args = [undefined, 'abort', 'abort'];
697
+ if (!jqXHR) {
698
+ if (slot) {
699
+ slot.rejectWith(args);
700
+ }
701
+ return send(false, args);
702
+ }
703
+ return jqXHR.abort();
704
+ };
705
+ return this._enhancePromise(pipe);
706
+ }
707
+ return send();
708
+ },
709
+
710
+ _onAdd: function (e, data) {
711
+ var that = this,
712
+ result = true,
713
+ options = $.extend({}, this.options, data),
714
+ limit = options.limitMultiFileUploads,
715
+ paramName = this._getParamName(options),
716
+ paramNameSet,
717
+ paramNameSlice,
718
+ fileSet,
719
+ i;
720
+ if (!(options.singleFileUploads || limit) ||
721
+ !this._isXHRUpload(options)) {
722
+ fileSet = [data.files];
723
+ paramNameSet = [paramName];
724
+ } else if (!options.singleFileUploads && limit) {
725
+ fileSet = [];
726
+ paramNameSet = [];
727
+ for (i = 0; i < data.files.length; i += limit) {
728
+ fileSet.push(data.files.slice(i, i + limit));
729
+ paramNameSlice = paramName.slice(i, i + limit);
730
+ if (!paramNameSlice.length) {
731
+ paramNameSlice = paramName;
732
+ }
733
+ paramNameSet.push(paramNameSlice);
734
+ }
735
+ } else {
736
+ paramNameSet = paramName;
737
+ }
738
+ data.originalFiles = data.files;
739
+ $.each(fileSet || data.files, function (index, element) {
740
+ var newData = $.extend({}, data);
741
+ newData.files = fileSet ? element : [element];
742
+ newData.paramName = paramNameSet[index];
743
+ newData.submit = function () {
744
+ newData.jqXHR = this.jqXHR =
745
+ (that._trigger('submit', e, this) !== false) &&
746
+ that._onSend(e, this);
747
+ return this.jqXHR;
748
+ };
749
+ return (result = that._trigger('add', e, newData));
750
+ });
751
+ return result;
752
+ },
753
+
754
+ // File Normalization for Gecko 1.9.1 (Firefox 3.5) support:
755
+ _normalizeFile: function (index, file) {
756
+ if (file.name === undefined && file.size === undefined) {
757
+ file.name = file.fileName;
758
+ file.size = file.fileSize;
759
+ }
760
+ },
761
+
762
+ _replaceFileInput: function (input) {
763
+ var inputClone = input.clone(true);
764
+ $('<form></form>').append(inputClone)[0].reset();
765
+ // Detaching allows to insert the fileInput on another form
766
+ // without loosing the file input value:
767
+ input.after(inputClone).detach();
768
+ // Avoid memory leaks with the detached file input:
769
+ $.cleanData(input.unbind('remove'));
770
+ // Replace the original file input element in the fileInput
771
+ // collection with the clone, which has been copied including
772
+ // event handlers:
773
+ this.options.fileInput = this.options.fileInput.map(function (i, el) {
774
+ if (el === input[0]) {
775
+ return inputClone[0];
776
+ }
777
+ return el;
778
+ });
779
+ // If the widget has been initialized on the file input itself,
780
+ // override this.element with the file input clone:
781
+ if (input[0] === this.element[0]) {
782
+ this.element = inputClone;
783
+ }
784
+ },
785
+
786
+ _getFileInputFiles: function (fileInput) {
787
+ fileInput = $(fileInput);
788
+ var files = $.each($.makeArray(fileInput.prop('files')), this._normalizeFile),
789
+ value;
790
+ if (!files.length) {
791
+ value = fileInput.prop('value');
792
+ if (!value) {
793
+ return [];
794
+ }
795
+ // If the files property is not available, the browser does not
796
+ // support the File API and we add a pseudo File object with
797
+ // the input value as name with path information removed:
798
+ files = [{name: value.replace(/^.*\\/, '')}];
799
+ }
800
+ return files;
801
+ },
802
+
803
+ _onChange: function (e) {
804
+ var that = e.data.fileupload,
805
+ data = {
806
+ fileInput: $(e.target),
807
+ form: $(e.target.form)
808
+ };
809
+ data.files = that._getFileInputFiles(data.fileInput);
810
+ if (that.options.replaceFileInput) {
811
+ that._replaceFileInput(data.fileInput);
812
+ }
813
+ if (that._trigger('change', e, data) === false ||
814
+ that._onAdd(e, data) === false) {
815
+ return false;
816
+ }
817
+ },
818
+
819
+ _onPaste: function (e) {
820
+ var that = e.data.fileupload,
821
+ cbd = e.originalEvent.clipboardData,
822
+ items = (cbd && cbd.items) || [],
823
+ data = {files: []};
824
+ $.each(items, function (index, item) {
825
+ var file = item.getAsFile && item.getAsFile();
826
+ if (file) {
827
+ data.files.push(file);
828
+ }
829
+ });
830
+ if (that._trigger('paste', e, data) === false ||
831
+ that._onAdd(e, data) === false) {
832
+ return false;
833
+ }
834
+ },
835
+
836
+ _onDrop: function (e) {
837
+ var that = e.data.fileupload,
838
+ dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer,
839
+ data = {
840
+ files: $.each(
841
+ $.makeArray(dataTransfer && dataTransfer.files),
842
+ that._normalizeFile
843
+ )
844
+ };
845
+ if (that._trigger('drop', e, data) === false ||
846
+ that._onAdd(e, data) === false) {
847
+ return false;
848
+ }
849
+ e.preventDefault();
850
+ },
851
+
852
+ _onDragOver: function (e) {
853
+ var that = e.data.fileupload,
854
+ dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer;
855
+ if (that._trigger('dragover', e) === false) {
856
+ return false;
857
+ }
858
+ if (dataTransfer) {
859
+ dataTransfer.dropEffect = 'copy';
860
+ }
861
+ e.preventDefault();
862
+ },
863
+
864
+ _initEventHandlers: function () {
865
+ var ns = this.options.namespace;
866
+ if (this._isXHRUpload(this.options)) {
867
+ this.options.dropZone
868
+ .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
869
+ .bind('drop.' + ns, {fileupload: this}, this._onDrop)
870
+ .bind('paste.' + ns, {fileupload: this}, this._onPaste);
871
+ }
872
+ this.options.fileInput
873
+ .bind('change.' + ns, {fileupload: this}, this._onChange);
874
+ },
875
+
876
+ _destroyEventHandlers: function () {
877
+ var ns = this.options.namespace;
878
+ this.options.dropZone
879
+ .unbind('dragover.' + ns, this._onDragOver)
880
+ .unbind('drop.' + ns, this._onDrop)
881
+ .unbind('paste.' + ns, this._onPaste);
882
+ this.options.fileInput
883
+ .unbind('change.' + ns, this._onChange);
884
+ },
885
+
886
+ _setOption: function (key, value) {
887
+ var refresh = $.inArray(key, this._refreshOptionsList) !== -1;
888
+ if (refresh) {
889
+ this._destroyEventHandlers();
890
+ }
891
+ $.Widget.prototype._setOption.call(this, key, value);
892
+ if (refresh) {
893
+ this._initSpecialOptions();
894
+ this._initEventHandlers();
895
+ }
896
+ },
897
+
898
+ _initSpecialOptions: function () {
899
+ var options = this.options;
900
+ if (options.fileInput === undefined) {
901
+ options.fileInput = this.element.is('input:file') ?
902
+ this.element : this.element.find('input:file');
903
+ } else if (!(options.fileInput instanceof $)) {
904
+ options.fileInput = $(options.fileInput);
905
+ }
906
+ if (!(options.dropZone instanceof $)) {
907
+ options.dropZone = $(options.dropZone);
908
+ }
909
+ },
910
+
911
+ _create: function () {
912
+ var options = this.options;
913
+ // Initialize options set via HTML5 data-attributes:
914
+ $.extend(options, $(this.element[0].cloneNode(false)).data());
915
+ options.namespace = options.namespace || this.widgetName;
916
+ this._initSpecialOptions();
917
+ this._slots = [];
918
+ this._sequence = this._getXHRPromise(true);
919
+ this._sending = this._active = this._loaded = this._total = 0;
920
+ this._initEventHandlers();
921
+ },
922
+
923
+ destroy: function () {
924
+ this._destroyEventHandlers();
925
+ $.Widget.prototype.destroy.call(this);
926
+ },
927
+
928
+ enable: function () {
929
+ $.Widget.prototype.enable.call(this);
930
+ this._initEventHandlers();
931
+ },
932
+
933
+ disable: function () {
934
+ this._destroyEventHandlers();
935
+ $.Widget.prototype.disable.call(this);
936
+ },
937
+
938
+ // This method is exposed to the widget API and allows adding files
939
+ // using the fileupload API. The data parameter accepts an object which
940
+ // must have a files property and can contain additional options:
941
+ // .fileupload('add', {files: filesList});
942
+ add: function (data) {
943
+ if (!data || this.options.disabled) {
944
+ return;
945
+ }
946
+ if (data.fileInput && !data.files) {
947
+ data.files = this._getFileInputFiles(data.fileInput);
948
+ } else {
949
+ data.files = $.each($.makeArray(data.files), this._normalizeFile);
950
+ }
951
+ this._onAdd(null, data);
952
+ },
953
+
954
+ // This method is exposed to the widget API and allows sending files
955
+ // using the fileupload API. The data parameter accepts an object which
956
+ // must have a files property and can contain additional options:
957
+ // .fileupload('send', {files: filesList});
958
+ // The method returns a Promise object for the file upload call.
959
+ send: function (data) {
960
+ if (data && !this.options.disabled) {
961
+ if (data.fileInput && !data.files) {
962
+ data.files = this._getFileInputFiles(data.fileInput);
963
+ } else {
964
+ data.files = $.each($.makeArray(data.files), this._normalizeFile);
965
+ }
966
+ if (data.files.length) {
967
+ return this._onSend(null, data);
968
+ }
969
+ }
970
+ return this._getXHRPromise(false, data && data.context);
971
+ }
972
+
973
+ });
974
+
975
+ }));