esp-ckeditor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +32 -0
  3. data/Rakefile +28 -0
  4. data/app/assets/javascripts/esp-ckeditor/_source/core/_bootstrap.js +87 -0
  5. data/app/assets/javascripts/esp-ckeditor/_source/core/ckeditor.js +141 -0
  6. data/app/assets/javascripts/esp-ckeditor/_source/core/ckeditor_base.js +227 -0
  7. data/app/assets/javascripts/esp-ckeditor/_source/core/ckeditor_basic.js +238 -0
  8. data/app/assets/javascripts/esp-ckeditor/_source/core/command.js +209 -0
  9. data/app/assets/javascripts/esp-ckeditor/_source/core/commanddefinition.js +129 -0
  10. data/app/assets/javascripts/esp-ckeditor/_source/core/config.js +423 -0
  11. data/app/assets/javascripts/esp-ckeditor/_source/core/dataprocessor.js +65 -0
  12. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/comment.js +32 -0
  13. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/document.js +251 -0
  14. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/documentfragment.js +49 -0
  15. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/domobject.js +258 -0
  16. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/element.js +1691 -0
  17. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/elementpath.js +119 -0
  18. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/event.js +145 -0
  19. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/node.js +696 -0
  20. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/nodelist.js +26 -0
  21. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/range.js +2054 -0
  22. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/rangelist.js +213 -0
  23. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/text.js +128 -0
  24. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/walker.js +462 -0
  25. data/app/assets/javascripts/esp-ckeditor/_source/core/dom/window.js +96 -0
  26. data/app/assets/javascripts/esp-ckeditor/_source/core/dom.js +20 -0
  27. data/app/assets/javascripts/esp-ckeditor/_source/core/dtd.js +266 -0
  28. data/app/assets/javascripts/esp-ckeditor/_source/core/editor.js +1060 -0
  29. data/app/assets/javascripts/esp-ckeditor/_source/core/editor_basic.js +186 -0
  30. data/app/assets/javascripts/esp-ckeditor/_source/core/env.js +305 -0
  31. data/app/assets/javascripts/esp-ckeditor/_source/core/event.js +342 -0
  32. data/app/assets/javascripts/esp-ckeditor/_source/core/eventInfo.js +120 -0
  33. data/app/assets/javascripts/esp-ckeditor/_source/core/focusmanager.js +152 -0
  34. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/basicwriter.js +145 -0
  35. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/cdata.js +43 -0
  36. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/comment.js +60 -0
  37. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/element.js +308 -0
  38. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/filter.js +288 -0
  39. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/fragment.js +518 -0
  40. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/text.js +53 -0
  41. data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser.js +224 -0
  42. data/app/assets/javascripts/esp-ckeditor/_source/core/lang.js +157 -0
  43. data/app/assets/javascripts/esp-ckeditor/_source/core/loader.js +240 -0
  44. data/app/assets/javascripts/esp-ckeditor/_source/core/plugindefinition.js +83 -0
  45. data/app/assets/javascripts/esp-ckeditor/_source/core/plugins.js +103 -0
  46. data/app/assets/javascripts/esp-ckeditor/_source/core/resourcemanager.js +238 -0
  47. data/app/assets/javascripts/esp-ckeditor/_source/core/scriptloader.js +180 -0
  48. data/app/assets/javascripts/esp-ckeditor/_source/core/skins.js +184 -0
  49. data/app/assets/javascripts/esp-ckeditor/_source/core/themes.js +19 -0
  50. data/app/assets/javascripts/esp-ckeditor/_source/core/tools.js +763 -0
  51. data/app/assets/javascripts/esp-ckeditor/_source/core/ui.js +128 -0
  52. data/app/assets/javascripts/esp-ckeditor/_source/lang/_languages.js +27 -0
  53. data/app/assets/javascripts/esp-ckeditor/_source/lang/en.js +815 -0
  54. data/app/assets/javascripts/esp-ckeditor/_source/lang/ru.js +815 -0
  55. data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +222 -0
  56. data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -0
  57. data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -0
  58. data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/plugin.js +47 -0
  59. data/app/assets/javascripts/esp-ckeditor/_source/plugins/basicstyles/plugin.js +129 -0
  60. data/app/assets/javascripts/esp-ckeditor/_source/plugins/button/plugin.js +290 -0
  61. data/app/assets/javascripts/esp-ckeditor/_source/plugins/clipboard/dialogs/paste.js +223 -0
  62. data/app/assets/javascripts/esp-ckeditor/_source/plugins/clipboard/plugin.js +453 -0
  63. data/app/assets/javascripts/esp-ckeditor/_source/plugins/contextmenu/plugin.js +179 -0
  64. data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialog/dialogDefinition.js +1166 -0
  65. data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialog/plugin.js +3308 -0
  66. data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialogadvtab/plugin.js +208 -0
  67. data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialogui/plugin.js +1541 -0
  68. data/app/assets/javascripts/esp-ckeditor/_source/plugins/domiterator/plugin.js +361 -0
  69. data/app/assets/javascripts/esp-ckeditor/_source/plugins/editingblock/plugin.js +278 -0
  70. data/app/assets/javascripts/esp-ckeditor/_source/plugins/elementspath/plugin.js +218 -0
  71. data/app/assets/javascripts/esp-ckeditor/_source/plugins/enterkey/plugin.js +433 -0
  72. data/app/assets/javascripts/esp-ckeditor/_source/plugins/entities/plugin.js +250 -0
  73. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/dialogs/esp_attachment.js +234 -0
  74. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/images/esp_attachment.png +0 -0
  75. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/lang/en.js +22 -0
  76. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/lang/ru.js +22 -0
  77. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/lang/uk.js +22 -0
  78. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/plugin.js +23 -0
  79. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/dialogs/esp_audio.js +207 -0
  80. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/images/esp_audio.png +0 -0
  81. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/images/placeholder.png +0 -0
  82. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/lang/en.js +18 -0
  83. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/lang/ru.js +18 -0
  84. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/lang/uk.js +18 -0
  85. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/plugin.js +182 -0
  86. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_blockquote/dialogs/esp_blockquote.js +132 -0
  87. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_blockquote/plugin.js +235 -0
  88. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/dialogs/esp_image.js +1414 -0
  89. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/images/esp_image.png +0 -0
  90. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/lang/en.js +9 -0
  91. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/lang/ru.js +9 -0
  92. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/lang/uk.js +9 -0
  93. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/plugin.js +80 -0
  94. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/dialogs/esp_anchor.js +145 -0
  95. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/dialogs/esp_link.js +1396 -0
  96. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/anchor.png +0 -0
  97. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/esp_anchor.png +0 -0
  98. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/esp_link.png +0 -0
  99. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/esp_unlink.png +0 -0
  100. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/lang/en.js +8 -0
  101. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/lang/ru.js +8 -0
  102. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/lang/uk.js +8 -0
  103. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/plugin.js +379 -0
  104. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_address.png +0 -0
  105. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_blockquote.png +0 -0
  106. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_div.png +0 -0
  107. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h1.png +0 -0
  108. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h2.png +0 -0
  109. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h3.png +0 -0
  110. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h4.png +0 -0
  111. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h5.png +0 -0
  112. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h6.png +0 -0
  113. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_p.png +0 -0
  114. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_pre.png +0 -0
  115. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/esp_showblocks.png +0 -0
  116. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/plugin.js +163 -0
  117. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/dialogs/esp_video.js +277 -0
  118. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/images/esp_video.png +0 -0
  119. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/images/placeholder.png +0 -0
  120. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/lang/en.js +19 -0
  121. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/lang/ru.js +19 -0
  122. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/lang/uk.js +19 -0
  123. data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/plugin.js +182 -0
  124. data/app/assets/javascripts/esp-ckeditor/_source/plugins/fakeobjects/plugin.js +175 -0
  125. data/app/assets/javascripts/esp-ckeditor/_source/plugins/filebrowser/plugin.js +534 -0
  126. data/app/assets/javascripts/esp-ckeditor/_source/plugins/find/dialogs/find.js +915 -0
  127. data/app/assets/javascripts/esp-ckeditor/_source/plugins/find/plugin.js +47 -0
  128. data/app/assets/javascripts/esp-ckeditor/_source/plugins/floatpanel/plugin.js +428 -0
  129. data/app/assets/javascripts/esp-ckeditor/_source/plugins/format/plugin.js +197 -0
  130. data/app/assets/javascripts/esp-ckeditor/_source/plugins/htmldataprocessor/plugin.js +596 -0
  131. data/app/assets/javascripts/esp-ckeditor/_source/plugins/htmlwriter/plugin.js +319 -0
  132. data/app/assets/javascripts/esp-ckeditor/_source/plugins/image/dialogs/image.js +1407 -0
  133. data/app/assets/javascripts/esp-ckeditor/_source/plugins/image/plugin.js +81 -0
  134. data/app/assets/javascripts/esp-ckeditor/_source/plugins/indent/plugin.js +461 -0
  135. data/app/assets/javascripts/esp-ckeditor/_source/plugins/justify/plugin.js +253 -0
  136. data/app/assets/javascripts/esp-ckeditor/_source/plugins/keystrokes/plugin.js +225 -0
  137. data/app/assets/javascripts/esp-ckeditor/_source/plugins/list/plugin.js +774 -0
  138. data/app/assets/javascripts/esp-ckeditor/_source/plugins/listblock/plugin.js +266 -0
  139. data/app/assets/javascripts/esp-ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +225 -0
  140. data/app/assets/javascripts/esp-ckeditor/_source/plugins/liststyle/plugin.js +66 -0
  141. data/app/assets/javascripts/esp-ckeditor/_source/plugins/maximize/plugin.js +353 -0
  142. data/app/assets/javascripts/esp-ckeditor/_source/plugins/menu/plugin.js +541 -0
  143. data/app/assets/javascripts/esp-ckeditor/_source/plugins/panel/plugin.js +400 -0
  144. data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastefromword/filter/default.js +1367 -0
  145. data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastefromword/plugin.js +141 -0
  146. data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +67 -0
  147. data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastetext/plugin.js +98 -0
  148. data/app/assets/javascripts/esp-ckeditor/_source/plugins/popup/plugin.js +64 -0
  149. data/app/assets/javascripts/esp-ckeditor/_source/plugins/removeformat/plugin.js +185 -0
  150. data/app/assets/javascripts/esp-ckeditor/_source/plugins/resize/plugin.js +168 -0
  151. data/app/assets/javascripts/esp-ckeditor/_source/plugins/richcombo/plugin.js +381 -0
  152. data/app/assets/javascripts/esp-ckeditor/_source/plugins/selection/plugin.js +1729 -0
  153. data/app/assets/javascripts/esp-ckeditor/_source/plugins/showborders/plugin.js +207 -0
  154. data/app/assets/javascripts/esp-ckeditor/_source/plugins/sourcearea/plugin.js +209 -0
  155. data/app/assets/javascripts/esp-ckeditor/_source/plugins/styles/plugin.js +1700 -0
  156. data/app/assets/javascripts/esp-ckeditor/_source/plugins/styles/styles/default.js +88 -0
  157. data/app/assets/javascripts/esp-ckeditor/_source/plugins/stylescombo/plugin.js +218 -0
  158. data/app/assets/javascripts/esp-ckeditor/_source/plugins/tab/plugin.js +367 -0
  159. data/app/assets/javascripts/esp-ckeditor/_source/plugins/table/dialogs/table.js +623 -0
  160. data/app/assets/javascripts/esp-ckeditor/_source/plugins/table/plugin.js +78 -0
  161. data/app/assets/javascripts/esp-ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +525 -0
  162. data/app/assets/javascripts/esp-ckeditor/_source/plugins/tabletools/plugin.js +1194 -0
  163. data/app/assets/javascripts/esp-ckeditor/_source/plugins/toolbar/plugin.js +545 -0
  164. data/app/assets/javascripts/esp-ckeditor/_source/plugins/undo/plugin.js +578 -0
  165. data/app/assets/javascripts/esp-ckeditor/_source/plugins/wysiwygarea/plugin.js +1347 -0
  166. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/dialog.css +988 -0
  167. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/editor.css +25 -0
  168. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/elementspath.css +73 -0
  169. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/icons.css +367 -0
  170. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/icons.png +0 -0
  171. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/icons_rtl.png +0 -0
  172. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
  173. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
  174. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
  175. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/mini.gif +0 -0
  176. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/noimage.png +0 -0
  177. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/sprites.png +0 -0
  178. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
  179. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
  180. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/mainui.css +209 -0
  181. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/menu.css +232 -0
  182. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/panel.css +227 -0
  183. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/presets.css +49 -0
  184. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/reset.css +85 -0
  185. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/richcombo.css +287 -0
  186. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/skin.js +236 -0
  187. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/templates.css +88 -0
  188. data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/toolbar.css +412 -0
  189. data/app/assets/javascripts/esp-ckeditor/_source/themes/default/theme.js +407 -0
  190. data/app/assets/javascripts/esp-ckeditor/application.js +8 -0
  191. data/app/assets/javascripts/esp-ckeditor/ckeditor.js +137 -0
  192. data/app/assets/javascripts/esp-ckeditor/ckeditor.pack +194 -0
  193. data/app/assets/javascripts/esp-ckeditor/ckeditor_source.js +35 -0
  194. data/app/assets/javascripts/esp-ckeditor/ckpackager.jar +0 -0
  195. data/app/assets/javascripts/esp-ckeditor/ckpackager.txt +2 -0
  196. data/app/assets/javascripts/esp-ckeditor/config.js +147 -0
  197. data/app/assets/javascripts/esp-ckeditor/contents.css +38 -0
  198. data/app/assets/javascripts/esp-ckeditor/images/spacer.gif +0 -0
  199. data/app/assets/javascripts/esp-ckeditor/init_ckeditor.js +1 -0
  200. data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +1 -0
  201. data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/lang/en.js +1 -0
  202. data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/lang/he.js +1 -0
  203. data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/plugin.js +1 -0
  204. data/app/assets/javascripts/esp-ckeditor/plugins/basicstyles/plugin.js +1 -0
  205. data/app/assets/javascripts/esp-ckeditor/plugins/button/plugin.js +1 -0
  206. data/app/assets/javascripts/esp-ckeditor/plugins/clipboard/dialogs/paste.js +1 -0
  207. data/app/assets/javascripts/esp-ckeditor/plugins/clipboard/plugin.js +1 -0
  208. data/app/assets/javascripts/esp-ckeditor/plugins/contextmenu/plugin.js +1 -0
  209. data/app/assets/javascripts/esp-ckeditor/plugins/dialog/dialogDefinition.js +0 -0
  210. data/app/assets/javascripts/esp-ckeditor/plugins/dialog/plugin.js +1 -0
  211. data/app/assets/javascripts/esp-ckeditor/plugins/dialogadvtab/plugin.js +1 -0
  212. data/app/assets/javascripts/esp-ckeditor/plugins/dialogui/plugin.js +1 -0
  213. data/app/assets/javascripts/esp-ckeditor/plugins/domiterator/plugin.js +1 -0
  214. data/app/assets/javascripts/esp-ckeditor/plugins/editingblock/plugin.js +1 -0
  215. data/app/assets/javascripts/esp-ckeditor/plugins/elementspath/plugin.js +1 -0
  216. data/app/assets/javascripts/esp-ckeditor/plugins/enterkey/plugin.js +1 -0
  217. data/app/assets/javascripts/esp-ckeditor/plugins/entities/plugin.js +1 -0
  218. data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/dialogs/esp_attachment.js +1 -0
  219. data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/images/esp_attachment.png +0 -0
  220. data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/lang/en.js +1 -0
  221. data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/lang/ru.js +1 -0
  222. data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/lang/uk.js +1 -0
  223. data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/plugin.js +1 -0
  224. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/dialogs/esp_audio.js +1 -0
  225. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/images/esp_audio.png +0 -0
  226. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/images/placeholder.png +0 -0
  227. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/lang/en.js +1 -0
  228. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/lang/ru.js +1 -0
  229. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/lang/uk.js +1 -0
  230. data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/plugin.js +1 -0
  231. data/app/assets/javascripts/esp-ckeditor/plugins/esp_blockquote/dialogs/esp_blockquote.js +1 -0
  232. data/app/assets/javascripts/esp-ckeditor/plugins/esp_blockquote/plugin.js +1 -0
  233. data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/dialogs/esp_image.js +1 -0
  234. data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/images/esp_image.png +0 -0
  235. data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/lang/en.js +1 -0
  236. data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/lang/ru.js +1 -0
  237. data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/lang/uk.js +1 -0
  238. data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/plugin.js +1 -0
  239. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/dialogs/esp_anchor.js +1 -0
  240. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/dialogs/esp_link.js +1 -0
  241. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/anchor.png +0 -0
  242. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/esp_anchor.png +0 -0
  243. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/esp_link.png +0 -0
  244. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/esp_unlink.png +0 -0
  245. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/lang/en.js +1 -0
  246. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/lang/ru.js +1 -0
  247. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/lang/uk.js +1 -0
  248. data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/plugin.js +1 -0
  249. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_address.png +0 -0
  250. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_blockquote.png +0 -0
  251. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_div.png +0 -0
  252. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h1.png +0 -0
  253. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h2.png +0 -0
  254. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h3.png +0 -0
  255. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h4.png +0 -0
  256. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h5.png +0 -0
  257. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h6.png +0 -0
  258. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_p.png +0 -0
  259. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_pre.png +0 -0
  260. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/esp_showblocks.png +0 -0
  261. data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/plugin.js +1 -0
  262. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/dialogs/esp_video.js +1 -0
  263. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/images/esp_video.png +0 -0
  264. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/images/placeholder.png +0 -0
  265. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/lang/en.js +1 -0
  266. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/lang/ru.js +1 -0
  267. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/lang/uk.js +1 -0
  268. data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/plugin.js +1 -0
  269. data/app/assets/javascripts/esp-ckeditor/plugins/fakeobjects/plugin.js +1 -0
  270. data/app/assets/javascripts/esp-ckeditor/plugins/filebrowser/plugin.js +1 -0
  271. data/app/assets/javascripts/esp-ckeditor/plugins/find/dialogs/find.js +1 -0
  272. data/app/assets/javascripts/esp-ckeditor/plugins/find/plugin.js +1 -0
  273. data/app/assets/javascripts/esp-ckeditor/plugins/floatpanel/plugin.js +1 -0
  274. data/app/assets/javascripts/esp-ckeditor/plugins/format/plugin.js +1 -0
  275. data/app/assets/javascripts/esp-ckeditor/plugins/htmldataprocessor/plugin.js +1 -0
  276. data/app/assets/javascripts/esp-ckeditor/plugins/htmlwriter/plugin.js +1 -0
  277. data/app/assets/javascripts/esp-ckeditor/plugins/image/dialogs/image.js +1 -0
  278. data/app/assets/javascripts/esp-ckeditor/plugins/image/plugin.js +1 -0
  279. data/app/assets/javascripts/esp-ckeditor/plugins/indent/plugin.js +1 -0
  280. data/app/assets/javascripts/esp-ckeditor/plugins/justify/plugin.js +1 -0
  281. data/app/assets/javascripts/esp-ckeditor/plugins/keystrokes/plugin.js +1 -0
  282. data/app/assets/javascripts/esp-ckeditor/plugins/list/plugin.js +1 -0
  283. data/app/assets/javascripts/esp-ckeditor/plugins/listblock/plugin.js +1 -0
  284. data/app/assets/javascripts/esp-ckeditor/plugins/liststyle/dialogs/liststyle.js +1 -0
  285. data/app/assets/javascripts/esp-ckeditor/plugins/liststyle/plugin.js +1 -0
  286. data/app/assets/javascripts/esp-ckeditor/plugins/maximize/plugin.js +1 -0
  287. data/app/assets/javascripts/esp-ckeditor/plugins/menu/plugin.js +1 -0
  288. data/app/assets/javascripts/esp-ckeditor/plugins/panel/plugin.js +1 -0
  289. data/app/assets/javascripts/esp-ckeditor/plugins/pastefromword/filter/default.js +1 -0
  290. data/app/assets/javascripts/esp-ckeditor/plugins/pastefromword/plugin.js +1 -0
  291. data/app/assets/javascripts/esp-ckeditor/plugins/pastetext/dialogs/pastetext.js +1 -0
  292. data/app/assets/javascripts/esp-ckeditor/plugins/pastetext/plugin.js +1 -0
  293. data/app/assets/javascripts/esp-ckeditor/plugins/popup/plugin.js +1 -0
  294. data/app/assets/javascripts/esp-ckeditor/plugins/removeformat/plugin.js +1 -0
  295. data/app/assets/javascripts/esp-ckeditor/plugins/resize/plugin.js +1 -0
  296. data/app/assets/javascripts/esp-ckeditor/plugins/richcombo/plugin.js +1 -0
  297. data/app/assets/javascripts/esp-ckeditor/plugins/selection/plugin.js +1 -0
  298. data/app/assets/javascripts/esp-ckeditor/plugins/showborders/plugin.js +1 -0
  299. data/app/assets/javascripts/esp-ckeditor/plugins/sourcearea/plugin.js +1 -0
  300. data/app/assets/javascripts/esp-ckeditor/plugins/styles/plugin.js +1 -0
  301. data/app/assets/javascripts/esp-ckeditor/plugins/styles/styles/default.js +1 -0
  302. data/app/assets/javascripts/esp-ckeditor/plugins/stylescombo/plugin.js +1 -0
  303. data/app/assets/javascripts/esp-ckeditor/plugins/tab/plugin.js +1 -0
  304. data/app/assets/javascripts/esp-ckeditor/plugins/table/dialogs/table.js +1 -0
  305. data/app/assets/javascripts/esp-ckeditor/plugins/table/plugin.js +1 -0
  306. data/app/assets/javascripts/esp-ckeditor/plugins/tabletools/dialogs/tableCell.js +1 -0
  307. data/app/assets/javascripts/esp-ckeditor/plugins/tabletools/plugin.js +1 -0
  308. data/app/assets/javascripts/esp-ckeditor/plugins/toolbar/plugin.js +1 -0
  309. data/app/assets/javascripts/esp-ckeditor/plugins/undo/plugin.js +1 -0
  310. data/app/assets/javascripts/esp-ckeditor/plugins/wysiwygarea/plugin.js +1 -0
  311. data/app/assets/javascripts/esp-ckeditor/skins/kama/dialog.css +988 -0
  312. data/app/assets/javascripts/esp-ckeditor/skins/kama/editor.css +25 -0
  313. data/app/assets/javascripts/esp-ckeditor/skins/kama/elementspath.css +73 -0
  314. data/app/assets/javascripts/esp-ckeditor/skins/kama/icons.css +367 -0
  315. data/app/assets/javascripts/esp-ckeditor/skins/kama/icons.png +0 -0
  316. data/app/assets/javascripts/esp-ckeditor/skins/kama/icons_rtl.png +0 -0
  317. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  318. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/dialog_sides.png +0 -0
  319. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  320. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/mini.gif +0 -0
  321. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/noimage.png +0 -0
  322. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/sprites.png +0 -0
  323. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  324. data/app/assets/javascripts/esp-ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  325. data/app/assets/javascripts/esp-ckeditor/skins/kama/mainui.css +209 -0
  326. data/app/assets/javascripts/esp-ckeditor/skins/kama/menu.css +232 -0
  327. data/app/assets/javascripts/esp-ckeditor/skins/kama/panel.css +227 -0
  328. data/app/assets/javascripts/esp-ckeditor/skins/kama/presets.css +49 -0
  329. data/app/assets/javascripts/esp-ckeditor/skins/kama/reset.css +85 -0
  330. data/app/assets/javascripts/esp-ckeditor/skins/kama/richcombo.css +287 -0
  331. data/app/assets/javascripts/esp-ckeditor/skins/kama/skin.js +236 -0
  332. data/app/assets/javascripts/esp-ckeditor/skins/kama/templates.css +88 -0
  333. data/app/assets/javascripts/esp-ckeditor/skins/kama/toolbar.css +412 -0
  334. data/app/inputs/ckeditor_input.rb +42 -0
  335. data/config/routes.rb +2 -0
  336. data/lib/esp-ckeditor/engine.rb +9 -0
  337. data/lib/esp-ckeditor/version.rb +3 -0
  338. data/lib/esp-ckeditor.rb +17 -0
  339. data/lib/tasks/esp-ckeditor_tasks.rake +4 -0
  340. metadata +434 -0
@@ -0,0 +1,88 @@
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
+ CKEDITOR.stylesSet.add( 'default',
7
+ [
8
+ /* Block Styles */
9
+
10
+ // These styles are already available in the "Format" combo, so they are
11
+ // not needed here by default. You may enable them to avoid placing the
12
+ // "Format" combo in the toolbar, maintaining the same features.
13
+ /*
14
+ { name : 'Paragraph' , element : 'p' },
15
+ { name : 'Heading 1' , element : 'h1' },
16
+ { name : 'Heading 2' , element : 'h2' },
17
+ { name : 'Heading 3' , element : 'h3' },
18
+ { name : 'Heading 4' , element : 'h4' },
19
+ { name : 'Heading 5' , element : 'h5' },
20
+ { name : 'Heading 6' , element : 'h6' },
21
+ { name : 'Preformatted Text', element : 'pre' },
22
+ { name : 'Address' , element : 'address' },
23
+ */
24
+
25
+ { name : 'Blue Title' , element : 'h3', styles : { 'color' : 'Blue' } },
26
+ { name : 'Red Title' , element : 'h3', styles : { 'color' : 'Red' } },
27
+
28
+ /* Inline Styles */
29
+
30
+ // These are core styles available as toolbar buttons. You may opt enabling
31
+ // some of them in the Styles combo, removing them from the toolbar.
32
+ /*
33
+ { name : 'Strong' , element : 'strong', overrides : 'b' },
34
+ { name : 'Emphasis' , element : 'em' , overrides : 'i' },
35
+ { name : 'Underline' , element : 'u' },
36
+ { name : 'Strikethrough' , element : 'strike' },
37
+ { name : 'Subscript' , element : 'sub' },
38
+ { name : 'Superscript' , element : 'sup' },
39
+ */
40
+
41
+ { name : 'Marker: Yellow' , element : 'span', styles : { 'background-color' : 'Yellow' } },
42
+ { name : 'Marker: Green' , element : 'span', styles : { 'background-color' : 'Lime' } },
43
+
44
+ { name : 'Big' , element : 'big' },
45
+ { name : 'Small' , element : 'small' },
46
+ { name : 'Typewriter' , element : 'tt' },
47
+
48
+ { name : 'Computer Code' , element : 'code' },
49
+ { name : 'Keyboard Phrase' , element : 'kbd' },
50
+ { name : 'Sample Text' , element : 'samp' },
51
+ { name : 'Variable' , element : 'var' },
52
+
53
+ { name : 'Deleted Text' , element : 'del' },
54
+ { name : 'Inserted Text' , element : 'ins' },
55
+
56
+ { name : 'Cited Work' , element : 'cite' },
57
+ { name : 'Inline Quotation' , element : 'q' },
58
+
59
+ { name : 'Language: RTL' , element : 'span', attributes : { 'dir' : 'rtl' } },
60
+ { name : 'Language: LTR' , element : 'span', attributes : { 'dir' : 'ltr' } },
61
+
62
+ /* Object Styles */
63
+
64
+ {
65
+ name : 'Image on Left',
66
+ element : 'img',
67
+ attributes :
68
+ {
69
+ 'style' : 'padding: 5px; margin-right: 5px',
70
+ 'border' : '2',
71
+ 'align' : 'left'
72
+ }
73
+ },
74
+
75
+ {
76
+ name : 'Image on Right',
77
+ element : 'img',
78
+ attributes :
79
+ {
80
+ 'style' : 'padding: 5px; margin-left: 5px',
81
+ 'border' : '2',
82
+ 'align' : 'right'
83
+ }
84
+ },
85
+
86
+ { name : 'Borderless Table', element : 'table', styles: { 'border-style': 'hidden', 'background-color' : '#E6E6FA' } },
87
+ { name : 'Square Bulleted List', element : 'ul', styles : { 'list-style-type' : 'square' } }
88
+ ]);
@@ -0,0 +1,218 @@
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
+ CKEDITOR.plugins.add( 'stylescombo',
9
+ {
10
+ requires : [ 'richcombo', 'styles' ],
11
+
12
+ init : function( editor )
13
+ {
14
+ var config = editor.config,
15
+ lang = editor.lang.stylesCombo,
16
+ styles = {},
17
+ stylesList = [],
18
+ combo;
19
+
20
+ function loadStylesSet( callback )
21
+ {
22
+ editor.getStylesSet( function( stylesDefinitions )
23
+ {
24
+ if ( !stylesList.length )
25
+ {
26
+ var style,
27
+ styleName;
28
+
29
+ // Put all styles into an Array.
30
+ for ( var i = 0, count = stylesDefinitions.length ; i < count ; i++ )
31
+ {
32
+ var styleDefinition = stylesDefinitions[ i ];
33
+
34
+ styleName = styleDefinition.name;
35
+
36
+ style = styles[ styleName ] = new CKEDITOR.style( styleDefinition );
37
+ style._name = styleName;
38
+ style._.enterMode = config.enterMode;
39
+
40
+ stylesList.push( style );
41
+ }
42
+
43
+ // Sorts the Array, so the styles get grouped by type.
44
+ stylesList.sort( sortStyles );
45
+ }
46
+
47
+ callback && callback();
48
+ });
49
+ }
50
+
51
+ editor.ui.addRichCombo( 'Styles',
52
+ {
53
+ label : lang.label,
54
+ title : lang.panelTitle,
55
+ className : 'cke_styles',
56
+
57
+ panel :
58
+ {
59
+ css : editor.skin.editor.css.concat( config.contentsCss ),
60
+ multiSelect : true,
61
+ attributes : { 'aria-label' : lang.panelTitle }
62
+ },
63
+
64
+ init : function()
65
+ {
66
+ combo = this;
67
+
68
+ loadStylesSet( function()
69
+ {
70
+ var style,
71
+ styleName,
72
+ lastType,
73
+ type,
74
+ i,
75
+ count;
76
+
77
+ // Loop over the Array, adding all items to the
78
+ // combo.
79
+ for ( i = 0, count = stylesList.length ; i < count ; i++ )
80
+ {
81
+ style = stylesList[ i ];
82
+ styleName = style._name;
83
+ type = style.type;
84
+
85
+ if ( type != lastType )
86
+ {
87
+ combo.startGroup( lang[ 'panelTitle' + String( type ) ] );
88
+ lastType = type;
89
+ }
90
+
91
+ combo.add(
92
+ styleName,
93
+ style.type == CKEDITOR.STYLE_OBJECT ? styleName : style.buildPreview(),
94
+ styleName );
95
+ }
96
+
97
+ combo.commit();
98
+
99
+ });
100
+ },
101
+
102
+ onClick : function( value )
103
+ {
104
+ editor.focus();
105
+ editor.fire( 'saveSnapshot' );
106
+
107
+ var style = styles[ value ],
108
+ selection = editor.getSelection(),
109
+ elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() );
110
+
111
+ style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document );
112
+
113
+ editor.fire( 'saveSnapshot' );
114
+ },
115
+
116
+ onRender : function()
117
+ {
118
+ editor.on( 'selectionChange', function( ev )
119
+ {
120
+ var currentValue = this.getValue(),
121
+ elementPath = ev.data.path,
122
+ elements = elementPath.elements;
123
+
124
+ // For each element into the elements path.
125
+ for ( var i = 0, count = elements.length, element ; i < count ; i++ )
126
+ {
127
+ element = elements[i];
128
+
129
+ // Check if the element is removable by any of
130
+ // the styles.
131
+ for ( var value in styles )
132
+ {
133
+ if ( styles[ value ].checkElementRemovable( element, true ) )
134
+ {
135
+ if ( value != currentValue )
136
+ this.setValue( value );
137
+ return;
138
+ }
139
+ }
140
+ }
141
+
142
+ // If no styles match, just empty it.
143
+ this.setValue( '' );
144
+ },
145
+ this);
146
+ },
147
+
148
+ onOpen : function()
149
+ {
150
+ if ( CKEDITOR.env.ie || CKEDITOR.env.webkit )
151
+ editor.focus();
152
+
153
+ var selection = editor.getSelection(),
154
+ element = selection.getSelectedElement(),
155
+ elementPath = new CKEDITOR.dom.elementPath( element || selection.getStartElement() ),
156
+ counter = [ 0, 0, 0, 0 ];
157
+
158
+ this.showAll();
159
+ this.unmarkAll();
160
+ for ( var name in styles )
161
+ {
162
+ var style = styles[ name ],
163
+ type = style.type;
164
+
165
+ if ( style.checkActive( elementPath ) )
166
+ this.mark( name );
167
+ else if ( type == CKEDITOR.STYLE_OBJECT && !style.checkApplicable( elementPath ) )
168
+ {
169
+ this.hideItem( name );
170
+ counter[ type ]--;
171
+ }
172
+
173
+ counter[ type ]++;
174
+ }
175
+
176
+ if ( !counter[ CKEDITOR.STYLE_BLOCK ] )
177
+ this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_BLOCK ) ] );
178
+
179
+ if ( !counter[ CKEDITOR.STYLE_INLINE ] )
180
+ this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_INLINE ) ] );
181
+
182
+ if ( !counter[ CKEDITOR.STYLE_OBJECT ] )
183
+ this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_OBJECT ) ] );
184
+ },
185
+
186
+ // Force a reload of the data
187
+ reset: function()
188
+ {
189
+ if ( combo )
190
+ {
191
+ delete combo._.panel;
192
+ delete combo._.list;
193
+ combo._.committed = 0;
194
+ combo._.items = {};
195
+ combo._.state = CKEDITOR.TRISTATE_OFF;
196
+ }
197
+ styles = {};
198
+ stylesList = [];
199
+ loadStylesSet();
200
+ }
201
+ });
202
+
203
+ editor.on( 'instanceReady', function() { loadStylesSet(); } );
204
+ }
205
+ });
206
+
207
+ function sortStyles( styleA, styleB )
208
+ {
209
+ var typeA = styleA.type,
210
+ typeB = styleB.type;
211
+
212
+ return typeA == typeB ? 0 :
213
+ typeA == CKEDITOR.STYLE_OBJECT ? -1 :
214
+ typeB == CKEDITOR.STYLE_OBJECT ? 1 :
215
+ typeB == CKEDITOR.STYLE_BLOCK ? 1 :
216
+ -1;
217
+ }
218
+ })();
@@ -0,0 +1,367 @@
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 meta =
9
+ {
10
+ editorFocus : false,
11
+ modes : { wysiwyg:1, source:1 }
12
+ };
13
+
14
+ var blurCommand =
15
+ {
16
+ exec : function( editor )
17
+ {
18
+ editor.container.focusNext( true, editor.tabIndex );
19
+ }
20
+ };
21
+
22
+ var blurBackCommand =
23
+ {
24
+ exec : function( editor )
25
+ {
26
+ editor.container.focusPrevious( true, editor.tabIndex );
27
+ }
28
+ };
29
+
30
+ function selectNextCellCommand( backward )
31
+ {
32
+ return {
33
+ editorFocus : false,
34
+ canUndo : false,
35
+ modes : { wysiwyg : 1 },
36
+ exec : function( editor )
37
+ {
38
+ if ( editor.focusManager.hasFocus )
39
+ {
40
+ var sel = editor.getSelection(),
41
+ ancestor = sel.getCommonAncestor(),
42
+ cell;
43
+
44
+ if ( ( cell = ( ancestor.getAscendant( 'td', true ) || ancestor.getAscendant( 'th', true ) ) ) )
45
+ {
46
+ var resultRange = new CKEDITOR.dom.range( editor.document ),
47
+ next = CKEDITOR.tools.tryThese( function()
48
+ {
49
+ var row = cell.getParent(),
50
+ next = row.$.cells[ cell.$.cellIndex + ( backward ? - 1 : 1 ) ];
51
+
52
+ // Invalid any empty value.
53
+ next.parentNode.parentNode;
54
+ return next;
55
+ },
56
+ function()
57
+ {
58
+ var row = cell.getParent(),
59
+ table = row.getAscendant( 'table' ),
60
+ nextRow = table.$.rows[ row.$.rowIndex + ( backward ? - 1 : 1 ) ];
61
+
62
+ return nextRow.cells[ backward? nextRow.cells.length -1 : 0 ];
63
+ });
64
+
65
+ // Clone one more row at the end of table and select the first newly established cell.
66
+ if ( ! ( next || backward ) )
67
+ {
68
+ var table = cell.getAscendant( 'table' ).$,
69
+ cells = cell.getParent().$.cells;
70
+
71
+ var newRow = new CKEDITOR.dom.element( table.insertRow( -1 ), editor.document );
72
+
73
+ for ( var i = 0, count = cells.length ; i < count; i++ )
74
+ {
75
+ var newCell = newRow.append( new CKEDITOR.dom.element(
76
+ cells[ i ], editor.document ).clone( false, false ) );
77
+ !CKEDITOR.env.ie && newCell.appendBogus();
78
+ }
79
+
80
+ resultRange.moveToElementEditStart( newRow );
81
+ }
82
+ else if ( next )
83
+ {
84
+ next = new CKEDITOR.dom.element( next );
85
+ resultRange.moveToElementEditStart( next );
86
+ // Avoid selecting empty block makes the cursor blind.
87
+ if ( !( resultRange.checkStartOfBlock() && resultRange.checkEndOfBlock() ) )
88
+ resultRange.selectNodeContents( next );
89
+ }
90
+ else
91
+ return true;
92
+
93
+ resultRange.select( true );
94
+ return true;
95
+ }
96
+ }
97
+ return false;
98
+ }
99
+ };
100
+ }
101
+
102
+ CKEDITOR.plugins.add( 'tab',
103
+ {
104
+ requires : [ 'keystrokes' ],
105
+
106
+ init : function( editor )
107
+ {
108
+ var tabTools = editor.config.enableTabKeyTools !== false,
109
+ tabSpaces = editor.config.tabSpaces || 0,
110
+ tabText = '';
111
+
112
+ while ( tabSpaces-- )
113
+ tabText += '\xa0';
114
+
115
+ if ( tabText )
116
+ {
117
+ editor.on( 'key', function( ev )
118
+ {
119
+ if ( ev.data.keyCode == 9 ) // TAB
120
+ {
121
+ editor.insertHtml( tabText );
122
+ ev.cancel();
123
+ }
124
+ });
125
+ }
126
+
127
+ if ( tabTools )
128
+ {
129
+ editor.on( 'key', function( ev )
130
+ {
131
+ if ( ev.data.keyCode == 9 && editor.execCommand( 'selectNextCell' ) || // TAB
132
+ ev.data.keyCode == ( CKEDITOR.SHIFT + 9 ) && editor.execCommand( 'selectPreviousCell' ) ) // SHIFT+TAB
133
+ ev.cancel();
134
+ });
135
+ }
136
+
137
+ if ( CKEDITOR.env.webkit || CKEDITOR.env.gecko )
138
+ {
139
+ editor.on( 'key', function( ev )
140
+ {
141
+ var keyCode = ev.data.keyCode;
142
+
143
+ if ( keyCode == 9 && !tabText ) // TAB
144
+ {
145
+ ev.cancel();
146
+ editor.execCommand( 'blur' );
147
+ }
148
+
149
+ if ( keyCode == ( CKEDITOR.SHIFT + 9 ) ) // SHIFT+TAB
150
+ {
151
+ editor.execCommand( 'blurBack' );
152
+ ev.cancel();
153
+ }
154
+ });
155
+ }
156
+
157
+ editor.addCommand( 'blur', CKEDITOR.tools.extend( blurCommand, meta ) );
158
+ editor.addCommand( 'blurBack', CKEDITOR.tools.extend( blurBackCommand, meta ) );
159
+ editor.addCommand( 'selectNextCell', selectNextCellCommand() );
160
+ editor.addCommand( 'selectPreviousCell', selectNextCellCommand( true ) );
161
+ }
162
+ });
163
+ })();
164
+
165
+ /**
166
+ * Moves the UI focus to the element following this element in the tabindex
167
+ * order.
168
+ * @example
169
+ * var element = CKEDITOR.document.getById( 'example' );
170
+ * element.focusNext();
171
+ */
172
+ CKEDITOR.dom.element.prototype.focusNext = function( ignoreChildren, indexToUse )
173
+ {
174
+ var $ = this.$,
175
+ curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ),
176
+ passedCurrent, enteredCurrent,
177
+ elected, electedTabIndex,
178
+ element, elementTabIndex;
179
+
180
+ if ( curTabIndex <= 0 )
181
+ {
182
+ // If this element has tabindex <= 0 then we must simply look for any
183
+ // element following it containing tabindex=0.
184
+
185
+ element = this.getNextSourceNode( ignoreChildren, CKEDITOR.NODE_ELEMENT );
186
+
187
+ while ( element )
188
+ {
189
+ if ( element.isVisible() && element.getTabIndex() === 0 )
190
+ {
191
+ elected = element;
192
+ break;
193
+ }
194
+
195
+ element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT );
196
+ }
197
+ }
198
+ else
199
+ {
200
+ // If this element has tabindex > 0 then we must look for:
201
+ // 1. An element following this element with the same tabindex.
202
+ // 2. The first element in source other with the lowest tabindex
203
+ // that is higher than this element tabindex.
204
+ // 3. The first element with tabindex=0.
205
+
206
+ element = this.getDocument().getBody().getFirst();
207
+
208
+ while ( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )
209
+ {
210
+ if ( !passedCurrent )
211
+ {
212
+ if ( !enteredCurrent && element.equals( this ) )
213
+ {
214
+ enteredCurrent = true;
215
+
216
+ // Ignore this element, if required.
217
+ if ( ignoreChildren )
218
+ {
219
+ if ( !( element = element.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) )
220
+ break;
221
+ passedCurrent = 1;
222
+ }
223
+ }
224
+ else if ( enteredCurrent && !this.contains( element ) )
225
+ passedCurrent = 1;
226
+ }
227
+
228
+ if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 )
229
+ continue;
230
+
231
+ if ( passedCurrent && elementTabIndex == curTabIndex )
232
+ {
233
+ elected = element;
234
+ break;
235
+ }
236
+
237
+ if ( elementTabIndex > curTabIndex && ( !elected || !electedTabIndex || elementTabIndex < electedTabIndex ) )
238
+ {
239
+ elected = element;
240
+ electedTabIndex = elementTabIndex;
241
+ }
242
+ else if ( !elected && elementTabIndex === 0 )
243
+ {
244
+ elected = element;
245
+ electedTabIndex = elementTabIndex;
246
+ }
247
+ }
248
+ }
249
+
250
+ if ( elected )
251
+ elected.focus();
252
+ };
253
+
254
+ /**
255
+ * Moves the UI focus to the element before this element in the tabindex order.
256
+ * @example
257
+ * var element = CKEDITOR.document.getById( 'example' );
258
+ * element.focusPrevious();
259
+ */
260
+ CKEDITOR.dom.element.prototype.focusPrevious = function( ignoreChildren, indexToUse )
261
+ {
262
+ var $ = this.$,
263
+ curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ),
264
+ passedCurrent, enteredCurrent,
265
+ elected,
266
+ electedTabIndex = 0,
267
+ elementTabIndex;
268
+
269
+ var element = this.getDocument().getBody().getLast();
270
+
271
+ while ( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )
272
+ {
273
+ if ( !passedCurrent )
274
+ {
275
+ if ( !enteredCurrent && element.equals( this ) )
276
+ {
277
+ enteredCurrent = true;
278
+
279
+ // Ignore this element, if required.
280
+ if ( ignoreChildren )
281
+ {
282
+ if ( !( element = element.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) )
283
+ break;
284
+ passedCurrent = 1;
285
+ }
286
+ }
287
+ else if ( enteredCurrent && !this.contains( element ) )
288
+ passedCurrent = 1;
289
+ }
290
+
291
+ if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 )
292
+ continue;
293
+
294
+ if ( curTabIndex <= 0 )
295
+ {
296
+ // If this element has tabindex <= 0 then we must look for:
297
+ // 1. An element before this one containing tabindex=0.
298
+ // 2. The last element with the highest tabindex.
299
+
300
+ if ( passedCurrent && elementTabIndex === 0 )
301
+ {
302
+ elected = element;
303
+ break;
304
+ }
305
+
306
+ if ( elementTabIndex > electedTabIndex )
307
+ {
308
+ elected = element;
309
+ electedTabIndex = elementTabIndex;
310
+ }
311
+ }
312
+ else
313
+ {
314
+ // If this element has tabindex > 0 we must look for:
315
+ // 1. An element preceeding this one, with the same tabindex.
316
+ // 2. The last element in source other with the highest tabindex
317
+ // that is lower than this element tabindex.
318
+
319
+ if ( passedCurrent && elementTabIndex == curTabIndex )
320
+ {
321
+ elected = element;
322
+ break;
323
+ }
324
+
325
+ if ( elementTabIndex < curTabIndex && ( !elected || elementTabIndex > electedTabIndex ) )
326
+ {
327
+ elected = element;
328
+ electedTabIndex = elementTabIndex;
329
+ }
330
+ }
331
+ }
332
+
333
+ if ( elected )
334
+ elected.focus();
335
+ };
336
+
337
+ /**
338
+ * Intructs the editor to add a number of spaces (&amp;nbsp;) to the text when
339
+ * hitting the TAB key. If set to zero, the TAB key will be used to move the
340
+ * cursor focus to the next element in the page, out of the editor focus.
341
+ * @name CKEDITOR.config.tabSpaces
342
+ * @type Number
343
+ * @default 0
344
+ * @example
345
+ * config.tabSpaces = 4;
346
+ */
347
+
348
+ /**
349
+ * Allow context-sensitive tab key behaviors, including the following scenarios:
350
+ * <h5>When selection is anchored inside <b>table cells</b>:</h5>
351
+ * <ul>
352
+ * <li>If TAB is pressed, select the contents of the "next" cell. If in the last cell in the table, add a new row to it and focus its first cell.</li>
353
+ * <li>If SHIFT+TAB is pressed, select the contents of the "previous" cell. Do nothing when it's in the first cell.</li>
354
+ * </ul>
355
+ * @name CKEDITOR.config.enableTabKeyTools
356
+ * @type Boolean
357
+ * @default true
358
+ * @example
359
+ * config.enableTabKeyTools = false;
360
+ */
361
+
362
+ // If the TAB key is not supposed to be enabled for navigation, the following
363
+ // settings could be used alternatively:
364
+ // config.keystrokes.push(
365
+ // [ CKEDITOR.ALT + 38 /*Arrow Up*/, 'selectPreviousCell' ],
366
+ // [ CKEDITOR.ALT + 40 /*Arrow Down*/, 'selectNextCell' ]
367
+ // );