imperavi-rails 0.0.3.beta → 0.0.4.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (324) hide show
  1. data/README.md +33 -29
  2. data/app/assets/javascripts/imperavi-rails/imperavi/redactor.js +317 -405
  3. data/app/assets/stylesheets/imperavi-rails/imperavi/redactor.css.scss +1 -1
  4. data/app/views/imperavi_rails/imperavi/image_edit.html.erb +1 -1
  5. data/lib/imperavi-rails/controller_methods.rb +35 -0
  6. data/lib/imperavi-rails/version.rb +1 -1
  7. data/lib/imperavi-rails.rb +9 -3
  8. data/spec/dummy/db/development.sqlite3 +0 -0
  9. data/spec/dummy/log/development.log +12384 -0
  10. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_44_32_721_6.jpg +0 -0
  11. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_44_32_721_6.jpg.meta +4 -0
  12. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_45_23_25_5.jpg +0 -0
  13. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_45_23_25_5.jpg.meta +4 -0
  14. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_45_49_374_15744.jpg +0 -0
  15. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_45_49_374_15744.jpg.meta +3 -0
  16. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_50_20_902_4.jpg +0 -0
  17. data/spec/dummy/public/system/dragonfly/development/2012/02/03/14_50_20_902_4.jpg.meta +4 -0
  18. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_22_15_373_5.jpg +0 -0
  19. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_22_15_373_5.jpg.meta +4 -0
  20. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_22_40_820_5.jpg +0 -0
  21. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_22_40_820_5.jpg.meta +4 -0
  22. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_23_30_325_3.jpg +0 -0
  23. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_23_30_325_3.jpg.meta +4 -0
  24. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_23_57_376_4.jpg +0 -0
  25. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_23_57_376_4.jpg.meta +4 -0
  26. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_26_27_220_5.jpg +0 -0
  27. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_26_27_220_5.jpg.meta +4 -0
  28. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_26_57_55_6.jpg +0 -0
  29. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_26_57_55_6.jpg.meta +4 -0
  30. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_27_58_370_5.jpg +0 -0
  31. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_27_58_370_5.jpg.meta +4 -0
  32. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_29_07_700_5.jpg +0 -0
  33. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_29_07_700_5.jpg.meta +4 -0
  34. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_29_19_327_4.jpg +0 -0
  35. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_29_19_327_4.jpg.meta +4 -0
  36. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_29_53_813_4.jpg +0 -0
  37. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_29_53_813_4.jpg.meta +4 -0
  38. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_30_13_242_5.jpg +0 -0
  39. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_30_13_242_5.jpg.meta +4 -0
  40. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_30_19_927_6.jpg +0 -0
  41. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_30_19_927_6.jpg.meta +4 -0
  42. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_14_355_5.jpg +0 -0
  43. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_14_355_5.jpg.meta +4 -0
  44. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_19_371_1.jpg +0 -0
  45. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_19_371_1.jpg.meta +4 -0
  46. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_28_432_15750.jpg +0 -0
  47. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_28_432_15750.jpg.meta +3 -0
  48. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_39_821_15720.jpg +0 -0
  49. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_39_821_15720.jpg.meta +3 -0
  50. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_47_624_4.jpg +0 -0
  51. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_31_47_624_4.jpg.meta +4 -0
  52. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_33_26_155_5.jpg +0 -0
  53. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_33_26_155_5.jpg.meta +4 -0
  54. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_34_29_787_2_small.jpg +0 -0
  55. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_34_29_787_2_small.jpg.meta +3 -0
  56. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_34_35_450_6.jpg +0 -0
  57. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_34_35_450_6.jpg.meta +4 -0
  58. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_34_41_340_15744.jpg +0 -0
  59. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_34_41_340_15744.jpg.meta +3 -0
  60. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_38_14_325_5.jpg +0 -0
  61. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_38_14_325_5.jpg.meta +4 -0
  62. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_45_06_883_6.jpg +0 -0
  63. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_45_06_883_6.jpg.meta +4 -0
  64. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_45_18_915_6.jpg +0 -0
  65. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_45_18_915_6.jpg.meta +4 -0
  66. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_45_46_86_15744.jpg +0 -0
  67. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_45_46_86_15744.jpg.meta +3 -0
  68. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_47_24_195_3.jpg +0 -0
  69. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_47_24_195_3.jpg.meta +4 -0
  70. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_47_46_83_5.jpg +0 -0
  71. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_47_46_83_5.jpg.meta +4 -0
  72. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_51_18_603_15720.jpg +0 -0
  73. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_51_18_603_15720.jpg.meta +3 -0
  74. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_51_57_666_6.jpg +0 -0
  75. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_51_57_666_6.jpg.meta +4 -0
  76. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_53_25_938_6.jpg +0 -0
  77. data/spec/dummy/public/system/dragonfly/development/2012/02/17/19_53_25_938_6.jpg.meta +4 -0
  78. data/spec/dummy/tmp/cache/assets/CA9/BC0/sprockets%2F85d8b987b980454101a1236fdec2c220 +0 -0
  79. data/spec/dummy/tmp/cache/assets/CBE/FC0/sprockets%2Ff5431a64e341b062b7530132a5c1ea5a +2306 -1667
  80. data/spec/dummy/tmp/cache/assets/CC5/C10/sprockets%2F7c81f5c40dc9b87819488e127f487a04 +447 -369
  81. data/spec/dummy/tmp/cache/assets/CD5/530/sprockets%2F8d4c18bd4851f107c450a2c782301f8b +53 -0
  82. data/spec/dummy/tmp/cache/assets/CD7/EF0/sprockets%2Fc22597dc7c74137ba100f08542fec580 +76 -0
  83. data/spec/dummy/tmp/cache/assets/D09/DB0/sprockets%2F5ad1bbd0a458985447fac962fb121264 +188 -0
  84. data/spec/dummy/tmp/cache/assets/D1A/AB0/sprockets%2F05ea78f209b93ef03f29e933625b7fa5 +305 -1
  85. data/spec/dummy/tmp/cache/assets/D33/480/sprockets%2Fec072121b559132efe7d07cac0e991a5 +106 -0
  86. data/spec/dummy/tmp/cache/assets/D38/5D0/sprockets%2F7913f60d743aeb957af7a0ca5a20059d +0 -0
  87. data/spec/dummy/tmp/cache/assets/D43/830/sprockets%2Fe09848481135db1a4a5c783a7dc94fbd +50 -0
  88. data/spec/dummy/tmp/cache/assets/D59/260/sprockets%2Fd513a46ce8d83f003a733cb306dfe01a +317 -406
  89. data/spec/dummy/tmp/cache/assets/D64/190/sprockets%2Ffdfa1bbf71247a2b9ef0b97732603e02 +0 -0
  90. data/spec/dummy/tmp/cache/assets/D66/200/sprockets%2Fb343cda49d5d41a82c10a8f06d986bd2 +45 -0
  91. data/spec/dummy/tmp/cache/assets/D6B/980/sprockets%2F56c37f49f60073a401fcbd529dcaa74e +222 -0
  92. data/spec/dummy/tmp/cache/assets/D6D/AF0/sprockets%2F5a1aa4e3f7d7008e775019dfef3282cc +97 -0
  93. data/spec/dummy/tmp/cache/assets/D76/560/sprockets%2Fe0c5141697a090ffb74c9412e6dd7fef +50 -0
  94. data/spec/dummy/tmp/cache/assets/D95/E80/sprockets%2F844edf25b78967cbe9cf3e969c37c6c7 +0 -0
  95. data/spec/dummy/tmp/cache/assets/D96/230/sprockets%2F63e1b63e2b03d0bd6aaebd27c9973e91 +248 -1
  96. data/spec/dummy/tmp/cache/assets/D9B/E30/sprockets%2Fd87c8ca46743542cace533cfe91ae1d0 +437 -365
  97. data/spec/dummy/tmp/cache/assets/D9B/FF0/sprockets%2Fd8bbace39747d4af921e0534736baea3 +125 -0
  98. data/spec/dummy/tmp/cache/assets/DA2/970/sprockets%2F0d4ef1d42ee3e36fedcd979b3506525b +881 -1
  99. data/spec/dummy/tmp/cache/assets/DA8/F60/sprockets%2Fbb2cd57d63160c94d622ef9d91ccef68 +5 -5
  100. data/spec/dummy/tmp/cache/assets/DAC/140/sprockets%2F7a814a5598eaaaccf7ab7895f5663ad5 +89 -0
  101. data/spec/dummy/tmp/cache/assets/DB7/F90/sprockets%2Faf8cc6b28a790c7e3bd686e8ab9973c8 +0 -0
  102. data/spec/dummy/tmp/cache/assets/DBB/960/sprockets%2Fe20156d5decfaaea9d1e09f14a100f19 +16 -0
  103. data/spec/dummy/tmp/cache/sass/bc54e898614d486bf9338d646e8cd056915d4779/redactor.css.scssc +0 -0
  104. data/spec/dummy/tmp/dragonfly/cache/body/01/8b80e42551d33aed663f5757b3e4d3789383e6 +2359 -0
  105. data/spec/dummy/tmp/dragonfly/cache/body/02/3133eaaddaa68515039bc51e11b3bca2ad3f23 +986 -0
  106. data/spec/dummy/tmp/dragonfly/cache/body/03/13c061439229cdbd19215cbd1cf0e26441fac2 +713 -0
  107. data/spec/dummy/tmp/dragonfly/cache/body/05/024188cd40feb026eb8ccd15985d890ba9c84e +643 -0
  108. data/spec/dummy/tmp/dragonfly/cache/body/06/e22ab9a18784ce1f20e09401ee38b9672860d9 +697 -0
  109. data/spec/dummy/tmp/dragonfly/cache/body/07/f49938e6a88e40d2d6fd9fc613578396148e1d +1014 -0
  110. data/spec/dummy/tmp/dragonfly/cache/body/08/8e8a8fc07862b6f7f1bb3d065c44a796a1b959 +489 -0
  111. data/spec/dummy/tmp/dragonfly/cache/body/09/7fc6a9593ea7b3a9992dd166cdc87cf0e06afc +2341 -0
  112. data/spec/dummy/tmp/dragonfly/cache/body/09/c8b9529699d7f44fc6e314c992ea222ecf891a +926 -0
  113. data/spec/dummy/tmp/dragonfly/cache/body/0a/eae45805608cdebd81ace3ac272d43ef8c581a +517 -0
  114. data/spec/dummy/tmp/dragonfly/cache/body/0f/33cebc2562a1ba143494c74b572a7f569c398e +0 -0
  115. data/spec/dummy/tmp/dragonfly/cache/body/12/f3e9f5435e64b368b805b0f6e2e5b04763e0e9 +713 -0
  116. data/spec/dummy/tmp/dragonfly/cache/body/13/02bfc481015a6a0abeb3bd17a166b761ba8a47 +626 -0
  117. data/spec/dummy/tmp/dragonfly/cache/body/14/132bf3af2f923b66a62826ebe1dd001f0ba183 +0 -0
  118. data/spec/dummy/tmp/dragonfly/cache/body/16/3001f75355d109f24b59f690f7ba71c2616261 +2343 -0
  119. data/spec/dummy/tmp/dragonfly/cache/body/16/7a17ea4c64e37f9f0aa5e773501ee5131bb2af +552 -0
  120. data/spec/dummy/tmp/dragonfly/cache/body/18/1ddbad5715e03f6bcaeb409ca55a8f1f1c2b76 +1000 -0
  121. data/spec/dummy/tmp/dragonfly/cache/body/18/dc1d281e1b27f8e29a5d3ea3192ee5ab92c8fe +1721 -0
  122. data/spec/dummy/tmp/dragonfly/cache/body/19/244efbcbf0ed096cc80addb39d1139782691e4 +701 -0
  123. data/spec/dummy/tmp/dragonfly/cache/body/1b/09d865c098ccb9e1bb1783281f8f18ab22f49c +1016 -0
  124. data/spec/dummy/tmp/dragonfly/cache/body/1b/5baeb3d8b21ebdd6d60357437ea9b4ddefa49a +537 -0
  125. data/spec/dummy/tmp/dragonfly/cache/body/1b/f3995977d56cd70d334227ffae3858fdb3e1d4 +1011 -0
  126. data/spec/dummy/tmp/dragonfly/cache/body/1c/8c49d20e2ca7ccea3c7124923f2d6ff715400c +538 -0
  127. data/spec/dummy/tmp/dragonfly/cache/body/1e/3ce5b58c37f23053d85f581ff49d15ad1a498a +674 -0
  128. data/spec/dummy/tmp/dragonfly/cache/body/1f/de9c96ae1b545cb125a43f6c81fe6f15851ac7 +546 -0
  129. data/spec/dummy/tmp/dragonfly/cache/body/20/5d43e6adae0bf766e830109660e59dfd97a776 +646 -0
  130. data/spec/dummy/tmp/dragonfly/cache/body/20/9dd05484ee6eca030ee50cf71b912a67089c79 +2339 -0
  131. data/spec/dummy/tmp/dragonfly/cache/body/21/bdc0c588b6d2ddbbcc9b76fe749c38f0ef2f41 +872 -0
  132. data/spec/dummy/tmp/dragonfly/cache/body/22/f0e133e63c81c43643026aa5cbb3712bfa929e +708 -0
  133. data/spec/dummy/tmp/dragonfly/cache/body/24/f7da13054199d224537d7530367474f292c85a +2359 -0
  134. data/spec/dummy/tmp/dragonfly/cache/body/27/0ac007b4441579233e425f3e7a36887eb4298e +986 -0
  135. data/spec/dummy/tmp/dragonfly/cache/body/28/c775213c7f72c870045887887893831bbb9083 +1006 -0
  136. data/spec/dummy/tmp/dragonfly/cache/body/2a/602d5bf47ce3c3e1fbd540f3659acdf8488b84 +2341 -0
  137. data/spec/dummy/tmp/dragonfly/cache/body/2c/79dceb2787a90f7da9a43673db8d1f1922a379 +641 -0
  138. data/spec/dummy/tmp/dragonfly/cache/body/2d/016dc3e8be00f46455041e5187159762a1a72b +535 -0
  139. data/spec/dummy/tmp/dragonfly/cache/body/2d/40a96b71b5c4be6ea5de082c5c468b923df113 +626 -0
  140. data/spec/dummy/tmp/dragonfly/cache/body/2f/2077afd991927df732811e002d532f34a62c86 +0 -0
  141. data/spec/dummy/tmp/dragonfly/cache/body/30/7cdb90b26de71fedb1774d7b7fe630e77cf34f +1011 -0
  142. data/spec/dummy/tmp/dragonfly/cache/body/33/43ee3681542a52fec318884c34cdc6233aec90 +2359 -0
  143. data/spec/dummy/tmp/dragonfly/cache/body/34/d994dfa8a8a2cf1dddcfcb9d7d43839f798a66 +1007 -0
  144. data/spec/dummy/tmp/dragonfly/cache/body/36/1acb61b84bbb2e3b1fe7cb28e1ca0bb2ebc147 +1721 -0
  145. data/spec/dummy/tmp/dragonfly/cache/body/37/0de185ac6803197940a4aca2ee4cb6cd97aa25 +700 -0
  146. data/spec/dummy/tmp/dragonfly/cache/body/39/36d756ac37cbfd7995a8413c5b813623f8c1d6 +496 -0
  147. data/spec/dummy/tmp/dragonfly/cache/body/39/c79f94952d16de5de0ec59089d381ace6e386e +1029 -0
  148. data/spec/dummy/tmp/dragonfly/cache/body/3f/457b87cdc17162db48461cf72c87457ebe753b +1011 -0
  149. data/spec/dummy/tmp/dragonfly/cache/body/40/d745dd4044031ccd76b4f5a8ad46e3c16ea8c0 +915 -0
  150. data/spec/dummy/tmp/dragonfly/cache/body/43/1a5a2dc62c3b453378dad049c48fcf36928f53 +2342 -0
  151. data/spec/dummy/tmp/dragonfly/cache/body/43/abfe6e68d8603f92084533b5f94fb717bc2b02 +700 -0
  152. data/spec/dummy/tmp/dragonfly/cache/body/44/65e89dffc7531e6479a00711d7bf430c56754f +2359 -0
  153. data/spec/dummy/tmp/dragonfly/cache/body/47/1092abd16e44c60537ac674b871481ca6d108e +489 -0
  154. data/spec/dummy/tmp/dragonfly/cache/body/47/befec7e863f30488d1c9a72619411e3c311eea +552 -0
  155. data/spec/dummy/tmp/dragonfly/cache/body/48/4af0743c55ececa9e2b3477a666492914d5a25 +700 -0
  156. data/spec/dummy/tmp/dragonfly/cache/body/48/5935b1ceed38545d44989a5464049018f63ecd +926 -0
  157. data/spec/dummy/tmp/dragonfly/cache/body/4a/db06a6fda9b3fbe12beb6816390a4fd61e4491 +667 -0
  158. data/spec/dummy/tmp/dragonfly/cache/body/4b/088deec20739cb75b3d8e2ca591171b342026d +862 -0
  159. data/spec/dummy/tmp/dragonfly/cache/body/4b/ea67064045b150fdd661d9b25fe1c447df7570 +703 -0
  160. data/spec/dummy/tmp/dragonfly/cache/body/50/8888bca37caef9e8ecf9434f304d1ab2cc820a +538 -0
  161. data/spec/dummy/tmp/dragonfly/cache/body/54/862500a3c1ce6a605de340ded6051d9d6c96dc +880 -0
  162. data/spec/dummy/tmp/dragonfly/cache/body/55/a3a5731c805bf0c5deda35500598030e91caf7 +2358 -0
  163. data/spec/dummy/tmp/dragonfly/cache/body/56/50f6edaa5e2fe07797333404d13fe63360f72c +0 -0
  164. data/spec/dummy/tmp/dragonfly/cache/body/56/dfa139236a6fcecf0fdd13308a17d03666d223 +2361 -0
  165. data/spec/dummy/tmp/dragonfly/cache/body/58/d135dda5118408bf76a2b381ac0d482276ee97 +546 -0
  166. data/spec/dummy/tmp/dragonfly/cache/body/59/0b00b9579bdc8d199e42d68cc83ee72ba6036a +712 -0
  167. data/spec/dummy/tmp/dragonfly/cache/body/59/c6cdda1534cfeb69aed8a295fa36aa0b34d9ac +882 -0
  168. data/spec/dummy/tmp/dragonfly/cache/body/5c/c982746925609ae2ddd24d20e9f96247006dc3 +883 -0
  169. data/spec/dummy/tmp/dragonfly/cache/body/5f/033e3fda7f0149729cdeba2807ccad0ce6ea32 +1016 -0
  170. data/spec/dummy/tmp/dragonfly/cache/body/5f/95bdb3eb07339f50a73c3e2c38d619b2321902 +2361 -0
  171. data/spec/dummy/tmp/dragonfly/cache/body/60/92cdccc969bab02d35b702148409d59276ec8e +703 -0
  172. data/spec/dummy/tmp/dragonfly/cache/body/62/d3974c45b38586ded0f6adefcefeb4e25aea08 +2357 -0
  173. data/spec/dummy/tmp/dragonfly/cache/body/63/9cff6d42d49aaded2e3201d0b311fb0c4d5af5 +872 -0
  174. data/spec/dummy/tmp/dragonfly/cache/body/65/b3251b1348841946320cd8ac140a7a10a07de5 +894 -0
  175. data/spec/dummy/tmp/dragonfly/cache/body/66/59b5c1535bed3649f05f378f9a935a9369a14f +2341 -0
  176. data/spec/dummy/tmp/dragonfly/cache/body/67/8611d272ec29fc5cb7a63a709a12f47da63fbd +538 -0
  177. data/spec/dummy/tmp/dragonfly/cache/body/68/9bc64959e48ba446c2a48a48952d4e6e422bee +2334 -0
  178. data/spec/dummy/tmp/dragonfly/cache/body/6a/0be367e94b672cef188ef8c3261ed63fa59e6d +701 -0
  179. data/spec/dummy/tmp/dragonfly/cache/body/6a/1642bac93ee93e5ca10af933c39f6db9e15508 +0 -0
  180. data/spec/dummy/tmp/dragonfly/cache/body/6a/4558d01c325e63bfe9abe3df6b1255e51a20e6 +703 -0
  181. data/spec/dummy/tmp/dragonfly/cache/body/6b/8df0f17fd3ce7a7e551e91f30909a847a2abee +734 -0
  182. data/spec/dummy/tmp/dragonfly/cache/body/6b/90cf2c21e1934876d420d2524fe5216c5e7bf1 +551 -0
  183. data/spec/dummy/tmp/dragonfly/cache/body/6d/d8a547a0125a1da2df83e6b2f4c36631a1bd2f +538 -0
  184. data/spec/dummy/tmp/dragonfly/cache/body/6e/a8d288ea6931b9277121b209ac32959b717029 +882 -0
  185. data/spec/dummy/tmp/dragonfly/cache/body/6f/b27a907116ff2fa7a668b30d49b65885a09022 +1016 -0
  186. data/spec/dummy/tmp/dragonfly/cache/body/71/01bff740c639a7b8383a5e247ece9552656acb +708 -0
  187. data/spec/dummy/tmp/dragonfly/cache/body/73/7752ee519e2ee8c13b4c9165fb98c19a874843 +882 -0
  188. data/spec/dummy/tmp/dragonfly/cache/body/74/c9b1fca6f96048f555aed33ddb5c5240839f62 +793 -0
  189. data/spec/dummy/tmp/dragonfly/cache/body/75/01f0f946848c6b910634bed2a58e748dd0a4d2 +986 -0
  190. data/spec/dummy/tmp/dragonfly/cache/body/75/15881fe428cd4b04438de4e03ba3acc7cd789e +642 -0
  191. data/spec/dummy/tmp/dragonfly/cache/body/77/02b8ae247e83a86e819b150375bd2971911635 +882 -0
  192. data/spec/dummy/tmp/dragonfly/cache/body/79/0ba4208b6b095e78b15c6f2c4ef04b9e568fdf +976 -0
  193. data/spec/dummy/tmp/dragonfly/cache/body/7a/40b3b7e48d2fb4f8dc6b9ce3b2c6414cd3db4b +638 -0
  194. data/spec/dummy/tmp/dragonfly/cache/body/7a/44fbc7caa954feca99ae14cdd31700f3bc01ca +0 -0
  195. data/spec/dummy/tmp/dragonfly/cache/body/81/1412d99f15c17d9a52618013667ddc6acbb5e7 +560 -0
  196. data/spec/dummy/tmp/dragonfly/cache/body/82/bb0ce1f6b156348edb5d054b09681adbb1541c +638 -0
  197. data/spec/dummy/tmp/dragonfly/cache/body/82/f4aef50c7d0580ce3de59af781988f8c027e31 +0 -0
  198. data/spec/dummy/tmp/dragonfly/cache/body/84/3bafbd4a01aaae5795b68c2a21561fd78e8bfb +0 -0
  199. data/spec/dummy/tmp/dragonfly/cache/body/84/61cb5340e22fb0e266e5276613f5b218b793c0 +774 -0
  200. data/spec/dummy/tmp/dragonfly/cache/body/87/452e47dc8c565d70543b6a8b3aeeeafef5ede6 +1008 -0
  201. data/spec/dummy/tmp/dragonfly/cache/body/8e/6921af9cd9a9aa0cb4a521be98d497ff7fdeaf +700 -0
  202. data/spec/dummy/tmp/dragonfly/cache/body/8e/d1fec3f23b9477057019f581847f7f8b2051c3 +0 -0
  203. data/spec/dummy/tmp/dragonfly/cache/body/8f/e7d4976bf7e183cf4f6ab9409f8503351dad3c +709 -0
  204. data/spec/dummy/tmp/dragonfly/cache/body/90/1abfe79ed8fa57b0f367b8d6cc284742d74bd9 +703 -0
  205. data/spec/dummy/tmp/dragonfly/cache/body/93/fe1fa30d5fe0cb493dd11ea6eaee9201b50cd8 +712 -0
  206. data/spec/dummy/tmp/dragonfly/cache/body/94/7a175f9de08b84499763ba6cc25f6911ef315e +913 -0
  207. data/spec/dummy/tmp/dragonfly/cache/body/98/2828d5b0867095317a017415955ef31a50dbc5 +1014 -0
  208. data/spec/dummy/tmp/dragonfly/cache/body/98/f06faf5cfff9a92b4d99d400523e1f1551742e +1007 -0
  209. data/spec/dummy/tmp/dragonfly/cache/body/99/2dab09135d5fcbaa2c2b833a8284cb56be5c26 +1014 -0
  210. data/spec/dummy/tmp/dragonfly/cache/body/99/b545fe8ab3b930d8997fd75bb08feea0c9754d +915 -0
  211. data/spec/dummy/tmp/dragonfly/cache/body/9a/ff030c94bb0fbe5d9fbb8cf6865236cb7d74b2 +217 -0
  212. data/spec/dummy/tmp/dragonfly/cache/body/9f/8083640216ee29b9e8b4f10990f33d94aa352c +2360 -0
  213. data/spec/dummy/tmp/dragonfly/cache/body/9f/f4d177f296f259ff4ef3ddb38583daaf7c4dad +1011 -0
  214. data/spec/dummy/tmp/dragonfly/cache/body/a0/13144afc0d13219dad65508b046b9e0693a22b +926 -0
  215. data/spec/dummy/tmp/dragonfly/cache/body/a1/44a32dab1df021f54bf212d2a401b7fc69a2d8 +882 -0
  216. data/spec/dummy/tmp/dragonfly/cache/body/a2/7996e882d74e2e2c590fbfee8a8842b43f5c5e +1014 -0
  217. data/spec/dummy/tmp/dragonfly/cache/body/a2/e9ac7eba6c9ac611ec0cb7f26cbe0711b4b59c +694 -0
  218. data/spec/dummy/tmp/dragonfly/cache/body/a3/cd2fc5aabd1c551bba7f290844b8d89c94ab1e +523 -0
  219. data/spec/dummy/tmp/dragonfly/cache/body/a4/1a483a32348565e7afc810f49f55c1a9cbcd5d +707 -0
  220. data/spec/dummy/tmp/dragonfly/cache/body/a5/ddf1a8e968d20390ab06c94b19eb69a1e81ad7 +908 -0
  221. data/spec/dummy/tmp/dragonfly/cache/body/a6/f516919f720c81c119adadf1693ea44e5b90fe +490 -0
  222. data/spec/dummy/tmp/dragonfly/cache/body/a8/5137398b4d62aacbb0921f50eb9f62e7ec8de4 +0 -0
  223. data/spec/dummy/tmp/dragonfly/cache/body/a8/fb555a7e2420a17ce30758861ac3de784677eb +1011 -0
  224. data/spec/dummy/tmp/dragonfly/cache/body/b0/9703b98c965449cfbff801b8482e5c2c9b1b50 +954 -0
  225. data/spec/dummy/tmp/dragonfly/cache/body/b1/4c0f9e41101026eff8ebdc3fc9eae61c25372b +700 -0
  226. data/spec/dummy/tmp/dragonfly/cache/body/b3/d870794114f8ce678eeeddb0616abbea93ec7b +562 -0
  227. data/spec/dummy/tmp/dragonfly/cache/body/b4/1d331b6f64144bdee2ab598fd7f5ed2bcb6c3c +0 -0
  228. data/spec/dummy/tmp/dragonfly/cache/body/b4/84edbbb2dae5a5fc1cbfc8c8d3517bd1466a1b +2359 -0
  229. data/spec/dummy/tmp/dragonfly/cache/body/b5/52eaf4b5bac5fcf8667e5fb74f4b1c61984b0e +537 -0
  230. data/spec/dummy/tmp/dragonfly/cache/body/b6/9ec86cf5018fe63297e409da6638450c5041d2 +0 -0
  231. data/spec/dummy/tmp/dragonfly/cache/body/b7/31c759f6bf5b6adc13874d8ccf325a1715bf33 +882 -0
  232. data/spec/dummy/tmp/dragonfly/cache/body/b8/84c73fced17e1cb4f2efc18ed4f81789e5a622 +0 -0
  233. data/spec/dummy/tmp/dragonfly/cache/body/b9/43df43ad225c99d420cdb7e5d7714c2876273f +1007 -0
  234. data/spec/dummy/tmp/dragonfly/cache/body/b9/b4cb4d1647df4ec458ef3cc18782261a46bef2 +641 -0
  235. data/spec/dummy/tmp/dragonfly/cache/body/ba/1c57461ee48afadc870fca415b0e2aeaec3f4a +882 -0
  236. data/spec/dummy/tmp/dragonfly/cache/body/be/d14e3b72d93bfc0cace752edf21f5cc2af8949 +2358 -0
  237. data/spec/dummy/tmp/dragonfly/cache/body/c1/0767685a05c93f5e79a81ec5016820d7068afd +281 -0
  238. data/spec/dummy/tmp/dragonfly/cache/body/c3/5f95670b5171f06b0c450331c20ce59d44d5bd +537 -0
  239. data/spec/dummy/tmp/dragonfly/cache/body/c3/c76755904506b55cc288baed5e8f3ae767e1f9 +908 -0
  240. data/spec/dummy/tmp/dragonfly/cache/body/c7/48859071d0c1e701557a2b59181ae9d40b4c1c +1029 -0
  241. data/spec/dummy/tmp/dragonfly/cache/body/cc/e21614b70000b7a45bf382a696dfdf2e78811f +1029 -0
  242. data/spec/dummy/tmp/dragonfly/cache/body/cd/daa343d969732d44b9018e9e8403d758c1075b +2334 -0
  243. data/spec/dummy/tmp/dragonfly/cache/body/cd/dbba7b01cfb5eabf3c3b557d3cc1c7eeac9157 +523 -0
  244. data/spec/dummy/tmp/dragonfly/cache/body/d0/654133544a02cf512cdbe78256f913d684ee32 +894 -0
  245. data/spec/dummy/tmp/dragonfly/cache/body/d4/42ed09f48e3e24cd3cd958c9e0865df054419b +1029 -0
  246. data/spec/dummy/tmp/dragonfly/cache/body/d6/1eefad56108f5a8e1fa7aa72ff9b9f9cd633fc +538 -0
  247. data/spec/dummy/tmp/dragonfly/cache/body/d6/d1ac8848c469cd9094fa75b7528e0f5b6b632e +496 -0
  248. data/spec/dummy/tmp/dragonfly/cache/body/d7/899077450ebef4fdc0e9bb929825299f54457f +697 -0
  249. data/spec/dummy/tmp/dragonfly/cache/body/d9/f0d58e806b8697218740130d2ca12b3b86d6ef +1007 -0
  250. data/spec/dummy/tmp/dragonfly/cache/body/da/378953b0532aa6da1fa92abeeae89199ef8227 +1006 -0
  251. data/spec/dummy/tmp/dragonfly/cache/body/da/7c689c2f3a69f6770b63b71a8e71b6a1a28b37 +967 -0
  252. data/spec/dummy/tmp/dragonfly/cache/body/da/e26a3a67f1a9ea2332232ea28c90082c0e3bad +963 -0
  253. data/spec/dummy/tmp/dragonfly/cache/body/dc/abdd743fd3e9d7bd5647abeb86e66a3e6f9597 +0 -0
  254. data/spec/dummy/tmp/dragonfly/cache/body/e0/85f72a9f92bfadac77ceb40b9dcce7f1d0c0b4 +712 -0
  255. data/spec/dummy/tmp/dragonfly/cache/body/e1/f71dadeca1e7e8044d7ffe33168a41cf4b915e +712 -0
  256. data/spec/dummy/tmp/dragonfly/cache/body/e3/5e3eeacd0fa04028277861a7e20aca055126bf +705 -0
  257. data/spec/dummy/tmp/dragonfly/cache/body/e7/71af29ca1fb912746c2a8c252ce2dbda293797 +0 -0
  258. data/spec/dummy/tmp/dragonfly/cache/body/eb/d3df10f28dd5eb3361f2dea07bce8f31883cb4 +562 -0
  259. data/spec/dummy/tmp/dragonfly/cache/body/f2/0000c07c049d6b02b83c134a47f79d25c8f884 +1006 -0
  260. data/spec/dummy/tmp/dragonfly/cache/body/f3/81eaa388ae0115314da5ef3dff86dde481f6ea +1011 -0
  261. data/spec/dummy/tmp/dragonfly/cache/body/f4/f597679294dfce3758a1e23f8739ddadb7a07a +905 -0
  262. data/spec/dummy/tmp/dragonfly/cache/body/f6/5638ff81bbc2e264c25be9224311d5b88e199e +696 -0
  263. data/spec/dummy/tmp/dragonfly/cache/body/f8/4c49b7e7f1df8b9bf194c8e4f238965275a470 +638 -0
  264. data/spec/dummy/tmp/dragonfly/cache/body/f8/bce7bef222715dce37713e4b658bb432746046 +642 -0
  265. data/spec/dummy/tmp/dragonfly/cache/body/fb/4bbd9bd1b55ea5c5f029a98429cbe84fecbd56 +1029 -0
  266. data/spec/dummy/tmp/dragonfly/cache/body/fe/83a325403c35319d9539703bf8b707c48cbb81 +700 -0
  267. data/spec/dummy/tmp/dragonfly/cache/meta/0b/a9c9bfcc4c3c931157c0740283f9879ffbc80e +0 -0
  268. data/spec/dummy/tmp/dragonfly/cache/meta/16/82dfe14b1caadf556cccc78e6742ecba3c8f50 +0 -0
  269. data/spec/dummy/tmp/dragonfly/cache/meta/18/2807a34d96c2dc102f1c7f2c2fe2a3dea0152a +0 -0
  270. data/spec/dummy/tmp/dragonfly/cache/meta/1b/df42876b5661f82d4041d818e787e2f58949e7 +0 -0
  271. data/spec/dummy/tmp/dragonfly/cache/meta/1d/f723c27427056dd58a506f1e4f15020442098e +0 -0
  272. data/spec/dummy/tmp/dragonfly/cache/meta/22/66939b783406813e2f0a76f3a2f29473675994 +0 -0
  273. data/spec/dummy/tmp/dragonfly/cache/meta/23/4f7740cb6118c7c530ce379339a99828a75ef3 +0 -0
  274. data/spec/dummy/tmp/dragonfly/cache/meta/26/25fc31c2b02071c5c60621d36793dc55fdb33c +0 -0
  275. data/spec/dummy/tmp/dragonfly/cache/meta/29/717968cc2fa016a4911e7161b6423235f36c87 +0 -0
  276. data/spec/dummy/tmp/dragonfly/cache/meta/2d/83e1c5e84c02b8fee05b62d483999bfaba7be0 +0 -0
  277. data/spec/dummy/tmp/dragonfly/cache/meta/2d/b7fe2b8774fa388daa3c8370f34052119b4222 +0 -0
  278. data/spec/dummy/tmp/dragonfly/cache/meta/2d/fe381b58b48b16278672bd61db736e4e920955 +0 -0
  279. data/spec/dummy/tmp/dragonfly/cache/meta/32/e0d3566d2be50daabce5a94c515f772050829b +0 -0
  280. data/spec/dummy/tmp/dragonfly/cache/meta/38/5bb4a3ceace256ca114fc14a3c5ae12ec83fb0 +0 -0
  281. data/spec/dummy/tmp/dragonfly/cache/meta/39/b52b68255f54efe8cb853fd153088f94a7661a +0 -0
  282. data/spec/dummy/tmp/dragonfly/cache/meta/3e/0173e72157b702c4926d190389540028b0ae1d +0 -0
  283. data/spec/dummy/tmp/dragonfly/cache/meta/52/a111bad2ef8c87af7f55baf0ffc5cdefc446e4 +0 -0
  284. data/spec/dummy/tmp/dragonfly/cache/meta/55/32c60f25996b8e8a9fdf7125956c5204fa8792 +0 -0
  285. data/spec/dummy/tmp/dragonfly/cache/meta/64/61f1782e6f9ec4e6416c0aec429529ea70a1a1 +0 -0
  286. data/spec/dummy/tmp/dragonfly/cache/meta/66/b6e26427e56a9f9ade00d4cf5d615679f0f7a7 +0 -0
  287. data/spec/dummy/tmp/dragonfly/cache/meta/66/f44aba1428593600ff0e47ea6aa54362e39a59 +0 -0
  288. data/spec/dummy/tmp/dragonfly/cache/meta/6d/f4ba8735866613f9b640f6a0cc8e4583eba1f9 +0 -0
  289. data/spec/dummy/tmp/dragonfly/cache/meta/78/d74c0cd05a77c0c06acb622761d30c9ea00bb3 +0 -0
  290. data/spec/dummy/tmp/dragonfly/cache/meta/7a/6033b3a3f17fbddc765d138d39de24f94f0965 +0 -0
  291. data/spec/dummy/tmp/dragonfly/cache/meta/7a/d6666861b23fcf6c7ea45d61810fdb1c14d9d0 +0 -0
  292. data/spec/dummy/tmp/dragonfly/cache/meta/80/5841ac20acdd8dd41460c8346294abc5c4dd8f +0 -0
  293. data/spec/dummy/tmp/dragonfly/cache/meta/83/5df7873207b08f78fd9d690e5a0b759242b937 +0 -0
  294. data/spec/dummy/tmp/dragonfly/cache/meta/83/696c30e03b7215b60e076bc528c8829ddcc516 +0 -0
  295. data/spec/dummy/tmp/dragonfly/cache/meta/83/b01df8c183f9586aff3f30bd22f4c24793c52b +0 -0
  296. data/spec/dummy/tmp/dragonfly/cache/meta/85/289eb541e97e28d96dacfd07c314be3beb566a +0 -0
  297. data/spec/dummy/tmp/dragonfly/cache/meta/8c/1a23bf2dd650d0327255a5fe948c325d350107 +0 -0
  298. data/spec/dummy/tmp/dragonfly/cache/meta/8f/5281faf3f227ef4bbbd3b644cc9eafc86ff9b1 +0 -0
  299. data/spec/dummy/tmp/dragonfly/cache/meta/91/0922a2bd8308a75961dac5733d4907df678f65 +0 -0
  300. data/spec/dummy/tmp/dragonfly/cache/meta/92/8e4f3f982b856114506c590c291dea7f0c29d7 +0 -0
  301. data/spec/dummy/tmp/dragonfly/cache/meta/92/99ecbc80a7e8abcc02a36d9c3365b23b1a5b1a +0 -0
  302. data/spec/dummy/tmp/dragonfly/cache/meta/98/00e4dc8c2a89849e9d3cb8dd37f8c45d744dd3 +0 -0
  303. data/spec/dummy/tmp/dragonfly/cache/meta/9d/4531b3a9ffdee2c2b2b485675e8b055a2de25f +0 -0
  304. data/spec/dummy/tmp/dragonfly/cache/meta/a2/5920380e48276ad6f8bc26fb9a4a527db839c8 +0 -0
  305. data/spec/dummy/tmp/dragonfly/cache/meta/b7/407b5584752ca5298158a78be896bf810dd4e0 +0 -0
  306. data/spec/dummy/tmp/dragonfly/cache/meta/b7/ae83f0c4d7b4849a78af8830c31ffe4b166b52 +0 -0
  307. data/spec/dummy/tmp/dragonfly/cache/meta/d2/458b4acc8a67ee57346f1f4ebfa0f0e4bb4ea3 +0 -0
  308. data/spec/dummy/tmp/dragonfly/cache/meta/d5/341018026448c1d4f56801bd7ddb8380e1a73c +0 -0
  309. data/spec/dummy/tmp/dragonfly/cache/meta/e7/6d1dc2d45d19440e781f6c5d00f39d8aeb4da1 +0 -0
  310. data/spec/dummy/tmp/dragonfly/cache/meta/ee/fe74949a8c2a0bbc077385a12944d9f98a12e0 +0 -0
  311. data/spec/dummy/tmp/dragonfly/cache/meta/ef/d71b44567b90c7f85e9bd0576e4b7e55bd3565 +0 -0
  312. data/spec/dummy/tmp/dragonfly/cache/meta/f9/67ac04386c59253bd80f4034d18af166cc5691 +0 -0
  313. data/spec/dummy/tmp/sass-cache/6e61637ec8d1d247724328e8c4a6704fe36b468e/_hacks.scssc +0 -0
  314. data/spec/dummy/tmp/sass-cache/77824dc1336af71703311a2e58b21a32c1511e63/_border-radius.scssc +0 -0
  315. data/spec/dummy/tmp/sass-cache/77824dc1336af71703311a2e58b21a32c1511e63/_box-shadow.scssc +0 -0
  316. data/spec/dummy/tmp/sass-cache/77824dc1336af71703311a2e58b21a32c1511e63/_gradient.scssc +0 -0
  317. data/spec/dummy/tmp/sass-cache/77824dc1336af71703311a2e58b21a32c1511e63/_images.scssc +0 -0
  318. data/spec/dummy/tmp/sass-cache/77824dc1336af71703311a2e58b21a32c1511e63/_inline-block.scssc +0 -0
  319. data/spec/dummy/tmp/sass-cache/77824dc1336af71703311a2e58b21a32c1511e63/_shared.scssc +0 -0
  320. data/spec/dummy/tmp/sass-cache/bc54e898614d486bf9338d646e8cd056915d4779/buttons.css.scssc +0 -0
  321. data/spec/dummy/tmp/sass-cache/bc54e898614d486bf9338d646e8cd056915d4779/redactor.css.scssc +0 -0
  322. data/spec/dummy/tmp/sass-cache/d1a1c9c63df53223abb80676ef7dcc16c1375c54/_support.scssc +0 -0
  323. metadata +605 -20
  324. data/spec/dummy/tmp/pids/server.pid +0 -1
@@ -0,0 +1,881 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1329484441.3411274: @value{I"
2
+ class:EFI"BundledAsset;
3
+ FI"id;
4
+ F"%0d622ad8cbb25fbc6f9ae491bccd0d03I"logical_path;
5
+ F"1imperavi-rails/imperavi/jquery.fileupload.jsI"
6
+ F"m/home/tanraya/sandbox/imperavi-rails/app/assets/javascripts/imperavi-rails/imperavi/jquery.fileupload.jsI"content_type;
7
+ FI"application/javascript;
8
+ FI"
9
+ mtime;
10
+ FI"2012-02-17T19:06:38+06:00;
11
+ FI" body;
12
+ FI"x�/*
13
+ * jQuery File Upload Plugin 5.7
14
+ * https://github.com/blueimp/jQuery-File-Upload
15
+ *
16
+ * Copyright 2010, Sebastian Tschan
17
+ * https://blueimp.net
18
+ *
19
+ * Licensed under the MIT license:
20
+ * http://www.opensource.org/licenses/MIT
21
+ */
22
+
23
+ /*jslint nomen: true, unparam: true, regexp: true */
24
+ /*global define, window, document, XMLHttpRequestUpload, Blob, File, FormData, location */
25
+
26
+
27
+ (function (factory) {
28
+ 'use strict';
29
+ if (typeof define === 'function' && define.amd) {
30
+ // Register as an anonymous AMD module:
31
+ define([
32
+ 'jquery',
33
+ './vendor/jquery.ui.widget',
34
+ './jquery.iframe-transport'
35
+ ], factory);
36
+ } else {
37
+ // Browser globals:
38
+ factory(window.jQuery);
39
+ }
40
+ }(function ($) {
41
+ 'use strict';
42
+
43
+ // The fileupload widget listens for change events on file input fields defined
44
+ // via fileInput setting and paste or drop events of the given dropZone.
45
+ // In addition to the default jQuery Widget methods, the fileupload widget
46
+ // exposes the "add" and "send" methods, to add or directly send files using
47
+ // the fileupload API.
48
+ // By default, files added via file input selection, paste, drag & drop or
49
+ // "add" method are uploaded immediately, but it is possible to override
50
+ // the "add" callback option to queue file uploads.
51
+ $.widget('blueimp.fileupload', {
52
+
53
+ options: {
54
+ // The namespace used for event handler binding on the dropZone and
55
+ // fileInput collections.
56
+ // If not set, the name of the widget ("fileupload") is used.
57
+ namespace: undefined,
58
+ // The drop target collection, by the default the complete document.
59
+ // Set to null or an empty collection to disable drag & drop support:
60
+ dropZone: $(document),
61
+ // The file input field collection, that is listened for change events.
62
+ // If undefined, it is set to the file input fields inside
63
+ // of the widget element on plugin initialization.
64
+ // Set to null or an empty collection to disable the change listener.
65
+ fileInput: undefined,
66
+ // By default, the file input field is replaced with a clone after
67
+ // each input field change event. This is required for iframe transport
68
+ // queues and allows change events to be fired for the same file
69
+ // selection, but can be disabled by setting the following option to false:
70
+ replaceFileInput: true,
71
+ // The parameter name for the file form data (the request argument name).
72
+ // If undefined or empty, the name property of the file input field is
73
+ // used, or "files[]" if the file input name property is also empty:
74
+ paramName: undefined,
75
+ // By default, each file of a selection is uploaded using an individual
76
+ // request for XHR type uploads. Set to false to upload file
77
+ // selections in one request each:
78
+ singleFileUploads: true,
79
+ // To limit the number of files uploaded with one XHR request,
80
+ // set the following option to an integer greater than 0:
81
+ limitMultiFileUploads: undefined,
82
+ // Set the following option to true to issue all file upload requests
83
+ // in a sequential order:
84
+ sequentialUploads: false,
85
+ // To limit the number of concurrent uploads,
86
+ // set the following option to an integer greater than 0:
87
+ limitConcurrentUploads: undefined,
88
+ // Set the following option to true to force iframe transport uploads:
89
+ forceIframeTransport: false,
90
+ // Set the following option to the location of a redirect url on the
91
+ // origin server, for cross-domain iframe transport uploads:
92
+ redirect: undefined,
93
+ // The parameter name for the redirect url, sent as part of the form
94
+ // data and set to 'redirect' if this option is empty:
95
+ redirectParamName: undefined,
96
+ // Set the following option to the location of a postMessage window,
97
+ // to enable postMessage transport uploads:
98
+ postMessage: undefined,
99
+ // By default, XHR file uploads are sent as multipart/form-data.
100
+ // The iframe transport is always using multipart/form-data.
101
+ // Set to false to enable non-multipart XHR uploads:
102
+ multipart: true,
103
+ // To upload large files in smaller chunks, set the following option
104
+ // to a preferred maximum chunk size. If set to 0, null or undefined,
105
+ // or the browser does not support the required Blob API, files will
106
+ // be uploaded as a whole.
107
+ maxChunkSize: undefined,
108
+ // When a non-multipart upload or a chunked multipart upload has been
109
+ // aborted, this option can be used to resume the upload by setting
110
+ // it to the size of the already uploaded bytes. This option is most
111
+ // useful when modifying the options object inside of the "add" or
112
+ // "send" callbacks, as the options are cloned for each file upload.
113
+ uploadedBytes: undefined,
114
+ // By default, failed (abort or error) file uploads are removed from the
115
+ // global progress calculation. Set the following option to false to
116
+ // prevent recalculating the global progress data:
117
+ recalculateProgress: true,
118
+
119
+ // Additional form data to be sent along with the file uploads can be set
120
+ // using this option, which accepts an array of objects with name and
121
+ // value properties, a function returning such an array, a FormData
122
+ // object (for XHR file uploads), or a simple object.
123
+ // The form of the first fileInput is given as parameter to the function:
124
+ formData: function (form) {
125
+ return form.serializeArray();
126
+ },
127
+
128
+ // The add callback is invoked as soon as files are added to the fileupload
129
+ // widget (via file input selection, drag & drop, paste or add API call).
130
+ // If the singleFileUploads option is enabled, this callback will be
131
+ // called once for each file in the selection for XHR file uplaods, else
132
+ // once for each file selection.
133
+ // The upload starts when the submit method is invoked on the data parameter.
134
+ // The data object contains a files property holding the added files
135
+ // and allows to override plugin options as well as define ajax settings.
136
+ // Listeners for this callback can also be bound the following way:
137
+ // .bind('fileuploadadd', func);
138
+ // data.submit() returns a Promise object and allows to attach additional
139
+ // handlers using jQuery's Deferred callbacks:
140
+ // data.submit().done(func).fail(func).always(func);
141
+ add: function (e, data) {
142
+ data.submit();
143
+ },
144
+
145
+ // Other callbacks:
146
+ // Callback for the submit event of each file upload:
147
+ // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
148
+ // Callback for the start of each file upload request:
149
+ // send: function (e, data) {}, // .bind('fileuploadsend', func);
150
+ // Callback for successful uploads:
151
+ // done: function (e, data) {}, // .bind('fileuploaddone', func);
152
+ // Callback for failed (abort or error) uploads:
153
+ // fail: function (e, data) {}, // .bind('fileuploadfail', func);
154
+ // Callback for completed (success, abort or error) requests:
155
+ // always: function (e, data) {}, // .bind('fileuploadalways', func);
156
+ // Callback for upload progress events:
157
+ // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
158
+ // Callback for global upload progress events:
159
+ // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
160
+ // Callback for uploads start, equivalent to the global ajaxStart event:
161
+ // start: function (e) {}, // .bind('fileuploadstart', func);
162
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
163
+ // stop: function (e) {}, // .bind('fileuploadstop', func);
164
+ // Callback for change events of the fileInput collection:
165
+ // change: function (e, data) {}, // .bind('fileuploadchange', func);
166
+ // Callback for paste events to the dropZone collection:
167
+ // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
168
+ // Callback for drop events of the dropZone collection:
169
+ // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
170
+ // Callback for dragover events of the dropZone collection:
171
+ // dragover: function (e) {}, // .bind('fileuploaddragover', func);
172
+
173
+ // The plugin options are used as settings object for the ajax calls.
174
+ // The following are jQuery ajax settings required for the file uploads:
175
+ processData: false,
176
+ contentType: false,
177
+ cache: false
178
+ },
179
+
180
+ // A list of options that require a refresh after assigning a new value:
181
+ _refreshOptionsList: ['namespace', 'dropZone', 'fileInput'],
182
+
183
+ _isXHRUpload: function (options) {
184
+ var undef = 'undefined';
185
+ return !options.forceIframeTransport &&
186
+ typeof XMLHttpRequestUpload !== undef && typeof File !== undef &&
187
+ (!options.multipart || typeof FormData !== undef);
188
+ },
189
+
190
+ _getFormData: function (options) {
191
+ var formData;
192
+ if (typeof options.formData === 'function') {
193
+ return options.formData(options.form);
194
+ } else if ($.isArray(options.formData)) {
195
+ return options.formData;
196
+ } else if (options.formData) {
197
+ formData = [];
198
+ $.each(options.formData, function (name, value) {
199
+ formData.push({name: name, value: value});
200
+ });
201
+ return formData;
202
+ }
203
+ return [];
204
+ },
205
+
206
+ _getTotal: function (files) {
207
+ var total = 0;
208
+ $.each(files, function (index, file) {
209
+ total += file.size || 1;
210
+ });
211
+ return total;
212
+ },
213
+
214
+ _onProgress: function (e, data) {
215
+ if (e.lengthComputable) {
216
+ var total = data.total || this._getTotal(data.files),
217
+ loaded = parseInt(
218
+ e.loaded / e.total * (data.chunkSize || total),
219
+ 10
220
+ ) + (data.uploadedBytes || 0);
221
+ this._loaded += loaded - (data.loaded || data.uploadedBytes || 0);
222
+ data.lengthComputable = true;
223
+ data.loaded = loaded;
224
+ data.total = total;
225
+ // Trigger a custom progress event with a total data property set
226
+ // to the file size(s) of the current upload and a loaded data
227
+ // property calculated accordingly:
228
+ this._trigger('progress', e, data);
229
+ // Trigger a global progress event for all current file uploads,
230
+ // including ajax calls queued for sequential file uploads:
231
+ this._trigger('progressall', e, {
232
+ lengthComputable: true,
233
+ loaded: this._loaded,
234
+ total: this._total
235
+ });
236
+ }
237
+ },
238
+
239
+ _initProgressListener: function (options) {
240
+ var that = this,
241
+ xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
242
+ // Accesss to the native XHR object is required to add event listeners
243
+ // for the upload progress event:
244
+ if (xhr.upload) {
245
+ $(xhr.upload).bind('progress', function (e) {
246
+ var oe = e.originalEvent;
247
+ // Make sure the progress event properties get copied over:
248
+ e.lengthComputable = oe.lengthComputable;
249
+ e.loaded = oe.loaded;
250
+ e.total = oe.total;
251
+ that._onProgress(e, options);
252
+ });
253
+ options.xhr = function () {
254
+ return xhr;
255
+ };
256
+ }
257
+ },
258
+
259
+ _initXHRData: function (options) {
260
+ var formData,
261
+ file = options.files[0];
262
+ if (!options.multipart || options.blob) {
263
+ // For non-multipart uploads and chunked uploads,
264
+ // file meta data is not part of the request body,
265
+ // so we transmit this data as part of the HTTP headers.
266
+ // For cross domain requests, these headers must be allowed
267
+ // via Access-Control-Allow-Headers or removed using
268
+ // the beforeSend callback:
269
+ options.headers = $.extend(options.headers, {
270
+ 'X-File-Name': file.name,
271
+ 'X-File-Type': file.type,
272
+ 'X-File-Size': file.size
273
+ });
274
+ if (!options.blob) {
275
+ // Non-chunked non-multipart upload:
276
+ options.contentType = file.type;
277
+ options.data = file;
278
+ } else if (!options.multipart) {
279
+ // Chunked non-multipart upload:
280
+ options.contentType = 'application/octet-stream';
281
+ options.data = options.blob;
282
+ }
283
+ }
284
+ if (options.multipart && typeof FormData !== 'undefined') {
285
+ if (options.postMessage) {
286
+ // window.postMessage does not allow sending FormData
287
+ // objects, so we just add the File/Blob objects to
288
+ // the formData array and let the postMessage window
289
+ // create the FormData object out of this array:
290
+ formData = this._getFormData(options);
291
+ if (options.blob) {
292
+ formData.push({
293
+ name: options.paramName,
294
+ value: options.blob
295
+ });
296
+ } else {
297
+ $.each(options.files, function (index, file) {
298
+ formData.push({
299
+ name: options.paramName,
300
+ value: file
301
+ });
302
+ });
303
+ }
304
+ } else {
305
+ if (options.formData instanceof FormData) {
306
+ formData = options.formData;
307
+ } else {
308
+ formData = new FormData();
309
+ $.each(this._getFormData(options), function (index, field) {
310
+ formData.append(field.name, field.value);
311
+ });
312
+ }
313
+ if (options.blob) {
314
+ formData.append(options.paramName, options.blob, file.name);
315
+ } else {
316
+ $.each(options.files, function (index, file) {
317
+ // File objects are also Blob instances.
318
+ // This check allows the tests to run with
319
+ // dummy objects:
320
+ if (file instanceof Blob) {
321
+ formData.append(options.paramName, file, file.name);
322
+ }
323
+ });
324
+ }
325
+ }
326
+ options.data = formData;
327
+ }
328
+ // Blob reference is not needed anymore, free memory:
329
+ options.blob = null;
330
+ },
331
+
332
+ _initIframeSettings: function (options) {
333
+ // Setting the dataType to iframe enables the iframe transport:
334
+ options.dataType = 'iframe ' + (options.dataType || '');
335
+ // The iframe transport accepts a serialized array as form data:
336
+ options.formData = this._getFormData(options);
337
+ // Add redirect url to form data on cross-domain uploads:
338
+ if (options.redirect && $('<a></a>').prop('href', options.url)
339
+ .prop('host') !== location.host) {
340
+ options.formData.push({
341
+ name: options.redirectParamName || 'redirect',
342
+ value: options.redirect
343
+ });
344
+ }
345
+ },
346
+
347
+ _initDataSettings: function (options) {
348
+ if (this._isXHRUpload(options)) {
349
+ if (!this._chunkedUpload(options, true)) {
350
+ if (!options.data) {
351
+ this._initXHRData(options);
352
+ }
353
+ this._initProgressListener(options);
354
+ }
355
+ if (options.postMessage) {
356
+ // Setting the dataType to postmessage enables the
357
+ // postMessage transport:
358
+ options.dataType = 'postmessage ' + (options.dataType || '');
359
+ }
360
+ } else {
361
+ this._initIframeSettings(options, 'iframe');
362
+ }
363
+ },
364
+
365
+ _initFormSettings: function (options) {
366
+ // Retrieve missing options from the input field and the
367
+ // associated form, if available:
368
+ if (!options.form || !options.form.length) {
369
+ options.form = $(options.fileInput.prop('form'));
370
+ }
371
+ if (!options.paramName) {
372
+ options.paramName = options.fileInput.prop('name') ||
373
+ 'files[]';
374
+ }
375
+ if (!options.url) {
376
+ options.url = options.form.prop('action') || location.href;
377
+ }
378
+ // The HTTP request method must be "POST" or "PUT":
379
+ options.type = (options.type || options.form.prop('method') || '')
380
+ .toUpperCase();
381
+ if (options.type !== 'POST' && options.type !== 'PUT') {
382
+ options.type = 'POST';
383
+ }
384
+ },
385
+
386
+ _getAJAXSettings: function (data) {
387
+ var options = $.extend({}, this.options, data);
388
+ this._initFormSettings(options);
389
+ this._initDataSettings(options);
390
+ return options;
391
+ },
392
+
393
+ // Maps jqXHR callbacks to the equivalent
394
+ // methods of the given Promise object:
395
+ _enhancePromise: function (promise) {
396
+ promise.success = promise.done;
397
+ promise.error = promise.fail;
398
+ promise.complete = promise.always;
399
+ return promise;
400
+ },
401
+
402
+ // Creates and returns a Promise object enhanced with
403
+ // the jqXHR methods abort, success, error and complete:
404
+ _getXHRPromise: function (resolveOrReject, context, args) {
405
+ var dfd = $.Deferred(),
406
+ promise = dfd.promise();
407
+ context = context || this.options.context || promise;
408
+ if (resolveOrReject === true) {
409
+ dfd.resolveWith(context, args);
410
+ } else if (resolveOrReject === false) {
411
+ dfd.rejectWith(context, args);
412
+ }
413
+ promise.abort = dfd.promise;
414
+ return this._enhancePromise(promise);
415
+ },
416
+
417
+ // Uploads a file in multiple, sequential requests
418
+ // by splitting the file up in multiple blob chunks.
419
+ // If the second parameter is true, only tests if the file
420
+ // should be uploaded in chunks, but does not invoke any
421
+ // upload requests:
422
+ _chunkedUpload: function (options, testOnly) {
423
+ var that = this,
424
+ file = options.files[0],
425
+ fs = file.size,
426
+ ub = options.uploadedBytes = options.uploadedBytes || 0,
427
+ mcs = options.maxChunkSize || fs,
428
+ // Use the Blob methods with the slice implementation
429
+ // according to the W3C Blob API specification:
430
+ slice = file.webkitSlice || file.mozSlice || file.slice,
431
+ upload,
432
+ n,
433
+ jqXHR,
434
+ pipe;
435
+ if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
436
+ options.data) {
437
+ return false;
438
+ }
439
+ if (testOnly) {
440
+ return true;
441
+ }
442
+ if (ub >= fs) {
443
+ file.error = 'uploadedBytes';
444
+ return this._getXHRPromise(
445
+ false,
446
+ options.context,
447
+ [null, 'error', file.error]
448
+ );
449
+ }
450
+ // n is the number of blobs to upload,
451
+ // calculated via filesize, uploaded bytes and max chunk size:
452
+ n = Math.ceil((fs - ub) / mcs);
453
+ // The chunk upload method accepting the chunk number as parameter:
454
+ upload = function (i) {
455
+ if (!i) {
456
+ return that._getXHRPromise(true, options.context);
457
+ }
458
+ // Upload the blobs in sequential order:
459
+ return upload(i -= 1).pipe(function () {
460
+ // Clone the options object for each chunk upload:
461
+ var o = $.extend({}, options);
462
+ o.blob = slice.call(
463
+ file,
464
+ ub + i * mcs,
465
+ ub + (i + 1) * mcs
466
+ );
467
+ // Store the current chunk size, as the blob itself
468
+ // will be dereferenced after data processing:
469
+ o.chunkSize = o.blob.size;
470
+ // Process the upload data (the blob and potential form data):
471
+ that._initXHRData(o);
472
+ // Add progress listeners for this chunk upload:
473
+ that._initProgressListener(o);
474
+ jqXHR = ($.ajax(o) || that._getXHRPromise(false, o.context))
475
+ .done(function () {
476
+ // Create a progress event if upload is done and
477
+ // no progress event has been invoked for this chunk:
478
+ if (!o.loaded) {
479
+ that._onProgress($.Event('progress', {
480
+ lengthComputable: true,
481
+ loaded: o.chunkSize,
482
+ total: o.chunkSize
483
+ }), o);
484
+ }
485
+ options.uploadedBytes = o.uploadedBytes +=
486
+ o.chunkSize;
487
+ });
488
+ return jqXHR;
489
+ });
490
+ };
491
+ // Return the piped Promise object, enhanced with an abort method,
492
+ // which is delegated to the jqXHR object of the current upload,
493
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
494
+ pipe = upload(n);
495
+ pipe.abort = function () {
496
+ return jqXHR.abort();
497
+ };
498
+ return this._enhancePromise(pipe);
499
+ },
500
+
501
+ _beforeSend: function (e, data) {
502
+ if (this._active === 0) {
503
+ // the start callback is triggered when an upload starts
504
+ // and no other uploads are currently running,
505
+ // equivalent to the global ajaxStart event:
506
+ this._trigger('start');
507
+ }
508
+ this._active += 1;
509
+ // Initialize the global progress values:
510
+ this._loaded += data.uploadedBytes || 0;
511
+ this._total += this._getTotal(data.files);
512
+ },
513
+
514
+ _onDone: function (result, textStatus, jqXHR, options) {
515
+ if (!this._isXHRUpload(options)) {
516
+ // Create a progress event for each iframe load:
517
+ this._onProgress($.Event('progress', {
518
+ lengthComputable: true,
519
+ loaded: 1,
520
+ total: 1
521
+ }), options);
522
+ }
523
+ options.result = result;
524
+ options.textStatus = textStatus;
525
+ options.jqXHR = jqXHR;
526
+ this._trigger('done', null, options);
527
+ },
528
+
529
+ _onFail: function (jqXHR, textStatus, errorThrown, options) {
530
+ options.jqXHR = jqXHR;
531
+ options.textStatus = textStatus;
532
+ options.errorThrown = errorThrown;
533
+ this._trigger('fail', null, options);
534
+ if (options.recalculateProgress) {
535
+ // Remove the failed (error or abort) file upload from
536
+ // the global progress calculation:
537
+ this._loaded -= options.loaded || options.uploadedBytes || 0;
538
+ this._total -= options.total || this._getTotal(options.files);
539
+ }
540
+ },
541
+
542
+ _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
543
+ this._active -= 1;
544
+ options.textStatus = textStatus;
545
+ if (jqXHRorError && jqXHRorError.always) {
546
+ options.jqXHR = jqXHRorError;
547
+ options.result = jqXHRorResult;
548
+ } else {
549
+ options.jqXHR = jqXHRorResult;
550
+ options.errorThrown = jqXHRorError;
551
+ }
552
+ this._trigger('always', null, options);
553
+ if (this._active === 0) {
554
+ // The stop callback is triggered when all uploads have
555
+ // been completed, equivalent to the global ajaxStop event:
556
+ this._trigger('stop');
557
+ // Reset the global progress values:
558
+ this._loaded = this._total = 0;
559
+ }
560
+ },
561
+
562
+ _onSend: function (e, data) {
563
+ var that = this,
564
+ jqXHR,
565
+ slot,
566
+ pipe,
567
+ options = that._getAJAXSettings(data),
568
+ send = function (resolve, args) {
569
+ that._sending += 1;
570
+ jqXHR = jqXHR || (
571
+ (resolve !== false &&
572
+ that._trigger('send', e, options) !== false &&
573
+ (that._chunkedUpload(options) || $.ajax(options))) ||
574
+ that._getXHRPromise(false, options.context, args)
575
+ ).done(function (result, textStatus, jqXHR) {
576
+ that._onDone(result, textStatus, jqXHR, options);
577
+ }).fail(function (jqXHR, textStatus, errorThrown) {
578
+ that._onFail(jqXHR, textStatus, errorThrown, options);
579
+ }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
580
+ that._sending -= 1;
581
+ that._onAlways(
582
+ jqXHRorResult,
583
+ textStatus,
584
+ jqXHRorError,
585
+ options
586
+ );
587
+ if (options.limitConcurrentUploads &&
588
+ options.limitConcurrentUploads > that._sending) {
589
+ // Start the next queued upload,
590
+ // that has not been aborted:
591
+ var nextSlot = that._slots.shift();
592
+ while (nextSlot) {
593
+ if (!nextSlot.isRejected()) {
594
+ nextSlot.resolve();
595
+ break;
596
+ }
597
+ nextSlot = that._slots.shift();
598
+ }
599
+ }
600
+ });
601
+ return jqXHR;
602
+ };
603
+ this._beforeSend(e, options);
604
+ if (this.options.sequentialUploads ||
605
+ (this.options.limitConcurrentUploads &&
606
+ this.options.limitConcurrentUploads <= this._sending)) {
607
+ if (this.options.limitConcurrentUploads > 1) {
608
+ slot = $.Deferred();
609
+ this._slots.push(slot);
610
+ pipe = slot.pipe(send);
611
+ } else {
612
+ pipe = (this._sequence = this._sequence.pipe(send, send));
613
+ }
614
+ // Return the piped Promise object, enhanced with an abort method,
615
+ // which is delegated to the jqXHR object of the current upload,
616
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
617
+ pipe.abort = function () {
618
+ var args = [undefined, 'abort', 'abort'];
619
+ if (!jqXHR) {
620
+ if (slot) {
621
+ slot.rejectWith(args);
622
+ }
623
+ return send(false, args);
624
+ }
625
+ return jqXHR.abort();
626
+ };
627
+ return this._enhancePromise(pipe);
628
+ }
629
+ return send();
630
+ },
631
+
632
+ _onAdd: function (e, data) {
633
+ var that = this,
634
+ result = true,
635
+ options = $.extend({}, this.options, data),
636
+ limit = options.limitMultiFileUploads,
637
+ fileSet,
638
+ i;
639
+ if (!(options.singleFileUploads || limit) ||
640
+ !this._isXHRUpload(options)) {
641
+ fileSet = [data.files];
642
+ } else if (!options.singleFileUploads && limit) {
643
+ fileSet = [];
644
+ for (i = 0; i < data.files.length; i += limit) {
645
+ fileSet.push(data.files.slice(i, i + limit));
646
+ }
647
+ }
648
+ data.originalFiles = data.files;
649
+ $.each(fileSet || data.files, function (index, element) {
650
+ var files = fileSet ? element : [element],
651
+ newData = $.extend({}, data, {files: files});
652
+ newData.submit = function () {
653
+ newData.jqXHR = this.jqXHR =
654
+ (that._trigger('submit', e, this) !== false) &&
655
+ that._onSend(e, this);
656
+ return this.jqXHR;
657
+ };
658
+ return (result = that._trigger('add', e, newData));
659
+ });
660
+ return result;
661
+ },
662
+
663
+ // File Normalization for Gecko 1.9.1 (Firefox 3.5) support:
664
+ _normalizeFile: function (index, file) {
665
+ if (file.name === undefined && file.size === undefined) {
666
+ file.name = file.fileName;
667
+ file.size = file.fileSize;
668
+ }
669
+ },
670
+
671
+ _replaceFileInput: function (input) {
672
+ var inputClone = input.clone(true);
673
+ $('<form></form>').append(inputClone)[0].reset();
674
+ // Detaching allows to insert the fileInput on another form
675
+ // without loosing the file input value:
676
+ input.after(inputClone).detach();
677
+ // Avoid memory leaks with the detached file input:
678
+ $.cleanData(input.unbind('remove'));
679
+ // Replace the original file input element in the fileInput
680
+ // collection with the clone, which has been copied including
681
+ // event handlers:
682
+ this.options.fileInput = this.options.fileInput.map(function (i, el) {
683
+ if (el === input[0]) {
684
+ return inputClone[0];
685
+ }
686
+ return el;
687
+ });
688
+ // If the widget has been initialized on the file input itself,
689
+ // override this.element with the file input clone:
690
+ if (input[0] === this.element[0]) {
691
+ this.element = inputClone;
692
+ }
693
+ },
694
+
695
+ _onChange: function (e) {
696
+ var that = e.data.fileupload,
697
+ data = {
698
+ files: $.each($.makeArray(e.target.files), that._normalizeFile),
699
+ fileInput: $(e.target),
700
+ form: $(e.target.form)
701
+ };
702
+ if (!data.files.length) {
703
+ // If the files property is not available, the browser does not
704
+ // support the File API and we add a pseudo File object with
705
+ // the input value as name with path information removed:
706
+ data.files = [{name: e.target.value.replace(/^.*\\/, '')}];
707
+ }
708
+ if (that.options.replaceFileInput) {
709
+ that._replaceFileInput(data.fileInput);
710
+ }
711
+ if (that._trigger('change', e, data) === false ||
712
+ that._onAdd(e, data) === false) {
713
+ return false;
714
+ }
715
+ },
716
+
717
+ _onPaste: function (e) {
718
+ var that = e.data.fileupload,
719
+ cbd = e.originalEvent.clipboardData,
720
+ items = (cbd && cbd.items) || [],
721
+ data = {files: []};
722
+ $.each(items, function (index, item) {
723
+ var file = item.getAsFile && item.getAsFile();
724
+ if (file) {
725
+ data.files.push(file);
726
+ }
727
+ });
728
+ if (that._trigger('paste', e, data) === false ||
729
+ that._onAdd(e, data) === false) {
730
+ return false;
731
+ }
732
+ },
733
+
734
+ _onDrop: function (e) {
735
+ var that = e.data.fileupload,
736
+ dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer,
737
+ data = {
738
+ files: $.each(
739
+ $.makeArray(dataTransfer && dataTransfer.files),
740
+ that._normalizeFile
741
+ )
742
+ };
743
+ if (that._trigger('drop', e, data) === false ||
744
+ that._onAdd(e, data) === false) {
745
+ return false;
746
+ }
747
+ e.preventDefault();
748
+ },
749
+
750
+ _onDragOver: function (e) {
751
+ var that = e.data.fileupload,
752
+ dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer;
753
+ if (that._trigger('dragover', e) === false) {
754
+ return false;
755
+ }
756
+ if (dataTransfer) {
757
+ dataTransfer.dropEffect = dataTransfer.effectAllowed = 'copy';
758
+ }
759
+ e.preventDefault();
760
+ },
761
+
762
+ _initEventHandlers: function () {
763
+ var ns = this.options.namespace;
764
+ this.options.dropZone
765
+ .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
766
+ .bind('drop.' + ns, {fileupload: this}, this._onDrop)
767
+ .bind('paste.' + ns, {fileupload: this}, this._onPaste);
768
+ this.options.fileInput
769
+ .bind('change.' + ns, {fileupload: this}, this._onChange);
770
+ },
771
+
772
+ _destroyEventHandlers: function () {
773
+ var ns = this.options.namespace;
774
+ this.options.dropZone
775
+ .unbind('dragover.' + ns, this._onDragOver)
776
+ .unbind('drop.' + ns, this._onDrop)
777
+ .unbind('paste.' + ns, this._onPaste);
778
+ this.options.fileInput
779
+ .unbind('change.' + ns, this._onChange);
780
+ },
781
+
782
+ _beforeSetOption: function (key, value) {
783
+ this._destroyEventHandlers();
784
+ },
785
+
786
+ _afterSetOption: function (key, value) {
787
+ var options = this.options;
788
+ if (!options.fileInput) {
789
+ options.fileInput = $();
790
+ }
791
+ if (!options.dropZone) {
792
+ options.dropZone = $();
793
+ }
794
+ this._initEventHandlers();
795
+ },
796
+
797
+ _setOption: function (key, value) {
798
+ var refresh = $.inArray(key, this._refreshOptionsList) !== -1;
799
+ if (refresh) {
800
+ this._beforeSetOption(key, value);
801
+ }
802
+ $.Widget.prototype._setOption.call(this, key, value);
803
+ if (refresh) {
804
+ this._afterSetOption(key, value);
805
+ }
806
+ },
807
+
808
+ _create: function () {
809
+ var options = this.options;
810
+ options.namespace = options.namespace || this.widgetName;
811
+ if (options.fileInput === undefined) {
812
+ options.fileInput = this.element.is('input:file') ?
813
+ this.element : this.element.find('input:file');
814
+ } else if (!options.fileInput) {
815
+ options.fileInput = $();
816
+ }
817
+ if (!options.dropZone) {
818
+ options.dropZone = $();
819
+ }
820
+ this._slots = [];
821
+ this._sequence = this._getXHRPromise(true);
822
+ this._sending = this._active = this._loaded = this._total = 0;
823
+ this._initEventHandlers();
824
+ },
825
+
826
+ destroy: function () {
827
+ this._destroyEventHandlers();
828
+ $.Widget.prototype.destroy.call(this);
829
+ },
830
+
831
+ enable: function () {
832
+ $.Widget.prototype.enable.call(this);
833
+ this._initEventHandlers();
834
+ },
835
+
836
+ disable: function () {
837
+ this._destroyEventHandlers();
838
+ $.Widget.prototype.disable.call(this);
839
+ },
840
+
841
+ // This method is exposed to the widget API and allows adding files
842
+ // using the fileupload API. The data parameter accepts an object which
843
+ // must have a files property and can contain additional options:
844
+ // .fileupload('add', {files: filesList});
845
+ add: function (data) {
846
+ if (!data || this.options.disabled) {
847
+ return;
848
+ }
849
+ data.files = $.each($.makeArray(data.files), this._normalizeFile);
850
+ this._onAdd(null, data);
851
+ },
852
+
853
+ // This method is exposed to the widget API and allows sending files
854
+ // using the fileupload API. The data parameter accepts an object which
855
+ // must have a files property and can contain additional options:
856
+ // .fileupload('send', {files: filesList});
857
+ // The method returns a Promise object for the file upload call.
858
+ send: function (data) {
859
+ if (data && !this.options.disabled) {
860
+ data.files = $.each($.makeArray(data.files), this._normalizeFile);
861
+ if (data.files.length) {
862
+ return this._onSend(null, data);
863
+ }
864
+ }
865
+ return this._getXHRPromise(false, data && data.context);
866
+ }
867
+
868
+ });
869
+
870
+ }));
871
+ ;
872
+ FI"asset_paths;
873
+ F["m/home/tanraya/sandbox/imperavi-rails/app/assets/javascripts/imperavi-rails/imperavi/jquery.fileupload.jsI"dependency_paths;
874
+ F[{I" path;
875
+ F"m/home/tanraya/sandbox/imperavi-rails/app/assets/javascripts/imperavi-rails/imperavi/jquery.fileupload.jsI"
876
+ mtime;
877
+ FIu: Time
- ��h
878
+ : @_zoneI" YEKT;
879
+ T:
880
+ F"%754c955ddca50708fc69caaa878d0156I"
881
+ F"%46dde6621c301f4928e3b34efee9e3b5