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,197 @@
1
+ /*
2
+ Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3
+ For licensing, see LICENSE.html or http://ckeditor.com/license
4
+ */
5
+
6
+ CKEDITOR.plugins.add( 'format',
7
+ {
8
+ requires : [ 'richcombo', 'styles' ],
9
+
10
+ init : function( editor )
11
+ {
12
+ var config = editor.config,
13
+ lang = editor.lang.format;
14
+
15
+ // Gets the list of tags from the settings.
16
+ var tags = config.format_tags.split( ';' );
17
+
18
+ // Create style objects for all defined styles.
19
+ var styles = {};
20
+ for ( var i = 0 ; i < tags.length ; i++ )
21
+ {
22
+ var tag = tags[ i ];
23
+ styles[ tag ] = new CKEDITOR.style( config[ 'format_' + tag ] );
24
+ styles[ tag ]._.enterMode = editor.config.enterMode;
25
+ }
26
+
27
+ editor.ui.addRichCombo( 'Format',
28
+ {
29
+ label : lang.label,
30
+ title : lang.panelTitle,
31
+ className : 'cke_format',
32
+ panel :
33
+ {
34
+ css : editor.skin.editor.css.concat( config.contentsCss ),
35
+ multiSelect : false,
36
+ attributes : { 'aria-label' : lang.panelTitle }
37
+ },
38
+
39
+ init : function()
40
+ {
41
+ this.startGroup( lang.panelTitle );
42
+
43
+ for ( var tag in styles )
44
+ {
45
+ var label = lang[ 'tag_' + tag ];
46
+
47
+ // Add the tag entry to the panel list.
48
+ this.add( tag, styles[tag].buildPreview( label ), label );
49
+ }
50
+ },
51
+
52
+ onClick : function( value )
53
+ {
54
+ editor.focus();
55
+ editor.fire( 'saveSnapshot' );
56
+
57
+ var style = styles[ value ],
58
+ elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() );
59
+
60
+ style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document );
61
+
62
+ // Save the undo snapshot after all changes are affected. (#4899)
63
+ setTimeout( function()
64
+ {
65
+ editor.fire( 'saveSnapshot' );
66
+ }, 0 );
67
+ },
68
+
69
+ onRender : function()
70
+ {
71
+ editor.on( 'selectionChange', function( ev )
72
+ {
73
+ var currentTag = this.getValue();
74
+
75
+ var elementPath = ev.data.path;
76
+
77
+ for ( var tag in styles )
78
+ {
79
+ if ( styles[ tag ].checkActive( elementPath ) )
80
+ {
81
+ if ( tag != currentTag )
82
+ this.setValue( tag, editor.lang.format[ 'tag_' + tag ] );
83
+ return;
84
+ }
85
+ }
86
+
87
+ // If no styles match, just empty it.
88
+ this.setValue( '' );
89
+ },
90
+ this);
91
+ }
92
+ });
93
+ }
94
+ });
95
+
96
+ /**
97
+ * A list of semi colon separated style names (by default tags) representing
98
+ * the style definition for each entry to be displayed in the Format combo in
99
+ * the toolbar. Each entry must have its relative definition configuration in a
100
+ * setting named "format_(tagName)". For example, the "p" entry has its
101
+ * definition taken from config.format_p.
102
+ * @type String
103
+ * @default 'p;h1;h2;h3;h4;h5;h6;pre;address;div'
104
+ * @example
105
+ * config.format_tags = 'p;h2;h3;pre'
106
+ */
107
+ CKEDITOR.config.format_tags = 'p;h1;h2;h3;h4;h5;h6;pre;address;div';
108
+
109
+ /**
110
+ * The style definition to be used to apply the "Normal" format.
111
+ * @type Object
112
+ * @default { element : 'p' }
113
+ * @example
114
+ * config.format_p = { element : 'p', attributes : { 'class' : 'normalPara' } };
115
+ */
116
+ CKEDITOR.config.format_p = { element : 'p' };
117
+
118
+ /**
119
+ * The style definition to be used to apply the "Normal (DIV)" format.
120
+ * @type Object
121
+ * @default { element : 'div' }
122
+ * @example
123
+ * config.format_div = { element : 'div', attributes : { 'class' : 'normalDiv' } };
124
+ */
125
+ CKEDITOR.config.format_div = { element : 'div' };
126
+
127
+ /**
128
+ * The style definition to be used to apply the "Formatted" format.
129
+ * @type Object
130
+ * @default { element : 'pre' }
131
+ * @example
132
+ * config.format_pre = { element : 'pre', attributes : { 'class' : 'code' } };
133
+ */
134
+ CKEDITOR.config.format_pre = { element : 'pre' };
135
+
136
+ /**
137
+ * The style definition to be used to apply the "Address" format.
138
+ * @type Object
139
+ * @default { element : 'address' }
140
+ * @example
141
+ * config.format_address = { element : 'address', attributes : { 'class' : 'styledAddress' } };
142
+ */
143
+ CKEDITOR.config.format_address = { element : 'address' };
144
+
145
+ /**
146
+ * The style definition to be used to apply the "Heading 1" format.
147
+ * @type Object
148
+ * @default { element : 'h1' }
149
+ * @example
150
+ * config.format_h1 = { element : 'h1', attributes : { 'class' : 'contentTitle1' } };
151
+ */
152
+ CKEDITOR.config.format_h1 = { element : 'h1' };
153
+
154
+ /**
155
+ * The style definition to be used to apply the "Heading 1" format.
156
+ * @type Object
157
+ * @default { element : 'h2' }
158
+ * @example
159
+ * config.format_h2 = { element : 'h2', attributes : { 'class' : 'contentTitle2' } };
160
+ */
161
+ CKEDITOR.config.format_h2 = { element : 'h2' };
162
+
163
+ /**
164
+ * The style definition to be used to apply the "Heading 1" format.
165
+ * @type Object
166
+ * @default { element : 'h3' }
167
+ * @example
168
+ * config.format_h3 = { element : 'h3', attributes : { 'class' : 'contentTitle3' } };
169
+ */
170
+ CKEDITOR.config.format_h3 = { element : 'h3' };
171
+
172
+ /**
173
+ * The style definition to be used to apply the "Heading 1" format.
174
+ * @type Object
175
+ * @default { element : 'h4' }
176
+ * @example
177
+ * config.format_h4 = { element : 'h4', attributes : { 'class' : 'contentTitle4' } };
178
+ */
179
+ CKEDITOR.config.format_h4 = { element : 'h4' };
180
+
181
+ /**
182
+ * The style definition to be used to apply the "Heading 1" format.
183
+ * @type Object
184
+ * @default { element : 'h5' }
185
+ * @example
186
+ * config.format_h5 = { element : 'h5', attributes : { 'class' : 'contentTitle5' } };
187
+ */
188
+ CKEDITOR.config.format_h5 = { element : 'h5' };
189
+
190
+ /**
191
+ * The style definition to be used to apply the "Heading 1" format.
192
+ * @type Object
193
+ * @default { element : 'h6' }
194
+ * @example
195
+ * config.format_h6 = { element : 'h6', attributes : { 'class' : 'contentTitle6' } };
196
+ */
197
+ CKEDITOR.config.format_h6 = { element : 'h6' };
@@ -0,0 +1,596 @@
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
+ // Regex to scan for &nbsp; at the end of blocks, which are actually placeholders.
9
+ // Safari transforms the &nbsp; to \xa0. (#4172)
10
+ var tailNbspRegex = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/;
11
+
12
+ var protectedSourceMarker = '{cke_protected}';
13
+
14
+ // Return the last non-space child node of the block (#4344).
15
+ function lastNoneSpaceChild( block )
16
+ {
17
+ var lastIndex = block.children.length,
18
+ last = block.children[ lastIndex - 1 ];
19
+ while ( last && last.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim( last.value ) )
20
+ last = block.children[ --lastIndex ];
21
+ return last;
22
+ }
23
+
24
+ function trimFillers( block, fromSource )
25
+ {
26
+ // If the current node is a block, and if we're converting from source or
27
+ // we're not in IE then search for and remove any tailing BR node.
28
+ //
29
+ // Also, any &nbsp; at the end of blocks are fillers, remove them as well.
30
+ // (#2886)
31
+ var children = block.children, lastChild = lastNoneSpaceChild( block );
32
+ if ( lastChild )
33
+ {
34
+ if ( ( fromSource || !CKEDITOR.env.ie ) && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br' )
35
+ children.pop();
36
+ if ( lastChild.type == CKEDITOR.NODE_TEXT && tailNbspRegex.test( lastChild.value ) )
37
+ children.pop();
38
+ }
39
+ }
40
+
41
+ function blockNeedsExtension( block, fromSource, extendEmptyBlock )
42
+ {
43
+ if( !fromSource && ( !extendEmptyBlock ||
44
+ typeof extendEmptyBlock == 'function' && ( extendEmptyBlock( block ) === false ) ) )
45
+ return false;
46
+
47
+ // 1. For IE version >=8, empty blocks are displayed correctly themself in wysiwiyg;
48
+ // 2. For the rest, at least table cell and list item need no filler space.
49
+ // (#6248)
50
+ if ( fromSource && CKEDITOR.env.ie &&
51
+ ( document.documentMode > 7
52
+ || block.name in CKEDITOR.dtd.tr
53
+ || block.name in CKEDITOR.dtd.$listItem ) )
54
+ return false;
55
+
56
+ var lastChild = lastNoneSpaceChild( block );
57
+
58
+ return !lastChild || lastChild &&
59
+ ( lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br'
60
+ // Some of the controls in form needs extension too,
61
+ // to move cursor at the end of the form. (#4791)
62
+ || block.name == 'form' && lastChild.name == 'input' );
63
+ }
64
+
65
+ function getBlockExtension( isOutput, emptyBlockFiller )
66
+ {
67
+ return function( node )
68
+ {
69
+ trimFillers( node, !isOutput );
70
+
71
+ if ( blockNeedsExtension( node, !isOutput, emptyBlockFiller ) )
72
+ {
73
+ if ( isOutput || CKEDITOR.env.ie )
74
+ node.add( new CKEDITOR.htmlParser.text( '\xa0' ) );
75
+ else
76
+ node.add( new CKEDITOR.htmlParser.element( 'br', {} ) );
77
+ }
78
+ };
79
+ }
80
+
81
+ var dtd = CKEDITOR.dtd;
82
+
83
+ // Define orders of table elements.
84
+ var tableOrder = [ 'caption', 'colgroup', 'col', 'thead', 'tfoot', 'tbody' ];
85
+
86
+ // Find out the list of block-like tags that can contain <br>.
87
+ var blockLikeTags = CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent );
88
+ for ( var i in blockLikeTags )
89
+ {
90
+ if ( ! ( 'br' in dtd[i] ) )
91
+ delete blockLikeTags[i];
92
+ }
93
+ // We just avoid filler in <pre> right now.
94
+ // TODO: Support filler for <pre>, line break is also occupy line height.
95
+ delete blockLikeTags.pre;
96
+ var defaultDataFilterRules =
97
+ {
98
+ elements : {},
99
+ attributeNames :
100
+ [
101
+ // Event attributes (onXYZ) must not be directly set. They can become
102
+ // active in the editing area (IE|WebKit).
103
+ [ ( /^on/ ), 'data-cke-pa-on' ]
104
+ ]
105
+ };
106
+
107
+ var defaultDataBlockFilterRules = { elements : {} };
108
+
109
+ for ( i in blockLikeTags )
110
+ defaultDataBlockFilterRules.elements[ i ] = getBlockExtension();
111
+
112
+ var defaultHtmlFilterRules =
113
+ {
114
+ elementNames :
115
+ [
116
+ // Remove the "cke:" namespace prefix.
117
+ [ ( /^cke:/ ), '' ],
118
+
119
+ // Ignore <?xml:namespace> tags.
120
+ [ ( /^\?xml:namespace$/ ), '' ]
121
+ ],
122
+
123
+ attributeNames :
124
+ [
125
+ // Attributes saved for changes and protected attributes.
126
+ [ ( /^data-cke-(saved|pa)-/ ), '' ],
127
+
128
+ // All "data-cke-" attributes are to be ignored.
129
+ [ ( /^data-cke-.*/ ), '' ],
130
+
131
+ [ 'hidefocus', '' ]
132
+ ],
133
+
134
+ elements :
135
+ {
136
+ $ : function( element )
137
+ {
138
+ var attribs = element.attributes;
139
+
140
+ if ( attribs )
141
+ {
142
+ // Elements marked as temporary are to be ignored.
143
+ if ( attribs[ 'data-cke-temp' ] )
144
+ return false;
145
+
146
+ // Remove duplicated attributes - #3789.
147
+ var attributeNames = [ 'name', 'href', 'src' ],
148
+ savedAttributeName;
149
+ for ( var i = 0 ; i < attributeNames.length ; i++ )
150
+ {
151
+ savedAttributeName = 'data-cke-saved-' + attributeNames[ i ];
152
+ savedAttributeName in attribs && ( delete attribs[ attributeNames[ i ] ] );
153
+ }
154
+ }
155
+
156
+ return element;
157
+ },
158
+
159
+ // The contents of table should be in correct order (#4809).
160
+ table : function( element )
161
+ {
162
+ var children = element.children;
163
+ children.sort( function ( node1, node2 )
164
+ {
165
+ return node1.type == CKEDITOR.NODE_ELEMENT && node2.type == node1.type ?
166
+ CKEDITOR.tools.indexOf( tableOrder, node1.name ) > CKEDITOR.tools.indexOf( tableOrder, node2.name ) ? 1 : -1 : 0;
167
+ } );
168
+ },
169
+
170
+ embed : function( element )
171
+ {
172
+ var parent = element.parent;
173
+
174
+ // If the <embed> is child of a <object>, copy the width
175
+ // and height attributes from it.
176
+ if ( parent && parent.name == 'object' )
177
+ {
178
+ var parentWidth = parent.attributes.width,
179
+ parentHeight = parent.attributes.height;
180
+ parentWidth && ( element.attributes.width = parentWidth );
181
+ parentHeight && ( element.attributes.height = parentHeight );
182
+ }
183
+ },
184
+ // Restore param elements into self-closing.
185
+ param : function( param )
186
+ {
187
+ param.children = [];
188
+ param.isEmpty = true;
189
+ return param;
190
+ },
191
+
192
+ // Remove empty link but not empty anchor.(#3829)
193
+ a : function( element )
194
+ {
195
+ if ( !( element.children.length ||
196
+ element.attributes.name ||
197
+ element.attributes[ 'data-cke-saved-name' ] ) )
198
+ {
199
+ return false;
200
+ }
201
+ },
202
+
203
+ // Remove dummy span in webkit.
204
+ span: function( element )
205
+ {
206
+ if ( element.attributes[ 'class' ] == 'Apple-style-span' )
207
+ delete element.name;
208
+ },
209
+
210
+ // Empty <pre> in IE is reported with filler node (&nbsp;).
211
+ pre : function( element ) { CKEDITOR.env.ie && trimFillers( element ); },
212
+
213
+ html : function( element )
214
+ {
215
+ delete element.attributes.contenteditable;
216
+ delete element.attributes[ 'class' ];
217
+ },
218
+
219
+ body : function( element )
220
+ {
221
+ delete element.attributes.spellcheck;
222
+ delete element.attributes.contenteditable;
223
+ },
224
+
225
+ style : function( element )
226
+ {
227
+ var child = element.children[ 0 ];
228
+ child && child.value && ( child.value = CKEDITOR.tools.trim( child.value ));
229
+
230
+ if ( !element.attributes.type )
231
+ element.attributes.type = 'text/css';
232
+ },
233
+
234
+ title : function( element )
235
+ {
236
+ var titleText = element.children[ 0 ];
237
+ titleText && ( titleText.value = element.attributes[ 'data-cke-title' ] || '' );
238
+ }
239
+ },
240
+
241
+ attributes :
242
+ {
243
+ 'class' : function( value, element )
244
+ {
245
+ // Remove all class names starting with "cke_".
246
+ return CKEDITOR.tools.ltrim( value.replace( /(?:^|\s+)cke_[^\s]*/g, '' ) ) || false;
247
+ }
248
+ }
249
+ };
250
+
251
+ if ( CKEDITOR.env.ie )
252
+ {
253
+ // IE outputs style attribute in capital letters. We should convert
254
+ // them back to lower case, while not hurting the values (#5930)
255
+ defaultHtmlFilterRules.attributes.style = function( value, element )
256
+ {
257
+ return value.replace( /(^|;)([^\:]+)/g, function( match )
258
+ {
259
+ return match.toLowerCase();
260
+ });
261
+ };
262
+ }
263
+
264
+ function protectReadOnly( element )
265
+ {
266
+ var attrs = element.attributes;
267
+
268
+ // We should flag that the element was locked by our code so
269
+ // it'll be editable by the editor functions (#6046).
270
+ if ( attrs.contenteditable != "false" )
271
+ attrs[ 'data-cke-editable' ] = attrs.contenteditable ? 'true' : 1;
272
+
273
+ attrs.contenteditable = "false";
274
+ }
275
+ function unprotectReadyOnly( element )
276
+ {
277
+ var attrs = element.attributes;
278
+ switch( attrs[ 'data-cke-editable' ] )
279
+ {
280
+ case 'true': attrs.contenteditable = 'true'; break;
281
+ case '1': delete attrs.contenteditable; break;
282
+ }
283
+ }
284
+ // Disable form elements editing mode provided by some browers. (#5746)
285
+ for ( i in { input : 1, textarea : 1 } )
286
+ {
287
+ defaultDataFilterRules.elements[ i ] = protectReadOnly;
288
+ defaultHtmlFilterRules.elements[ i ] = unprotectReadyOnly;
289
+ }
290
+
291
+ var protectElementRegex = /<(a|area|img|input)\b([^>]*)>/gi,
292
+ protectAttributeRegex = /\b(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi;
293
+
294
+ var protectElementsRegex = /(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,
295
+ encodedElementsRegex = /<cke:encoded>([^<]*)<\/cke:encoded>/gi;
296
+
297
+ var protectElementNamesRegex = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,
298
+ unprotectElementNamesRegex = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi;
299
+
300
+ var protectSelfClosingRegex = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;
301
+
302
+ function protectAttributes( html )
303
+ {
304
+ return html.replace( protectElementRegex, function( element, tag, attributes )
305
+ {
306
+ return '<' + tag + attributes.replace( protectAttributeRegex, function( fullAttr, attrName )
307
+ {
308
+ // Avoid corrupting the inline event attributes (#7243).
309
+ // We should not rewrite the existed protected attributes, e.g. clipboard content from editor. (#5218)
310
+ if ( !( /^on/ ).test( attrName ) && attributes.indexOf( 'data-cke-saved-' + attrName ) == -1 )
311
+ return ' data-cke-saved-' + fullAttr + ' ' + fullAttr;
312
+
313
+ return fullAttr;
314
+ }) + '>';
315
+ });
316
+ }
317
+
318
+ function protectElements( html )
319
+ {
320
+ return html.replace( protectElementsRegex, function( match )
321
+ {
322
+ return '<cke:encoded>' + encodeURIComponent( match ) + '</cke:encoded>';
323
+ });
324
+ }
325
+
326
+ function unprotectElements( html )
327
+ {
328
+ return html.replace( encodedElementsRegex, function( match, encoded )
329
+ {
330
+ return decodeURIComponent( encoded );
331
+ });
332
+ }
333
+
334
+ function protectElementsNames( html )
335
+ {
336
+ return html.replace( protectElementNamesRegex, '$1cke:$2');
337
+ }
338
+
339
+ function unprotectElementNames( html )
340
+ {
341
+ return html.replace( unprotectElementNamesRegex, '$1$2' );
342
+ }
343
+
344
+ function protectSelfClosingElements( html )
345
+ {
346
+ return html.replace( protectSelfClosingRegex, '<cke:$1$2></cke:$1>' );
347
+ }
348
+
349
+ function protectPreFormatted( html )
350
+ {
351
+ return html.replace( /(<pre\b[^>]*>)(\r\n|\n)/g, '$1$2$2' );
352
+ }
353
+
354
+ function protectRealComments( html )
355
+ {
356
+ return html.replace( /<!--(?!{cke_protected})[\s\S]+?-->/g, function( match )
357
+ {
358
+ return '<!--' + protectedSourceMarker +
359
+ '{C}' +
360
+ encodeURIComponent( match ).replace( /--/g, '%2D%2D' ) +
361
+ '-->';
362
+ });
363
+ }
364
+
365
+ function unprotectRealComments( html )
366
+ {
367
+ return html.replace( /<!--\{cke_protected\}\{C\}([\s\S]+?)-->/g, function( match, data )
368
+ {
369
+ return decodeURIComponent( data );
370
+ });
371
+ }
372
+
373
+ function unprotectSource( html, editor )
374
+ {
375
+ var store = editor._.dataStore;
376
+
377
+ return html.replace( /<!--\{cke_protected\}([\s\S]+?)-->/g, function( match, data )
378
+ {
379
+ return decodeURIComponent( data );
380
+ }).replace( /\{cke_protected_(\d+)\}/g, function( match, id )
381
+ {
382
+ return store && store[ id ] || '';
383
+ });
384
+ }
385
+
386
+ function protectSource( data, editor )
387
+ {
388
+ var protectedHtml = [],
389
+ protectRegexes = editor.config.protectedSource,
390
+ store = editor._.dataStore || ( editor._.dataStore = { id : 1 } ),
391
+ tempRegex = /<\!--\{cke_temp(comment)?\}(\d*?)-->/g;
392
+
393
+ var regexes =
394
+ [
395
+ // Script tags will also be forced to be protected, otherwise
396
+ // IE will execute them.
397
+ ( /<script[\s\S]*?<\/script>/gi ),
398
+
399
+ // <noscript> tags (get lost in IE and messed up in FF).
400
+ /<noscript[\s\S]*?<\/noscript>/gi
401
+ ]
402
+ .concat( protectRegexes );
403
+
404
+ // First of any other protection, we must protect all comments
405
+ // to avoid loosing them (of course, IE related).
406
+ // Note that we use a different tag for comments, as we need to
407
+ // transform them when applying filters.
408
+ data = data.replace( (/<!--[\s\S]*?-->/g), function( match )
409
+ {
410
+ return '<!--{cke_tempcomment}' + ( protectedHtml.push( match ) - 1 ) + '-->';
411
+ });
412
+
413
+ for ( var i = 0 ; i < regexes.length ; i++ )
414
+ {
415
+ data = data.replace( regexes[i], function( match )
416
+ {
417
+ match = match.replace( tempRegex, // There could be protected source inside another one. (#3869).
418
+ function( $, isComment, id )
419
+ {
420
+ return protectedHtml[ id ];
421
+ }
422
+ );
423
+
424
+ // Avoid protecting over protected, e.g. /\{.*?\}/
425
+ return ( /cke_temp(comment)?/ ).test( match ) ? match
426
+ : '<!--{cke_temp}' + ( protectedHtml.push( match ) - 1 ) + '-->';
427
+ });
428
+ }
429
+ data = data.replace( tempRegex, function( $, isComment, id )
430
+ {
431
+ return '<!--' + protectedSourceMarker +
432
+ ( isComment ? '{C}' : '' ) +
433
+ encodeURIComponent( protectedHtml[ id ] ).replace( /--/g, '%2D%2D' ) +
434
+ '-->';
435
+ }
436
+ );
437
+
438
+ // Different protection pattern is used for those that
439
+ // live in attributes to avoid from being HTML encoded.
440
+ return data.replace( /(['"]).*?\1/g, function ( match )
441
+ {
442
+ return match.replace( /<!--\{cke_protected\}([\s\S]+?)-->/g, function( match, data )
443
+ {
444
+ store[ store.id ] = decodeURIComponent( data );
445
+ return '{cke_protected_'+ ( store.id++ ) + '}';
446
+ });
447
+ });
448
+ }
449
+
450
+ CKEDITOR.plugins.add( 'htmldataprocessor',
451
+ {
452
+ requires : [ 'htmlwriter' ],
453
+
454
+ init : function( editor )
455
+ {
456
+ var dataProcessor = editor.dataProcessor = new CKEDITOR.htmlDataProcessor( editor );
457
+
458
+ dataProcessor.writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand;
459
+
460
+ dataProcessor.dataFilter.addRules( defaultDataFilterRules );
461
+ dataProcessor.dataFilter.addRules( defaultDataBlockFilterRules );
462
+ dataProcessor.htmlFilter.addRules( defaultHtmlFilterRules );
463
+
464
+ var defaultHtmlBlockFilterRules = { elements : {} };
465
+ for ( i in blockLikeTags )
466
+ defaultHtmlBlockFilterRules.elements[ i ] = getBlockExtension( true, editor.config.fillEmptyBlocks );
467
+
468
+ dataProcessor.htmlFilter.addRules( defaultHtmlBlockFilterRules );
469
+ },
470
+
471
+ onLoad : function()
472
+ {
473
+ ! ( 'fillEmptyBlocks' in CKEDITOR.config ) && ( CKEDITOR.config.fillEmptyBlocks = 1 );
474
+ }
475
+ });
476
+
477
+ CKEDITOR.htmlDataProcessor = function( editor )
478
+ {
479
+ this.editor = editor;
480
+
481
+ this.writer = new CKEDITOR.htmlWriter();
482
+ this.dataFilter = new CKEDITOR.htmlParser.filter();
483
+ this.htmlFilter = new CKEDITOR.htmlParser.filter();
484
+ };
485
+
486
+ CKEDITOR.htmlDataProcessor.prototype =
487
+ {
488
+ toHtml : function( data, fixForBody )
489
+ {
490
+ // The source data is already HTML, but we need to clean
491
+ // it up and apply the filter.
492
+
493
+ data = protectSource( data, this.editor );
494
+
495
+ // Before anything, we must protect the URL attributes as the
496
+ // browser may changing them when setting the innerHTML later in
497
+ // the code.
498
+ data = protectAttributes( data );
499
+
500
+ // Protect elements than can't be set inside a DIV. E.g. IE removes
501
+ // style tags from innerHTML. (#3710)
502
+ data = protectElements( data );
503
+
504
+ // Certain elements has problem to go through DOM operation, protect
505
+ // them by prefixing 'cke' namespace. (#3591)
506
+ data = protectElementsNames( data );
507
+
508
+ // All none-IE browsers ignore self-closed custom elements,
509
+ // protecting them into open-close. (#3591)
510
+ data = protectSelfClosingElements( data );
511
+
512
+ // Compensate one leading line break after <pre> open as browsers
513
+ // eat it up. (#5789)
514
+ data = protectPreFormatted( data );
515
+
516
+ // Call the browser to help us fixing a possibly invalid HTML
517
+ // structure.
518
+ var div = new CKEDITOR.dom.element( 'div' );
519
+ // Add fake character to workaround IE comments bug. (#3801)
520
+ div.setHtml( 'a' + data );
521
+ data = div.getHtml().substr( 1 );
522
+
523
+ // Unprotect "some" of the protected elements at this point.
524
+ data = unprotectElementNames( data );
525
+
526
+ data = unprotectElements( data );
527
+
528
+ // Restore the comments that have been protected, in this way they
529
+ // can be properly filtered.
530
+ data = unprotectRealComments( data );
531
+
532
+ // Now use our parser to make further fixes to the structure, as
533
+ // well as apply the filter.
534
+ var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data, fixForBody ),
535
+ writer = new CKEDITOR.htmlParser.basicWriter();
536
+
537
+ fragment.writeHtml( writer, this.dataFilter );
538
+ data = writer.getHtml( true );
539
+
540
+ // Protect the real comments again.
541
+ data = protectRealComments( data );
542
+
543
+ return data;
544
+ },
545
+
546
+ toDataFormat : function( html, fixForBody )
547
+ {
548
+ var writer = this.writer,
549
+ fragment = CKEDITOR.htmlParser.fragment.fromHtml( html, fixForBody );
550
+
551
+ writer.reset();
552
+
553
+ fragment.writeHtml( writer, this.htmlFilter );
554
+
555
+ var data = writer.getHtml( true );
556
+
557
+ // Restore those non-HTML protected source. (#4475,#4880)
558
+ data = unprotectRealComments( data );
559
+ data = unprotectSource( data, this.editor );
560
+
561
+ return data;
562
+ }
563
+ };
564
+ })();
565
+
566
+ /**
567
+ * Whether to force using "&" instead of "&amp;amp;" in elements attributes
568
+ * values, it's not recommended to change this setting for compliance with the
569
+ * W3C XHTML 1.0 standards (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).
570
+ * @name CKEDITOR.config.forceSimpleAmpersand
571
+ * @name CKEDITOR.config.forceSimpleAmpersand
572
+ * @type Boolean
573
+ * @default false
574
+ * @example
575
+ * config.forceSimpleAmpersand = false;
576
+ */
577
+
578
+ /**
579
+ * Whether a filler text (non-breaking space entity - &nbsp;) will be inserted into empty block elements in HTML output,
580
+ * this is used to render block elements properly with line-height; When a function is instead specified,
581
+ * it'll be passed a {@link CKEDITOR.htmlParser.element} to decide whether adding the filler text
582
+ * by expecting a boolean return value.
583
+ * @name CKEDITOR.config.fillEmptyBlocks
584
+ * @since 3.5
585
+ * @type Boolean
586
+ * @default true
587
+ * @example
588
+ * config.fillEmptyBlocks = false; // Prevent filler nodes in all empty blocks.
589
+ *
590
+ * // Prevent filler node only in float cleaners.
591
+ * config.fillEmptyBlocks = function( element )
592
+ * {
593
+ * if ( element.attributes[ 'class' ].indexOf ( 'clear-both' ) != -1 )
594
+ * return false;
595
+ * }
596
+ */