esp-ckeditor 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ */