inline_forms 0.9.17 → 0.9.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (712) hide show
  1. data/VERSION +1 -1
  2. data/app/helpers/form_elements/text_area.rb +4 -1
  3. data/inline_forms.gemspec +709 -2
  4. data/lib/otherstuff/Gemfile +58 -0
  5. data/lib/otherstuff/add_roles.sql +54 -0
  6. data/lib/otherstuff/database.yml +32 -0
  7. data/lib/otherstuff/diffie +2 -0
  8. data/lib/otherstuff/mk-ice-ts +26 -0
  9. data/lib/otherstuff/mk-new-app +24 -0
  10. data/lib/otherstuff/mkrole +7 -0
  11. data/lib/otherstuff/roles_users.sql +40 -0
  12. data/public/images/glass_plate.gif +0 -0
  13. data/public/images/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
  14. data/public/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  15. data/public/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  16. data/public/images/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
  17. data/public/images/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
  18. data/public/images/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
  19. data/public/images/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
  20. data/public/images/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
  21. data/public/images/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
  22. data/public/images/ui-icons_3d3d3d_256x240.png +0 -0
  23. data/public/images/ui-icons_bd7b00_256x240.png +0 -0
  24. data/public/images/ui-icons_d19405_256x240.png +0 -0
  25. data/public/images/ui-icons_eb990f_256x240.png +0 -0
  26. data/public/images/ui-icons_ed9f26_256x240.png +0 -0
  27. data/public/images/ui-icons_fadc7a_256x240.png +0 -0
  28. data/public/images/ui-icons_ffe180_256x240.png +0 -0
  29. data/public/javascripts/application.js +2 -0
  30. data/public/javascripts/ckeditor/.htaccess +24 -0
  31. data/public/javascripts/ckeditor/CHANGES.html +1295 -0
  32. data/public/javascripts/ckeditor/INSTALL.html +92 -0
  33. data/public/javascripts/ckeditor/LICENSE.html +1334 -0
  34. data/public/javascripts/ckeditor/_samples/adobeair/application.xml +32 -0
  35. data/public/javascripts/ckeditor/_samples/adobeair/run.bat +9 -0
  36. data/public/javascripts/ckeditor/_samples/adobeair/run.sh +8 -0
  37. data/public/javascripts/ckeditor/_samples/adobeair/sample.html +45 -0
  38. data/public/javascripts/ckeditor/_samples/ajax.html +98 -0
  39. data/public/javascripts/ckeditor/_samples/api.html +192 -0
  40. data/public/javascripts/ckeditor/_samples/api_dialog.html +198 -0
  41. data/public/javascripts/ckeditor/_samples/api_dialog/my_dialog.js +28 -0
  42. data/public/javascripts/ckeditor/_samples/asp/index.html +103 -0
  43. data/public/javascripts/ckeditor/_samples/assets/output_for_flash.fla +0 -0
  44. data/public/javascripts/ckeditor/_samples/assets/output_for_flash.swf +0 -0
  45. data/public/javascripts/ckeditor/_samples/assets/output_xhtml.css +204 -0
  46. data/public/javascripts/ckeditor/_samples/assets/parsesample.css +70 -0
  47. data/public/javascripts/ckeditor/_samples/assets/swfobject.js +18 -0
  48. data/public/javascripts/ckeditor/_samples/autogrow.html +103 -0
  49. data/public/javascripts/ckeditor/_samples/bbcode.html +136 -0
  50. data/public/javascripts/ckeditor/_samples/devtools.html +94 -0
  51. data/public/javascripts/ckeditor/_samples/divreplace.html +154 -0
  52. data/public/javascripts/ckeditor/_samples/enterkey.html +115 -0
  53. data/public/javascripts/ckeditor/_samples/fullpage.html +82 -0
  54. data/public/javascripts/ckeditor/_samples/index.html +116 -0
  55. data/public/javascripts/ckeditor/_samples/jqueryadapter.html +99 -0
  56. data/public/javascripts/ckeditor/_samples/output_for_flash.html +275 -0
  57. data/public/javascripts/ckeditor/_samples/output_html.html +285 -0
  58. data/public/javascripts/ckeditor/_samples/output_xhtml.html +181 -0
  59. data/public/javascripts/ckeditor/_samples/php/index.html +47 -0
  60. data/public/javascripts/ckeditor/_samples/placeholder.html +81 -0
  61. data/public/javascripts/ckeditor/_samples/readonly.html +91 -0
  62. data/public/javascripts/ckeditor/_samples/replacebyclass.html +64 -0
  63. data/public/javascripts/ckeditor/_samples/replacebycode.html +97 -0
  64. data/public/javascripts/ckeditor/_samples/sample.css +163 -0
  65. data/public/javascripts/ckeditor/_samples/sample.js +65 -0
  66. data/public/javascripts/ckeditor/_samples/sharedspaces.html +153 -0
  67. data/public/javascripts/ckeditor/_samples/skins.html +110 -0
  68. data/public/javascripts/ckeditor/_samples/stylesheetparser.html +93 -0
  69. data/public/javascripts/ckeditor/_samples/tableresize.html +115 -0
  70. data/public/javascripts/ckeditor/_samples/ui_color.html +129 -0
  71. data/public/javascripts/ckeditor/_samples/ui_languages.html +134 -0
  72. data/public/javascripts/ckeditor/_source/adapters/jquery.js +306 -0
  73. data/public/javascripts/ckeditor/_source/core/_bootstrap.js +87 -0
  74. data/public/javascripts/ckeditor/_source/core/ckeditor.js +141 -0
  75. data/public/javascripts/ckeditor/_source/core/ckeditor_base.js +227 -0
  76. data/public/javascripts/ckeditor/_source/core/ckeditor_basic.js +238 -0
  77. data/public/javascripts/ckeditor/_source/core/command.js +209 -0
  78. data/public/javascripts/ckeditor/_source/core/commanddefinition.js +129 -0
  79. data/public/javascripts/ckeditor/_source/core/config.js +431 -0
  80. data/public/javascripts/ckeditor/_source/core/dataprocessor.js +65 -0
  81. data/public/javascripts/ckeditor/_source/core/dom.js +20 -0
  82. data/public/javascripts/ckeditor/_source/core/dom/comment.js +32 -0
  83. data/public/javascripts/ckeditor/_source/core/dom/document.js +251 -0
  84. data/public/javascripts/ckeditor/_source/core/dom/documentfragment.js +49 -0
  85. data/public/javascripts/ckeditor/_source/core/dom/domobject.js +258 -0
  86. data/public/javascripts/ckeditor/_source/core/dom/element.js +1663 -0
  87. data/public/javascripts/ckeditor/_source/core/dom/elementpath.js +119 -0
  88. data/public/javascripts/ckeditor/_source/core/dom/event.js +142 -0
  89. data/public/javascripts/ckeditor/_source/core/dom/node.js +690 -0
  90. data/public/javascripts/ckeditor/_source/core/dom/nodelist.js +26 -0
  91. data/public/javascripts/ckeditor/_source/core/dom/range.js +2032 -0
  92. data/public/javascripts/ckeditor/_source/core/dom/rangelist.js +213 -0
  93. data/public/javascripts/ckeditor/_source/core/dom/text.js +128 -0
  94. data/public/javascripts/ckeditor/_source/core/dom/walker.js +462 -0
  95. data/public/javascripts/ckeditor/_source/core/dom/window.js +96 -0
  96. data/public/javascripts/ckeditor/_source/core/dtd.js +237 -0
  97. data/public/javascripts/ckeditor/_source/core/editor.js +1041 -0
  98. data/public/javascripts/ckeditor/_source/core/editor_basic.js +186 -0
  99. data/public/javascripts/ckeditor/_source/core/env.js +282 -0
  100. data/public/javascripts/ckeditor/_source/core/event.js +342 -0
  101. data/public/javascripts/ckeditor/_source/core/eventInfo.js +120 -0
  102. data/public/javascripts/ckeditor/_source/core/focusmanager.js +152 -0
  103. data/public/javascripts/ckeditor/_source/core/htmlparser.js +224 -0
  104. data/public/javascripts/ckeditor/_source/core/htmlparser/basicwriter.js +145 -0
  105. data/public/javascripts/ckeditor/_source/core/htmlparser/cdata.js +43 -0
  106. data/public/javascripts/ckeditor/_source/core/htmlparser/comment.js +60 -0
  107. data/public/javascripts/ckeditor/_source/core/htmlparser/element.js +249 -0
  108. data/public/javascripts/ckeditor/_source/core/htmlparser/filter.js +288 -0
  109. data/public/javascripts/ckeditor/_source/core/htmlparser/fragment.js +492 -0
  110. data/public/javascripts/ckeditor/_source/core/htmlparser/text.js +55 -0
  111. data/public/javascripts/ckeditor/_source/core/lang.js +157 -0
  112. data/public/javascripts/ckeditor/_source/core/loader.js +240 -0
  113. data/public/javascripts/ckeditor/_source/core/plugindefinition.js +83 -0
  114. data/public/javascripts/ckeditor/_source/core/plugins.js +103 -0
  115. data/public/javascripts/ckeditor/_source/core/resourcemanager.js +238 -0
  116. data/public/javascripts/ckeditor/_source/core/scriptloader.js +180 -0
  117. data/public/javascripts/ckeditor/_source/core/skins.js +184 -0
  118. data/public/javascripts/ckeditor/_source/core/themes.js +19 -0
  119. data/public/javascripts/ckeditor/_source/core/tools.js +734 -0
  120. data/public/javascripts/ckeditor/_source/core/ui.js +128 -0
  121. data/public/javascripts/ckeditor/_source/lang/_languages.js +84 -0
  122. data/public/javascripts/ckeditor/_source/lang/_translationstatus.txt +61 -0
  123. data/public/javascripts/ckeditor/_source/lang/af.js +810 -0
  124. data/public/javascripts/ckeditor/_source/lang/ar.js +810 -0
  125. data/public/javascripts/ckeditor/_source/lang/bg.js +810 -0
  126. data/public/javascripts/ckeditor/_source/lang/bn.js +810 -0
  127. data/public/javascripts/ckeditor/_source/lang/bs.js +810 -0
  128. data/public/javascripts/ckeditor/_source/lang/ca.js +810 -0
  129. data/public/javascripts/ckeditor/_source/lang/cs.js +810 -0
  130. data/public/javascripts/ckeditor/_source/lang/cy.js +810 -0
  131. data/public/javascripts/ckeditor/_source/lang/da.js +810 -0
  132. data/public/javascripts/ckeditor/_source/lang/de.js +810 -0
  133. data/public/javascripts/ckeditor/_source/lang/el.js +810 -0
  134. data/public/javascripts/ckeditor/_source/lang/en-au.js +810 -0
  135. data/public/javascripts/ckeditor/_source/lang/en-ca.js +810 -0
  136. data/public/javascripts/ckeditor/_source/lang/en-gb.js +810 -0
  137. data/public/javascripts/ckeditor/_source/lang/en.js +810 -0
  138. data/public/javascripts/ckeditor/_source/lang/eo.js +810 -0
  139. data/public/javascripts/ckeditor/_source/lang/es.js +810 -0
  140. data/public/javascripts/ckeditor/_source/lang/et.js +810 -0
  141. data/public/javascripts/ckeditor/_source/lang/eu.js +810 -0
  142. data/public/javascripts/ckeditor/_source/lang/fa.js +810 -0
  143. data/public/javascripts/ckeditor/_source/lang/fi.js +810 -0
  144. data/public/javascripts/ckeditor/_source/lang/fo.js +810 -0
  145. data/public/javascripts/ckeditor/_source/lang/fr-ca.js +810 -0
  146. data/public/javascripts/ckeditor/_source/lang/fr.js +810 -0
  147. data/public/javascripts/ckeditor/_source/lang/gl.js +810 -0
  148. data/public/javascripts/ckeditor/_source/lang/gu.js +810 -0
  149. data/public/javascripts/ckeditor/_source/lang/he.js +810 -0
  150. data/public/javascripts/ckeditor/_source/lang/hi.js +810 -0
  151. data/public/javascripts/ckeditor/_source/lang/hr.js +810 -0
  152. data/public/javascripts/ckeditor/_source/lang/hu.js +810 -0
  153. data/public/javascripts/ckeditor/_source/lang/is.js +810 -0
  154. data/public/javascripts/ckeditor/_source/lang/it.js +810 -0
  155. data/public/javascripts/ckeditor/_source/lang/ja.js +810 -0
  156. data/public/javascripts/ckeditor/_source/lang/ka.js +810 -0
  157. data/public/javascripts/ckeditor/_source/lang/km.js +810 -0
  158. data/public/javascripts/ckeditor/_source/lang/ko.js +810 -0
  159. data/public/javascripts/ckeditor/_source/lang/lt.js +810 -0
  160. data/public/javascripts/ckeditor/_source/lang/lv.js +810 -0
  161. data/public/javascripts/ckeditor/_source/lang/mn.js +810 -0
  162. data/public/javascripts/ckeditor/_source/lang/ms.js +810 -0
  163. data/public/javascripts/ckeditor/_source/lang/nb.js +810 -0
  164. data/public/javascripts/ckeditor/_source/lang/nl.js +810 -0
  165. data/public/javascripts/ckeditor/_source/lang/no.js +810 -0
  166. data/public/javascripts/ckeditor/_source/lang/pl.js +810 -0
  167. data/public/javascripts/ckeditor/_source/lang/pt-br.js +809 -0
  168. data/public/javascripts/ckeditor/_source/lang/pt.js +810 -0
  169. data/public/javascripts/ckeditor/_source/lang/ro.js +810 -0
  170. data/public/javascripts/ckeditor/_source/lang/ru.js +810 -0
  171. data/public/javascripts/ckeditor/_source/lang/sk.js +810 -0
  172. data/public/javascripts/ckeditor/_source/lang/sl.js +810 -0
  173. data/public/javascripts/ckeditor/_source/lang/sr-latn.js +810 -0
  174. data/public/javascripts/ckeditor/_source/lang/sr.js +810 -0
  175. data/public/javascripts/ckeditor/_source/lang/sv.js +809 -0
  176. data/public/javascripts/ckeditor/_source/lang/th.js +810 -0
  177. data/public/javascripts/ckeditor/_source/lang/tr.js +809 -0
  178. data/public/javascripts/ckeditor/_source/lang/uk.js +810 -0
  179. data/public/javascripts/ckeditor/_source/lang/vi.js +810 -0
  180. data/public/javascripts/ckeditor/_source/lang/zh-cn.js +810 -0
  181. data/public/javascripts/ckeditor/_source/lang/zh.js +810 -0
  182. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +222 -0
  183. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -0
  184. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -0
  185. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/plugin.js +47 -0
  186. data/public/javascripts/ckeditor/_source/plugins/about/dialogs/about.js +76 -0
  187. data/public/javascripts/ckeditor/_source/plugins/about/dialogs/logo_ckeditor.png +0 -0
  188. data/public/javascripts/ckeditor/_source/plugins/about/plugin.js +24 -0
  189. data/public/javascripts/ckeditor/_source/plugins/adobeair/plugin.js +228 -0
  190. data/public/javascripts/ckeditor/_source/plugins/ajax/plugin.js +152 -0
  191. data/public/javascripts/ckeditor/_source/plugins/attachment/dialogs/attachment.js +384 -0
  192. data/public/javascripts/ckeditor/_source/plugins/attachment/images/attachment.png +0 -0
  193. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/en.js +10 -0
  194. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/ru.js +10 -0
  195. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/uk.js +10 -0
  196. data/public/javascripts/ckeditor/_source/plugins/attachment/plugin.js +44 -0
  197. data/public/javascripts/ckeditor/_source/plugins/autogrow/plugin.js +88 -0
  198. data/public/javascripts/ckeditor/_source/plugins/basicstyles/plugin.js +101 -0
  199. data/public/javascripts/ckeditor/_source/plugins/bbcode/plugin.js +924 -0
  200. data/public/javascripts/ckeditor/_source/plugins/bidi/plugin.js +331 -0
  201. data/public/javascripts/ckeditor/_source/plugins/blockquote/plugin.js +305 -0
  202. data/public/javascripts/ckeditor/_source/plugins/button/plugin.js +285 -0
  203. data/public/javascripts/ckeditor/_source/plugins/clipboard/dialogs/paste.js +223 -0
  204. data/public/javascripts/ckeditor/_source/plugins/clipboard/plugin.js +446 -0
  205. data/public/javascripts/ckeditor/_source/plugins/colorbutton/plugin.js +295 -0
  206. data/public/javascripts/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js +340 -0
  207. data/public/javascripts/ckeditor/_source/plugins/colordialog/plugin.js +15 -0
  208. data/public/javascripts/ckeditor/_source/plugins/contextmenu/plugin.js +177 -0
  209. data/public/javascripts/ckeditor/_source/plugins/devtools/lang/en.js +16 -0
  210. data/public/javascripts/ckeditor/_source/plugins/devtools/plugin.js +173 -0
  211. data/public/javascripts/ckeditor/_source/plugins/dialog/dialogDefinition.js +1099 -0
  212. data/public/javascripts/ckeditor/_source/plugins/dialog/plugin.js +3235 -0
  213. data/public/javascripts/ckeditor/_source/plugins/dialogadvtab/plugin.js +205 -0
  214. data/public/javascripts/ckeditor/_source/plugins/dialogui/plugin.js +1537 -0
  215. data/public/javascripts/ckeditor/_source/plugins/div/dialogs/div.js +535 -0
  216. data/public/javascripts/ckeditor/_source/plugins/div/plugin.js +121 -0
  217. data/public/javascripts/ckeditor/_source/plugins/docprops/dialogs/docprops.js +686 -0
  218. data/public/javascripts/ckeditor/_source/plugins/docprops/plugin.js +22 -0
  219. data/public/javascripts/ckeditor/_source/plugins/domiterator/plugin.js +361 -0
  220. data/public/javascripts/ckeditor/_source/plugins/editingblock/plugin.js +269 -0
  221. data/public/javascripts/ckeditor/_source/plugins/elementspath/plugin.js +218 -0
  222. data/public/javascripts/ckeditor/_source/plugins/embed/dialogs/embed.js +65 -0
  223. data/public/javascripts/ckeditor/_source/plugins/embed/images/embed.png +0 -0
  224. data/public/javascripts/ckeditor/_source/plugins/embed/lang/en.js +9 -0
  225. data/public/javascripts/ckeditor/_source/plugins/embed/lang/ru.js +9 -0
  226. data/public/javascripts/ckeditor/_source/plugins/embed/lang/uk.js +9 -0
  227. data/public/javascripts/ckeditor/_source/plugins/embed/plugin.js +43 -0
  228. data/public/javascripts/ckeditor/_source/plugins/enterkey/plugin.js +399 -0
  229. data/public/javascripts/ckeditor/_source/plugins/entities/plugin.js +250 -0
  230. data/public/javascripts/ckeditor/_source/plugins/fakeobjects/plugin.js +126 -0
  231. data/public/javascripts/ckeditor/_source/plugins/filebrowser/plugin.js +524 -0
  232. data/public/javascripts/ckeditor/_source/plugins/find/dialogs/find.js +895 -0
  233. data/public/javascripts/ckeditor/_source/plugins/find/plugin.js +47 -0
  234. data/public/javascripts/ckeditor/_source/plugins/flash/dialogs/flash.js +698 -0
  235. data/public/javascripts/ckeditor/_source/plugins/flash/images/placeholder.png +0 -0
  236. data/public/javascripts/ckeditor/_source/plugins/flash/plugin.js +168 -0
  237. data/public/javascripts/ckeditor/_source/plugins/floatpanel/plugin.js +405 -0
  238. data/public/javascripts/ckeditor/_source/plugins/font/plugin.js +234 -0
  239. data/public/javascripts/ckeditor/_source/plugins/format/plugin.js +197 -0
  240. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/button.js +118 -0
  241. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/checkbox.js +153 -0
  242. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/form.js +177 -0
  243. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/hiddenfield.js +100 -0
  244. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/radio.js +135 -0
  245. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/select.js +562 -0
  246. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textarea.js +114 -0
  247. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textfield.js +199 -0
  248. data/public/javascripts/ckeditor/_source/plugins/forms/images/hiddenfield.gif +0 -0
  249. data/public/javascripts/ckeditor/_source/plugins/forms/plugin.js +288 -0
  250. data/public/javascripts/ckeditor/_source/plugins/horizontalrule/plugin.js +36 -0
  251. data/public/javascripts/ckeditor/_source/plugins/htmldataprocessor/plugin.js +595 -0
  252. data/public/javascripts/ckeditor/_source/plugins/htmlwriter/plugin.js +319 -0
  253. data/public/javascripts/ckeditor/_source/plugins/iframe/dialogs/iframe.js +257 -0
  254. data/public/javascripts/ckeditor/_source/plugins/iframe/images/placeholder.png +0 -0
  255. data/public/javascripts/ckeditor/_source/plugins/iframe/plugin.js +106 -0
  256. data/public/javascripts/ckeditor/_source/plugins/iframedialog/plugin.js +188 -0
  257. data/public/javascripts/ckeditor/_source/plugins/image/dialogs/image.js +1403 -0
  258. data/public/javascripts/ckeditor/_source/plugins/image/plugin.js +81 -0
  259. data/public/javascripts/ckeditor/_source/plugins/indent/plugin.js +461 -0
  260. data/public/javascripts/ckeditor/_source/plugins/justify/plugin.js +253 -0
  261. data/public/javascripts/ckeditor/_source/plugins/keystrokes/plugin.js +225 -0
  262. data/public/javascripts/ckeditor/_source/plugins/link/dialogs/anchor.js +144 -0
  263. data/public/javascripts/ckeditor/_source/plugins/link/dialogs/link.js +1400 -0
  264. data/public/javascripts/ckeditor/_source/plugins/link/images/anchor.gif +0 -0
  265. data/public/javascripts/ckeditor/_source/plugins/link/plugin.js +336 -0
  266. data/public/javascripts/ckeditor/_source/plugins/list/plugin.js +727 -0
  267. data/public/javascripts/ckeditor/_source/plugins/listblock/plugin.js +257 -0
  268. data/public/javascripts/ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +204 -0
  269. data/public/javascripts/ckeditor/_source/plugins/liststyle/plugin.js +66 -0
  270. data/public/javascripts/ckeditor/_source/plugins/maximize/plugin.js +352 -0
  271. data/public/javascripts/ckeditor/_source/plugins/menu/plugin.js +505 -0
  272. data/public/javascripts/ckeditor/_source/plugins/menubutton/plugin.js +98 -0
  273. data/public/javascripts/ckeditor/_source/plugins/newpage/plugin.js +54 -0
  274. data/public/javascripts/ckeditor/_source/plugins/pagebreak/images/pagebreak.gif +0 -0
  275. data/public/javascripts/ckeditor/_source/plugins/pagebreak/plugin.js +164 -0
  276. data/public/javascripts/ckeditor/_source/plugins/panel/plugin.js +402 -0
  277. data/public/javascripts/ckeditor/_source/plugins/panelbutton/plugin.js +146 -0
  278. data/public/javascripts/ckeditor/_source/plugins/pastefromword/filter/default.js +1376 -0
  279. data/public/javascripts/ckeditor/_source/plugins/pastefromword/plugin.js +141 -0
  280. data/public/javascripts/ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +67 -0
  281. data/public/javascripts/ckeditor/_source/plugins/pastetext/plugin.js +98 -0
  282. data/public/javascripts/ckeditor/_source/plugins/placeholder/dialogs/placeholder.js +71 -0
  283. data/public/javascripts/ckeditor/_source/plugins/placeholder/lang/en.js +16 -0
  284. data/public/javascripts/ckeditor/_source/plugins/placeholder/lang/he.js +16 -0
  285. data/public/javascripts/ckeditor/_source/plugins/placeholder/placeholder.gif +0 -0
  286. data/public/javascripts/ckeditor/_source/plugins/placeholder/plugin.js +171 -0
  287. data/public/javascripts/ckeditor/_source/plugins/popup/plugin.js +64 -0
  288. data/public/javascripts/ckeditor/_source/plugins/preview/plugin.js +109 -0
  289. data/public/javascripts/ckeditor/_source/plugins/print/plugin.js +42 -0
  290. data/public/javascripts/ckeditor/_source/plugins/removeformat/plugin.js +185 -0
  291. data/public/javascripts/ckeditor/_source/plugins/resize/plugin.js +168 -0
  292. data/public/javascripts/ckeditor/_source/plugins/richcombo/plugin.js +378 -0
  293. data/public/javascripts/ckeditor/_source/plugins/save/plugin.js +56 -0
  294. data/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/options.js +537 -0
  295. data/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/toolbar.css +71 -0
  296. data/public/javascripts/ckeditor/_source/plugins/scayt/plugin.js +964 -0
  297. data/public/javascripts/ckeditor/_source/plugins/selection/plugin.js +1563 -0
  298. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_address.png +0 -0
  299. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_blockquote.png +0 -0
  300. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_div.png +0 -0
  301. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h1.png +0 -0
  302. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h2.png +0 -0
  303. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h3.png +0 -0
  304. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h4.png +0 -0
  305. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h5.png +0 -0
  306. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h6.png +0 -0
  307. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_p.png +0 -0
  308. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_pre.png +0 -0
  309. data/public/javascripts/ckeditor/_source/plugins/showblocks/plugin.js +160 -0
  310. data/public/javascripts/ckeditor/_source/plugins/showborders/plugin.js +207 -0
  311. data/public/javascripts/ckeditor/_source/plugins/smiley/dialogs/smiley.js +224 -0
  312. data/public/javascripts/ckeditor/_source/plugins/smiley/images/angel_smile.gif +0 -0
  313. data/public/javascripts/ckeditor/_source/plugins/smiley/images/angry_smile.gif +0 -0
  314. data/public/javascripts/ckeditor/_source/plugins/smiley/images/broken_heart.gif +0 -0
  315. data/public/javascripts/ckeditor/_source/plugins/smiley/images/confused_smile.gif +0 -0
  316. data/public/javascripts/ckeditor/_source/plugins/smiley/images/cry_smile.gif +0 -0
  317. data/public/javascripts/ckeditor/_source/plugins/smiley/images/devil_smile.gif +0 -0
  318. data/public/javascripts/ckeditor/_source/plugins/smiley/images/embaressed_smile.gif +0 -0
  319. data/public/javascripts/ckeditor/_source/plugins/smiley/images/envelope.gif +0 -0
  320. data/public/javascripts/ckeditor/_source/plugins/smiley/images/heart.gif +0 -0
  321. data/public/javascripts/ckeditor/_source/plugins/smiley/images/kiss.gif +0 -0
  322. data/public/javascripts/ckeditor/_source/plugins/smiley/images/lightbulb.gif +0 -0
  323. data/public/javascripts/ckeditor/_source/plugins/smiley/images/omg_smile.gif +0 -0
  324. data/public/javascripts/ckeditor/_source/plugins/smiley/images/regular_smile.gif +0 -0
  325. data/public/javascripts/ckeditor/_source/plugins/smiley/images/sad_smile.gif +0 -0
  326. data/public/javascripts/ckeditor/_source/plugins/smiley/images/shades_smile.gif +0 -0
  327. data/public/javascripts/ckeditor/_source/plugins/smiley/images/teeth_smile.gif +0 -0
  328. data/public/javascripts/ckeditor/_source/plugins/smiley/images/thumbs_down.gif +0 -0
  329. data/public/javascripts/ckeditor/_source/plugins/smiley/images/thumbs_up.gif +0 -0
  330. data/public/javascripts/ckeditor/_source/plugins/smiley/images/tounge_smile.gif +0 -0
  331. data/public/javascripts/ckeditor/_source/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  332. data/public/javascripts/ckeditor/_source/plugins/smiley/images/wink_smile.gif +0 -0
  333. data/public/javascripts/ckeditor/_source/plugins/smiley/plugin.js +94 -0
  334. data/public/javascripts/ckeditor/_source/plugins/sourcearea/plugin.js +209 -0
  335. data/public/javascripts/ckeditor/_source/plugins/specialchar/dialogs/specialchar.js +350 -0
  336. data/public/javascripts/ckeditor/_source/plugins/specialchar/lang/en.js +89 -0
  337. data/public/javascripts/ckeditor/_source/plugins/specialchar/plugin.js +70 -0
  338. data/public/javascripts/ckeditor/_source/plugins/styles/plugin.js +1678 -0
  339. data/public/javascripts/ckeditor/_source/plugins/styles/styles/default.js +88 -0
  340. data/public/javascripts/ckeditor/_source/plugins/stylescombo/plugin.js +219 -0
  341. data/public/javascripts/ckeditor/_source/plugins/stylesheetparser/plugin.js +143 -0
  342. data/public/javascripts/ckeditor/_source/plugins/tab/plugin.js +367 -0
  343. data/public/javascripts/ckeditor/_source/plugins/table/dialogs/table.js +672 -0
  344. data/public/javascripts/ckeditor/_source/plugins/table/plugin.js +78 -0
  345. data/public/javascripts/ckeditor/_source/plugins/tableresize/plugin.js +450 -0
  346. data/public/javascripts/ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +525 -0
  347. data/public/javascripts/ckeditor/_source/plugins/tabletools/plugin.js +1191 -0
  348. data/public/javascripts/ckeditor/_source/plugins/templates/dialogs/templates.js +234 -0
  349. data/public/javascripts/ckeditor/_source/plugins/templates/plugin.js +99 -0
  350. data/public/javascripts/ckeditor/_source/plugins/templates/templates/default.js +94 -0
  351. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template1.gif +0 -0
  352. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template2.gif +0 -0
  353. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template3.gif +0 -0
  354. data/public/javascripts/ckeditor/_source/plugins/toolbar/plugin.js +545 -0
  355. data/public/javascripts/ckeditor/_source/plugins/uicolor/dialogs/uicolor.js +205 -0
  356. data/public/javascripts/ckeditor/_source/plugins/uicolor/lang/en.js +15 -0
  357. data/public/javascripts/ckeditor/_source/plugins/uicolor/lang/he.js +15 -0
  358. data/public/javascripts/ckeditor/_source/plugins/uicolor/plugin.js +37 -0
  359. data/public/javascripts/ckeditor/_source/plugins/uicolor/uicolor.gif +0 -0
  360. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  361. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  362. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  363. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  364. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/yui.css +15 -0
  365. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/yui.js +71 -0
  366. data/public/javascripts/ckeditor/_source/plugins/undo/plugin.js +580 -0
  367. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/ciframe.html +49 -0
  368. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  369. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.css +82 -0
  370. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.js +192 -0
  371. data/public/javascripts/ckeditor/_source/plugins/wsc/plugin.js +33 -0
  372. data/public/javascripts/ckeditor/_source/plugins/wysiwygarea/plugin.js +1351 -0
  373. data/public/javascripts/ckeditor/_source/plugins/xml/plugin.js +170 -0
  374. data/public/javascripts/ckeditor/_source/skins/kama/dialog.css +920 -0
  375. data/public/javascripts/ckeditor/_source/skins/kama/editor.css +25 -0
  376. data/public/javascripts/ckeditor/_source/skins/kama/elementspath.css +73 -0
  377. data/public/javascripts/ckeditor/_source/skins/kama/icons.css +366 -0
  378. data/public/javascripts/ckeditor/_source/skins/kama/icons.png +0 -0
  379. data/public/javascripts/ckeditor/_source/skins/kama/icons_rtl.png +0 -0
  380. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
  381. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
  382. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
  383. data/public/javascripts/ckeditor/_source/skins/kama/images/mini.gif +0 -0
  384. data/public/javascripts/ckeditor/_source/skins/kama/images/noimage.png +0 -0
  385. data/public/javascripts/ckeditor/_source/skins/kama/images/sprites.png +0 -0
  386. data/public/javascripts/ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
  387. data/public/javascripts/ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
  388. data/public/javascripts/ckeditor/_source/skins/kama/mainui.css +203 -0
  389. data/public/javascripts/ckeditor/_source/skins/kama/menu.css +232 -0
  390. data/public/javascripts/ckeditor/_source/skins/kama/panel.css +217 -0
  391. data/public/javascripts/ckeditor/_source/skins/kama/presets.css +49 -0
  392. data/public/javascripts/ckeditor/_source/skins/kama/reset.css +84 -0
  393. data/public/javascripts/ckeditor/_source/skins/kama/richcombo.css +287 -0
  394. data/public/javascripts/ckeditor/_source/skins/kama/skin.js +236 -0
  395. data/public/javascripts/ckeditor/_source/skins/kama/templates.css +88 -0
  396. data/public/javascripts/ckeditor/_source/skins/kama/toolbar.css +407 -0
  397. data/public/javascripts/ckeditor/_source/skins/office2003/dialog.css +826 -0
  398. data/public/javascripts/ckeditor/_source/skins/office2003/editor.css +25 -0
  399. data/public/javascripts/ckeditor/_source/skins/office2003/elementspath.css +74 -0
  400. data/public/javascripts/ckeditor/_source/skins/office2003/icons.css +363 -0
  401. data/public/javascripts/ckeditor/_source/skins/office2003/icons.png +0 -0
  402. data/public/javascripts/ckeditor/_source/skins/office2003/icons_rtl.png +0 -0
  403. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.gif +0 -0
  404. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.png +0 -0
  405. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides_rtl.png +0 -0
  406. data/public/javascripts/ckeditor/_source/skins/office2003/images/mini.gif +0 -0
  407. data/public/javascripts/ckeditor/_source/skins/office2003/images/noimage.png +0 -0
  408. data/public/javascripts/ckeditor/_source/skins/office2003/images/sprites.png +0 -0
  409. data/public/javascripts/ckeditor/_source/skins/office2003/images/sprites_ie6.png +0 -0
  410. data/public/javascripts/ckeditor/_source/skins/office2003/mainui.css +153 -0
  411. data/public/javascripts/ckeditor/_source/skins/office2003/menu.css +229 -0
  412. data/public/javascripts/ckeditor/_source/skins/office2003/panel.css +212 -0
  413. data/public/javascripts/ckeditor/_source/skins/office2003/presets.css +49 -0
  414. data/public/javascripts/ckeditor/_source/skins/office2003/reset.css +84 -0
  415. data/public/javascripts/ckeditor/_source/skins/office2003/richcombo.css +309 -0
  416. data/public/javascripts/ckeditor/_source/skins/office2003/skin.js +74 -0
  417. data/public/javascripts/ckeditor/_source/skins/office2003/templates.css +87 -0
  418. data/public/javascripts/ckeditor/_source/skins/office2003/toolbar.css +522 -0
  419. data/public/javascripts/ckeditor/_source/skins/v2/dialog.css +842 -0
  420. data/public/javascripts/ckeditor/_source/skins/v2/editor.css +25 -0
  421. data/public/javascripts/ckeditor/_source/skins/v2/elementspath.css +74 -0
  422. data/public/javascripts/ckeditor/_source/skins/v2/icons.css +363 -0
  423. data/public/javascripts/ckeditor/_source/skins/v2/icons.png +0 -0
  424. data/public/javascripts/ckeditor/_source/skins/v2/icons_rtl.png +0 -0
  425. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.gif +0 -0
  426. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.png +0 -0
  427. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides_rtl.png +0 -0
  428. data/public/javascripts/ckeditor/_source/skins/v2/images/mini.gif +0 -0
  429. data/public/javascripts/ckeditor/_source/skins/v2/images/noimage.png +0 -0
  430. data/public/javascripts/ckeditor/_source/skins/v2/images/sprites.png +0 -0
  431. data/public/javascripts/ckeditor/_source/skins/v2/images/sprites_ie6.png +0 -0
  432. data/public/javascripts/ckeditor/_source/skins/v2/images/toolbar_start.gif +0 -0
  433. data/public/javascripts/ckeditor/_source/skins/v2/mainui.css +162 -0
  434. data/public/javascripts/ckeditor/_source/skins/v2/menu.css +232 -0
  435. data/public/javascripts/ckeditor/_source/skins/v2/panel.css +212 -0
  436. data/public/javascripts/ckeditor/_source/skins/v2/presets.css +50 -0
  437. data/public/javascripts/ckeditor/_source/skins/v2/reset.css +84 -0
  438. data/public/javascripts/ckeditor/_source/skins/v2/richcombo.css +302 -0
  439. data/public/javascripts/ckeditor/_source/skins/v2/skin.js +70 -0
  440. data/public/javascripts/ckeditor/_source/skins/v2/templates.css +87 -0
  441. data/public/javascripts/ckeditor/_source/skins/v2/toolbar.css +465 -0
  442. data/public/javascripts/ckeditor/_source/themes/default/theme.js +394 -0
  443. data/public/javascripts/ckeditor/adapters/jquery.js +6 -0
  444. data/public/javascripts/ckeditor/ckeditor.js +145 -0
  445. data/public/javascripts/ckeditor/ckeditor.pack +211 -0
  446. data/public/javascripts/ckeditor/ckeditor_basic.js +8 -0
  447. data/public/javascripts/ckeditor/ckeditor_basic_source.js +20 -0
  448. data/public/javascripts/ckeditor/ckeditor_source.js +25 -0
  449. data/public/javascripts/ckeditor/config.js +28 -0
  450. data/public/javascripts/ckeditor/contents.css +23 -0
  451. data/public/javascripts/ckeditor/css/ckfinder.css +316 -0
  452. data/public/javascripts/ckeditor/css/fck_dialog.css +119 -0
  453. data/public/javascripts/ckeditor/css/fck_editor.css +448 -0
  454. data/public/javascripts/ckeditor/css/swfupload.css +94 -0
  455. data/public/javascripts/ckeditor/images/add.gif +0 -0
  456. data/public/javascripts/ckeditor/images/cancelbutton.gif +0 -0
  457. data/public/javascripts/ckeditor/images/ckfnothumb.gif +0 -0
  458. data/public/javascripts/ckeditor/images/doc.gif +0 -0
  459. data/public/javascripts/ckeditor/images/mp3.gif +0 -0
  460. data/public/javascripts/ckeditor/images/pdf.gif +0 -0
  461. data/public/javascripts/ckeditor/images/rar.gif +0 -0
  462. data/public/javascripts/ckeditor/images/refresh.gif +0 -0
  463. data/public/javascripts/ckeditor/images/select_files.png +0 -0
  464. data/public/javascripts/ckeditor/images/spacer.gif +0 -0
  465. data/public/javascripts/ckeditor/images/swf.gif +0 -0
  466. data/public/javascripts/ckeditor/images/toolbar.start.gif +0 -0
  467. data/public/javascripts/ckeditor/images/xls.gif +0 -0
  468. data/public/javascripts/ckeditor/lang/_languages.js +6 -0
  469. data/public/javascripts/ckeditor/lang/_translationstatus.txt +61 -0
  470. data/public/javascripts/ckeditor/lang/af.js +6 -0
  471. data/public/javascripts/ckeditor/lang/ar.js +6 -0
  472. data/public/javascripts/ckeditor/lang/bg.js +6 -0
  473. data/public/javascripts/ckeditor/lang/bn.js +6 -0
  474. data/public/javascripts/ckeditor/lang/bs.js +6 -0
  475. data/public/javascripts/ckeditor/lang/ca.js +6 -0
  476. data/public/javascripts/ckeditor/lang/cs.js +6 -0
  477. data/public/javascripts/ckeditor/lang/cy.js +6 -0
  478. data/public/javascripts/ckeditor/lang/da.js +6 -0
  479. data/public/javascripts/ckeditor/lang/de.js +6 -0
  480. data/public/javascripts/ckeditor/lang/el.js +6 -0
  481. data/public/javascripts/ckeditor/lang/en-au.js +6 -0
  482. data/public/javascripts/ckeditor/lang/en-ca.js +6 -0
  483. data/public/javascripts/ckeditor/lang/en-gb.js +6 -0
  484. data/public/javascripts/ckeditor/lang/en.js +6 -0
  485. data/public/javascripts/ckeditor/lang/eo.js +6 -0
  486. data/public/javascripts/ckeditor/lang/es.js +6 -0
  487. data/public/javascripts/ckeditor/lang/et.js +6 -0
  488. data/public/javascripts/ckeditor/lang/eu.js +6 -0
  489. data/public/javascripts/ckeditor/lang/fa.js +6 -0
  490. data/public/javascripts/ckeditor/lang/fi.js +6 -0
  491. data/public/javascripts/ckeditor/lang/fo.js +6 -0
  492. data/public/javascripts/ckeditor/lang/fr-ca.js +6 -0
  493. data/public/javascripts/ckeditor/lang/fr.js +6 -0
  494. data/public/javascripts/ckeditor/lang/gl.js +6 -0
  495. data/public/javascripts/ckeditor/lang/gu.js +6 -0
  496. data/public/javascripts/ckeditor/lang/he.js +6 -0
  497. data/public/javascripts/ckeditor/lang/hi.js +6 -0
  498. data/public/javascripts/ckeditor/lang/hr.js +6 -0
  499. data/public/javascripts/ckeditor/lang/hu.js +6 -0
  500. data/public/javascripts/ckeditor/lang/is.js +6 -0
  501. data/public/javascripts/ckeditor/lang/it.js +6 -0
  502. data/public/javascripts/ckeditor/lang/ja.js +6 -0
  503. data/public/javascripts/ckeditor/lang/ka.js +6 -0
  504. data/public/javascripts/ckeditor/lang/km.js +6 -0
  505. data/public/javascripts/ckeditor/lang/ko.js +6 -0
  506. data/public/javascripts/ckeditor/lang/lt.js +6 -0
  507. data/public/javascripts/ckeditor/lang/lv.js +6 -0
  508. data/public/javascripts/ckeditor/lang/mn.js +6 -0
  509. data/public/javascripts/ckeditor/lang/ms.js +6 -0
  510. data/public/javascripts/ckeditor/lang/nb.js +6 -0
  511. data/public/javascripts/ckeditor/lang/nl.js +6 -0
  512. data/public/javascripts/ckeditor/lang/no.js +6 -0
  513. data/public/javascripts/ckeditor/lang/pl.js +6 -0
  514. data/public/javascripts/ckeditor/lang/pt-br.js +6 -0
  515. data/public/javascripts/ckeditor/lang/pt.js +6 -0
  516. data/public/javascripts/ckeditor/lang/ro.js +6 -0
  517. data/public/javascripts/ckeditor/lang/ru.js +6 -0
  518. data/public/javascripts/ckeditor/lang/sk.js +6 -0
  519. data/public/javascripts/ckeditor/lang/sl.js +6 -0
  520. data/public/javascripts/ckeditor/lang/sr-latn.js +6 -0
  521. data/public/javascripts/ckeditor/lang/sr.js +6 -0
  522. data/public/javascripts/ckeditor/lang/sv.js +6 -0
  523. data/public/javascripts/ckeditor/lang/th.js +6 -0
  524. data/public/javascripts/ckeditor/lang/tr.js +6 -0
  525. data/public/javascripts/ckeditor/lang/uk.js +6 -0
  526. data/public/javascripts/ckeditor/lang/vi.js +6 -0
  527. data/public/javascripts/ckeditor/lang/zh-cn.js +6 -0
  528. data/public/javascripts/ckeditor/lang/zh.js +6 -0
  529. data/public/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +7 -0
  530. data/public/javascripts/ckeditor/plugins/a11yhelp/lang/en.js +6 -0
  531. data/public/javascripts/ckeditor/plugins/a11yhelp/lang/he.js +6 -0
  532. data/public/javascripts/ckeditor/plugins/about/dialogs/about.js +6 -0
  533. data/public/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  534. data/public/javascripts/ckeditor/plugins/adobeair/plugin.js +6 -0
  535. data/public/javascripts/ckeditor/plugins/ajax/plugin.js +6 -0
  536. data/public/javascripts/ckeditor/plugins/attachment/dialogs/attachment.js +1 -0
  537. data/public/javascripts/ckeditor/plugins/attachment/images/attachment.png +0 -0
  538. data/public/javascripts/ckeditor/plugins/attachment/lang/en.js +10 -0
  539. data/public/javascripts/ckeditor/plugins/attachment/lang/ru.js +10 -0
  540. data/public/javascripts/ckeditor/plugins/attachment/lang/uk.js +10 -0
  541. data/public/javascripts/ckeditor/plugins/attachment/plugin.js +1 -0
  542. data/public/javascripts/ckeditor/plugins/autogrow/plugin.js +6 -0
  543. data/public/javascripts/ckeditor/plugins/bbcode/plugin.js +9 -0
  544. data/public/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +7 -0
  545. data/public/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +7 -0
  546. data/public/javascripts/ckeditor/plugins/devtools/lang/en.js +6 -0
  547. data/public/javascripts/ckeditor/plugins/devtools/plugin.js +6 -0
  548. data/public/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  549. data/public/javascripts/ckeditor/plugins/div/dialogs/div.js +8 -0
  550. data/public/javascripts/ckeditor/plugins/docprops/dialogs/docprops.js +10 -0
  551. data/public/javascripts/ckeditor/plugins/docprops/plugin.js +6 -0
  552. data/public/javascripts/ckeditor/plugins/embed/dialogs/embed.js +1 -0
  553. data/public/javascripts/ckeditor/plugins/embed/images/embed.png +0 -0
  554. data/public/javascripts/ckeditor/plugins/embed/lang/en.js +9 -0
  555. data/public/javascripts/ckeditor/plugins/embed/lang/ru.js +9 -0
  556. data/public/javascripts/ckeditor/plugins/embed/lang/uk.js +9 -0
  557. data/public/javascripts/ckeditor/plugins/embed/plugin.js +1 -0
  558. data/public/javascripts/ckeditor/plugins/find/dialogs/find.js +9 -0
  559. data/public/javascripts/ckeditor/plugins/flash/dialogs/flash.js +9 -0
  560. data/public/javascripts/ckeditor/plugins/flash/images/placeholder.png +0 -0
  561. data/public/javascripts/ckeditor/plugins/forms/dialogs/button.js +6 -0
  562. data/public/javascripts/ckeditor/plugins/forms/dialogs/checkbox.js +6 -0
  563. data/public/javascripts/ckeditor/plugins/forms/dialogs/form.js +6 -0
  564. data/public/javascripts/ckeditor/plugins/forms/dialogs/hiddenfield.js +6 -0
  565. data/public/javascripts/ckeditor/plugins/forms/dialogs/radio.js +6 -0
  566. data/public/javascripts/ckeditor/plugins/forms/dialogs/select.js +9 -0
  567. data/public/javascripts/ckeditor/plugins/forms/dialogs/textarea.js +6 -0
  568. data/public/javascripts/ckeditor/plugins/forms/dialogs/textfield.js +6 -0
  569. data/public/javascripts/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  570. data/public/javascripts/ckeditor/plugins/iframe/dialogs/iframe.js +7 -0
  571. data/public/javascripts/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  572. data/public/javascripts/ckeditor/plugins/iframedialog/plugin.js +6 -0
  573. data/public/javascripts/ckeditor/plugins/image/dialogs/image.js +13 -0
  574. data/public/javascripts/ckeditor/plugins/link/dialogs/anchor.js +6 -0
  575. data/public/javascripts/ckeditor/plugins/link/dialogs/link.js +11 -0
  576. data/public/javascripts/ckeditor/plugins/link/images/anchor.gif +0 -0
  577. data/public/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +6 -0
  578. data/public/javascripts/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  579. data/public/javascripts/ckeditor/plugins/pastefromword/filter/default.js +11 -0
  580. data/public/javascripts/ckeditor/plugins/pastetext/dialogs/pastetext.js +6 -0
  581. data/public/javascripts/ckeditor/plugins/placeholder/dialogs/placeholder.js +6 -0
  582. data/public/javascripts/ckeditor/plugins/placeholder/lang/en.js +6 -0
  583. data/public/javascripts/ckeditor/plugins/placeholder/lang/he.js +6 -0
  584. data/public/javascripts/ckeditor/plugins/placeholder/placeholder.gif +0 -0
  585. data/public/javascripts/ckeditor/plugins/placeholder/plugin.js +6 -0
  586. data/public/javascripts/ckeditor/plugins/scayt/dialogs/options.js +8 -0
  587. data/public/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +6 -0
  588. data/public/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  589. data/public/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  590. data/public/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  591. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  592. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  593. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  594. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  595. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  596. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  597. data/public/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  598. data/public/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  599. data/public/javascripts/ckeditor/plugins/smiley/dialogs/smiley.js +7 -0
  600. data/public/javascripts/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  601. data/public/javascripts/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  602. data/public/javascripts/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  603. data/public/javascripts/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  604. data/public/javascripts/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  605. data/public/javascripts/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  606. data/public/javascripts/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  607. data/public/javascripts/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  608. data/public/javascripts/ckeditor/plugins/smiley/images/heart.gif +0 -0
  609. data/public/javascripts/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  610. data/public/javascripts/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  611. data/public/javascripts/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  612. data/public/javascripts/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  613. data/public/javascripts/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  614. data/public/javascripts/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  615. data/public/javascripts/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  616. data/public/javascripts/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  617. data/public/javascripts/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  618. data/public/javascripts/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  619. data/public/javascripts/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  620. data/public/javascripts/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  621. data/public/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +7 -0
  622. data/public/javascripts/ckeditor/plugins/specialchar/lang/en.js +6 -0
  623. data/public/javascripts/ckeditor/plugins/styles/styles/default.js +6 -0
  624. data/public/javascripts/ckeditor/plugins/stylesheetparser/plugin.js +6 -0
  625. data/public/javascripts/ckeditor/plugins/table/dialogs/table.js +9 -0
  626. data/public/javascripts/ckeditor/plugins/tableresize/plugin.js +7 -0
  627. data/public/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +8 -0
  628. data/public/javascripts/ckeditor/plugins/templates/dialogs/templates.js +7 -0
  629. data/public/javascripts/ckeditor/plugins/templates/templates/default.js +6 -0
  630. data/public/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  631. data/public/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  632. data/public/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  633. data/public/javascripts/ckeditor/plugins/uicolor/dialogs/uicolor.js +7 -0
  634. data/public/javascripts/ckeditor/plugins/uicolor/lang/en.js +6 -0
  635. data/public/javascripts/ckeditor/plugins/uicolor/lang/he.js +6 -0
  636. data/public/javascripts/ckeditor/plugins/uicolor/plugin.js +6 -0
  637. data/public/javascripts/ckeditor/plugins/uicolor/uicolor.gif +0 -0
  638. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  639. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  640. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  641. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  642. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/yui.css +6 -0
  643. data/public/javascripts/ckeditor/plugins/uicolor/yui/yui.js +76 -0
  644. data/public/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +49 -0
  645. data/public/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  646. data/public/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +6 -0
  647. data/public/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +7 -0
  648. data/public/javascripts/ckeditor/plugins/xml/plugin.js +6 -0
  649. data/public/javascripts/ckeditor/skins/kama/dialog.css +9 -0
  650. data/public/javascripts/ckeditor/skins/kama/editor.css +13 -0
  651. data/public/javascripts/ckeditor/skins/kama/icons.png +0 -0
  652. data/public/javascripts/ckeditor/skins/kama/icons_rtl.png +0 -0
  653. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  654. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides.png +0 -0
  655. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  656. data/public/javascripts/ckeditor/skins/kama/images/mini.gif +0 -0
  657. data/public/javascripts/ckeditor/skins/kama/images/noimage.png +0 -0
  658. data/public/javascripts/ckeditor/skins/kama/images/sprites.png +0 -0
  659. data/public/javascripts/ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  660. data/public/javascripts/ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  661. data/public/javascripts/ckeditor/skins/kama/skin.js +7 -0
  662. data/public/javascripts/ckeditor/skins/kama/templates.css +6 -0
  663. data/public/javascripts/ckeditor/skins/office2003/dialog.css +9 -0
  664. data/public/javascripts/ckeditor/skins/office2003/editor.css +14 -0
  665. data/public/javascripts/ckeditor/skins/office2003/icons.png +0 -0
  666. data/public/javascripts/ckeditor/skins/office2003/icons_rtl.png +0 -0
  667. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.gif +0 -0
  668. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.png +0 -0
  669. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides_rtl.png +0 -0
  670. data/public/javascripts/ckeditor/skins/office2003/images/mini.gif +0 -0
  671. data/public/javascripts/ckeditor/skins/office2003/images/noimage.png +0 -0
  672. data/public/javascripts/ckeditor/skins/office2003/images/sprites.png +0 -0
  673. data/public/javascripts/ckeditor/skins/office2003/images/sprites_ie6.png +0 -0
  674. data/public/javascripts/ckeditor/skins/office2003/skin.js +6 -0
  675. data/public/javascripts/ckeditor/skins/office2003/templates.css +6 -0
  676. data/public/javascripts/ckeditor/skins/v2/dialog.css +9 -0
  677. data/public/javascripts/ckeditor/skins/v2/editor.css +13 -0
  678. data/public/javascripts/ckeditor/skins/v2/icons.png +0 -0
  679. data/public/javascripts/ckeditor/skins/v2/icons_rtl.png +0 -0
  680. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides.gif +0 -0
  681. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides.png +0 -0
  682. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides_rtl.png +0 -0
  683. data/public/javascripts/ckeditor/skins/v2/images/mini.gif +0 -0
  684. data/public/javascripts/ckeditor/skins/v2/images/noimage.png +0 -0
  685. data/public/javascripts/ckeditor/skins/v2/images/sprites.png +0 -0
  686. data/public/javascripts/ckeditor/skins/v2/images/sprites_ie6.png +0 -0
  687. data/public/javascripts/ckeditor/skins/v2/images/toolbar_start.gif +0 -0
  688. data/public/javascripts/ckeditor/skins/v2/skin.js +6 -0
  689. data/public/javascripts/ckeditor/skins/v2/templates.css +6 -0
  690. data/public/javascripts/ckeditor/swfupload/fileprogress.js +266 -0
  691. data/public/javascripts/ckeditor/swfupload/handlers.js +181 -0
  692. data/public/javascripts/ckeditor/swfupload/jquery-1.5.1.min.js +16 -0
  693. data/public/javascripts/ckeditor/swfupload/querystring.js +40 -0
  694. data/public/javascripts/ckeditor/swfupload/rails.js +158 -0
  695. data/public/javascripts/ckeditor/swfupload/swfupload.js +1 -0
  696. data/public/javascripts/ckeditor/swfupload/swfupload.queue.js +1 -0
  697. data/public/javascripts/ckeditor/swfupload/swfupload.swf +0 -0
  698. data/public/javascripts/ckeditor/swfupload/swfupload.swfobject.js +111 -0
  699. data/public/javascripts/ckeditor/themes/default/theme.js +8 -0
  700. data/public/javascripts/jquery-ui.js +11603 -0
  701. data/public/javascripts/jquery-ui.min.js +406 -0
  702. data/public/javascripts/jquery.form.js +899 -0
  703. data/public/javascripts/jquery.js +8936 -0
  704. data/public/javascripts/jquery.min.js +18 -0
  705. data/public/javascripts/jquery.remotipart.js +79 -0
  706. data/public/javascripts/jquery_ujs.js +315 -0
  707. data/public/javascripts/rails.js +175 -0
  708. data/public/javascripts/slider.js +275 -0
  709. data/public/stylesheets/devise.css +94 -0
  710. data/public/stylesheets/inline_forms.css +16 -0
  711. data/public/stylesheets/jquery-ui-sunny.css +578 -0
  712. metadata +711 -4
@@ -0,0 +1,1191 @@
1
+ /*
2
+ Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3
+ For licensing, see LICENSE.html or http://ckeditor.com/license
4
+ */
5
+
6
+ (function()
7
+ {
8
+ var cellNodeRegex = /^(?:td|th)$/;
9
+
10
+ function getSelectedCells( selection )
11
+ {
12
+ // Walker will try to split text nodes, which will make the current selection
13
+ // invalid. So save bookmarks before doing anything.
14
+ var bookmarks = selection.createBookmarks();
15
+
16
+ var ranges = selection.getRanges();
17
+ var retval = [];
18
+ var database = {};
19
+
20
+ function moveOutOfCellGuard( node )
21
+ {
22
+ // Apply to the first cell only.
23
+ if ( retval.length > 0 )
24
+ return;
25
+
26
+ // If we are exiting from the first </td>, then the td should definitely be
27
+ // included.
28
+ if ( node.type == CKEDITOR.NODE_ELEMENT && cellNodeRegex.test( node.getName() )
29
+ && !node.getCustomData( 'selected_cell' ) )
30
+ {
31
+ CKEDITOR.dom.element.setMarker( database, node, 'selected_cell', true );
32
+ retval.push( node );
33
+ }
34
+ }
35
+
36
+ for ( var i = 0 ; i < ranges.length ; i++ )
37
+ {
38
+ var range = ranges[ i ];
39
+
40
+ if ( range.collapsed )
41
+ {
42
+ // Walker does not handle collapsed ranges yet - fall back to old API.
43
+ var startNode = range.getCommonAncestor();
44
+ var nearestCell = startNode.getAscendant( 'td', true ) || startNode.getAscendant( 'th', true );
45
+ if ( nearestCell )
46
+ retval.push( nearestCell );
47
+ }
48
+ else
49
+ {
50
+ var walker = new CKEDITOR.dom.walker( range );
51
+ var node;
52
+ walker.guard = moveOutOfCellGuard;
53
+
54
+ while ( ( node = walker.next() ) )
55
+ {
56
+ // If may be possible for us to have a range like this:
57
+ // <td>^1</td><td>^2</td>
58
+ // The 2nd td shouldn't be included.
59
+ //
60
+ // So we have to take care to include a td we've entered only when we've
61
+ // walked into its children.
62
+
63
+ var parent = node.getParent();
64
+ if ( parent && cellNodeRegex.test( parent.getName() ) && !parent.getCustomData( 'selected_cell' ) )
65
+ {
66
+ CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true );
67
+ retval.push( parent );
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ CKEDITOR.dom.element.clearAllMarkers( database );
74
+
75
+ // Restore selection position.
76
+ selection.selectBookmarks( bookmarks );
77
+
78
+ return retval;
79
+ }
80
+
81
+ function getFocusElementAfterDelCells( cellsToDelete ) {
82
+ var i = 0,
83
+ last = cellsToDelete.length - 1,
84
+ database = {},
85
+ cell,focusedCell,
86
+ tr;
87
+
88
+ while ( ( cell = cellsToDelete[ i++ ] ) )
89
+ CKEDITOR.dom.element.setMarker( database, cell, 'delete_cell', true );
90
+
91
+ // 1.first we check left or right side focusable cell row by row;
92
+ i = 0;
93
+ while ( ( cell = cellsToDelete[ i++ ] ) )
94
+ {
95
+ if ( ( focusedCell = cell.getPrevious() ) && !focusedCell.getCustomData( 'delete_cell' )
96
+ || ( focusedCell = cell.getNext() ) && !focusedCell.getCustomData( 'delete_cell' ) )
97
+ {
98
+ CKEDITOR.dom.element.clearAllMarkers( database );
99
+ return focusedCell;
100
+ }
101
+ }
102
+
103
+ CKEDITOR.dom.element.clearAllMarkers( database );
104
+
105
+ // 2. then we check the toppest row (outside the selection area square) focusable cell
106
+ tr = cellsToDelete[ 0 ].getParent();
107
+ if ( ( tr = tr.getPrevious() ) )
108
+ return tr.getLast();
109
+
110
+ // 3. last we check the lowerest row focusable cell
111
+ tr = cellsToDelete[ last ].getParent();
112
+ if ( ( tr = tr.getNext() ) )
113
+ return tr.getChild( 0 );
114
+
115
+ return null;
116
+ }
117
+
118
+ function insertRow( selection, insertBefore )
119
+ {
120
+ var cells = getSelectedCells( selection ),
121
+ firstCell = cells[ 0 ],
122
+ table = firstCell.getAscendant( 'table' ),
123
+ doc = firstCell.getDocument(),
124
+ startRow = cells[ 0 ].getParent(),
125
+ startRowIndex = startRow.$.rowIndex,
126
+ lastCell = cells[ cells.length - 1 ],
127
+ endRowIndex = lastCell.getParent().$.rowIndex + lastCell.$.rowSpan - 1,
128
+ endRow = new CKEDITOR.dom.element( table.$.rows[ endRowIndex ] ),
129
+ rowIndex = insertBefore ? startRowIndex : endRowIndex,
130
+ row = insertBefore ? startRow : endRow;
131
+
132
+ var map = CKEDITOR.tools.buildTableMap( table ),
133
+ cloneRow = map[ rowIndex ],
134
+ nextRow = insertBefore ? map[ rowIndex - 1 ] : map[ rowIndex + 1 ],
135
+ width = map[0].length;
136
+
137
+ var newRow = doc.createElement( 'tr' );
138
+ for ( var i = 0; i < width; i++ )
139
+ {
140
+ var cell;
141
+ // Check whether there's a spanning row here, do not break it.
142
+ if ( cloneRow[ i ].rowSpan > 1 && nextRow && cloneRow[ i ] == nextRow[ i ] )
143
+ {
144
+ cell = cloneRow[ i ];
145
+ cell.rowSpan += 1;
146
+ }
147
+ else
148
+ {
149
+ cell = new CKEDITOR.dom.element( cloneRow[ i ] ).clone();
150
+ cell.removeAttribute( 'rowSpan' );
151
+ !CKEDITOR.env.ie && cell.appendBogus();
152
+ newRow.append( cell );
153
+ cell = cell.$;
154
+ }
155
+
156
+ i += cell.colSpan - 1;
157
+ }
158
+
159
+ insertBefore ?
160
+ newRow.insertBefore( row ) :
161
+ newRow.insertAfter( row );
162
+ }
163
+
164
+ function deleteRows( selectionOrRow )
165
+ {
166
+ if ( selectionOrRow instanceof CKEDITOR.dom.selection )
167
+ {
168
+ var cells = getSelectedCells( selectionOrRow ),
169
+ firstCell = cells[ 0 ],
170
+ table = firstCell.getAscendant( 'table' ),
171
+ map = CKEDITOR.tools.buildTableMap( table ),
172
+ startRow = cells[ 0 ].getParent(),
173
+ startRowIndex = startRow.$.rowIndex,
174
+ lastCell = cells[ cells.length - 1 ],
175
+ endRowIndex = lastCell.getParent().$.rowIndex + lastCell.$.rowSpan - 1,
176
+ rowsToDelete = [];
177
+
178
+ // Delete cell or reduce cell spans by checking through the table map.
179
+ for ( var i = startRowIndex; i <= endRowIndex; i++ )
180
+ {
181
+ var mapRow = map[ i ],
182
+ row = new CKEDITOR.dom.element( table.$.rows[ i ] );
183
+
184
+ for ( var j = 0; j < mapRow.length; j++ )
185
+ {
186
+ var cell = new CKEDITOR.dom.element( mapRow[ j ] ),
187
+ cellRowIndex = cell.getParent().$.rowIndex;
188
+
189
+ if ( cell.$.rowSpan == 1 )
190
+ cell.remove();
191
+ // Row spanned cell.
192
+ else
193
+ {
194
+ // Span row of the cell, reduce spanning.
195
+ cell.$.rowSpan -= 1;
196
+ // Root row of the cell, root cell to next row.
197
+ if ( cellRowIndex == i )
198
+ {
199
+ var nextMapRow = map[ i + 1 ];
200
+ nextMapRow[ j - 1 ] ?
201
+ cell.insertAfter( new CKEDITOR.dom.element( nextMapRow[ j - 1 ] ) )
202
+ : new CKEDITOR.dom.element( table.$.rows[ i + 1 ] ).append( cell, 1 );
203
+ }
204
+ }
205
+
206
+ j += cell.$.colSpan - 1;
207
+ }
208
+
209
+ rowsToDelete.push( row );
210
+ }
211
+
212
+ var rows = table.$.rows;
213
+
214
+ // Where to put the cursor after rows been deleted?
215
+ // 1. Into next sibling row if any;
216
+ // 2. Into previous sibling row if any;
217
+ // 3. Into table's parent element if it's the very last row.
218
+ var cursorPosition = new CKEDITOR.dom.element( rows[ startRowIndex ] || rows[ startRowIndex - 1 ] || table.$.parentNode );
219
+
220
+ for ( i = rowsToDelete.length ; i >= 0 ; i-- )
221
+ deleteRows( rowsToDelete[ i ] );
222
+
223
+ return cursorPosition;
224
+ }
225
+ else if ( selectionOrRow instanceof CKEDITOR.dom.element )
226
+ {
227
+ table = selectionOrRow.getAscendant( 'table' );
228
+
229
+ if ( table.$.rows.length == 1 )
230
+ table.remove();
231
+ else
232
+ selectionOrRow.remove();
233
+ }
234
+
235
+ return null;
236
+ }
237
+
238
+ function getCellColIndex( cell, isStart )
239
+ {
240
+ var row = cell.getParent(),
241
+ rowCells = row.$.cells;
242
+
243
+ var colIndex = 0;
244
+ for ( var i = 0; i < rowCells.length; i++ )
245
+ {
246
+ var mapCell = rowCells[ i ];
247
+ colIndex += isStart ? 1 : mapCell.colSpan;
248
+ if ( mapCell == cell.$ )
249
+ break;
250
+ }
251
+
252
+ return colIndex -1;
253
+ }
254
+
255
+ function getColumnsIndices( cells, isStart )
256
+ {
257
+ var retval = isStart ? Infinity : 0;
258
+ for ( var i = 0; i < cells.length; i++ )
259
+ {
260
+ var colIndex = getCellColIndex( cells[ i ], isStart );
261
+ if ( isStart ? colIndex < retval : colIndex > retval )
262
+ retval = colIndex;
263
+ }
264
+ return retval;
265
+ }
266
+
267
+ function insertColumn( selection, insertBefore )
268
+ {
269
+ var cells = getSelectedCells( selection ),
270
+ firstCell = cells[ 0 ],
271
+ table = firstCell.getAscendant( 'table' ),
272
+ startCol = getColumnsIndices( cells, 1 ),
273
+ lastCol = getColumnsIndices( cells ),
274
+ colIndex = insertBefore? startCol : lastCol;
275
+
276
+ var map = CKEDITOR.tools.buildTableMap( table ),
277
+ cloneCol = [],
278
+ nextCol = [],
279
+ height = map.length;
280
+
281
+ for ( var i = 0; i < height; i++ )
282
+ {
283
+ cloneCol.push( map[ i ][ colIndex ] );
284
+ var nextCell = insertBefore ? map[ i ][ colIndex - 1 ] : map[ i ][ colIndex + 1 ];
285
+ nextCell && nextCol.push( nextCell );
286
+ }
287
+
288
+ for ( i = 0; i < height; i++ )
289
+ {
290
+ var cell;
291
+ // Check whether there's a spanning column here, do not break it.
292
+ if ( cloneCol[ i ].colSpan > 1
293
+ && nextCol.length
294
+ && nextCol[ i ] == cloneCol[ i ] )
295
+ {
296
+ cell = cloneCol[ i ];
297
+ cell.colSpan += 1;
298
+ }
299
+ else
300
+ {
301
+ cell = new CKEDITOR.dom.element( cloneCol[ i ] ).clone();
302
+ cell.removeAttribute( 'colSpan' );
303
+ !CKEDITOR.env.ie && cell.appendBogus();
304
+ cell[ insertBefore? 'insertBefore' : 'insertAfter' ].call( cell, new CKEDITOR.dom.element ( cloneCol[ i ] ) );
305
+ cell = cell.$;
306
+ }
307
+
308
+ i += cell.rowSpan - 1;
309
+ }
310
+ }
311
+
312
+ function deleteColumns( selectionOrCell )
313
+ {
314
+ var cells = getSelectedCells( selectionOrCell ),
315
+ firstCell = cells[ 0 ],
316
+ lastCell = cells[ cells.length - 1 ],
317
+ table = firstCell.getAscendant( 'table' ),
318
+ map = CKEDITOR.tools.buildTableMap( table ),
319
+ startColIndex,
320
+ endColIndex,
321
+ rowsToDelete = [];
322
+
323
+ // Figure out selected cells' column indices.
324
+ for ( var i = 0, rows = map.length; i < rows; i++ )
325
+ {
326
+ for ( var j = 0, cols = map[ i ].length; j < cols; j++ )
327
+ {
328
+ if ( map[ i ][ j ] == firstCell.$ )
329
+ startColIndex = j;
330
+ if ( map[ i ][ j ] == lastCell.$ )
331
+ endColIndex = j;
332
+ }
333
+ }
334
+
335
+ // Delete cell or reduce cell spans by checking through the table map.
336
+ for ( i = startColIndex; i <= endColIndex; i++ )
337
+ {
338
+ for ( j = 0; j < map.length; j++ )
339
+ {
340
+ var mapRow = map[ j ],
341
+ row = new CKEDITOR.dom.element( table.$.rows[ j ] ),
342
+ cell = new CKEDITOR.dom.element( mapRow[ i ] );
343
+
344
+ if ( cell.$.colSpan == 1 )
345
+ cell.remove();
346
+ // Reduce the col spans.
347
+ else
348
+ cell.$.colSpan -= 1;
349
+
350
+ j += cell.$.rowSpan - 1;
351
+
352
+ if ( !row.$.cells.length )
353
+ rowsToDelete.push( row );
354
+ }
355
+ }
356
+
357
+ var firstRowCells = table.$.rows[ 0 ] && table.$.rows[ 0 ].cells;
358
+
359
+ // Where to put the cursor after columns been deleted?
360
+ // 1. Into next cell of the first row if any;
361
+ // 2. Into previous cell of the first row if any;
362
+ // 3. Into table's parent element;
363
+ var cursorPosition = new CKEDITOR.dom.element( firstRowCells[ startColIndex ] || ( startColIndex ? firstRowCells[ startColIndex - 1 ] : table.$.parentNode ) );
364
+
365
+ // Delete table rows only if all columns are gone (do not remove empty row).
366
+ if ( rowsToDelete.length == rows )
367
+ table.remove();
368
+
369
+ return cursorPosition;
370
+ }
371
+
372
+ function getFocusElementAfterDelCols( cells )
373
+ {
374
+ var cellIndexList = [],
375
+ table = cells[ 0 ] && cells[ 0 ].getAscendant( 'table' ),
376
+ i, length,
377
+ targetIndex, targetCell;
378
+
379
+ // get the cellIndex list of delete cells
380
+ for ( i = 0, length = cells.length; i < length; i++ )
381
+ cellIndexList.push( cells[i].$.cellIndex );
382
+
383
+ // get the focusable column index
384
+ cellIndexList.sort();
385
+ for ( i = 1, length = cellIndexList.length; i < length; i++ )
386
+ {
387
+ if ( cellIndexList[ i ] - cellIndexList[ i - 1 ] > 1 )
388
+ {
389
+ targetIndex = cellIndexList[ i - 1 ] + 1;
390
+ break;
391
+ }
392
+ }
393
+
394
+ if ( !targetIndex )
395
+ targetIndex = cellIndexList[ 0 ] > 0 ? ( cellIndexList[ 0 ] - 1 )
396
+ : ( cellIndexList[ cellIndexList.length - 1 ] + 1 );
397
+
398
+ // scan row by row to get the target cell
399
+ var rows = table.$.rows;
400
+ for ( i = 0, length = rows.length; i < length ; i++ )
401
+ {
402
+ targetCell = rows[ i ].cells[ targetIndex ];
403
+ if ( targetCell )
404
+ break;
405
+ }
406
+
407
+ return targetCell ? new CKEDITOR.dom.element( targetCell ) : table.getPrevious();
408
+ }
409
+
410
+ function insertCell( selection, insertBefore )
411
+ {
412
+ var startElement = selection.getStartElement();
413
+ var cell = startElement.getAscendant( 'td', 1 ) || startElement.getAscendant( 'th', 1 );
414
+
415
+ if ( !cell )
416
+ return;
417
+
418
+ // Create the new cell element to be added.
419
+ var newCell = cell.clone();
420
+ if ( !CKEDITOR.env.ie )
421
+ newCell.appendBogus();
422
+
423
+ if ( insertBefore )
424
+ newCell.insertBefore( cell );
425
+ else
426
+ newCell.insertAfter( cell );
427
+ }
428
+
429
+ function deleteCells( selectionOrCell )
430
+ {
431
+ if ( selectionOrCell instanceof CKEDITOR.dom.selection )
432
+ {
433
+ var cellsToDelete = getSelectedCells( selectionOrCell );
434
+ var table = cellsToDelete[ 0 ] && cellsToDelete[ 0 ].getAscendant( 'table' );
435
+ var cellToFocus = getFocusElementAfterDelCells( cellsToDelete );
436
+
437
+ for ( var i = cellsToDelete.length - 1 ; i >= 0 ; i-- )
438
+ deleteCells( cellsToDelete[ i ] );
439
+
440
+ if ( cellToFocus )
441
+ placeCursorInCell( cellToFocus, true );
442
+ else if ( table )
443
+ table.remove();
444
+ }
445
+ else if ( selectionOrCell instanceof CKEDITOR.dom.element )
446
+ {
447
+ var tr = selectionOrCell.getParent();
448
+ if ( tr.getChildCount() == 1 )
449
+ tr.remove();
450
+ else
451
+ selectionOrCell.remove();
452
+ }
453
+ }
454
+
455
+ // Remove filler at end and empty spaces around the cell content.
456
+ function trimCell( cell )
457
+ {
458
+ var bogus = cell.getBogus();
459
+ bogus && bogus.remove();
460
+ cell.trim();
461
+ }
462
+
463
+ function placeCursorInCell( cell, placeAtEnd )
464
+ {
465
+ var range = new CKEDITOR.dom.range( cell.getDocument() );
466
+ if ( !range[ 'moveToElementEdit' + ( placeAtEnd ? 'End' : 'Start' ) ]( cell ) )
467
+ {
468
+ range.selectNodeContents( cell );
469
+ range.collapse( placeAtEnd ? false : true );
470
+ }
471
+ range.select( true );
472
+ }
473
+
474
+ function cellInRow( tableMap, rowIndex, cell )
475
+ {
476
+ var oRow = tableMap[ rowIndex ];
477
+ if ( typeof cell == 'undefined' )
478
+ return oRow;
479
+
480
+ for ( var c = 0 ; oRow && c < oRow.length ; c++ )
481
+ {
482
+ if ( cell.is && oRow[c] == cell.$ )
483
+ return c;
484
+ else if ( c == cell )
485
+ return new CKEDITOR.dom.element( oRow[ c ] );
486
+ }
487
+ return cell.is ? -1 : null;
488
+ }
489
+
490
+ function cellInCol( tableMap, colIndex, cell )
491
+ {
492
+ var oCol = [];
493
+ for ( var r = 0; r < tableMap.length; r++ )
494
+ {
495
+ var row = tableMap[ r ];
496
+ if ( typeof cell == 'undefined' )
497
+ oCol.push( row[ colIndex ] );
498
+ else if ( cell.is && row[ colIndex ] == cell.$ )
499
+ return r;
500
+ else if ( r == cell )
501
+ return new CKEDITOR.dom.element( row[ colIndex ] );
502
+ }
503
+
504
+ return ( typeof cell == 'undefined' )? oCol : cell.is ? -1 : null;
505
+ }
506
+
507
+ function mergeCells( selection, mergeDirection, isDetect )
508
+ {
509
+ var cells = getSelectedCells( selection );
510
+
511
+ // Invalid merge request if:
512
+ // 1. In batch mode despite that less than two selected.
513
+ // 2. In solo mode while not exactly only one selected.
514
+ // 3. Cells distributed in different table groups (e.g. from both thead and tbody).
515
+ var commonAncestor;
516
+ if ( ( mergeDirection ? cells.length != 1 : cells.length < 2 )
517
+ || ( commonAncestor = selection.getCommonAncestor() )
518
+ && commonAncestor.type == CKEDITOR.NODE_ELEMENT
519
+ && commonAncestor.is( 'table' ) )
520
+ {
521
+ return false;
522
+ }
523
+
524
+ var cell,
525
+ firstCell = cells[ 0 ],
526
+ table = firstCell.getAscendant( 'table' ),
527
+ map = CKEDITOR.tools.buildTableMap( table ),
528
+ mapHeight = map.length,
529
+ mapWidth = map[ 0 ].length,
530
+ startRow = firstCell.getParent().$.rowIndex,
531
+ startColumn = cellInRow( map, startRow, firstCell );
532
+
533
+ if ( mergeDirection )
534
+ {
535
+ var targetCell;
536
+ try
537
+ {
538
+ var rowspan = parseInt( firstCell.getAttribute( 'rowspan' ), 10 ) || 1;
539
+ var colspan = parseInt( firstCell.getAttribute( 'colspan' ), 10 ) || 1;
540
+
541
+ targetCell =
542
+ map[ mergeDirection == 'up' ?
543
+ ( startRow - rowspan ):
544
+ mergeDirection == 'down' ? ( startRow + rowspan ) : startRow ] [
545
+ mergeDirection == 'left' ?
546
+ ( startColumn - colspan ):
547
+ mergeDirection == 'right' ? ( startColumn + colspan ) : startColumn ];
548
+
549
+ }
550
+ catch( er )
551
+ {
552
+ return false;
553
+ }
554
+
555
+ // 1. No cell could be merged.
556
+ // 2. Same cell actually.
557
+ if ( !targetCell || firstCell.$ == targetCell )
558
+ return false;
559
+
560
+ // Sort in map order regardless of the DOM sequence.
561
+ cells[ ( mergeDirection == 'up' || mergeDirection == 'left' ) ?
562
+ 'unshift' : 'push' ]( new CKEDITOR.dom.element( targetCell ) );
563
+ }
564
+
565
+ // Start from here are merging way ignorance (merge up/right, batch merge).
566
+ var doc = firstCell.getDocument(),
567
+ lastRowIndex = startRow,
568
+ totalRowSpan = 0,
569
+ totalColSpan = 0,
570
+ // Use a documentFragment as buffer when appending cell contents.
571
+ frag = !isDetect && new CKEDITOR.dom.documentFragment( doc ),
572
+ dimension = 0;
573
+
574
+ for ( var i = 0; i < cells.length; i++ )
575
+ {
576
+ cell = cells[ i ];
577
+
578
+ var tr = cell.getParent(),
579
+ cellFirstChild = cell.getFirst(),
580
+ colSpan = cell.$.colSpan,
581
+ rowSpan = cell.$.rowSpan,
582
+ rowIndex = tr.$.rowIndex,
583
+ colIndex = cellInRow( map, rowIndex, cell );
584
+
585
+ // Accumulated the actual places taken by all selected cells.
586
+ dimension += colSpan * rowSpan;
587
+ // Accumulated the maximum virtual spans from column and row.
588
+ totalColSpan = Math.max( totalColSpan, colIndex - startColumn + colSpan ) ;
589
+ totalRowSpan = Math.max( totalRowSpan, rowIndex - startRow + rowSpan );
590
+
591
+ if ( !isDetect )
592
+ {
593
+ // Trim all cell fillers and check to remove empty cells.
594
+ if ( trimCell( cell ), cell.getChildren().count() )
595
+ {
596
+ // Merge vertically cells as two separated paragraphs.
597
+ if ( rowIndex != lastRowIndex
598
+ && cellFirstChild
599
+ && !( cellFirstChild.isBlockBoundary
600
+ && cellFirstChild.isBlockBoundary( { br : 1 } ) ) )
601
+ {
602
+ var last = frag.getLast( CKEDITOR.dom.walker.whitespaces( true ) );
603
+ if ( last && !( last.is && last.is( 'br' ) ) )
604
+ frag.append( 'br' );
605
+ }
606
+
607
+ cell.moveChildren( frag );
608
+ }
609
+ i ? cell.remove() : cell.setHtml( '' );
610
+ }
611
+ lastRowIndex = rowIndex;
612
+ }
613
+
614
+ if ( !isDetect )
615
+ {
616
+ frag.moveChildren( firstCell );
617
+
618
+ if ( !CKEDITOR.env.ie )
619
+ firstCell.appendBogus();
620
+
621
+ if ( totalColSpan >= mapWidth )
622
+ firstCell.removeAttribute( 'rowSpan' );
623
+ else
624
+ firstCell.$.rowSpan = totalRowSpan;
625
+
626
+ if ( totalRowSpan >= mapHeight )
627
+ firstCell.removeAttribute( 'colSpan' );
628
+ else
629
+ firstCell.$.colSpan = totalColSpan;
630
+
631
+ // Swip empty <tr> left at the end of table due to the merging.
632
+ var trs = new CKEDITOR.dom.nodeList( table.$.rows ),
633
+ count = trs.count();
634
+
635
+ for ( i = count - 1; i >= 0; i-- )
636
+ {
637
+ var tailTr = trs.getItem( i );
638
+ if ( !tailTr.$.cells.length )
639
+ {
640
+ tailTr.remove();
641
+ count++;
642
+ continue;
643
+ }
644
+ }
645
+
646
+ return firstCell;
647
+ }
648
+ // Be able to merge cells only if actual dimension of selected
649
+ // cells equals to the caculated rectangle.
650
+ else
651
+ return ( totalRowSpan * totalColSpan ) == dimension;
652
+ }
653
+
654
+ function verticalSplitCell ( selection, isDetect )
655
+ {
656
+ var cells = getSelectedCells( selection );
657
+ if ( cells.length > 1 )
658
+ return false;
659
+ else if ( isDetect )
660
+ return true;
661
+
662
+ var cell = cells[ 0 ],
663
+ tr = cell.getParent(),
664
+ table = tr.getAscendant( 'table' ),
665
+ map = CKEDITOR.tools.buildTableMap( table ),
666
+ rowIndex = tr.$.rowIndex,
667
+ colIndex = cellInRow( map, rowIndex, cell ),
668
+ rowSpan = cell.$.rowSpan,
669
+ newCell,
670
+ newRowSpan,
671
+ newCellRowSpan,
672
+ newRowIndex;
673
+
674
+ if ( rowSpan > 1 )
675
+ {
676
+ newRowSpan = Math.ceil( rowSpan / 2 );
677
+ newCellRowSpan = Math.floor( rowSpan / 2 );
678
+ newRowIndex = rowIndex + newRowSpan;
679
+ var newCellTr = new CKEDITOR.dom.element( table.$.rows[ newRowIndex ] ),
680
+ newCellRow = cellInRow( map, newRowIndex ),
681
+ candidateCell;
682
+
683
+ newCell = cell.clone();
684
+
685
+ // Figure out where to insert the new cell by checking the vitual row.
686
+ for ( var c = 0; c < newCellRow.length; c++ )
687
+ {
688
+ candidateCell = newCellRow[ c ];
689
+ // Catch first cell actually following the column.
690
+ if ( candidateCell.parentNode == newCellTr.$
691
+ && c > colIndex )
692
+ {
693
+ newCell.insertBefore( new CKEDITOR.dom.element( candidateCell ) );
694
+ break;
695
+ }
696
+ else
697
+ candidateCell = null;
698
+ }
699
+
700
+ // The destination row is empty, append at will.
701
+ if ( !candidateCell )
702
+ newCellTr.append( newCell, true );
703
+ }
704
+ else
705
+ {
706
+ newCellRowSpan = newRowSpan = 1;
707
+
708
+ newCellTr = tr.clone();
709
+ newCellTr.insertAfter( tr );
710
+ newCellTr.append( newCell = cell.clone() );
711
+
712
+ var cellsInSameRow = cellInRow( map, rowIndex );
713
+ for ( var i = 0; i < cellsInSameRow.length; i++ )
714
+ cellsInSameRow[ i ].rowSpan++;
715
+ }
716
+
717
+ if ( !CKEDITOR.env.ie )
718
+ newCell.appendBogus();
719
+
720
+ cell.$.rowSpan = newRowSpan;
721
+ newCell.$.rowSpan = newCellRowSpan;
722
+ if ( newRowSpan == 1 )
723
+ cell.removeAttribute( 'rowSpan' );
724
+ if ( newCellRowSpan == 1 )
725
+ newCell.removeAttribute( 'rowSpan' );
726
+
727
+ return newCell;
728
+ }
729
+
730
+ function horizontalSplitCell( selection, isDetect )
731
+ {
732
+ var cells = getSelectedCells( selection );
733
+ if ( cells.length > 1 )
734
+ return false;
735
+ else if ( isDetect )
736
+ return true;
737
+
738
+ var cell = cells[ 0 ],
739
+ tr = cell.getParent(),
740
+ table = tr.getAscendant( 'table' ),
741
+ map = CKEDITOR.tools.buildTableMap( table ),
742
+ rowIndex = tr.$.rowIndex,
743
+ colIndex = cellInRow( map, rowIndex, cell ),
744
+ colSpan = cell.$.colSpan,
745
+ newCell,
746
+ newColSpan,
747
+ newCellColSpan;
748
+
749
+ if ( colSpan > 1 )
750
+ {
751
+ newColSpan = Math.ceil( colSpan / 2 );
752
+ newCellColSpan = Math.floor( colSpan / 2 );
753
+ }
754
+ else
755
+ {
756
+ newCellColSpan = newColSpan = 1;
757
+ var cellsInSameCol = cellInCol( map, colIndex );
758
+ for ( var i = 0; i < cellsInSameCol.length; i++ )
759
+ cellsInSameCol[ i ].colSpan++;
760
+ }
761
+ newCell = cell.clone();
762
+ newCell.insertAfter( cell );
763
+ if ( !CKEDITOR.env.ie )
764
+ newCell.appendBogus();
765
+
766
+ cell.$.colSpan = newColSpan;
767
+ newCell.$.colSpan = newCellColSpan;
768
+ if ( newColSpan == 1 )
769
+ cell.removeAttribute( 'colSpan' );
770
+ if ( newCellColSpan == 1 )
771
+ newCell.removeAttribute( 'colSpan' );
772
+
773
+ return newCell;
774
+ }
775
+ // Context menu on table caption incorrect (#3834)
776
+ var contextMenuTags = { thead : 1, tbody : 1, tfoot : 1, td : 1, tr : 1, th : 1 };
777
+
778
+ CKEDITOR.plugins.tabletools =
779
+ {
780
+ init : function( editor )
781
+ {
782
+ var lang = editor.lang.table;
783
+
784
+ editor.addCommand( 'cellProperties', new CKEDITOR.dialogCommand( 'cellProperties' ) );
785
+ CKEDITOR.dialog.add( 'cellProperties', this.path + 'dialogs/tableCell.js' );
786
+
787
+ editor.addCommand( 'tableDelete',
788
+ {
789
+ exec : function( editor )
790
+ {
791
+ var selection = editor.getSelection(),
792
+ startElement = selection && selection.getStartElement(),
793
+ table = startElement && startElement.getAscendant( 'table', 1 );
794
+
795
+ if ( !table )
796
+ return;
797
+
798
+ // If the table's parent has only one child remove it as well (unless it's the body or a table cell) (#5416, #6289)
799
+ var parent = table.getParent();
800
+ if ( parent.getChildCount() == 1 && !parent.is( 'body', 'td', 'th' ) )
801
+ table = parent;
802
+
803
+ var range = new CKEDITOR.dom.range( editor.document );
804
+ range.moveToPosition( table, CKEDITOR.POSITION_BEFORE_START );
805
+ table.remove();
806
+ range.select();
807
+ }
808
+ } );
809
+
810
+ editor.addCommand( 'rowDelete',
811
+ {
812
+ exec : function( editor )
813
+ {
814
+ var selection = editor.getSelection();
815
+ placeCursorInCell( deleteRows( selection ) );
816
+ }
817
+ } );
818
+
819
+ editor.addCommand( 'rowInsertBefore',
820
+ {
821
+ exec : function( editor )
822
+ {
823
+ var selection = editor.getSelection();
824
+ insertRow( selection, true );
825
+ }
826
+ } );
827
+
828
+ editor.addCommand( 'rowInsertAfter',
829
+ {
830
+ exec : function( editor )
831
+ {
832
+ var selection = editor.getSelection();
833
+ insertRow( selection );
834
+ }
835
+ } );
836
+
837
+ editor.addCommand( 'columnDelete',
838
+ {
839
+ exec : function( editor )
840
+ {
841
+ var selection = editor.getSelection();
842
+ var element = deleteColumns( selection );
843
+ element && placeCursorInCell( element, true );
844
+ }
845
+ } );
846
+
847
+ editor.addCommand( 'columnInsertBefore',
848
+ {
849
+ exec : function( editor )
850
+ {
851
+ var selection = editor.getSelection();
852
+ insertColumn( selection, true );
853
+ }
854
+ } );
855
+
856
+ editor.addCommand( 'columnInsertAfter',
857
+ {
858
+ exec : function( editor )
859
+ {
860
+ var selection = editor.getSelection();
861
+ insertColumn( selection );
862
+ }
863
+ } );
864
+
865
+ editor.addCommand( 'cellDelete',
866
+ {
867
+ exec : function( editor )
868
+ {
869
+ var selection = editor.getSelection();
870
+ deleteCells( selection );
871
+ }
872
+ } );
873
+
874
+ editor.addCommand( 'cellMerge',
875
+ {
876
+ exec : function( editor )
877
+ {
878
+ placeCursorInCell( mergeCells( editor.getSelection() ), true );
879
+ }
880
+ } );
881
+
882
+ editor.addCommand( 'cellMergeRight',
883
+ {
884
+ exec : function( editor )
885
+ {
886
+ placeCursorInCell( mergeCells( editor.getSelection(), 'right' ), true );
887
+ }
888
+ } );
889
+
890
+ editor.addCommand( 'cellMergeDown',
891
+ {
892
+ exec : function( editor )
893
+ {
894
+ placeCursorInCell( mergeCells( editor.getSelection(), 'down' ), true );
895
+ }
896
+ } );
897
+
898
+ editor.addCommand( 'cellVerticalSplit',
899
+ {
900
+ exec : function( editor )
901
+ {
902
+ placeCursorInCell( verticalSplitCell( editor.getSelection() ) );
903
+ }
904
+ } );
905
+
906
+ editor.addCommand( 'cellHorizontalSplit',
907
+ {
908
+ exec : function( editor )
909
+ {
910
+ placeCursorInCell( horizontalSplitCell( editor.getSelection() ) );
911
+ }
912
+ } );
913
+
914
+ editor.addCommand( 'cellInsertBefore',
915
+ {
916
+ exec : function( editor )
917
+ {
918
+ var selection = editor.getSelection();
919
+ insertCell( selection, true );
920
+ }
921
+ } );
922
+
923
+ editor.addCommand( 'cellInsertAfter',
924
+ {
925
+ exec : function( editor )
926
+ {
927
+ var selection = editor.getSelection();
928
+ insertCell( selection );
929
+ }
930
+ } );
931
+
932
+ // If the "menu" plugin is loaded, register the menu items.
933
+ if ( editor.addMenuItems )
934
+ {
935
+ editor.addMenuItems(
936
+ {
937
+ tablecell :
938
+ {
939
+ label : lang.cell.menu,
940
+ group : 'tablecell',
941
+ order : 1,
942
+ getItems : function()
943
+ {
944
+ var selection = editor.getSelection(),
945
+ cells = getSelectedCells( selection );
946
+ return {
947
+ tablecell_insertBefore : CKEDITOR.TRISTATE_OFF,
948
+ tablecell_insertAfter : CKEDITOR.TRISTATE_OFF,
949
+ tablecell_delete : CKEDITOR.TRISTATE_OFF,
950
+ tablecell_merge : mergeCells( selection, null, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
951
+ tablecell_merge_right : mergeCells( selection, 'right', true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
952
+ tablecell_merge_down : mergeCells( selection, 'down', true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
953
+ tablecell_split_vertical : verticalSplitCell( selection, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
954
+ tablecell_split_horizontal : horizontalSplitCell( selection, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
955
+ tablecell_properties : cells.length > 0 ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
956
+ };
957
+ }
958
+ },
959
+
960
+ tablecell_insertBefore :
961
+ {
962
+ label : lang.cell.insertBefore,
963
+ group : 'tablecell',
964
+ command : 'cellInsertBefore',
965
+ order : 5
966
+ },
967
+
968
+ tablecell_insertAfter :
969
+ {
970
+ label : lang.cell.insertAfter,
971
+ group : 'tablecell',
972
+ command : 'cellInsertAfter',
973
+ order : 10
974
+ },
975
+
976
+ tablecell_delete :
977
+ {
978
+ label : lang.cell.deleteCell,
979
+ group : 'tablecell',
980
+ command : 'cellDelete',
981
+ order : 15
982
+ },
983
+
984
+ tablecell_merge :
985
+ {
986
+ label : lang.cell.merge,
987
+ group : 'tablecell',
988
+ command : 'cellMerge',
989
+ order : 16
990
+ },
991
+
992
+ tablecell_merge_right :
993
+ {
994
+ label : lang.cell.mergeRight,
995
+ group : 'tablecell',
996
+ command : 'cellMergeRight',
997
+ order : 17
998
+ },
999
+
1000
+ tablecell_merge_down :
1001
+ {
1002
+ label : lang.cell.mergeDown,
1003
+ group : 'tablecell',
1004
+ command : 'cellMergeDown',
1005
+ order : 18
1006
+ },
1007
+
1008
+ tablecell_split_horizontal :
1009
+ {
1010
+ label : lang.cell.splitHorizontal,
1011
+ group : 'tablecell',
1012
+ command : 'cellHorizontalSplit',
1013
+ order : 19
1014
+ },
1015
+
1016
+ tablecell_split_vertical :
1017
+ {
1018
+ label : lang.cell.splitVertical,
1019
+ group : 'tablecell',
1020
+ command : 'cellVerticalSplit',
1021
+ order : 20
1022
+ },
1023
+
1024
+ tablecell_properties :
1025
+ {
1026
+ label : lang.cell.title,
1027
+ group : 'tablecellproperties',
1028
+ command : 'cellProperties',
1029
+ order : 21
1030
+ },
1031
+
1032
+ tablerow :
1033
+ {
1034
+ label : lang.row.menu,
1035
+ group : 'tablerow',
1036
+ order : 1,
1037
+ getItems : function()
1038
+ {
1039
+ return {
1040
+ tablerow_insertBefore : CKEDITOR.TRISTATE_OFF,
1041
+ tablerow_insertAfter : CKEDITOR.TRISTATE_OFF,
1042
+ tablerow_delete : CKEDITOR.TRISTATE_OFF
1043
+ };
1044
+ }
1045
+ },
1046
+
1047
+ tablerow_insertBefore :
1048
+ {
1049
+ label : lang.row.insertBefore,
1050
+ group : 'tablerow',
1051
+ command : 'rowInsertBefore',
1052
+ order : 5
1053
+ },
1054
+
1055
+ tablerow_insertAfter :
1056
+ {
1057
+ label : lang.row.insertAfter,
1058
+ group : 'tablerow',
1059
+ command : 'rowInsertAfter',
1060
+ order : 10
1061
+ },
1062
+
1063
+ tablerow_delete :
1064
+ {
1065
+ label : lang.row.deleteRow,
1066
+ group : 'tablerow',
1067
+ command : 'rowDelete',
1068
+ order : 15
1069
+ },
1070
+
1071
+ tablecolumn :
1072
+ {
1073
+ label : lang.column.menu,
1074
+ group : 'tablecolumn',
1075
+ order : 1,
1076
+ getItems : function()
1077
+ {
1078
+ return {
1079
+ tablecolumn_insertBefore : CKEDITOR.TRISTATE_OFF,
1080
+ tablecolumn_insertAfter : CKEDITOR.TRISTATE_OFF,
1081
+ tablecolumn_delete : CKEDITOR.TRISTATE_OFF
1082
+ };
1083
+ }
1084
+ },
1085
+
1086
+ tablecolumn_insertBefore :
1087
+ {
1088
+ label : lang.column.insertBefore,
1089
+ group : 'tablecolumn',
1090
+ command : 'columnInsertBefore',
1091
+ order : 5
1092
+ },
1093
+
1094
+ tablecolumn_insertAfter :
1095
+ {
1096
+ label : lang.column.insertAfter,
1097
+ group : 'tablecolumn',
1098
+ command : 'columnInsertAfter',
1099
+ order : 10
1100
+ },
1101
+
1102
+ tablecolumn_delete :
1103
+ {
1104
+ label : lang.column.deleteColumn,
1105
+ group : 'tablecolumn',
1106
+ command : 'columnDelete',
1107
+ order : 15
1108
+ }
1109
+ });
1110
+ }
1111
+
1112
+ // If the "contextmenu" plugin is laoded, register the listeners.
1113
+ if ( editor.contextMenu )
1114
+ {
1115
+ editor.contextMenu.addListener( function( element, selection )
1116
+ {
1117
+ if ( !element || element.isReadOnly() )
1118
+ return null;
1119
+
1120
+ while ( element )
1121
+ {
1122
+ if ( element.getName() in contextMenuTags )
1123
+ {
1124
+ return {
1125
+ tablecell : CKEDITOR.TRISTATE_OFF,
1126
+ tablerow : CKEDITOR.TRISTATE_OFF,
1127
+ tablecolumn : CKEDITOR.TRISTATE_OFF
1128
+ };
1129
+ }
1130
+ element = element.getParent();
1131
+ }
1132
+
1133
+ return null;
1134
+ } );
1135
+ }
1136
+ },
1137
+
1138
+ getSelectedCells : getSelectedCells
1139
+
1140
+ };
1141
+ CKEDITOR.plugins.add( 'tabletools', CKEDITOR.plugins.tabletools );
1142
+ })();
1143
+
1144
+ /**
1145
+ * Create a two-dimension array that reflects the actual layout of table cells,
1146
+ * with cell spans, with mappings to the original td elements.
1147
+ * @param table {CKEDITOR.dom.element}
1148
+ */
1149
+ CKEDITOR.tools.buildTableMap = function ( table )
1150
+ {
1151
+ var aRows = table.$.rows ;
1152
+
1153
+ // Row and Column counters.
1154
+ var r = -1 ;
1155
+
1156
+ var aMap = [];
1157
+
1158
+ for ( var i = 0 ; i < aRows.length ; i++ )
1159
+ {
1160
+ r++ ;
1161
+ !aMap[r] && ( aMap[r] = [] );
1162
+
1163
+ var c = -1 ;
1164
+
1165
+ for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
1166
+ {
1167
+ var oCell = aRows[i].cells[j] ;
1168
+
1169
+ c++ ;
1170
+ while ( aMap[r][c] )
1171
+ c++ ;
1172
+
1173
+ var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
1174
+ var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
1175
+
1176
+ for ( var rs = 0 ; rs < iRowSpan ; rs++ )
1177
+ {
1178
+ if ( !aMap[r + rs] )
1179
+ aMap[r + rs] = [];
1180
+
1181
+ for ( var cs = 0 ; cs < iColSpan ; cs++ )
1182
+ {
1183
+ aMap[r + rs][c + cs] = aRows[i].cells[j] ;
1184
+ }
1185
+ }
1186
+
1187
+ c += iColSpan - 1 ;
1188
+ }
1189
+ }
1190
+ return aMap ;
1191
+ };