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,119 @@
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
+ // Elements that may be considered the "Block boundary" in an element path.
9
+ var pathBlockElements = { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1, legend:1,caption:1 };
10
+
11
+ // Elements that may be considered the "Block limit" in an element path.
12
+ var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,form:1,fieldset:1 };
13
+
14
+ // Check if an element contains any block element.
15
+ var checkHasBlock = function( element )
16
+ {
17
+ var childNodes = element.getChildren();
18
+
19
+ for ( var i = 0, count = childNodes.count() ; i < count ; i++ )
20
+ {
21
+ var child = childNodes.getItem( i );
22
+
23
+ if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] )
24
+ return true;
25
+ }
26
+
27
+ return false;
28
+ };
29
+
30
+ /**
31
+ * @class
32
+ */
33
+ CKEDITOR.dom.elementPath = function( lastNode )
34
+ {
35
+ var block = null;
36
+ var blockLimit = null;
37
+ var elements = [];
38
+
39
+ var e = lastNode;
40
+
41
+ while ( e )
42
+ {
43
+ if ( e.type == CKEDITOR.NODE_ELEMENT )
44
+ {
45
+ if ( !this.lastElement )
46
+ this.lastElement = e;
47
+
48
+ var elementName = e.getName();
49
+ if ( CKEDITOR.env.ie && e.$.scopeName != 'HTML' )
50
+ elementName = e.$.scopeName.toLowerCase() + ':' + elementName;
51
+
52
+ if ( !blockLimit )
53
+ {
54
+ if ( !block && pathBlockElements[ elementName ] )
55
+ block = e;
56
+
57
+ if ( pathBlockLimitElements[ elementName ] )
58
+ {
59
+ // DIV is considered the Block, if no block is available (#525)
60
+ // and if it doesn't contain other blocks.
61
+ if ( !block && elementName == 'div' && !checkHasBlock( e ) )
62
+ block = e;
63
+ else
64
+ blockLimit = e;
65
+ }
66
+ }
67
+
68
+ elements.push( e );
69
+
70
+ if ( elementName == 'body' )
71
+ break;
72
+ }
73
+ e = e.getParent();
74
+ }
75
+
76
+ this.block = block;
77
+ this.blockLimit = blockLimit;
78
+ this.elements = elements;
79
+ };
80
+ })();
81
+
82
+ CKEDITOR.dom.elementPath.prototype =
83
+ {
84
+ /**
85
+ * Compares this element path with another one.
86
+ * @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be
87
+ * compared with this one.
88
+ * @returns {Boolean} "true" if the paths are equal, containing the same
89
+ * number of elements and the same elements in the same order.
90
+ */
91
+ compare : function( otherPath )
92
+ {
93
+ var thisElements = this.elements;
94
+ var otherElements = otherPath && otherPath.elements;
95
+
96
+ if ( !otherElements || thisElements.length != otherElements.length )
97
+ return false;
98
+
99
+ for ( var i = 0 ; i < thisElements.length ; i++ )
100
+ {
101
+ if ( !thisElements[ i ].equals( otherElements[ i ] ) )
102
+ return false;
103
+ }
104
+
105
+ return true;
106
+ },
107
+
108
+ contains : function( tagNames )
109
+ {
110
+ var elements = this.elements;
111
+ for ( var i = 0 ; i < elements.length ; i++ )
112
+ {
113
+ if ( elements[ i ].getName() in tagNames )
114
+ return elements[ i ];
115
+ }
116
+
117
+ return null;
118
+ }
119
+ };
@@ -0,0 +1,145 @@
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
+ /**
7
+ * @fileOverview Defines the {@link CKEDITOR.dom.event} class, which
8
+ * represents the a native DOM event object.
9
+ */
10
+
11
+ /**
12
+ * Represents a native DOM event object.
13
+ * @constructor
14
+ * @param {Object} domEvent A native DOM event object.
15
+ * @example
16
+ */
17
+ CKEDITOR.dom.event = function( domEvent )
18
+ {
19
+ /**
20
+ * The native DOM event object represented by this class instance.
21
+ * @type Object
22
+ * @example
23
+ */
24
+ this.$ = domEvent;
25
+ };
26
+
27
+ CKEDITOR.dom.event.prototype =
28
+ {
29
+ /**
30
+ * Gets the key code associated to the event.
31
+ * @returns {Number} The key code.
32
+ * @example
33
+ * alert( event.getKey() ); "65" is "a" has been pressed
34
+ */
35
+ getKey : function()
36
+ {
37
+ return this.$.keyCode || this.$.which;
38
+ },
39
+
40
+ /**
41
+ * Gets a number represeting the combination of the keys pressed during the
42
+ * event. It is the sum with the current key code and the {@link CKEDITOR.CTRL},
43
+ * {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT} constants.
44
+ * @returns {Number} The number representing the keys combination.
45
+ * @example
46
+ * alert( event.getKeystroke() == 65 ); // "a" key
47
+ * alert( event.getKeystroke() == CKEDITOR.CTRL + 65 ); // CTRL + "a" key
48
+ * alert( event.getKeystroke() == CKEDITOR.CTRL + CKEDITOR.SHIFT + 65 ); // CTRL + SHIFT + "a" key
49
+ */
50
+ getKeystroke : function()
51
+ {
52
+ var keystroke = this.getKey();
53
+
54
+ if ( this.$.ctrlKey || this.$.metaKey )
55
+ keystroke += CKEDITOR.CTRL;
56
+
57
+ if ( this.$.shiftKey )
58
+ keystroke += CKEDITOR.SHIFT;
59
+
60
+ if ( this.$.altKey )
61
+ keystroke += CKEDITOR.ALT;
62
+
63
+ return keystroke;
64
+ },
65
+
66
+ /**
67
+ * Prevents the original behavior of the event to happen. It can optionally
68
+ * stop propagating the event in the event chain.
69
+ * @param {Boolean} [stopPropagation] Stop propagating this event in the
70
+ * event chain.
71
+ * @example
72
+ * var element = CKEDITOR.document.getById( 'myElement' );
73
+ * element.on( 'click', function( ev )
74
+ * {
75
+ * // The DOM event object is passed by the "data" property.
76
+ * var domEvent = ev.data;
77
+ * // Prevent the click to chave any effect in the element.
78
+ * domEvent.preventDefault();
79
+ * });
80
+ */
81
+ preventDefault : function( stopPropagation )
82
+ {
83
+ var $ = this.$;
84
+ if ( $.preventDefault )
85
+ $.preventDefault();
86
+ else
87
+ $.returnValue = false;
88
+
89
+ if ( stopPropagation )
90
+ this.stopPropagation();
91
+ },
92
+
93
+ stopPropagation : function()
94
+ {
95
+ var $ = this.$;
96
+ if ( $.stopPropagation )
97
+ $.stopPropagation();
98
+ else
99
+ $.cancelBubble = true;
100
+ },
101
+
102
+ /**
103
+ * Returns the DOM node where the event was targeted to.
104
+ * @returns {CKEDITOR.dom.node} The target DOM node.
105
+ * @example
106
+ * var element = CKEDITOR.document.getById( 'myElement' );
107
+ * element.on( 'click', function( ev )
108
+ * {
109
+ * // The DOM event object is passed by the "data" property.
110
+ * var domEvent = ev.data;
111
+ * // Add a CSS class to the event target.
112
+ * domEvent.getTarget().addClass( 'clicked' );
113
+ * });
114
+ */
115
+
116
+ getTarget : function()
117
+ {
118
+ var rawNode = this.$.target || this.$.srcElement;
119
+ return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;
120
+ }
121
+ };
122
+
123
+ // For the followind constants, we need to go over the Unicode boundaries
124
+ // (0x10FFFF) to avoid collision.
125
+
126
+ /**
127
+ * CTRL key (0x110000).
128
+ * @constant
129
+ * @example
130
+ */
131
+ CKEDITOR.CTRL = 0x110000;
132
+
133
+ /**
134
+ * SHIFT key (0x220000).
135
+ * @constant
136
+ * @example
137
+ */
138
+ CKEDITOR.SHIFT = 0x220000;
139
+
140
+ /**
141
+ * ALT key (0x440000).
142
+ * @constant
143
+ * @example
144
+ */
145
+ CKEDITOR.ALT = 0x440000;
@@ -0,0 +1,696 @@
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
+ /**
7
+ * @fileOverview Defines the {@link CKEDITOR.dom.node} class which is the base
8
+ * class for classes that represent DOM nodes.
9
+ */
10
+
11
+ /**
12
+ * Base class for classes representing DOM nodes. This constructor may return
13
+ * an instance of a class that inherits from this class, like
14
+ * {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}.
15
+ * @augments CKEDITOR.dom.domObject
16
+ * @param {Object} domNode A native DOM node.
17
+ * @constructor
18
+ * @see CKEDITOR.dom.element
19
+ * @see CKEDITOR.dom.text
20
+ * @example
21
+ */
22
+ CKEDITOR.dom.node = function( domNode )
23
+ {
24
+ if ( domNode )
25
+ {
26
+ switch ( domNode.nodeType )
27
+ {
28
+ // Safari don't consider document as element node type. (#3389)
29
+ case CKEDITOR.NODE_DOCUMENT :
30
+ return new CKEDITOR.dom.document( domNode );
31
+
32
+ case CKEDITOR.NODE_ELEMENT :
33
+ return new CKEDITOR.dom.element( domNode );
34
+
35
+ case CKEDITOR.NODE_TEXT :
36
+ return new CKEDITOR.dom.text( domNode );
37
+ }
38
+
39
+ // Call the base constructor.
40
+ CKEDITOR.dom.domObject.call( this, domNode );
41
+ }
42
+
43
+ return this;
44
+ };
45
+
46
+ CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject();
47
+
48
+ /**
49
+ * Element node type.
50
+ * @constant
51
+ * @example
52
+ */
53
+ CKEDITOR.NODE_ELEMENT = 1;
54
+
55
+ /**
56
+ * Document node type.
57
+ * @constant
58
+ * @example
59
+ */
60
+ CKEDITOR.NODE_DOCUMENT = 9;
61
+
62
+ /**
63
+ * Text node type.
64
+ * @constant
65
+ * @example
66
+ */
67
+ CKEDITOR.NODE_TEXT = 3;
68
+
69
+ /**
70
+ * Comment node type.
71
+ * @constant
72
+ * @example
73
+ */
74
+ CKEDITOR.NODE_COMMENT = 8;
75
+
76
+ CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11;
77
+
78
+ CKEDITOR.POSITION_IDENTICAL = 0;
79
+ CKEDITOR.POSITION_DISCONNECTED = 1;
80
+ CKEDITOR.POSITION_FOLLOWING = 2;
81
+ CKEDITOR.POSITION_PRECEDING = 4;
82
+ CKEDITOR.POSITION_IS_CONTAINED = 8;
83
+ CKEDITOR.POSITION_CONTAINS = 16;
84
+
85
+ CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype,
86
+ /** @lends CKEDITOR.dom.node.prototype */
87
+ {
88
+ /**
89
+ * Makes this node a child of another element.
90
+ * @param {CKEDITOR.dom.element} element The target element to which
91
+ * this node will be appended.
92
+ * @returns {CKEDITOR.dom.element} The target element.
93
+ * @example
94
+ * var p = new CKEDITOR.dom.element( 'p' );
95
+ * var strong = new CKEDITOR.dom.element( 'strong' );
96
+ * strong.appendTo( p );
97
+ *
98
+ * // result: "&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;"
99
+ */
100
+ appendTo : function( element, toStart )
101
+ {
102
+ element.append( this, toStart );
103
+ return element;
104
+ },
105
+
106
+ clone : function( includeChildren, cloneId )
107
+ {
108
+ var $clone = this.$.cloneNode( includeChildren );
109
+
110
+ var removeIds = function( node )
111
+ {
112
+ if ( node.nodeType != CKEDITOR.NODE_ELEMENT )
113
+ return;
114
+
115
+ if ( !cloneId )
116
+ node.removeAttribute( 'id', false );
117
+ node.removeAttribute( 'data-cke-expando', false );
118
+
119
+ if ( includeChildren )
120
+ {
121
+ var childs = node.childNodes;
122
+ for ( var i=0; i < childs.length; i++ )
123
+ removeIds( childs[ i ] );
124
+ }
125
+ };
126
+
127
+ // The "id" attribute should never be cloned to avoid duplication.
128
+ removeIds( $clone );
129
+
130
+ return new CKEDITOR.dom.node( $clone );
131
+ },
132
+
133
+ hasPrevious : function()
134
+ {
135
+ return !!this.$.previousSibling;
136
+ },
137
+
138
+ hasNext : function()
139
+ {
140
+ return !!this.$.nextSibling;
141
+ },
142
+
143
+ /**
144
+ * Inserts this element after a node.
145
+ * @param {CKEDITOR.dom.node} node The node that will precede this element.
146
+ * @returns {CKEDITOR.dom.node} The node preceding this one after
147
+ * insertion.
148
+ * @example
149
+ * var em = new CKEDITOR.dom.element( 'em' );
150
+ * var strong = new CKEDITOR.dom.element( 'strong' );
151
+ * strong.insertAfter( em );
152
+ *
153
+ * // result: "&lt;em&gt;&lt;/em&gt;&lt;strong&gt;&lt;/strong&gt;"
154
+ */
155
+ insertAfter : function( node )
156
+ {
157
+ node.$.parentNode.insertBefore( this.$, node.$.nextSibling );
158
+ return node;
159
+ },
160
+
161
+ /**
162
+ * Inserts this element before a node.
163
+ * @param {CKEDITOR.dom.node} node The node that will succeed this element.
164
+ * @returns {CKEDITOR.dom.node} The node being inserted.
165
+ * @example
166
+ * var em = new CKEDITOR.dom.element( 'em' );
167
+ * var strong = new CKEDITOR.dom.element( 'strong' );
168
+ * strong.insertBefore( em );
169
+ *
170
+ * // result: "&lt;strong&gt;&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;"
171
+ */
172
+ insertBefore : function( node )
173
+ {
174
+ node.$.parentNode.insertBefore( this.$, node.$ );
175
+ return node;
176
+ },
177
+
178
+ insertBeforeMe : function( node )
179
+ {
180
+ this.$.parentNode.insertBefore( node.$, this.$ );
181
+ return node;
182
+ },
183
+
184
+ /**
185
+ * Retrieves a uniquely identifiable tree address for this node.
186
+ * The tree address returned is an array of integers, with each integer
187
+ * indicating a child index of a DOM node, starting from
188
+ * <code>document.documentElement</code>.
189
+ *
190
+ * For example, assuming <code>&lt;body&gt;</code> is the second child
191
+ * of <code>&lt;html&gt;</code> (<code>&lt;head&gt;</code> being the first),
192
+ * and we would like to address the third child under the
193
+ * fourth child of <code>&lt;body&gt;</code>, the tree address returned would be:
194
+ * [1, 3, 2]
195
+ *
196
+ * The tree address cannot be used for finding back the DOM tree node once
197
+ * the DOM tree structure has been modified.
198
+ */
199
+ getAddress : function( normalized )
200
+ {
201
+ var address = [];
202
+ var $documentElement = this.getDocument().$.documentElement;
203
+ var node = this.$;
204
+
205
+ while ( node && node != $documentElement )
206
+ {
207
+ var parentNode = node.parentNode;
208
+
209
+ if ( parentNode )
210
+ {
211
+ // Get the node index. For performance, call getIndex
212
+ // directly, instead of creating a new node object.
213
+ address.unshift( this.getIndex.call( { $ : node }, normalized ) );
214
+ }
215
+
216
+ node = parentNode;
217
+ }
218
+
219
+ return address;
220
+ },
221
+
222
+ /**
223
+ * Gets the document containing this element.
224
+ * @returns {CKEDITOR.dom.document} The document.
225
+ * @example
226
+ * var element = CKEDITOR.document.getById( 'example' );
227
+ * alert( <strong>element.getDocument().equals( CKEDITOR.document )</strong> ); // "true"
228
+ */
229
+ getDocument : function()
230
+ {
231
+ return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );
232
+ },
233
+
234
+ getIndex : function( normalized )
235
+ {
236
+ // Attention: getAddress depends on this.$
237
+
238
+ var current = this.$,
239
+ index = 0;
240
+
241
+ while ( ( current = current.previousSibling ) )
242
+ {
243
+ // When normalizing, do not count it if this is an
244
+ // empty text node or if it's a text node following another one.
245
+ if ( normalized && current.nodeType == 3 &&
246
+ ( !current.nodeValue.length ||
247
+ ( current.previousSibling && current.previousSibling.nodeType == 3 ) ) )
248
+ {
249
+ continue;
250
+ }
251
+
252
+ index++;
253
+ }
254
+
255
+ return index;
256
+ },
257
+
258
+ getNextSourceNode : function( startFromSibling, nodeType, guard )
259
+ {
260
+ // If "guard" is a node, transform it in a function.
261
+ if ( guard && !guard.call )
262
+ {
263
+ var guardNode = guard;
264
+ guard = function( node )
265
+ {
266
+ return !node.equals( guardNode );
267
+ };
268
+ }
269
+
270
+ var node = ( !startFromSibling && this.getFirst && this.getFirst() ),
271
+ parent;
272
+
273
+ // Guarding when we're skipping the current element( no children or 'startFromSibling' ).
274
+ // send the 'moving out' signal even we don't actually dive into.
275
+ if ( !node )
276
+ {
277
+ if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )
278
+ return null;
279
+ node = this.getNext();
280
+ }
281
+
282
+ while ( !node && ( parent = ( parent || this ).getParent() ) )
283
+ {
284
+ // The guard check sends the "true" paramenter to indicate that
285
+ // we are moving "out" of the element.
286
+ if ( guard && guard( parent, true ) === false )
287
+ return null;
288
+
289
+ node = parent.getNext();
290
+ }
291
+
292
+ if ( !node )
293
+ return null;
294
+
295
+ if ( guard && guard( node ) === false )
296
+ return null;
297
+
298
+ if ( nodeType && nodeType != node.type )
299
+ return node.getNextSourceNode( false, nodeType, guard );
300
+
301
+ return node;
302
+ },
303
+
304
+ getPreviousSourceNode : function( startFromSibling, nodeType, guard )
305
+ {
306
+ if ( guard && !guard.call )
307
+ {
308
+ var guardNode = guard;
309
+ guard = function( node )
310
+ {
311
+ return !node.equals( guardNode );
312
+ };
313
+ }
314
+
315
+ var node = ( !startFromSibling && this.getLast && this.getLast() ),
316
+ parent;
317
+
318
+ // Guarding when we're skipping the current element( no children or 'startFromSibling' ).
319
+ // send the 'moving out' signal even we don't actually dive into.
320
+ if ( !node )
321
+ {
322
+ if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )
323
+ return null;
324
+ node = this.getPrevious();
325
+ }
326
+
327
+ while ( !node && ( parent = ( parent || this ).getParent() ) )
328
+ {
329
+ // The guard check sends the "true" paramenter to indicate that
330
+ // we are moving "out" of the element.
331
+ if ( guard && guard( parent, true ) === false )
332
+ return null;
333
+
334
+ node = parent.getPrevious();
335
+ }
336
+
337
+ if ( !node )
338
+ return null;
339
+
340
+ if ( guard && guard( node ) === false )
341
+ return null;
342
+
343
+ if ( nodeType && node.type != nodeType )
344
+ return node.getPreviousSourceNode( false, nodeType, guard );
345
+
346
+ return node;
347
+ },
348
+
349
+ getPrevious : function( evaluator )
350
+ {
351
+ var previous = this.$, retval;
352
+ do
353
+ {
354
+ previous = previous.previousSibling;
355
+ retval = previous && new CKEDITOR.dom.node( previous );
356
+ }
357
+ while ( retval && evaluator && !evaluator( retval ) )
358
+ return retval;
359
+ },
360
+
361
+ /**
362
+ * Gets the node that follows this element in its parent's child list.
363
+ * @param {Function} evaluator Filtering the result node.
364
+ * @returns {CKEDITOR.dom.node} The next node or null if not available.
365
+ * @example
366
+ * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;&lt;b&gt;Example&lt;/b&gt; &lt;i&gt;next&lt;/i&gt;&lt;/div&gt;' );
367
+ * var first = <strong>element.getFirst().getNext()</strong>;
368
+ * alert( first.getName() ); // "i"
369
+ */
370
+ getNext : function( evaluator )
371
+ {
372
+ var next = this.$, retval;
373
+ do
374
+ {
375
+ next = next.nextSibling;
376
+ retval = next && new CKEDITOR.dom.node( next );
377
+ }
378
+ while ( retval && evaluator && !evaluator( retval ) )
379
+ return retval;
380
+ },
381
+
382
+ /**
383
+ * Gets the parent element for this node.
384
+ * @returns {CKEDITOR.dom.element} The parent element.
385
+ * @example
386
+ * var node = editor.document.getBody().getFirst();
387
+ * var parent = node.<strong>getParent()</strong>;
388
+ * alert( node.getName() ); // "body"
389
+ */
390
+ getParent : function()
391
+ {
392
+ var parent = this.$.parentNode;
393
+ return ( parent && parent.nodeType == 1 ) ? new CKEDITOR.dom.node( parent ) : null;
394
+ },
395
+
396
+ getParents : function( closerFirst )
397
+ {
398
+ var node = this;
399
+ var parents = [];
400
+
401
+ do
402
+ {
403
+ parents[ closerFirst ? 'push' : 'unshift' ]( node );
404
+ }
405
+ while ( ( node = node.getParent() ) )
406
+
407
+ return parents;
408
+ },
409
+
410
+ getCommonAncestor : function( node )
411
+ {
412
+ if ( node.equals( this ) )
413
+ return this;
414
+
415
+ if ( node.contains && node.contains( this ) )
416
+ return node;
417
+
418
+ var start = this.contains ? this : this.getParent();
419
+
420
+ do
421
+ {
422
+ if ( start.contains( node ) )
423
+ return start;
424
+ }
425
+ while ( ( start = start.getParent() ) );
426
+
427
+ return null;
428
+ },
429
+
430
+ getPosition : function( otherNode )
431
+ {
432
+ var $ = this.$;
433
+ var $other = otherNode.$;
434
+
435
+ if ( $.compareDocumentPosition )
436
+ return $.compareDocumentPosition( $other );
437
+
438
+ // IE and Safari have no support for compareDocumentPosition.
439
+
440
+ if ( $ == $other )
441
+ return CKEDITOR.POSITION_IDENTICAL;
442
+
443
+ // Only element nodes support contains and sourceIndex.
444
+ if ( this.type == CKEDITOR.NODE_ELEMENT && otherNode.type == CKEDITOR.NODE_ELEMENT )
445
+ {
446
+ if ( $.contains )
447
+ {
448
+ if ( $.contains( $other ) )
449
+ return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING;
450
+
451
+ if ( $other.contains( $ ) )
452
+ return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;
453
+ }
454
+
455
+ if ( 'sourceIndex' in $ )
456
+ {
457
+ return ( $.sourceIndex < 0 || $other.sourceIndex < 0 ) ? CKEDITOR.POSITION_DISCONNECTED :
458
+ ( $.sourceIndex < $other.sourceIndex ) ? CKEDITOR.POSITION_PRECEDING :
459
+ CKEDITOR.POSITION_FOLLOWING;
460
+ }
461
+ }
462
+
463
+ // For nodes that don't support compareDocumentPosition, contains
464
+ // or sourceIndex, their "address" is compared.
465
+
466
+ var addressOfThis = this.getAddress(),
467
+ addressOfOther = otherNode.getAddress(),
468
+ minLevel = Math.min( addressOfThis.length, addressOfOther.length );
469
+
470
+ // Determinate preceed/follow relationship.
471
+ for ( var i = 0 ; i <= minLevel - 1 ; i++ )
472
+ {
473
+ if ( addressOfThis[ i ] != addressOfOther[ i ] )
474
+ {
475
+ if ( i < minLevel )
476
+ {
477
+ return addressOfThis[ i ] < addressOfOther[ i ] ?
478
+ CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING;
479
+ }
480
+ break;
481
+ }
482
+ }
483
+
484
+ // Determinate contains/contained relationship.
485
+ return ( addressOfThis.length < addressOfOther.length ) ?
486
+ CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING :
487
+ CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;
488
+ },
489
+
490
+ /**
491
+ * Gets the closest ancestor node of this node, specified by its name.
492
+ * @param {String} reference The name of the ancestor node to search or
493
+ * an object with the node names to search for.
494
+ * @param {Boolean} [includeSelf] Whether to include the current
495
+ * node in the search.
496
+ * @returns {CKEDITOR.dom.node} The located ancestor node or null if not found.
497
+ * @since 3.6.1
498
+ * @example
499
+ * // Suppose we have the following HTML structure:
500
+ * // &lt;div id="outer"&gt;&lt;div id="inner"&gt;&lt;p&gt;&lt;b&gt;Some text&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
501
+ * // If node == &lt;b&gt;
502
+ * ascendant = node.getAscendant( 'div' ); // ascendant == &lt;div id="inner"&gt
503
+ * ascendant = node.getAscendant( 'b' ); // ascendant == null
504
+ * ascendant = node.getAscendant( 'b', true ); // ascendant == &lt;b&gt;
505
+ * ascendant = node.getAscendant( { div: 1, p: 1} ); // Searches for the first 'div' or 'p': ascendant == &lt;div id="inner"&gt
506
+ */
507
+ getAscendant : function( reference, includeSelf )
508
+ {
509
+ var $ = this.$,
510
+ name;
511
+
512
+ if ( !includeSelf )
513
+ $ = $.parentNode;
514
+
515
+ while ( $ )
516
+ {
517
+ if ( $.nodeName && ( name = $.nodeName.toLowerCase(), ( typeof reference == 'string' ? name == reference : name in reference ) ) )
518
+ return new CKEDITOR.dom.node( $ );
519
+
520
+ $ = $.parentNode;
521
+ }
522
+ return null;
523
+ },
524
+
525
+ hasAscendant : function( name, includeSelf )
526
+ {
527
+ var $ = this.$;
528
+
529
+ if ( !includeSelf )
530
+ $ = $.parentNode;
531
+
532
+ while ( $ )
533
+ {
534
+ if ( $.nodeName && $.nodeName.toLowerCase() == name )
535
+ return true;
536
+
537
+ $ = $.parentNode;
538
+ }
539
+ return false;
540
+ },
541
+
542
+ move : function( target, toStart )
543
+ {
544
+ target.append( this.remove(), toStart );
545
+ },
546
+
547
+ /**
548
+ * Removes this node from the document DOM.
549
+ * @param {Boolean} [preserveChildren] Indicates that the children
550
+ * elements must remain in the document, removing only the outer
551
+ * tags.
552
+ * @example
553
+ * var element = CKEDITOR.dom.element.getById( 'MyElement' );
554
+ * <strong>element.remove()</strong>;
555
+ */
556
+ remove : function( preserveChildren )
557
+ {
558
+ var $ = this.$;
559
+ var parent = $.parentNode;
560
+
561
+ if ( parent )
562
+ {
563
+ if ( preserveChildren )
564
+ {
565
+ // Move all children before the node.
566
+ for ( var child ; ( child = $.firstChild ) ; )
567
+ {
568
+ parent.insertBefore( $.removeChild( child ), $ );
569
+ }
570
+ }
571
+
572
+ parent.removeChild( $ );
573
+ }
574
+
575
+ return this;
576
+ },
577
+
578
+ replace : function( nodeToReplace )
579
+ {
580
+ this.insertBefore( nodeToReplace );
581
+ nodeToReplace.remove();
582
+ },
583
+
584
+ trim : function()
585
+ {
586
+ this.ltrim();
587
+ this.rtrim();
588
+ },
589
+
590
+ ltrim : function()
591
+ {
592
+ var child;
593
+ while ( this.getFirst && ( child = this.getFirst() ) )
594
+ {
595
+ if ( child.type == CKEDITOR.NODE_TEXT )
596
+ {
597
+ var trimmed = CKEDITOR.tools.ltrim( child.getText() ),
598
+ originalLength = child.getLength();
599
+
600
+ if ( !trimmed )
601
+ {
602
+ child.remove();
603
+ continue;
604
+ }
605
+ else if ( trimmed.length < originalLength )
606
+ {
607
+ child.split( originalLength - trimmed.length );
608
+
609
+ // IE BUG: child.remove() may raise JavaScript errors here. (#81)
610
+ this.$.removeChild( this.$.firstChild );
611
+ }
612
+ }
613
+ break;
614
+ }
615
+ },
616
+
617
+ rtrim : function()
618
+ {
619
+ var child;
620
+ while ( this.getLast && ( child = this.getLast() ) )
621
+ {
622
+ if ( child.type == CKEDITOR.NODE_TEXT )
623
+ {
624
+ var trimmed = CKEDITOR.tools.rtrim( child.getText() ),
625
+ originalLength = child.getLength();
626
+
627
+ if ( !trimmed )
628
+ {
629
+ child.remove();
630
+ continue;
631
+ }
632
+ else if ( trimmed.length < originalLength )
633
+ {
634
+ child.split( trimmed.length );
635
+
636
+ // IE BUG: child.getNext().remove() may raise JavaScript errors here.
637
+ // (#81)
638
+ this.$.lastChild.parentNode.removeChild( this.$.lastChild );
639
+ }
640
+ }
641
+ break;
642
+ }
643
+
644
+ if ( !CKEDITOR.env.ie && !CKEDITOR.env.opera )
645
+ {
646
+ child = this.$.lastChild;
647
+
648
+ if ( child && child.type == 1 && child.nodeName.toLowerCase() == 'br' )
649
+ {
650
+ // Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).
651
+ child.parentNode.removeChild( child ) ;
652
+ }
653
+ }
654
+ },
655
+
656
+ /**
657
+ * Checks if this node is read-only (should not be changed).
658
+ * @returns {Boolean}
659
+ * @since 3.5
660
+ * @example
661
+ * // For the following HTML:
662
+ * // &lt;div contenteditable="false"&gt;Some &lt;b&gt;text&lt;/b&gt;&lt;/div&gt;
663
+ *
664
+ * // If "ele" is the above &lt;div&gt;
665
+ * ele.isReadOnly(); // true
666
+ */
667
+ isReadOnly : function()
668
+ {
669
+ var element = this;
670
+ if ( this.type != CKEDITOR.NODE_ELEMENT )
671
+ element = this.getParent();
672
+
673
+ if ( element && typeof element.$.isContentEditable != 'undefined' )
674
+ return ! ( element.$.isContentEditable || element.data( 'cke-editable' ) );
675
+ else
676
+ {
677
+ // Degrade for old browsers which don't support "isContentEditable", e.g. FF3
678
+ var current = element;
679
+ while( current )
680
+ {
681
+ if ( current.is( 'body' ) || !!current.data( 'cke-editable' ) )
682
+ break;
683
+
684
+ if ( current.getAttribute( 'contentEditable' ) == 'false' )
685
+ return true;
686
+ else if ( current.getAttribute( 'contentEditable' ) == 'true' )
687
+ break;
688
+
689
+ current = current.getParent();
690
+ }
691
+
692
+ return false;
693
+ }
694
+ }
695
+ }
696
+ );