danabr75-ckeditor 4.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (512) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +42 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +337 -0
  5. data/Rakefile +64 -0
  6. data/app/assets/javascripts/ckeditor/application.js +5 -0
  7. data/app/assets/javascripts/ckeditor/config.js +58 -0
  8. data/app/assets/javascripts/ckeditor/filebrowser/images/gal_add.jpg +0 -0
  9. data/app/assets/javascripts/ckeditor/filebrowser/images/gal_add.png +0 -0
  10. data/app/assets/javascripts/ckeditor/filebrowser/images/gal_del.png +0 -0
  11. data/app/assets/javascripts/ckeditor/filebrowser/images/gal_more.gif +0 -0
  12. data/app/assets/javascripts/ckeditor/filebrowser/images/preloader.gif +0 -0
  13. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/avi.gif +0 -0
  14. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/ckfnothumb.gif +0 -0
  15. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/doc.gif +0 -0
  16. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/docx.gif +0 -0
  17. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/exe.gif +0 -0
  18. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/gz.gif +0 -0
  19. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/htm.gif +0 -0
  20. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/jpg.gif +0 -0
  21. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/mp3.gif +0 -0
  22. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/mpg.gif +0 -0
  23. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/pdf.gif +0 -0
  24. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/psd.gif +0 -0
  25. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/rar.gif +0 -0
  26. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/swf.gif +0 -0
  27. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/tar.gif +0 -0
  28. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/txt.gif +0 -0
  29. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/unknown.gif +0 -0
  30. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/wmv.gif +0 -0
  31. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/xls.gif +0 -0
  32. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/xlsx.gif +0 -0
  33. data/app/assets/javascripts/ckeditor/filebrowser/images/thumbs/zip.gif +0 -0
  34. data/app/assets/javascripts/ckeditor/filebrowser/javascripts/application.js.erb +232 -0
  35. data/app/assets/javascripts/ckeditor/filebrowser/javascripts/fileuploader.js +1301 -0
  36. data/app/assets/javascripts/ckeditor/filebrowser/javascripts/jquery.endless-scroll.js +300 -0
  37. data/app/assets/javascripts/ckeditor/filebrowser/javascripts/jquery.tmpl.min.js +10 -0
  38. data/app/assets/javascripts/ckeditor/filebrowser/javascripts/rails.js +373 -0
  39. data/app/assets/javascripts/ckeditor/filebrowser/stylesheets/uploader.css.erb +128 -0
  40. data/app/assets/javascripts/ckeditor/init.js.erb +8 -0
  41. data/app/assets/stylesheets/ckeditor/application.css +6 -0
  42. data/app/controllers/ckeditor/application_controller.rb +20 -0
  43. data/app/controllers/ckeditor/attachment_files_controller.rb +38 -0
  44. data/app/controllers/ckeditor/pictures_controller.rb +38 -0
  45. data/app/helpers/ckeditor/application_helper.rb +11 -0
  46. data/app/views/ckeditor/attachment_files/index.html.erb +21 -0
  47. data/app/views/ckeditor/pictures/index.html.erb +21 -0
  48. data/app/views/ckeditor/shared/_asset.html.erb +20 -0
  49. data/app/views/ckeditor/shared/_asset_tmpl.html.erb +22 -0
  50. data/app/views/layouts/ckeditor/application.html.erb +31 -0
  51. data/config/locales/bg.ckeditor.yml +9 -0
  52. data/config/locales/cs.ckeditor.yml +9 -0
  53. data/config/locales/de.ckeditor.yml +9 -0
  54. data/config/locales/el-GR.cdkeditor.yml +9 -0
  55. data/config/locales/en.ckeditor.yml +9 -0
  56. data/config/locales/es.ckeditor.yml +9 -0
  57. data/config/locales/fr.ckeditor.yml +9 -0
  58. data/config/locales/hu.ckeditor.yml +9 -0
  59. data/config/locales/it.ckeditor.yml +9 -0
  60. data/config/locales/ja.ckeditor.yml +9 -0
  61. data/config/locales/nb.ckeditor.yml +9 -0
  62. data/config/locales/nl.ckeditor.yml +9 -0
  63. data/config/locales/pl.ckeditor.yml +9 -0
  64. data/config/locales/pt-BR.ckeditor.yml +9 -0
  65. data/config/locales/pt-PT.ckeditor.yml +9 -0
  66. data/config/locales/ru.ckeditor.yml +9 -0
  67. data/config/locales/sv-SE.ckeditor.yml +9 -0
  68. data/config/locales/tr.ckeditor.yml +9 -0
  69. data/config/locales/uk.ckeditor.yml +9 -0
  70. data/config/locales/zh-CN.ckeditor.yml +9 -0
  71. data/config/locales/zh-TW.ckeditor.yml +9 -0
  72. data/config/routes.rb +4 -0
  73. data/lib/ckeditor.rb +234 -0
  74. data/lib/ckeditor/asset_response.rb +71 -0
  75. data/lib/ckeditor/backend/carrierwave.rb +57 -0
  76. data/lib/ckeditor/backend/dragonfly.rb +47 -0
  77. data/lib/ckeditor/backend/paperclip.rb +52 -0
  78. data/lib/ckeditor/backend/refile.rb +37 -0
  79. data/lib/ckeditor/engine.rb +46 -0
  80. data/lib/ckeditor/helpers/controllers.rb +34 -0
  81. data/lib/ckeditor/helpers/form_builder.rb +11 -0
  82. data/lib/ckeditor/helpers/form_helper.rb +11 -0
  83. data/lib/ckeditor/helpers/view_helper.rb +11 -0
  84. data/lib/ckeditor/hooks/cancan.rb +49 -0
  85. data/lib/ckeditor/hooks/formtastic.rb +12 -0
  86. data/lib/ckeditor/hooks/pundit.rb +47 -0
  87. data/lib/ckeditor/hooks/simple_form.rb +20 -0
  88. data/lib/ckeditor/http.rb +88 -0
  89. data/lib/ckeditor/orm/active_record.rb +24 -0
  90. data/lib/ckeditor/orm/base.rb +50 -0
  91. data/lib/ckeditor/orm/mongoid.rb +41 -0
  92. data/lib/ckeditor/paginatable.rb +56 -0
  93. data/lib/ckeditor/text_area.rb +53 -0
  94. data/lib/ckeditor/utils.rb +108 -0
  95. data/lib/ckeditor/utils/content_type_detector.rb +41 -0
  96. data/lib/ckeditor/utils/javascript_code.rb +10 -0
  97. data/lib/ckeditor/version.rb +6 -0
  98. data/lib/generators/ckeditor/install_generator.rb +83 -0
  99. data/lib/generators/ckeditor/pundit_policy_generator.rb +22 -0
  100. data/lib/generators/ckeditor/templates/active_record/carrierwave/ckeditor/asset.rb +7 -0
  101. data/lib/generators/ckeditor/templates/active_record/carrierwave/ckeditor/attachment_file.rb +7 -0
  102. data/lib/generators/ckeditor/templates/active_record/carrierwave/ckeditor/picture.rb +7 -0
  103. data/lib/generators/ckeditor/templates/active_record/carrierwave/migration.rb +26 -0
  104. data/lib/generators/ckeditor/templates/active_record/dragonfly/ckeditor/asset.rb +7 -0
  105. data/lib/generators/ckeditor/templates/active_record/dragonfly/ckeditor/attachment_file.rb +7 -0
  106. data/lib/generators/ckeditor/templates/active_record/dragonfly/ckeditor/picture.rb +12 -0
  107. data/lib/generators/ckeditor/templates/active_record/dragonfly/migration.rb +27 -0
  108. data/lib/generators/ckeditor/templates/active_record/paperclip/ckeditor/asset.rb +4 -0
  109. data/lib/generators/ckeditor/templates/active_record/paperclip/ckeditor/attachment_file.rb +13 -0
  110. data/lib/generators/ckeditor/templates/active_record/paperclip/ckeditor/picture.rb +14 -0
  111. data/lib/generators/ckeditor/templates/active_record/paperclip/migration.rb +26 -0
  112. data/lib/generators/ckeditor/templates/active_record/refile/ckeditor/asset.rb +4 -0
  113. data/lib/generators/ckeditor/templates/active_record/refile/ckeditor/attachment_file.rb +7 -0
  114. data/lib/generators/ckeditor/templates/active_record/refile/ckeditor/picture.rb +11 -0
  115. data/lib/generators/ckeditor/templates/active_record/refile/migration.rb +28 -0
  116. data/lib/generators/ckeditor/templates/base/carrierwave/uploaders/ckeditor_attachment_file_uploader.rb +38 -0
  117. data/lib/generators/ckeditor/templates/base/carrierwave/uploaders/ckeditor_picture_uploader.rb +47 -0
  118. data/lib/generators/ckeditor/templates/base/dragonfly/initializer.rb +20 -0
  119. data/lib/generators/ckeditor/templates/ckeditor.rb +53 -0
  120. data/lib/generators/ckeditor/templates/mongoid/carrierwave/ckeditor/asset.rb +7 -0
  121. data/lib/generators/ckeditor/templates/mongoid/carrierwave/ckeditor/attachment_file.rb +7 -0
  122. data/lib/generators/ckeditor/templates/mongoid/carrierwave/ckeditor/picture.rb +7 -0
  123. data/lib/generators/ckeditor/templates/mongoid/paperclip/ckeditor/asset.rb +5 -0
  124. data/lib/generators/ckeditor/templates/mongoid/paperclip/ckeditor/attachment_file.rb +13 -0
  125. data/lib/generators/ckeditor/templates/mongoid/paperclip/ckeditor/picture.rb +14 -0
  126. data/lib/generators/ckeditor/templates/pundit_policy/attachment_file_policy.rb +20 -0
  127. data/lib/generators/ckeditor/templates/pundit_policy/picture_policy.rb +20 -0
  128. data/lib/tasks/ckeditor.rake +26 -0
  129. data/test/controllers/attachment_files_controller_test.rb +63 -0
  130. data/test/controllers/pictures_controller_test.rb +63 -0
  131. data/test/dummy/Rakefile +7 -0
  132. data/test/dummy/app/assets/javascripts/application.js +10 -0
  133. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  134. data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
  135. data/test/dummy/app/controllers/application_controller.rb +3 -0
  136. data/test/dummy/app/controllers/posts_controller.rb +83 -0
  137. data/test/dummy/app/helpers/application_helper.rb +2 -0
  138. data/test/dummy/app/helpers/posts_helper.rb +2 -0
  139. data/test/dummy/app/models/post.rb +17 -0
  140. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  141. data/test/dummy/app/views/posts/_form.html.erb +30 -0
  142. data/test/dummy/app/views/posts/edit.html.erb +6 -0
  143. data/test/dummy/app/views/posts/index.html.erb +27 -0
  144. data/test/dummy/app/views/posts/new.html.erb +5 -0
  145. data/test/dummy/app/views/posts/show.html.erb +5 -0
  146. data/test/dummy/config.ru +4 -0
  147. data/test/dummy/config/application.rb +63 -0
  148. data/test/dummy/config/boot.rb +10 -0
  149. data/test/dummy/config/database.yml +25 -0
  150. data/test/dummy/config/environment.rb +5 -0
  151. data/test/dummy/config/environments/development.rb +37 -0
  152. data/test/dummy/config/environments/production.rb +67 -0
  153. data/test/dummy/config/environments/test.rb +39 -0
  154. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  155. data/test/dummy/config/initializers/ckeditor.rb +10 -0
  156. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  157. data/test/dummy/config/initializers/inflections.rb +15 -0
  158. data/test/dummy/config/initializers/mime_types.rb +5 -0
  159. data/test/dummy/config/initializers/session_store.rb +8 -0
  160. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  161. data/test/dummy/config/locales/en.yml +5 -0
  162. data/test/dummy/config/mongoid.yml +136 -0
  163. data/test/dummy/config/routes.rb +6 -0
  164. data/test/dummy/config/secrets.yml +8 -0
  165. data/test/dummy/db/migrate/20110623120047_create_posts.rb +14 -0
  166. data/test/dummy/public/404.html +26 -0
  167. data/test/dummy/public/422.html +26 -0
  168. data/test/dummy/public/500.html +26 -0
  169. data/test/dummy/public/favicon.ico +0 -0
  170. data/test/dummy/script/rails +6 -0
  171. data/test/dummy/test/fixtures/files/rails.png +0 -0
  172. data/test/dummy/test/fixtures/files/rails.tar.gz +0 -0
  173. data/test/functional/posts_controller_test.rb +41 -0
  174. data/test/generators/install_generator_test.rb +111 -0
  175. data/test/integration/navigation_test.rb +7 -0
  176. data/test/models/attachment_file_test.rb +22 -0
  177. data/test/models/ckeditor_test.rb +101 -0
  178. data/test/models/picture_test.rb +26 -0
  179. data/test/models/utils_test.rb +18 -0
  180. data/test/orm/active_record.rb +1 -0
  181. data/test/orm/mongoid.rb +6 -0
  182. data/test/support/helpers.rb +30 -0
  183. data/test/support/integration_case.rb +5 -0
  184. data/test/support/raw_post.rb +9 -0
  185. data/test/support/routes.txt +4 -0
  186. data/test/test_helper.rb +36 -0
  187. data/vendor/assets/javascripts/ckeditor/CHANGES.md +1037 -0
  188. data/vendor/assets/javascripts/ckeditor/LICENSE.md +1420 -0
  189. data/vendor/assets/javascripts/ckeditor/README.md +39 -0
  190. data/vendor/assets/javascripts/ckeditor/adapters/jquery.js +10 -0
  191. data/vendor/assets/javascripts/ckeditor/ckeditor.js +1083 -0
  192. data/vendor/assets/javascripts/ckeditor/config.js +10 -0
  193. data/vendor/assets/javascripts/ckeditor/contents.css +132 -0
  194. data/vendor/assets/javascripts/ckeditor/lang/af.js +5 -0
  195. data/vendor/assets/javascripts/ckeditor/lang/ar.js +5 -0
  196. data/vendor/assets/javascripts/ckeditor/lang/bg.js +5 -0
  197. data/vendor/assets/javascripts/ckeditor/lang/bn.js +5 -0
  198. data/vendor/assets/javascripts/ckeditor/lang/bs.js +5 -0
  199. data/vendor/assets/javascripts/ckeditor/lang/ca.js +5 -0
  200. data/vendor/assets/javascripts/ckeditor/lang/cs.js +5 -0
  201. data/vendor/assets/javascripts/ckeditor/lang/cy.js +5 -0
  202. data/vendor/assets/javascripts/ckeditor/lang/da.js +5 -0
  203. data/vendor/assets/javascripts/ckeditor/lang/de.js +5 -0
  204. data/vendor/assets/javascripts/ckeditor/lang/el.js +5 -0
  205. data/vendor/assets/javascripts/ckeditor/lang/en-au.js +5 -0
  206. data/vendor/assets/javascripts/ckeditor/lang/en-ca.js +5 -0
  207. data/vendor/assets/javascripts/ckeditor/lang/en-gb.js +5 -0
  208. data/vendor/assets/javascripts/ckeditor/lang/en.js +5 -0
  209. data/vendor/assets/javascripts/ckeditor/lang/eo.js +5 -0
  210. data/vendor/assets/javascripts/ckeditor/lang/es.js +5 -0
  211. data/vendor/assets/javascripts/ckeditor/lang/et.js +5 -0
  212. data/vendor/assets/javascripts/ckeditor/lang/eu.js +5 -0
  213. data/vendor/assets/javascripts/ckeditor/lang/fa.js +5 -0
  214. data/vendor/assets/javascripts/ckeditor/lang/fi.js +5 -0
  215. data/vendor/assets/javascripts/ckeditor/lang/fo.js +5 -0
  216. data/vendor/assets/javascripts/ckeditor/lang/fr-ca.js +5 -0
  217. data/vendor/assets/javascripts/ckeditor/lang/fr.js +5 -0
  218. data/vendor/assets/javascripts/ckeditor/lang/gl.js +5 -0
  219. data/vendor/assets/javascripts/ckeditor/lang/gu.js +5 -0
  220. data/vendor/assets/javascripts/ckeditor/lang/he.js +5 -0
  221. data/vendor/assets/javascripts/ckeditor/lang/hi.js +5 -0
  222. data/vendor/assets/javascripts/ckeditor/lang/hr.js +5 -0
  223. data/vendor/assets/javascripts/ckeditor/lang/hu.js +5 -0
  224. data/vendor/assets/javascripts/ckeditor/lang/id.js +5 -0
  225. data/vendor/assets/javascripts/ckeditor/lang/is.js +5 -0
  226. data/vendor/assets/javascripts/ckeditor/lang/it.js +5 -0
  227. data/vendor/assets/javascripts/ckeditor/lang/ja.js +5 -0
  228. data/vendor/assets/javascripts/ckeditor/lang/ka.js +5 -0
  229. data/vendor/assets/javascripts/ckeditor/lang/km.js +5 -0
  230. data/vendor/assets/javascripts/ckeditor/lang/ko.js +5 -0
  231. data/vendor/assets/javascripts/ckeditor/lang/ku.js +5 -0
  232. data/vendor/assets/javascripts/ckeditor/lang/lt.js +5 -0
  233. data/vendor/assets/javascripts/ckeditor/lang/lv.js +5 -0
  234. data/vendor/assets/javascripts/ckeditor/lang/mk.js +5 -0
  235. data/vendor/assets/javascripts/ckeditor/lang/mn.js +5 -0
  236. data/vendor/assets/javascripts/ckeditor/lang/ms.js +5 -0
  237. data/vendor/assets/javascripts/ckeditor/lang/nb.js +5 -0
  238. data/vendor/assets/javascripts/ckeditor/lang/nl.js +5 -0
  239. data/vendor/assets/javascripts/ckeditor/lang/no.js +5 -0
  240. data/vendor/assets/javascripts/ckeditor/lang/pl.js +5 -0
  241. data/vendor/assets/javascripts/ckeditor/lang/pt-br.js +5 -0
  242. data/vendor/assets/javascripts/ckeditor/lang/pt.js +5 -0
  243. data/vendor/assets/javascripts/ckeditor/lang/ro.js +5 -0
  244. data/vendor/assets/javascripts/ckeditor/lang/ru.js +5 -0
  245. data/vendor/assets/javascripts/ckeditor/lang/si.js +5 -0
  246. data/vendor/assets/javascripts/ckeditor/lang/sk.js +5 -0
  247. data/vendor/assets/javascripts/ckeditor/lang/sl.js +5 -0
  248. data/vendor/assets/javascripts/ckeditor/lang/sq.js +5 -0
  249. data/vendor/assets/javascripts/ckeditor/lang/sr-latn.js +5 -0
  250. data/vendor/assets/javascripts/ckeditor/lang/sr.js +5 -0
  251. data/vendor/assets/javascripts/ckeditor/lang/sv.js +5 -0
  252. data/vendor/assets/javascripts/ckeditor/lang/th.js +5 -0
  253. data/vendor/assets/javascripts/ckeditor/lang/tr.js +5 -0
  254. data/vendor/assets/javascripts/ckeditor/lang/tt.js +5 -0
  255. data/vendor/assets/javascripts/ckeditor/lang/ug.js +5 -0
  256. data/vendor/assets/javascripts/ckeditor/lang/uk.js +5 -0
  257. data/vendor/assets/javascripts/ckeditor/lang/vi.js +5 -0
  258. data/vendor/assets/javascripts/ckeditor/lang/zh-cn.js +5 -0
  259. data/vendor/assets/javascripts/ckeditor/lang/zh.js +5 -0
  260. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +10 -0
  261. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +25 -0
  262. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/af.js +11 -0
  263. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +11 -0
  264. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +11 -0
  265. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +12 -0
  266. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +12 -0
  267. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +11 -0
  268. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +11 -0
  269. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +12 -0
  270. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +12 -0
  271. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js +11 -0
  272. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +11 -0
  273. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +13 -0
  274. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +12 -0
  275. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +11 -0
  276. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js +12 -0
  277. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +11 -0
  278. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +11 -0
  279. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js +11 -0
  280. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +11 -0
  281. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +12 -0
  282. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +12 -0
  283. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +11 -0
  284. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +11 -0
  285. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +11 -0
  286. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +11 -0
  287. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +12 -0
  288. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +11 -0
  289. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +13 -0
  290. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +9 -0
  291. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +11 -0
  292. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +10 -0
  293. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +11 -0
  294. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +11 -0
  295. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +12 -0
  296. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +11 -0
  297. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +11 -0
  298. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +12 -0
  299. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +11 -0
  300. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +11 -0
  301. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +13 -0
  302. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +13 -0
  303. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +12 -0
  304. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +11 -0
  305. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +11 -0
  306. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +10 -0
  307. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +11 -0
  308. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +11 -0
  309. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +11 -0
  310. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +11 -0
  311. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +11 -0
  312. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +11 -0
  313. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +11 -0
  314. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +12 -0
  315. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js +11 -0
  316. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +12 -0
  317. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +12 -0
  318. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +11 -0
  319. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +9 -0
  320. data/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +9 -0
  321. data/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/about.js +7 -0
  322. data/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png +0 -0
  323. data/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  324. data/vendor/assets/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +12 -0
  325. data/vendor/assets/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +13 -0
  326. data/vendor/assets/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  327. data/vendor/assets/javascripts/ckeditor/plugins/div/dialogs/div.js +9 -0
  328. data/vendor/assets/javascripts/ckeditor/plugins/find/dialogs/find.js +24 -0
  329. data/vendor/assets/javascripts/ckeditor/plugins/flash/dialogs/flash.js +24 -0
  330. data/vendor/assets/javascripts/ckeditor/plugins/flash/images/placeholder.png +0 -0
  331. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/button.js +8 -0
  332. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/checkbox.js +9 -0
  333. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/form.js +8 -0
  334. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/hiddenfield.js +7 -0
  335. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/radio.js +9 -0
  336. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/select.js +20 -0
  337. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/textarea.js +8 -0
  338. data/vendor/assets/javascripts/ckeditor/plugins/forms/dialogs/textfield.js +11 -0
  339. data/vendor/assets/javascripts/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  340. data/vendor/assets/javascripts/ckeditor/plugins/icons.png +0 -0
  341. data/vendor/assets/javascripts/ckeditor/plugins/icons_hidpi.png +0 -0
  342. data/vendor/assets/javascripts/ckeditor/plugins/iframe/dialogs/iframe.js +10 -0
  343. data/vendor/assets/javascripts/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  344. data/vendor/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +44 -0
  345. data/vendor/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
  346. data/vendor/assets/javascripts/ckeditor/plugins/link/dialogs/anchor.js +7 -0
  347. data/vendor/assets/javascripts/ckeditor/plugins/link/dialogs/link.js +26 -0
  348. data/vendor/assets/javascripts/ckeditor/plugins/link/images/anchor.png +0 -0
  349. data/vendor/assets/javascripts/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
  350. data/vendor/assets/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +10 -0
  351. data/vendor/assets/javascripts/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png +0 -0
  352. data/vendor/assets/javascripts/ckeditor/plugins/magicline/images/hidpi/icon.png +0 -0
  353. data/vendor/assets/javascripts/ckeditor/plugins/magicline/images/icon-rtl.png +0 -0
  354. data/vendor/assets/javascripts/ckeditor/plugins/magicline/images/icon.png +0 -0
  355. data/vendor/assets/javascripts/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  356. data/vendor/assets/javascripts/ckeditor/plugins/pastefromword/filter/default.js +32 -0
  357. data/vendor/assets/javascripts/ckeditor/plugins/preview/preview.html +13 -0
  358. data/vendor/assets/javascripts/ckeditor/plugins/scayt/CHANGELOG.md +20 -0
  359. data/vendor/assets/javascripts/ckeditor/plugins/scayt/LICENSE.md +28 -0
  360. data/vendor/assets/javascripts/ckeditor/plugins/scayt/README.md +25 -0
  361. data/vendor/assets/javascripts/ckeditor/plugins/scayt/dialogs/options.js +19 -0
  362. data/vendor/assets/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +71 -0
  363. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  364. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  365. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  366. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  367. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  368. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  369. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  370. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  371. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  372. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  373. data/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  374. data/vendor/assets/javascripts/ckeditor/plugins/smiley/dialogs/smiley.js +11 -0
  375. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  376. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/angel_smile.png +0 -0
  377. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  378. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/angry_smile.png +0 -0
  379. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  380. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/broken_heart.png +0 -0
  381. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  382. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/confused_smile.png +0 -0
  383. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  384. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/cry_smile.png +0 -0
  385. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  386. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/devil_smile.png +0 -0
  387. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  388. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/embarrassed_smile.gif +0 -0
  389. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/embarrassed_smile.png +0 -0
  390. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  391. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/envelope.png +0 -0
  392. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/heart.gif +0 -0
  393. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/heart.png +0 -0
  394. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  395. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/kiss.png +0 -0
  396. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  397. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/lightbulb.png +0 -0
  398. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  399. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/omg_smile.png +0 -0
  400. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  401. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/regular_smile.png +0 -0
  402. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  403. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/sad_smile.png +0 -0
  404. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  405. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/shades_smile.png +0 -0
  406. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  407. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/teeth_smile.png +0 -0
  408. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  409. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/thumbs_down.png +0 -0
  410. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  411. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/thumbs_up.png +0 -0
  412. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/tongue_smile.gif +0 -0
  413. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/tongue_smile.png +0 -0
  414. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  415. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  416. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png +0 -0
  417. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  418. data/vendor/assets/javascripts/ckeditor/plugins/smiley/images/wink_smile.png +0 -0
  419. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +20 -0
  420. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/af.js +13 -0
  421. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ar.js +13 -0
  422. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/bg.js +13 -0
  423. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ca.js +14 -0
  424. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cs.js +13 -0
  425. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cy.js +14 -0
  426. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/da.js +11 -0
  427. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/de.js +13 -0
  428. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/el.js +13 -0
  429. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js +13 -0
  430. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/en.js +13 -0
  431. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/eo.js +12 -0
  432. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/es.js +13 -0
  433. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/et.js +13 -0
  434. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/eu.js +13 -0
  435. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fa.js +12 -0
  436. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fi.js +13 -0
  437. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +10 -0
  438. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr.js +11 -0
  439. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/gl.js +13 -0
  440. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/he.js +12 -0
  441. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hr.js +13 -0
  442. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hu.js +12 -0
  443. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/id.js +13 -0
  444. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/it.js +14 -0
  445. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ja.js +9 -0
  446. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/km.js +13 -0
  447. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ko.js +10 -0
  448. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ku.js +13 -0
  449. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/lt.js +13 -0
  450. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/lv.js +13 -0
  451. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nb.js +11 -0
  452. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nl.js +13 -0
  453. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/no.js +11 -0
  454. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pl.js +12 -0
  455. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +11 -0
  456. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt.js +13 -0
  457. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ru.js +13 -0
  458. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/si.js +13 -0
  459. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sk.js +13 -0
  460. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sl.js +12 -0
  461. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sq.js +13 -0
  462. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sv.js +11 -0
  463. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/th.js +13 -0
  464. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/tr.js +12 -0
  465. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/tt.js +13 -0
  466. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ug.js +13 -0
  467. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/uk.js +12 -0
  468. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/vi.js +14 -0
  469. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +9 -0
  470. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh.js +9 -0
  471. data/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +14 -0
  472. data/vendor/assets/javascripts/ckeditor/plugins/table/dialogs/table.js +21 -0
  473. data/vendor/assets/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +17 -0
  474. data/vendor/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.css +84 -0
  475. data/vendor/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.js +10 -0
  476. data/vendor/assets/javascripts/ckeditor/plugins/templates/templates/default.js +7 -0
  477. data/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  478. data/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  479. data/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  480. data/vendor/assets/javascripts/ckeditor/plugins/wsc/LICENSE.md +28 -0
  481. data/vendor/assets/javascripts/ckeditor/plugins/wsc/README.md +25 -0
  482. data/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +66 -0
  483. data/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  484. data/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
  485. data/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +92 -0
  486. data/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc_ie.js +11 -0
  487. data/vendor/assets/javascripts/ckeditor/skins/moono/dialog.css +5 -0
  488. data/vendor/assets/javascripts/ckeditor/skins/moono/dialog_ie.css +5 -0
  489. data/vendor/assets/javascripts/ckeditor/skins/moono/dialog_ie7.css +5 -0
  490. data/vendor/assets/javascripts/ckeditor/skins/moono/dialog_ie8.css +5 -0
  491. data/vendor/assets/javascripts/ckeditor/skins/moono/dialog_iequirks.css +5 -0
  492. data/vendor/assets/javascripts/ckeditor/skins/moono/editor.css +5 -0
  493. data/vendor/assets/javascripts/ckeditor/skins/moono/editor_gecko.css +5 -0
  494. data/vendor/assets/javascripts/ckeditor/skins/moono/editor_ie.css +5 -0
  495. data/vendor/assets/javascripts/ckeditor/skins/moono/editor_ie7.css +5 -0
  496. data/vendor/assets/javascripts/ckeditor/skins/moono/editor_ie8.css +5 -0
  497. data/vendor/assets/javascripts/ckeditor/skins/moono/editor_iequirks.css +5 -0
  498. data/vendor/assets/javascripts/ckeditor/skins/moono/icons.png +0 -0
  499. data/vendor/assets/javascripts/ckeditor/skins/moono/icons_hidpi.png +0 -0
  500. data/vendor/assets/javascripts/ckeditor/skins/moono/images/arrow.png +0 -0
  501. data/vendor/assets/javascripts/ckeditor/skins/moono/images/close.png +0 -0
  502. data/vendor/assets/javascripts/ckeditor/skins/moono/images/hidpi/close.png +0 -0
  503. data/vendor/assets/javascripts/ckeditor/skins/moono/images/hidpi/lock-open.png +0 -0
  504. data/vendor/assets/javascripts/ckeditor/skins/moono/images/hidpi/lock.png +0 -0
  505. data/vendor/assets/javascripts/ckeditor/skins/moono/images/hidpi/refresh.png +0 -0
  506. data/vendor/assets/javascripts/ckeditor/skins/moono/images/lock-open.png +0 -0
  507. data/vendor/assets/javascripts/ckeditor/skins/moono/images/lock.png +0 -0
  508. data/vendor/assets/javascripts/ckeditor/skins/moono/images/refresh.png +0 -0
  509. data/vendor/assets/javascripts/ckeditor/skins/moono/images/spinner.gif +0 -0
  510. data/vendor/assets/javascripts/ckeditor/skins/moono/readme.md +49 -0
  511. data/vendor/assets/javascripts/ckeditor/styles.js +111 -0
  512. metadata +640 -0
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Author: Sergey Kukunin
3
+ * See: https://github.com/Kukunin/jquery-endless-scroll
4
+ */
5
+ (function($) {
6
+ 'use strict';
7
+
8
+ // Is pushState supported by this browser?
9
+ $.support.pushState =
10
+ window.history && window.history.pushState && window.history.replaceState &&
11
+ // pushState isn't reliable on iOS until 5.
12
+ !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/)
13
+
14
+ //Declaration of modules
15
+ var scrollModule = {
16
+ init: function(options, obj) {
17
+ obj.options = $.extend({
18
+ scrollContainer: window,
19
+ scrollPadding: 100,
20
+ scrollEventDelay: 300
21
+ }, options);
22
+ this.options = obj.options;
23
+ this.container = obj.container;
24
+ obj.scrollModule = this;
25
+
26
+ this._toplock = true;
27
+ this._bottomlock = true;
28
+
29
+ this.scrollContainer = $(this.options.scrollContainer);
30
+
31
+ this.updateEntities();
32
+ this.sortMarkers();
33
+
34
+ this.currentPage = null;
35
+
36
+ this.container.on("jes:afterPageLoad", $.proxy(function(event, url, placement) {
37
+ this.updateEntities();
38
+ this.sortMarkers();
39
+ this.checkMarker();
40
+
41
+ if ( placement == "top" ) {
42
+ //Get offset between first and second pages
43
+ var offset = this.markers[1].top,
44
+ scrollTop = this.scrollContainer.scrollTop();
45
+
46
+ this.scrollContainer.scrollTop(scrollTop + offset);
47
+ }
48
+ }, this));
49
+
50
+ this.bind();
51
+ },
52
+ updateEntities: function() {
53
+ this.entities = $(this.options.entity, this.container);
54
+ },
55
+ sortMarkers: function() {
56
+ var markers = [];
57
+ $(".jes-marker", this.container).each(function() {
58
+ markers.push({ top: $(this).position().top, url: $(this).data("jesUrl") });
59
+ });
60
+ this.markers = markers;
61
+ },
62
+ //Check, whether user scrolled to another page
63
+ checkMarker: function() {
64
+ var newPage = this.markers[0],
65
+ scrollTop = this.scrollContainer.scrollTop();
66
+
67
+ //Determine, what is current page
68
+ for ( var i = 1; i < this.markers.length; i++ ) {
69
+ if ( scrollTop > this.markers[i].top ) {
70
+ newPage = this.markers[i];
71
+ } else {
72
+ break;
73
+ }
74
+ }
75
+ if ( newPage.url != this.currentPage ) {
76
+ this.currentPage = newPage.url;
77
+ $(this.container).trigger("jes:scrollToPage", newPage.url);
78
+ }
79
+ },
80
+ bind: function() {
81
+ this.scrollContainer.on("scroll.jes", $.proxy(function(event) {
82
+ if ( this._tId ) { return; }
83
+
84
+ this.scrollHandler(event);
85
+ //Clean up mark
86
+ this._tId= setTimeout($.proxy(function(){
87
+ this._tId = null;
88
+ },this), this.options.scrollEventDelay);
89
+
90
+ }, this));
91
+ },
92
+ unbind: function() {
93
+ $(this.options.scrollContainer).off("scroll.jes");
94
+ },
95
+ scrollHandler: function(ev) {
96
+ var $scrollable = this.scrollContainer,
97
+ $entities = this.entities,
98
+ $firstEntity = $entities.first(),
99
+ $lastEntity = $entities.last();
100
+
101
+ var scrollTop = $scrollable.scrollTop(),
102
+ height = $scrollable.height(),
103
+ scrollBottom = scrollTop + height;
104
+
105
+ var topEntityPosition = $firstEntity.position().top,
106
+ topTarget = topEntityPosition + this.options.scrollPadding,
107
+ bottomEntityPosition = $lastEntity.outerHeight() + $lastEntity.position().top,
108
+ bottomTarget = bottomEntityPosition - this.options.scrollPadding;
109
+
110
+ //Don't trigger event again, if already fired
111
+ //Visitor have to leave the area and get back to fire event again
112
+ //Process top threshold
113
+ if ( scrollTop < topTarget ) {
114
+ if ( !this._toplock ) {
115
+ $(this.container).trigger("jes:topThreshold");
116
+ this._toplock = true;
117
+ }
118
+ } else {
119
+ this._toplock = false;
120
+ }
121
+
122
+ //Process bottom threshold
123
+ if ( scrollBottom > bottomTarget ) {
124
+ if ( !this._bottomlock ) {
125
+ $(this.container).trigger("jes:bottomThreshold");
126
+ this._bottomlock = true;
127
+ }
128
+ } else {
129
+ this._bottomlock = false;
130
+ }
131
+
132
+ this.checkMarker();
133
+ }
134
+ }
135
+
136
+ var ajaxModule = {
137
+ init: function(options, obj) {
138
+ obj.options = $.extend({
139
+ }, options);
140
+
141
+ this.options = obj.options;
142
+ this.container = obj.container;
143
+
144
+ //markers
145
+ this.setMarker($(this.options.entity, this.container).first(), location.href);
146
+
147
+ obj.ajaxModule = this;
148
+ },
149
+ loadPage: function(url, placement, callback) {
150
+ //The hash with methods list
151
+ //depends from placement
152
+ var actions = {
153
+ top: {
154
+ find: 'first',
155
+ inject: 'insertBefore'
156
+ },
157
+ bottom: {
158
+ find: 'last',
159
+ inject: 'insertAfter'
160
+ }
161
+ },
162
+ action = actions[placement];
163
+
164
+ this.container.trigger("jes:beforePageLoad", [url, placement]);
165
+
166
+ //Make AJAX query
167
+ $.get(url, null, $.proxy(function (_data) {
168
+ var data = $("<div>").html(_data),
169
+ containerSelector = this.options.container,
170
+ container = $(containerSelector, data).first();
171
+
172
+ if ( container.length ) {
173
+ //Find entities
174
+ var entities = container.find(this.options.entity);
175
+
176
+ if ( placement == "bottom" ) {
177
+ //Remove duplicated (staled) entities from page
178
+ entities.each(function(i) {
179
+ var id = $(this).attr("id");
180
+ if ( id ) {
181
+ $('#' + id, this.container).remove();
182
+ }
183
+ });
184
+ }
185
+
186
+ //Find the cursor
187
+ var cursor = $(this.options.entity, containerSelector)[action.find]();
188
+
189
+ //Find and insert entities
190
+ entities[action.inject](cursor);
191
+ this.setMarker(entities.first(), url);
192
+ }
193
+
194
+ if ( $.isFunction(callback) ) {
195
+ callback(data);
196
+ }
197
+ this.container.trigger("jes:afterPageLoad", [url, placement, data, entities]);
198
+ }, this), 'html');
199
+ },
200
+ setMarker: function(entity, url) {
201
+ entity.addClass("jes-marker").data("jesUrl", url);
202
+ }
203
+ }
204
+
205
+ var navigationModule = {
206
+ init: function(options, obj) {
207
+ obj.options = $.extend({
208
+ nextPage: ".pagination a[rel=next]",
209
+ previousPage: ".pagination a[rel=previous]"
210
+ }, options);
211
+
212
+ this.options = obj.options;
213
+ this.container = obj.container;
214
+
215
+ $.each([{
216
+ selector: this.options.nextPage,
217
+ event: "jes:bottomThreshold.navigation",
218
+ placement: 'bottom'
219
+ }, {
220
+ selector: this.options.previousPage,
221
+ event: "jes:topThreshold.navigation",
222
+ placement: 'top'
223
+ }], $.proxy(function(i, v) {
224
+ v.element = $(v.selector);
225
+ if ( v.element.length ) {
226
+ var url = v.element.prop("href"),
227
+ lock = false;
228
+
229
+ var handler = function() {
230
+ //this object is container
231
+ if ( lock || !url ) return;
232
+
233
+ lock = true;
234
+ obj.ajaxModule.loadPage(url, v.placement, $.proxy(function( data ) {
235
+ //Search new next link
236
+ var newElement = $(v.selector, $(data));
237
+ if ( newElement.length ) {
238
+ //Update URL and remove lock
239
+ lock = false;
240
+ url = newElement.prop("href");
241
+ v.element.attr("href", url);
242
+ } else {
243
+ //Remove event at all
244
+ $(this).off(v.event);
245
+ v.element.remove();
246
+ }
247
+ }, this));
248
+ };
249
+
250
+ $(this.container).on(v.event, handler);
251
+ $(v.element).on("click", $.proxy(function(ev) {
252
+ ev.preventDefault();
253
+ handler.apply(this.container)
254
+ }, this));
255
+ }
256
+ },this));
257
+ }
258
+ }
259
+
260
+ var pushStateHistory = {
261
+ init: function(options, obj) {
262
+ if ( !$.support.pushState ) {
263
+ return;
264
+ }
265
+
266
+ obj.container.on("jes:scrollToPage", function(event, url) {
267
+ history.replaceState({}, null, url);
268
+ });
269
+ }
270
+ }
271
+
272
+ $.endlessScroll = function(options) {
273
+
274
+ //Initialize modules
275
+ this.options = $.extend(true, {
276
+ container: "#container",
277
+ entity: ".entity",
278
+ _modules: [ ajaxModule, scrollModule, navigationModule, pushStateHistory ],
279
+ modules: []
280
+ }, options);
281
+
282
+ this.container = $(this.options.container);
283
+ if ( !this.container.length ) {
284
+ throw "Container for endless scroll isn't available on the page";
285
+ return;
286
+ }
287
+
288
+
289
+ //Merge custom options with default
290
+ $.merge(this.options.modules, this.options._modules);
291
+ //Init modules
292
+ this.options.modules.forEach($.proxy(function(module) {
293
+ module.init(this.options, this);
294
+ },this));
295
+
296
+
297
+ return this;
298
+ }
299
+
300
+ })(jQuery);
@@ -0,0 +1,10 @@
1
+ /*
2
+ * jQuery Templates Plugin 1.0.0pre
3
+ * http://github.com/jquery/jquery-tmpl
4
+ * Requires jQuery 1.4.2
5
+ *
6
+ * Copyright Software Freedom Conservancy, Inc.
7
+ * Dual licensed under the MIT or GPL Version 2 licenses.
8
+ * http://jquery.org/license
9
+ */
10
+ (function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
@@ -0,0 +1,373 @@
1
+ (function($, undefined) {
2
+
3
+ /**
4
+ * Unobtrusive scripting adapter for jQuery
5
+ *
6
+ * Requires jQuery 1.6.0 or later.
7
+ * https://github.com/rails/jquery-ujs
8
+
9
+ * Uploading file using rails.js
10
+ * =============================
11
+ *
12
+ * By default, browsers do not allow files to be uploaded via AJAX. As a result, if there are any non-blank file fields
13
+ * in the remote form, this adapter aborts the AJAX submission and allows the form to submit through standard means.
14
+ *
15
+ * The `ajax:aborted:file` event allows you to bind your own handler to process the form submission however you wish.
16
+ *
17
+ * Ex:
18
+ * $('form').live('ajax:aborted:file', function(event, elements){
19
+ * // Implement own remote file-transfer handler here for non-blank file inputs passed in `elements`.
20
+ * // Returning false in this handler tells rails.js to disallow standard form submission
21
+ * return false;
22
+ * });
23
+ *
24
+ * The `ajax:aborted:file` event is fired when a file-type input is detected with a non-blank value.
25
+ *
26
+ * Third-party tools can use this hook to detect when an AJAX file upload is attempted, and then use
27
+ * techniques like the iframe method to upload the file instead.
28
+ *
29
+ * Required fields in rails.js
30
+ * ===========================
31
+ *
32
+ * If any blank required inputs (required="required") are detected in the remote form, the whole form submission
33
+ * is canceled. Note that this is unlike file inputs, which still allow standard (non-AJAX) form submission.
34
+ *
35
+ * The `ajax:aborted:required` event allows you to bind your own handler to inform the user of blank required inputs.
36
+ *
37
+ * !! Note that Opera does not fire the form's submit event if there are blank required inputs, so this event may never
38
+ * get fired in Opera. This event is what causes other browsers to exhibit the same submit-aborting behavior.
39
+ *
40
+ * Ex:
41
+ * $('form').live('ajax:aborted:required', function(event, elements){
42
+ * // Returning false in this handler tells rails.js to submit the form anyway.
43
+ * // The blank required inputs are passed to this function in `elements`.
44
+ * return ! confirm("Would you like to submit the form with missing info?");
45
+ * });
46
+ */
47
+
48
+ // Shorthand to make it a little easier to call public rails functions from within rails.js
49
+ var rails;
50
+
51
+ $.rails = rails = {
52
+ // Link elements bound by jquery-ujs
53
+ linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]',
54
+
55
+ // Select elements bound by jquery-ujs
56
+ inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',
57
+
58
+ // Form elements bound by jquery-ujs
59
+ formSubmitSelector: 'form',
60
+
61
+ // Form input elements bound by jquery-ujs
62
+ formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not(button[type])',
63
+
64
+ // Form input elements disabled during form submission
65
+ disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]',
66
+
67
+ // Form input elements re-enabled after form submission
68
+ enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled',
69
+
70
+ // Form required input elements
71
+ requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])',
72
+
73
+ // Form file input elements
74
+ fileInputSelector: 'input:file',
75
+
76
+ // Link onClick disable selector with possible reenable after remote submission
77
+ linkDisableSelector: 'a[data-disable-with]',
78
+
79
+ // Make sure that every Ajax request sends the CSRF token
80
+ CSRFProtection: function(xhr) {
81
+ var token = $('meta[name="csrf-token"]').attr('content');
82
+ if (token) xhr.setRequestHeader('X-CSRF-Token', token);
83
+ },
84
+
85
+ // Triggers an event on an element and returns false if the event result is false
86
+ fire: function(obj, name, data) {
87
+ var event = $.Event(name);
88
+ obj.trigger(event, data);
89
+ return event.result !== false;
90
+ },
91
+
92
+ // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm
93
+ confirm: function(message) {
94
+ return confirm(message);
95
+ },
96
+
97
+ // Default ajax function, may be overridden with custom function in $.rails.ajax
98
+ ajax: function(options) {
99
+ return $.ajax(options);
100
+ },
101
+
102
+ // Submits "remote" forms and links with ajax
103
+ handleRemote: function(element) {
104
+ var method, url, data,
105
+ crossDomain = element.data('cross-domain') || null,
106
+ dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType),
107
+ options;
108
+
109
+ if (rails.fire(element, 'ajax:before')) {
110
+
111
+ if (element.is('form')) {
112
+ method = element.attr('method');
113
+ url = element.attr('action');
114
+ data = element.serializeArray();
115
+ // memoized value from clicked submit button
116
+ var button = element.data('ujs:submit-button');
117
+ if (button) {
118
+ data.push(button);
119
+ element.data('ujs:submit-button', null);
120
+ }
121
+ } else if (element.is(rails.inputChangeSelector)) {
122
+ method = element.data('method');
123
+ url = element.data('url');
124
+ data = element.serialize();
125
+ if (element.data('params')) data = data + "&" + element.data('params');
126
+ } else {
127
+ method = element.data('method');
128
+ url = element.attr('href');
129
+ data = element.data('params') || null;
130
+ }
131
+
132
+ options = {
133
+ type: method || 'GET', data: data, dataType: dataType, crossDomain: crossDomain,
134
+ // stopping the "ajax:beforeSend" event will cancel the ajax request
135
+ beforeSend: function(xhr, settings) {
136
+ if (settings.dataType === undefined) {
137
+ xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);
138
+ }
139
+ return rails.fire(element, 'ajax:beforeSend', [xhr, settings]);
140
+ },
141
+ success: function(data, status, xhr) {
142
+ element.trigger('ajax:success', [data, status, xhr]);
143
+ },
144
+ complete: function(xhr, status) {
145
+ element.trigger('ajax:complete', [xhr, status]);
146
+ },
147
+ error: function(xhr, status, error) {
148
+ element.trigger('ajax:error', [xhr, status, error]);
149
+ }
150
+ };
151
+ // Only pass url to `ajax` options if not blank
152
+ if (url) { options.url = url; }
153
+
154
+ return rails.ajax(options);
155
+ } else {
156
+ return false;
157
+ }
158
+ },
159
+
160
+ // Handles "data-method" on links such as:
161
+ // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
162
+ handleMethod: function(link) {
163
+ var href = link.attr('href'),
164
+ method = link.data('method'),
165
+ target = link.attr('target'),
166
+ csrf_token = $('meta[name=csrf-token]').attr('content'),
167
+ csrf_param = $('meta[name=csrf-param]').attr('content'),
168
+ form = $('<form method="post" action="' + href + '"></form>'),
169
+ metadata_input = '<input name="_method" value="' + method + '" type="hidden" />';
170
+
171
+ if (csrf_param !== undefined && csrf_token !== undefined) {
172
+ metadata_input += '<input name="' + csrf_param + '" value="' + csrf_token + '" type="hidden" />';
173
+ }
174
+
175
+ if (target) { form.attr('target', target); }
176
+
177
+ form.hide().append(metadata_input).appendTo('body');
178
+ form.submit();
179
+ },
180
+
181
+ /* Disables form elements:
182
+ - Caches element value in 'ujs:enable-with' data store
183
+ - Replaces element text with value of 'data-disable-with' attribute
184
+ - Sets disabled property to true
185
+ */
186
+ disableFormElements: function(form) {
187
+ form.find(rails.disableSelector).each(function() {
188
+ var element = $(this), method = element.is('button') ? 'html' : 'val';
189
+ element.data('ujs:enable-with', element[method]());
190
+ element[method](element.data('disable-with'));
191
+ element.prop('disabled', true);
192
+ });
193
+ },
194
+
195
+ /* Re-enables disabled form elements:
196
+ - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)
197
+ - Sets disabled property to false
198
+ */
199
+ enableFormElements: function(form) {
200
+ form.find(rails.enableSelector).each(function() {
201
+ var element = $(this), method = element.is('button') ? 'html' : 'val';
202
+ if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with'));
203
+ element.prop('disabled', false);
204
+ });
205
+ },
206
+
207
+ /* For 'data-confirm' attribute:
208
+ - Fires `confirm` event
209
+ - Shows the confirmation dialog
210
+ - Fires the `confirm:complete` event
211
+
212
+ Returns `true` if no function stops the chain and user chose yes; `false` otherwise.
213
+ Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.
214
+ Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function
215
+ return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.
216
+ */
217
+ allowAction: function(element) {
218
+ var message = element.data('confirm'),
219
+ answer = false, callback;
220
+ if (!message) { return true; }
221
+
222
+ if (rails.fire(element, 'confirm')) {
223
+ answer = rails.confirm(message);
224
+ callback = rails.fire(element, 'confirm:complete', [answer]);
225
+ }
226
+ return answer && callback;
227
+ },
228
+
229
+ // Helper function which checks for blank inputs in a form that match the specified CSS selector
230
+ blankInputs: function(form, specifiedSelector, nonBlank) {
231
+ var inputs = $(), input,
232
+ selector = specifiedSelector || 'input,textarea';
233
+ form.find(selector).each(function() {
234
+ input = $(this);
235
+ // Collect non-blank inputs if nonBlank option is true, otherwise, collect blank inputs
236
+ if (nonBlank ? input.val() : !input.val()) {
237
+ inputs = inputs.add(input);
238
+ }
239
+ });
240
+ return inputs.length ? inputs : false;
241
+ },
242
+
243
+ // Helper function which checks for non-blank inputs in a form that match the specified CSS selector
244
+ nonBlankInputs: function(form, specifiedSelector) {
245
+ return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank
246
+ },
247
+
248
+ // Helper function, needed to provide consistent behavior in IE
249
+ stopEverything: function(e) {
250
+ $(e.target).trigger('ujs:everythingStopped');
251
+ e.stopImmediatePropagation();
252
+ return false;
253
+ },
254
+
255
+ // find all the submit events directly bound to the form and
256
+ // manually invoke them. If anyone returns false then stop the loop
257
+ callFormSubmitBindings: function(form, event) {
258
+ var events = form.data('events'), continuePropagation = true;
259
+ if (events !== undefined && events['submit'] !== undefined) {
260
+ $.each(events['submit'], function(i, obj){
261
+ if (typeof obj.handler === 'function') return continuePropagation = obj.handler(event);
262
+ });
263
+ }
264
+ return continuePropagation;
265
+ },
266
+
267
+ // replace element's html with the 'data-disable-with' after storing original html
268
+ // and prevent clicking on it
269
+ disableElement: function(element) {
270
+ element.data('ujs:enable-with', element.html()); // store enabled state
271
+ element.html(element.data('disable-with')); // set to disabled state
272
+ element.bind('click.railsDisable', function(e) { // prevent further clicking
273
+ return rails.stopEverything(e)
274
+ });
275
+ },
276
+
277
+ // restore element to its original state which was disabled by 'disableElement' above
278
+ enableElement: function(element) {
279
+ if (element.data('ujs:enable-with') !== undefined) {
280
+ element.html(element.data('ujs:enable-with')); // set to old enabled state
281
+ // this should be element.removeData('ujs:enable-with')
282
+ // but, there is currently a bug in jquery which makes hyphenated data attributes not get removed
283
+ element.data('ujs:enable-with', false); // clean up cache
284
+ }
285
+ element.unbind('click.railsDisable'); // enable element
286
+ }
287
+
288
+ };
289
+
290
+ $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});
291
+
292
+ $(document).delegate(rails.linkDisableSelector, 'ajax:complete', function() {
293
+ rails.enableElement($(this));
294
+ });
295
+
296
+ $(document).delegate(rails.linkClickSelector, 'click.rails', function(e) {
297
+ var link = $(this), method = link.data('method'), data = link.data('params');
298
+ if (!rails.allowAction(link)) return rails.stopEverything(e);
299
+
300
+ if (link.is(rails.linkDisableSelector)) rails.disableElement(link);
301
+
302
+ if (link.data('remote') !== undefined) {
303
+ if ( (e.metaKey || e.ctrlKey) && (!method || method === 'GET') && !data ) { return true; }
304
+
305
+ if (rails.handleRemote(link) === false) { rails.enableElement(link); }
306
+ return false;
307
+
308
+ } else if (link.data('method')) {
309
+ rails.handleMethod(link);
310
+ return false;
311
+ }
312
+ });
313
+
314
+ $(document).delegate(rails.inputChangeSelector, 'change.rails', function(e) {
315
+ var link = $(this);
316
+ if (!rails.allowAction(link)) return rails.stopEverything(e);
317
+
318
+ rails.handleRemote(link);
319
+ return false;
320
+ });
321
+
322
+ $(document).delegate(rails.formSubmitSelector, 'submit.rails', function(e) {
323
+ var form = $(this),
324
+ remote = form.data('remote') !== undefined,
325
+ blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector),
326
+ nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);
327
+
328
+ if (!rails.allowAction(form)) return rails.stopEverything(e);
329
+
330
+ // skip other logic when required values are missing or file upload is present
331
+ if (blankRequiredInputs && form.attr("novalidate") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {
332
+ return rails.stopEverything(e);
333
+ }
334
+
335
+ if (remote) {
336
+ if (nonBlankFileInputs) {
337
+ return rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);
338
+ }
339
+
340
+ // If browser does not support submit bubbling, then this live-binding will be called before direct
341
+ // bindings. Therefore, we should directly call any direct bindings before remotely submitting form.
342
+ if (!$.support.submitBubbles && $().jquery < '1.7' && rails.callFormSubmitBindings(form, e) === false) return rails.stopEverything(e);
343
+
344
+ rails.handleRemote(form);
345
+ return false;
346
+
347
+ } else {
348
+ // slight timeout so that the submit button gets properly serialized
349
+ setTimeout(function(){ rails.disableFormElements(form); }, 13);
350
+ }
351
+ });
352
+
353
+ $(document).delegate(rails.formInputClickSelector, 'click.rails', function(event) {
354
+ var button = $(this);
355
+
356
+ if (!rails.allowAction(button)) return rails.stopEverything(event);
357
+
358
+ // register the pressed submit button
359
+ var name = button.attr('name'),
360
+ data = name ? {name:name, value:button.val()} : null;
361
+
362
+ button.closest('form').data('ujs:submit-button', data);
363
+ });
364
+
365
+ $(document).delegate(rails.formSubmitSelector, 'ajax:beforeSend.rails', function(event) {
366
+ if (this == event.target) rails.disableFormElements($(this));
367
+ });
368
+
369
+ $(document).delegate(rails.formSubmitSelector, 'ajax:complete.rails', function(event) {
370
+ if (this == event.target) rails.enableFormElements($(this));
371
+ });
372
+
373
+ })( jQuery );