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,578 @@
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 Undo/Redo system for saving shapshot for document modification
8
+ * and other recordable changes.
9
+ */
10
+
11
+ (function()
12
+ {
13
+ CKEDITOR.plugins.add( 'undo',
14
+ {
15
+ requires : [ 'selection', 'wysiwygarea' ],
16
+
17
+ init : function( editor )
18
+ {
19
+ var undoManager = new UndoManager( editor );
20
+
21
+ var undoCommand = editor.addCommand( 'undo',
22
+ {
23
+ exec : function()
24
+ {
25
+ if ( undoManager.undo() )
26
+ {
27
+ editor.selectionChange();
28
+ this.fire( 'afterUndo' );
29
+ }
30
+ },
31
+ state : CKEDITOR.TRISTATE_DISABLED,
32
+ canUndo : false
33
+ });
34
+
35
+ var redoCommand = editor.addCommand( 'redo',
36
+ {
37
+ exec : function()
38
+ {
39
+ if ( undoManager.redo() )
40
+ {
41
+ editor.selectionChange();
42
+ this.fire( 'afterRedo' );
43
+ }
44
+ },
45
+ state : CKEDITOR.TRISTATE_DISABLED,
46
+ canUndo : false
47
+ });
48
+
49
+ undoManager.onChange = function()
50
+ {
51
+ undoCommand.setState( undoManager.undoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
52
+ redoCommand.setState( undoManager.redoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
53
+ };
54
+
55
+ function recordCommand( event )
56
+ {
57
+ // If the command hasn't been marked to not support undo.
58
+ if ( undoManager.enabled && event.data.command.canUndo !== false )
59
+ undoManager.save();
60
+ }
61
+
62
+ // We'll save snapshots before and after executing a command.
63
+ editor.on( 'beforeCommandExec', recordCommand );
64
+ editor.on( 'afterCommandExec', recordCommand );
65
+
66
+ // Save snapshots before doing custom changes.
67
+ editor.on( 'saveSnapshot', function( evt )
68
+ {
69
+ undoManager.save( evt.data && evt.data.contentOnly );
70
+ });
71
+
72
+ // Registering keydown on every document recreation.(#3844)
73
+ editor.on( 'contentDom', function()
74
+ {
75
+ editor.document.on( 'keydown', function( event )
76
+ {
77
+ // Do not capture CTRL hotkeys.
78
+ if ( !event.data.$.ctrlKey && !event.data.$.metaKey )
79
+ undoManager.type( event );
80
+ });
81
+ });
82
+
83
+ // Always save an undo snapshot - the previous mode might have
84
+ // changed editor contents.
85
+ editor.on( 'beforeModeUnload', function()
86
+ {
87
+ editor.mode == 'wysiwyg' && undoManager.save( true );
88
+ });
89
+
90
+ // Make the undo manager available only in wysiwyg mode.
91
+ editor.on( 'mode', function()
92
+ {
93
+ undoManager.enabled = editor.readOnly ? false : editor.mode == 'wysiwyg';
94
+ undoManager.onChange();
95
+ });
96
+
97
+ editor.ui.addButton( 'Undo',
98
+ {
99
+ label : editor.lang.undo,
100
+ command : 'undo'
101
+ });
102
+
103
+ editor.ui.addButton( 'Redo',
104
+ {
105
+ label : editor.lang.redo,
106
+ command : 'redo'
107
+ });
108
+
109
+ editor.resetUndo = function()
110
+ {
111
+ // Reset the undo stack.
112
+ undoManager.reset();
113
+
114
+ // Create the first image.
115
+ editor.fire( 'saveSnapshot' );
116
+ };
117
+
118
+ /**
119
+ * Amend the top of undo stack (last undo image) with the current DOM changes.
120
+ * @name CKEDITOR.editor#updateUndo
121
+ * @example
122
+ * function()
123
+ * {
124
+ * editor.fire( 'saveSnapshot' );
125
+ * editor.document.body.append(...);
126
+ * // Make new changes following the last undo snapshot part of it.
127
+ * editor.fire( 'updateSnapshot' );
128
+ * ...
129
+ * }
130
+ */
131
+ editor.on( 'updateSnapshot', function()
132
+ {
133
+ if ( undoManager.currentImage )
134
+ undoManager.update();
135
+ });
136
+ }
137
+ });
138
+
139
+ CKEDITOR.plugins.undo = {};
140
+
141
+ /**
142
+ * Undo snapshot which represents the current document status.
143
+ * @name CKEDITOR.plugins.undo.Image
144
+ * @param editor The editor instance on which the image is created.
145
+ */
146
+ var Image = CKEDITOR.plugins.undo.Image = function( editor )
147
+ {
148
+ this.editor = editor;
149
+
150
+ editor.fire( 'beforeUndoImage' );
151
+
152
+ var contents = editor.getSnapshot(),
153
+ selection = contents && editor.getSelection();
154
+
155
+ // In IE, we need to remove the expando attributes.
156
+ CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+data-cke-expando=".*?"/g, '' ) );
157
+
158
+ this.contents = contents;
159
+ this.bookmarks = selection && selection.createBookmarks2( true );
160
+
161
+ editor.fire( 'afterUndoImage' );
162
+ };
163
+
164
+ // Attributes that browser may changing them when setting via innerHTML.
165
+ var protectedAttrs = /\b(?:href|src|name)="[^"]*?"/gi;
166
+
167
+ Image.prototype =
168
+ {
169
+ equals : function( otherImage, contentOnly )
170
+ {
171
+
172
+ var thisContents = this.contents,
173
+ otherContents = otherImage.contents;
174
+
175
+ // For IE6/7 : Comparing only the protected attribute values but not the original ones.(#4522)
176
+ if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )
177
+ {
178
+ thisContents = thisContents.replace( protectedAttrs, '' );
179
+ otherContents = otherContents.replace( protectedAttrs, '' );
180
+ }
181
+
182
+ if ( thisContents != otherContents )
183
+ return false;
184
+
185
+ if ( contentOnly )
186
+ return true;
187
+
188
+ var bookmarksA = this.bookmarks,
189
+ bookmarksB = otherImage.bookmarks;
190
+
191
+ if ( bookmarksA || bookmarksB )
192
+ {
193
+ if ( !bookmarksA || !bookmarksB || bookmarksA.length != bookmarksB.length )
194
+ return false;
195
+
196
+ for ( var i = 0 ; i < bookmarksA.length ; i++ )
197
+ {
198
+ var bookmarkA = bookmarksA[ i ],
199
+ bookmarkB = bookmarksB[ i ];
200
+
201
+ if (
202
+ bookmarkA.startOffset != bookmarkB.startOffset ||
203
+ bookmarkA.endOffset != bookmarkB.endOffset ||
204
+ !CKEDITOR.tools.arrayCompare( bookmarkA.start, bookmarkB.start ) ||
205
+ !CKEDITOR.tools.arrayCompare( bookmarkA.end, bookmarkB.end ) )
206
+ {
207
+ return false;
208
+ }
209
+ }
210
+ }
211
+
212
+ return true;
213
+ }
214
+ };
215
+
216
+ /**
217
+ * @constructor Main logic for Redo/Undo feature.
218
+ */
219
+ function UndoManager( editor )
220
+ {
221
+ this.editor = editor;
222
+
223
+ // Reset the undo stack.
224
+ this.reset();
225
+ }
226
+
227
+
228
+ var editingKeyCodes = { /*Backspace*/ 8:1, /*Delete*/ 46:1 },
229
+ modifierKeyCodes = { /*Shift*/ 16:1, /*Ctrl*/ 17:1, /*Alt*/ 18:1 },
230
+ navigationKeyCodes = { 37:1, 38:1, 39:1, 40:1 }; // Arrows: L, T, R, B
231
+
232
+ UndoManager.prototype =
233
+ {
234
+ /**
235
+ * Process undo system regard keystrikes.
236
+ * @param {CKEDITOR.dom.event} event
237
+ */
238
+ type : function( event )
239
+ {
240
+ var keystroke = event && event.data.getKey(),
241
+ isModifierKey = keystroke in modifierKeyCodes,
242
+ isEditingKey = keystroke in editingKeyCodes,
243
+ wasEditingKey = this.lastKeystroke in editingKeyCodes,
244
+ sameAsLastEditingKey = isEditingKey && keystroke == this.lastKeystroke,
245
+ // Keystrokes which navigation through contents.
246
+ isReset = keystroke in navigationKeyCodes,
247
+ wasReset = this.lastKeystroke in navigationKeyCodes,
248
+
249
+ // Keystrokes which just introduce new contents.
250
+ isContent = ( !isEditingKey && !isReset ),
251
+
252
+ // Create undo snap for every different modifier key.
253
+ modifierSnapshot = ( isEditingKey && !sameAsLastEditingKey ),
254
+ // Create undo snap on the following cases:
255
+ // 1. Just start to type .
256
+ // 2. Typing some content after a modifier.
257
+ // 3. Typing some content after make a visible selection.
258
+ startedTyping = !( isModifierKey || this.typing )
259
+ || ( isContent && ( wasEditingKey || wasReset ) );
260
+
261
+ if ( startedTyping || modifierSnapshot )
262
+ {
263
+ var beforeTypeImage = new Image( this.editor );
264
+
265
+ // Use setTimeout, so we give the necessary time to the
266
+ // browser to insert the character into the DOM.
267
+ CKEDITOR.tools.setTimeout( function()
268
+ {
269
+ var currentSnapshot = this.editor.getSnapshot();
270
+
271
+ // In IE, we need to remove the expando attributes.
272
+ if ( CKEDITOR.env.ie )
273
+ currentSnapshot = currentSnapshot.replace( /\s+data-cke-expando=".*?"/g, '' );
274
+
275
+ if ( beforeTypeImage.contents != currentSnapshot )
276
+ {
277
+ // It's safe to now indicate typing state.
278
+ this.typing = true;
279
+
280
+ // This's a special save, with specified snapshot
281
+ // and without auto 'fireChange'.
282
+ if ( !this.save( false, beforeTypeImage, false ) )
283
+ // Drop future snapshots.
284
+ this.snapshots.splice( this.index + 1, this.snapshots.length - this.index - 1 );
285
+
286
+ this.hasUndo = true;
287
+ this.hasRedo = false;
288
+
289
+ this.typesCount = 1;
290
+ this.modifiersCount = 1;
291
+
292
+ this.onChange();
293
+ }
294
+ },
295
+ 0, this
296
+ );
297
+ }
298
+
299
+ this.lastKeystroke = keystroke;
300
+
301
+ // Create undo snap after typed too much (over 25 times).
302
+ if ( isEditingKey )
303
+ {
304
+ this.typesCount = 0;
305
+ this.modifiersCount++;
306
+
307
+ if ( this.modifiersCount > 25 )
308
+ {
309
+ this.save( false, null, false );
310
+ this.modifiersCount = 1;
311
+ }
312
+ }
313
+ else if ( !isReset )
314
+ {
315
+ this.modifiersCount = 0;
316
+ this.typesCount++;
317
+
318
+ if ( this.typesCount > 25 )
319
+ {
320
+ this.save( false, null, false );
321
+ this.typesCount = 1;
322
+ }
323
+ }
324
+
325
+ },
326
+
327
+ reset : function() // Reset the undo stack.
328
+ {
329
+ /**
330
+ * Remember last pressed key.
331
+ */
332
+ this.lastKeystroke = 0;
333
+
334
+ /**
335
+ * Stack for all the undo and redo snapshots, they're always created/removed
336
+ * in consistency.
337
+ */
338
+ this.snapshots = [];
339
+
340
+ /**
341
+ * Current snapshot history index.
342
+ */
343
+ this.index = -1;
344
+
345
+ this.limit = this.editor.config.undoStackSize || 20;
346
+
347
+ this.currentImage = null;
348
+
349
+ this.hasUndo = false;
350
+ this.hasRedo = false;
351
+
352
+ this.resetType();
353
+ },
354
+
355
+ /**
356
+ * Reset all states about typing.
357
+ * @see UndoManager.type
358
+ */
359
+ resetType : function()
360
+ {
361
+ this.typing = false;
362
+ delete this.lastKeystroke;
363
+ this.typesCount = 0;
364
+ this.modifiersCount = 0;
365
+ },
366
+ fireChange : function()
367
+ {
368
+ this.hasUndo = !!this.getNextImage( true );
369
+ this.hasRedo = !!this.getNextImage( false );
370
+ // Reset typing
371
+ this.resetType();
372
+ this.onChange();
373
+ },
374
+
375
+ /**
376
+ * Save a snapshot of document image for later retrieve.
377
+ */
378
+ save : function( onContentOnly, image, autoFireChange )
379
+ {
380
+ var snapshots = this.snapshots;
381
+
382
+ // Get a content image.
383
+ if ( !image )
384
+ image = new Image( this.editor );
385
+
386
+ // Do nothing if it was not possible to retrieve an image.
387
+ if ( image.contents === false )
388
+ return false;
389
+
390
+ // Check if this is a duplicate. In such case, do nothing.
391
+ if ( this.currentImage && image.equals( this.currentImage, onContentOnly ) )
392
+ return false;
393
+
394
+ // Drop future snapshots.
395
+ snapshots.splice( this.index + 1, snapshots.length - this.index - 1 );
396
+
397
+ // If we have reached the limit, remove the oldest one.
398
+ if ( snapshots.length == this.limit )
399
+ snapshots.shift();
400
+
401
+ // Add the new image, updating the current index.
402
+ this.index = snapshots.push( image ) - 1;
403
+
404
+ this.currentImage = image;
405
+
406
+ if ( autoFireChange !== false )
407
+ this.fireChange();
408
+ return true;
409
+ },
410
+
411
+ restoreImage : function( image )
412
+ {
413
+ this.editor.loadSnapshot( image.contents );
414
+
415
+ if ( image.bookmarks )
416
+ this.editor.getSelection().selectBookmarks( image.bookmarks );
417
+ else if ( CKEDITOR.env.ie )
418
+ {
419
+ // IE BUG: If I don't set the selection to *somewhere* after setting
420
+ // document contents, then IE would create an empty paragraph at the bottom
421
+ // the next time the document is modified.
422
+ var $range = this.editor.document.getBody().$.createTextRange();
423
+ $range.collapse( true );
424
+ $range.select();
425
+ }
426
+
427
+ this.index = image.index;
428
+
429
+ // Update current image with the actual editor
430
+ // content, since actualy content may differ from
431
+ // the original snapshot due to dom change. (#4622)
432
+ this.update();
433
+ this.fireChange();
434
+ },
435
+
436
+ // Get the closest available image.
437
+ getNextImage : function( isUndo )
438
+ {
439
+ var snapshots = this.snapshots,
440
+ currentImage = this.currentImage,
441
+ image, i;
442
+
443
+ if ( currentImage )
444
+ {
445
+ if ( isUndo )
446
+ {
447
+ for ( i = this.index - 1 ; i >= 0 ; i-- )
448
+ {
449
+ image = snapshots[ i ];
450
+ if ( !currentImage.equals( image, true ) )
451
+ {
452
+ image.index = i;
453
+ return image;
454
+ }
455
+ }
456
+ }
457
+ else
458
+ {
459
+ for ( i = this.index + 1 ; i < snapshots.length ; i++ )
460
+ {
461
+ image = snapshots[ i ];
462
+ if ( !currentImage.equals( image, true ) )
463
+ {
464
+ image.index = i;
465
+ return image;
466
+ }
467
+ }
468
+ }
469
+ }
470
+
471
+ return null;
472
+ },
473
+
474
+ /**
475
+ * Check the current redo state.
476
+ * @return {Boolean} Whether the document has previous state to
477
+ * retrieve.
478
+ */
479
+ redoable : function()
480
+ {
481
+ return this.enabled && this.hasRedo;
482
+ },
483
+
484
+ /**
485
+ * Check the current undo state.
486
+ * @return {Boolean} Whether the document has future state to restore.
487
+ */
488
+ undoable : function()
489
+ {
490
+ return this.enabled && this.hasUndo;
491
+ },
492
+
493
+ /**
494
+ * Perform undo on current index.
495
+ */
496
+ undo : function()
497
+ {
498
+ if ( this.undoable() )
499
+ {
500
+ this.save( true );
501
+
502
+ var image = this.getNextImage( true );
503
+ if ( image )
504
+ return this.restoreImage( image ), true;
505
+ }
506
+
507
+ return false;
508
+ },
509
+
510
+ /**
511
+ * Perform redo on current index.
512
+ */
513
+ redo : function()
514
+ {
515
+ if ( this.redoable() )
516
+ {
517
+ // Try to save. If no changes have been made, the redo stack
518
+ // will not change, so it will still be redoable.
519
+ this.save( true );
520
+
521
+ // If instead we had changes, we can't redo anymore.
522
+ if ( this.redoable() )
523
+ {
524
+ var image = this.getNextImage( false );
525
+ if ( image )
526
+ return this.restoreImage( image ), true;
527
+ }
528
+ }
529
+
530
+ return false;
531
+ },
532
+
533
+ /**
534
+ * Update the last snapshot of the undo stack with the current editor content.
535
+ */
536
+ update : function()
537
+ {
538
+ this.snapshots.splice( this.index, 1, ( this.currentImage = new Image( this.editor ) ) );
539
+ }
540
+ };
541
+ })();
542
+
543
+ /**
544
+ * The number of undo steps to be saved. The higher this setting value the more
545
+ * memory is used for it.
546
+ * @name CKEDITOR.config.undoStackSize
547
+ * @type Number
548
+ * @default 20
549
+ * @example
550
+ * config.undoStackSize = 50;
551
+ */
552
+
553
+ /**
554
+ * Fired when the editor is about to save an undo snapshot. This event can be
555
+ * fired by plugins and customizations to make the editor saving undo snapshots.
556
+ * @name CKEDITOR.editor#saveSnapshot
557
+ * @event
558
+ */
559
+
560
+ /**
561
+ * Fired before an undo image is to be taken. An undo image represents the
562
+ * editor state at some point. It's saved into an undo store, so the editor is
563
+ * able to recover the editor state on undo and redo operations.
564
+ * @name CKEDITOR.editor#beforeUndoImage
565
+ * @since 3.5.3
566
+ * @see CKEDITOR.editor#afterUndoImage
567
+ * @event
568
+ */
569
+
570
+ /**
571
+ * Fired after an undo image is taken. An undo image represents the
572
+ * editor state at some point. It's saved into an undo store, so the editor is
573
+ * able to recover the editor state on undo and redo operations.
574
+ * @name CKEDITOR.editor#afterUndoImage
575
+ * @since 3.5.3
576
+ * @see CKEDITOR.editor#beforeUndoImage
577
+ * @event
578
+ */