ckeditor-rails 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. data/README.md +10 -4
  2. data/ckeditor-rails.gemspec +1 -1
  3. data/lib/ckeditor-rails/version.rb +1 -1
  4. data/vendor/assets/ckeditor/ckeditor/INSTALL.html +92 -92
  5. data/vendor/assets/ckeditor/ckeditor/_samples/adobeair/application.xml +32 -32
  6. data/vendor/assets/ckeditor/ckeditor/_samples/adobeair/run.bat +9 -9
  7. data/vendor/assets/ckeditor/ckeditor/_samples/adobeair/sample.html +45 -45
  8. data/vendor/assets/ckeditor/ckeditor/_samples/ajax.html +98 -98
  9. data/vendor/assets/ckeditor/ckeditor/_samples/api.html +192 -192
  10. data/vendor/assets/ckeditor/ckeditor/_samples/api_dialog.html +198 -198
  11. data/vendor/assets/ckeditor/ckeditor/_samples/api_dialog/my_dialog.js +28 -28
  12. data/vendor/assets/ckeditor/ckeditor/_samples/asp/advanced.asp +105 -105
  13. data/vendor/assets/ckeditor/ckeditor/_samples/asp/events.asp +136 -136
  14. data/vendor/assets/ckeditor/ckeditor/_samples/asp/index.html +103 -103
  15. data/vendor/assets/ckeditor/ckeditor/_samples/asp/replace.asp +72 -72
  16. data/vendor/assets/ckeditor/ckeditor/_samples/asp/replaceall.asp +77 -77
  17. data/vendor/assets/ckeditor/ckeditor/_samples/asp/sample_posteddata.asp +46 -46
  18. data/vendor/assets/ckeditor/ckeditor/_samples/asp/standalone.asp +72 -72
  19. data/vendor/assets/ckeditor/ckeditor/_samples/assets/_posteddata.php +59 -59
  20. data/vendor/assets/ckeditor/ckeditor/_samples/assets/output_xhtml.css +204 -204
  21. data/vendor/assets/ckeditor/ckeditor/_samples/assets/parsesample.css +70 -70
  22. data/vendor/assets/ckeditor/ckeditor/_samples/assets/swfobject.js +18 -18
  23. data/vendor/assets/ckeditor/ckeditor/_samples/autogrow.html +107 -107
  24. data/vendor/assets/ckeditor/ckeditor/_samples/bbcode.html +125 -125
  25. data/vendor/assets/ckeditor/ckeditor/_samples/devtools.html +94 -94
  26. data/vendor/assets/ckeditor/ckeditor/_samples/divreplace.html +154 -154
  27. data/vendor/assets/ckeditor/ckeditor/_samples/enterkey.html +115 -115
  28. data/vendor/assets/ckeditor/ckeditor/_samples/fullpage.html +82 -82
  29. data/vendor/assets/ckeditor/ckeditor/_samples/index.html +116 -116
  30. data/vendor/assets/ckeditor/ckeditor/_samples/jqueryadapter.html +99 -99
  31. data/vendor/assets/ckeditor/ckeditor/_samples/output_for_flash.html +275 -275
  32. data/vendor/assets/ckeditor/ckeditor/_samples/output_html.html +285 -285
  33. data/vendor/assets/ckeditor/ckeditor/_samples/output_xhtml.html +177 -177
  34. data/vendor/assets/ckeditor/ckeditor/_samples/php/advanced.php +120 -120
  35. data/vendor/assets/ckeditor/ckeditor/_samples/php/events.php +153 -153
  36. data/vendor/assets/ckeditor/ckeditor/_samples/php/index.html +47 -47
  37. data/vendor/assets/ckeditor/ckeditor/_samples/php/replace.php +87 -87
  38. data/vendor/assets/ckeditor/ckeditor/_samples/php/replaceall.php +88 -88
  39. data/vendor/assets/ckeditor/ckeditor/_samples/php/standalone.php +83 -83
  40. data/vendor/assets/ckeditor/ckeditor/_samples/placeholder.html +81 -81
  41. data/vendor/assets/ckeditor/ckeditor/_samples/readonly.html +91 -91
  42. data/vendor/assets/ckeditor/ckeditor/_samples/replacebyclass.html +64 -64
  43. data/vendor/assets/ckeditor/ckeditor/_samples/replacebycode.html +97 -97
  44. data/vendor/assets/ckeditor/ckeditor/_samples/sample.css +163 -163
  45. data/vendor/assets/ckeditor/ckeditor/_samples/sample.js +65 -65
  46. data/vendor/assets/ckeditor/ckeditor/_samples/sample_posteddata.php +21 -21
  47. data/vendor/assets/ckeditor/ckeditor/_samples/sharedspaces.html +153 -153
  48. data/vendor/assets/ckeditor/ckeditor/_samples/skins.html +110 -110
  49. data/vendor/assets/ckeditor/ckeditor/_samples/stylesheetparser.html +93 -93
  50. data/vendor/assets/ckeditor/ckeditor/_samples/tableresize.html +115 -115
  51. data/vendor/assets/ckeditor/ckeditor/_samples/ui_color.html +129 -129
  52. data/vendor/assets/ckeditor/ckeditor/_samples/ui_languages.html +134 -134
  53. data/vendor/assets/ckeditor/ckeditor/_source/adapters/jquery.js +306 -306
  54. data/vendor/assets/ckeditor/ckeditor/_source/core/_bootstrap.js +87 -87
  55. data/vendor/assets/ckeditor/ckeditor/_source/core/ckeditor.js +141 -141
  56. data/vendor/assets/ckeditor/ckeditor/_source/core/ckeditor_base.js +227 -227
  57. data/vendor/assets/ckeditor/ckeditor/_source/core/ckeditor_basic.js +238 -238
  58. data/vendor/assets/ckeditor/ckeditor/_source/core/command.js +209 -209
  59. data/vendor/assets/ckeditor/ckeditor/_source/core/commanddefinition.js +129 -129
  60. data/vendor/assets/ckeditor/ckeditor/_source/core/config.js +431 -431
  61. data/vendor/assets/ckeditor/ckeditor/_source/core/dataprocessor.js +65 -65
  62. data/vendor/assets/ckeditor/ckeditor/_source/core/dom.js +20 -20
  63. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/comment.js +32 -32
  64. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/document.js +251 -251
  65. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/documentfragment.js +49 -49
  66. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/domobject.js +258 -258
  67. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/element.js +1681 -1681
  68. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/elementpath.js +119 -119
  69. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/event.js +145 -145
  70. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/node.js +695 -695
  71. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/nodelist.js +26 -26
  72. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/range.js +2032 -2032
  73. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/rangelist.js +213 -213
  74. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/text.js +128 -128
  75. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/walker.js +462 -462
  76. data/vendor/assets/ckeditor/ckeditor/_source/core/dom/window.js +96 -96
  77. data/vendor/assets/ckeditor/ckeditor/_source/core/dtd.js +266 -266
  78. data/vendor/assets/ckeditor/ckeditor/_source/core/editor.js +1059 -1059
  79. data/vendor/assets/ckeditor/ckeditor/_source/core/editor_basic.js +186 -186
  80. data/vendor/assets/ckeditor/ckeditor/_source/core/env.js +291 -291
  81. data/vendor/assets/ckeditor/ckeditor/_source/core/event.js +342 -342
  82. data/vendor/assets/ckeditor/ckeditor/_source/core/eventInfo.js +120 -120
  83. data/vendor/assets/ckeditor/ckeditor/_source/core/focusmanager.js +152 -152
  84. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser.js +224 -224
  85. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/basicwriter.js +145 -145
  86. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/cdata.js +43 -43
  87. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/comment.js +60 -60
  88. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/element.js +308 -308
  89. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/filter.js +288 -288
  90. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/fragment.js +497 -497
  91. data/vendor/assets/ckeditor/ckeditor/_source/core/htmlparser/text.js +55 -55
  92. data/vendor/assets/ckeditor/ckeditor/_source/core/lang.js +157 -157
  93. data/vendor/assets/ckeditor/ckeditor/_source/core/loader.js +240 -240
  94. data/vendor/assets/ckeditor/ckeditor/_source/core/plugindefinition.js +83 -83
  95. data/vendor/assets/ckeditor/ckeditor/_source/core/plugins.js +103 -103
  96. data/vendor/assets/ckeditor/ckeditor/_source/core/resourcemanager.js +238 -238
  97. data/vendor/assets/ckeditor/ckeditor/_source/core/scriptloader.js +180 -180
  98. data/vendor/assets/ckeditor/ckeditor/_source/core/skins.js +184 -184
  99. data/vendor/assets/ckeditor/ckeditor/_source/core/themes.js +19 -19
  100. data/vendor/assets/ckeditor/ckeditor/_source/core/tools.js +763 -763
  101. data/vendor/assets/ckeditor/ckeditor/_source/core/ui.js +128 -128
  102. data/vendor/assets/ckeditor/ckeditor/_source/lang/_languages.js +84 -84
  103. data/vendor/assets/ckeditor/ckeditor/_source/lang/_translationstatus.txt +61 -61
  104. data/vendor/assets/ckeditor/ckeditor/_source/lang/af.js +812 -812
  105. data/vendor/assets/ckeditor/ckeditor/_source/lang/ar.js +812 -812
  106. data/vendor/assets/ckeditor/ckeditor/_source/lang/bg.js +812 -812
  107. data/vendor/assets/ckeditor/ckeditor/_source/lang/bn.js +812 -812
  108. data/vendor/assets/ckeditor/ckeditor/_source/lang/bs.js +812 -812
  109. data/vendor/assets/ckeditor/ckeditor/_source/lang/ca.js +812 -812
  110. data/vendor/assets/ckeditor/ckeditor/_source/lang/cs.js +812 -812
  111. data/vendor/assets/ckeditor/ckeditor/_source/lang/cy.js +812 -812
  112. data/vendor/assets/ckeditor/ckeditor/_source/lang/da.js +812 -812
  113. data/vendor/assets/ckeditor/ckeditor/_source/lang/de.js +812 -812
  114. data/vendor/assets/ckeditor/ckeditor/_source/lang/el.js +812 -812
  115. data/vendor/assets/ckeditor/ckeditor/_source/lang/en-au.js +812 -812
  116. data/vendor/assets/ckeditor/ckeditor/_source/lang/en-ca.js +812 -812
  117. data/vendor/assets/ckeditor/ckeditor/_source/lang/en-gb.js +812 -812
  118. data/vendor/assets/ckeditor/ckeditor/_source/lang/en.js +812 -812
  119. data/vendor/assets/ckeditor/ckeditor/_source/lang/eo.js +812 -812
  120. data/vendor/assets/ckeditor/ckeditor/_source/lang/es.js +812 -812
  121. data/vendor/assets/ckeditor/ckeditor/_source/lang/et.js +812 -812
  122. data/vendor/assets/ckeditor/ckeditor/_source/lang/eu.js +812 -812
  123. data/vendor/assets/ckeditor/ckeditor/_source/lang/fa.js +812 -812
  124. data/vendor/assets/ckeditor/ckeditor/_source/lang/fi.js +812 -812
  125. data/vendor/assets/ckeditor/ckeditor/_source/lang/fo.js +812 -812
  126. data/vendor/assets/ckeditor/ckeditor/_source/lang/fr-ca.js +812 -812
  127. data/vendor/assets/ckeditor/ckeditor/_source/lang/fr.js +812 -812
  128. data/vendor/assets/ckeditor/ckeditor/_source/lang/gl.js +812 -812
  129. data/vendor/assets/ckeditor/ckeditor/_source/lang/gu.js +812 -812
  130. data/vendor/assets/ckeditor/ckeditor/_source/lang/he.js +812 -812
  131. data/vendor/assets/ckeditor/ckeditor/_source/lang/hi.js +812 -812
  132. data/vendor/assets/ckeditor/ckeditor/_source/lang/hr.js +812 -812
  133. data/vendor/assets/ckeditor/ckeditor/_source/lang/hu.js +812 -812
  134. data/vendor/assets/ckeditor/ckeditor/_source/lang/is.js +812 -812
  135. data/vendor/assets/ckeditor/ckeditor/_source/lang/it.js +812 -812
  136. data/vendor/assets/ckeditor/ckeditor/_source/lang/ja.js +812 -812
  137. data/vendor/assets/ckeditor/ckeditor/_source/lang/ka.js +812 -812
  138. data/vendor/assets/ckeditor/ckeditor/_source/lang/km.js +812 -812
  139. data/vendor/assets/ckeditor/ckeditor/_source/lang/ko.js +812 -812
  140. data/vendor/assets/ckeditor/ckeditor/_source/lang/lt.js +812 -812
  141. data/vendor/assets/ckeditor/ckeditor/_source/lang/lv.js +812 -812
  142. data/vendor/assets/ckeditor/ckeditor/_source/lang/mn.js +812 -812
  143. data/vendor/assets/ckeditor/ckeditor/_source/lang/ms.js +812 -812
  144. data/vendor/assets/ckeditor/ckeditor/_source/lang/nb.js +812 -812
  145. data/vendor/assets/ckeditor/ckeditor/_source/lang/nl.js +812 -812
  146. data/vendor/assets/ckeditor/ckeditor/_source/lang/no.js +812 -812
  147. data/vendor/assets/ckeditor/ckeditor/_source/lang/pl.js +812 -812
  148. data/vendor/assets/ckeditor/ckeditor/_source/lang/pt-br.js +811 -811
  149. data/vendor/assets/ckeditor/ckeditor/_source/lang/pt.js +812 -812
  150. data/vendor/assets/ckeditor/ckeditor/_source/lang/ro.js +812 -812
  151. data/vendor/assets/ckeditor/ckeditor/_source/lang/ru.js +812 -812
  152. data/vendor/assets/ckeditor/ckeditor/_source/lang/sk.js +812 -812
  153. data/vendor/assets/ckeditor/ckeditor/_source/lang/sl.js +812 -812
  154. data/vendor/assets/ckeditor/ckeditor/_source/lang/sr-latn.js +812 -812
  155. data/vendor/assets/ckeditor/ckeditor/_source/lang/sr.js +812 -812
  156. data/vendor/assets/ckeditor/ckeditor/_source/lang/sv.js +811 -811
  157. data/vendor/assets/ckeditor/ckeditor/_source/lang/th.js +812 -812
  158. data/vendor/assets/ckeditor/ckeditor/_source/lang/tr.js +811 -811
  159. data/vendor/assets/ckeditor/ckeditor/_source/lang/uk.js +812 -812
  160. data/vendor/assets/ckeditor/ckeditor/_source/lang/vi.js +812 -812
  161. data/vendor/assets/ckeditor/ckeditor/_source/lang/zh-cn.js +812 -812
  162. data/vendor/assets/ckeditor/ckeditor/_source/lang/zh.js +812 -812
  163. data/vendor/assets/ckeditor/ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +222 -222
  164. data/vendor/assets/ckeditor/ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -108
  165. data/vendor/assets/ckeditor/ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -216
  166. data/vendor/assets/ckeditor/ckeditor/_source/plugins/a11yhelp/plugin.js +47 -47
  167. data/vendor/assets/ckeditor/ckeditor/_source/plugins/about/dialogs/about.js +76 -76
  168. data/vendor/assets/ckeditor/ckeditor/_source/plugins/about/plugin.js +24 -24
  169. data/vendor/assets/ckeditor/ckeditor/_source/plugins/adobeair/plugin.js +228 -228
  170. data/vendor/assets/ckeditor/ckeditor/_source/plugins/ajax/plugin.js +152 -152
  171. data/vendor/assets/ckeditor/ckeditor/_source/plugins/autogrow/plugin.js +88 -88
  172. data/vendor/assets/ckeditor/ckeditor/_source/plugins/basicstyles/plugin.js +101 -101
  173. data/vendor/assets/ckeditor/ckeditor/_source/plugins/bbcode/plugin.js +931 -931
  174. data/vendor/assets/ckeditor/ckeditor/_source/plugins/bidi/plugin.js +334 -334
  175. data/vendor/assets/ckeditor/ckeditor/_source/plugins/blockquote/plugin.js +305 -305
  176. data/vendor/assets/ckeditor/ckeditor/_source/plugins/button/plugin.js +290 -290
  177. data/vendor/assets/ckeditor/ckeditor/_source/plugins/clipboard/dialogs/paste.js +223 -223
  178. data/vendor/assets/ckeditor/ckeditor/_source/plugins/clipboard/plugin.js +453 -453
  179. data/vendor/assets/ckeditor/ckeditor/_source/plugins/colorbutton/plugin.js +294 -294
  180. data/vendor/assets/ckeditor/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js +340 -340
  181. data/vendor/assets/ckeditor/ckeditor/_source/plugins/colordialog/plugin.js +15 -15
  182. data/vendor/assets/ckeditor/ckeditor/_source/plugins/contextmenu/plugin.js +177 -177
  183. data/vendor/assets/ckeditor/ckeditor/_source/plugins/devtools/lang/en.js +16 -16
  184. data/vendor/assets/ckeditor/ckeditor/_source/plugins/devtools/plugin.js +173 -173
  185. data/vendor/assets/ckeditor/ckeditor/_source/plugins/dialog/dialogDefinition.js +1166 -1166
  186. data/vendor/assets/ckeditor/ckeditor/_source/plugins/dialog/plugin.js +3289 -3289
  187. data/vendor/assets/ckeditor/ckeditor/_source/plugins/dialogadvtab/plugin.js +207 -207
  188. data/vendor/assets/ckeditor/ckeditor/_source/plugins/dialogui/plugin.js +1541 -1541
  189. data/vendor/assets/ckeditor/ckeditor/_source/plugins/div/dialogs/div.js +535 -535
  190. data/vendor/assets/ckeditor/ckeditor/_source/plugins/div/plugin.js +121 -121
  191. data/vendor/assets/ckeditor/ckeditor/_source/plugins/docprops/dialogs/docprops.js +686 -686
  192. data/vendor/assets/ckeditor/ckeditor/_source/plugins/docprops/plugin.js +22 -22
  193. data/vendor/assets/ckeditor/ckeditor/_source/plugins/domiterator/plugin.js +361 -361
  194. data/vendor/assets/ckeditor/ckeditor/_source/plugins/editingblock/plugin.js +275 -275
  195. data/vendor/assets/ckeditor/ckeditor/_source/plugins/elementspath/plugin.js +218 -218
  196. data/vendor/assets/ckeditor/ckeditor/_source/plugins/enterkey/plugin.js +413 -413
  197. data/vendor/assets/ckeditor/ckeditor/_source/plugins/entities/plugin.js +250 -250
  198. data/vendor/assets/ckeditor/ckeditor/_source/plugins/fakeobjects/plugin.js +175 -175
  199. data/vendor/assets/ckeditor/ckeditor/_source/plugins/filebrowser/plugin.js +524 -524
  200. data/vendor/assets/ckeditor/ckeditor/_source/plugins/find/dialogs/find.js +903 -903
  201. data/vendor/assets/ckeditor/ckeditor/_source/plugins/find/plugin.js +47 -47
  202. data/vendor/assets/ckeditor/ckeditor/_source/plugins/flash/dialogs/flash.js +673 -673
  203. data/vendor/assets/ckeditor/ckeditor/_source/plugins/flash/plugin.js +154 -154
  204. data/vendor/assets/ckeditor/ckeditor/_source/plugins/floatpanel/plugin.js +428 -428
  205. data/vendor/assets/ckeditor/ckeditor/_source/plugins/font/plugin.js +234 -234
  206. data/vendor/assets/ckeditor/ckeditor/_source/plugins/format/plugin.js +197 -197
  207. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/button.js +118 -118
  208. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/checkbox.js +153 -153
  209. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/form.js +177 -177
  210. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/hiddenfield.js +100 -100
  211. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/radio.js +135 -135
  212. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/select.js +558 -558
  213. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/textarea.js +114 -114
  214. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/dialogs/textfield.js +199 -199
  215. data/vendor/assets/ckeditor/ckeditor/_source/plugins/forms/plugin.js +288 -288
  216. data/vendor/assets/ckeditor/ckeditor/_source/plugins/horizontalrule/plugin.js +48 -48
  217. data/vendor/assets/ckeditor/ckeditor/_source/plugins/htmldataprocessor/plugin.js +595 -595
  218. data/vendor/assets/ckeditor/ckeditor/_source/plugins/htmlwriter/plugin.js +319 -319
  219. data/vendor/assets/ckeditor/ckeditor/_source/plugins/iframe/dialogs/iframe.js +229 -229
  220. data/vendor/assets/ckeditor/ckeditor/_source/plugins/iframe/plugin.js +87 -87
  221. data/vendor/assets/ckeditor/ckeditor/_source/plugins/iframedialog/plugin.js +188 -188
  222. data/vendor/assets/ckeditor/ckeditor/_source/plugins/image/dialogs/image.js +1406 -1406
  223. data/vendor/assets/ckeditor/ckeditor/_source/plugins/image/plugin.js +81 -81
  224. data/vendor/assets/ckeditor/ckeditor/_source/plugins/indent/plugin.js +461 -461
  225. data/vendor/assets/ckeditor/ckeditor/_source/plugins/justify/plugin.js +253 -253
  226. data/vendor/assets/ckeditor/ckeditor/_source/plugins/keystrokes/plugin.js +225 -225
  227. data/vendor/assets/ckeditor/ckeditor/_source/plugins/link/dialogs/anchor.js +144 -144
  228. data/vendor/assets/ckeditor/ckeditor/_source/plugins/link/dialogs/link.js +1424 -1424
  229. data/vendor/assets/ckeditor/ckeditor/_source/plugins/link/plugin.js +374 -374
  230. data/vendor/assets/ckeditor/ckeditor/_source/plugins/list/plugin.js +734 -734
  231. data/vendor/assets/ckeditor/ckeditor/_source/plugins/listblock/plugin.js +268 -268
  232. data/vendor/assets/ckeditor/ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +225 -225
  233. data/vendor/assets/ckeditor/ckeditor/_source/plugins/liststyle/plugin.js +66 -66
  234. data/vendor/assets/ckeditor/ckeditor/_source/plugins/maximize/plugin.js +352 -352
  235. data/vendor/assets/ckeditor/ckeditor/_source/plugins/menu/plugin.js +541 -541
  236. data/vendor/assets/ckeditor/ckeditor/_source/plugins/menubutton/plugin.js +98 -98
  237. data/vendor/assets/ckeditor/ckeditor/_source/plugins/newpage/plugin.js +54 -54
  238. data/vendor/assets/ckeditor/ckeditor/_source/plugins/pagebreak/plugin.js +164 -164
  239. data/vendor/assets/ckeditor/ckeditor/_source/plugins/panel/plugin.js +403 -403
  240. data/vendor/assets/ckeditor/ckeditor/_source/plugins/panelbutton/plugin.js +144 -144
  241. data/vendor/assets/ckeditor/ckeditor/_source/plugins/pastefromword/filter/default.js +1367 -1367
  242. data/vendor/assets/ckeditor/ckeditor/_source/plugins/pastefromword/plugin.js +141 -141
  243. data/vendor/assets/ckeditor/ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +67 -67
  244. data/vendor/assets/ckeditor/ckeditor/_source/plugins/pastetext/plugin.js +98 -98
  245. data/vendor/assets/ckeditor/ckeditor/_source/plugins/placeholder/dialogs/placeholder.js +71 -71
  246. data/vendor/assets/ckeditor/ckeditor/_source/plugins/placeholder/lang/en.js +16 -16
  247. data/vendor/assets/ckeditor/ckeditor/_source/plugins/placeholder/lang/he.js +16 -16
  248. data/vendor/assets/ckeditor/ckeditor/_source/plugins/placeholder/plugin.js +171 -171
  249. data/vendor/assets/ckeditor/ckeditor/_source/plugins/popup/plugin.js +64 -64
  250. data/vendor/assets/ckeditor/ckeditor/_source/plugins/preview/plugin.js +109 -109
  251. data/vendor/assets/ckeditor/ckeditor/_source/plugins/print/plugin.js +42 -42
  252. data/vendor/assets/ckeditor/ckeditor/_source/plugins/removeformat/plugin.js +185 -185
  253. data/vendor/assets/ckeditor/ckeditor/_source/plugins/resize/plugin.js +168 -168
  254. data/vendor/assets/ckeditor/ckeditor/_source/plugins/richcombo/plugin.js +381 -381
  255. data/vendor/assets/ckeditor/ckeditor/_source/plugins/save/plugin.js +56 -56
  256. data/vendor/assets/ckeditor/ckeditor/_source/plugins/scayt/dialogs/options.js +537 -537
  257. data/vendor/assets/ckeditor/ckeditor/_source/plugins/scayt/dialogs/toolbar.css +71 -71
  258. data/vendor/assets/ckeditor/ckeditor/_source/plugins/scayt/plugin.js +964 -964
  259. data/vendor/assets/ckeditor/ckeditor/_source/plugins/selection/plugin.js +1601 -1601
  260. data/vendor/assets/ckeditor/ckeditor/_source/plugins/showblocks/plugin.js +160 -160
  261. data/vendor/assets/ckeditor/ckeditor/_source/plugins/showborders/plugin.js +207 -207
  262. data/vendor/assets/ckeditor/ckeditor/_source/plugins/smiley/dialogs/smiley.js +224 -224
  263. data/vendor/assets/ckeditor/ckeditor/_source/plugins/smiley/plugin.js +94 -94
  264. data/vendor/assets/ckeditor/ckeditor/_source/plugins/sourcearea/plugin.js +209 -209
  265. data/vendor/assets/ckeditor/ckeditor/_source/plugins/specialchar/dialogs/specialchar.js +350 -350
  266. data/vendor/assets/ckeditor/ckeditor/_source/plugins/specialchar/lang/en.js +89 -89
  267. data/vendor/assets/ckeditor/ckeditor/_source/plugins/specialchar/plugin.js +70 -70
  268. data/vendor/assets/ckeditor/ckeditor/_source/plugins/styles/plugin.js +1696 -1696
  269. data/vendor/assets/ckeditor/ckeditor/_source/plugins/styles/styles/default.js +88 -88
  270. data/vendor/assets/ckeditor/ckeditor/_source/plugins/stylescombo/plugin.js +218 -218
  271. data/vendor/assets/ckeditor/ckeditor/_source/plugins/stylesheetparser/plugin.js +148 -148
  272. data/vendor/assets/ckeditor/ckeditor/_source/plugins/tab/plugin.js +367 -367
  273. data/vendor/assets/ckeditor/ckeditor/_source/plugins/table/dialogs/table.js +602 -602
  274. data/vendor/assets/ckeditor/ckeditor/_source/plugins/table/plugin.js +78 -78
  275. data/vendor/assets/ckeditor/ckeditor/_source/plugins/tableresize/plugin.js +443 -443
  276. data/vendor/assets/ckeditor/ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +525 -525
  277. data/vendor/assets/ckeditor/ckeditor/_source/plugins/tabletools/plugin.js +1194 -1194
  278. data/vendor/assets/ckeditor/ckeditor/_source/plugins/templates/dialogs/templates.js +234 -234
  279. data/vendor/assets/ckeditor/ckeditor/_source/plugins/templates/plugin.js +99 -99
  280. data/vendor/assets/ckeditor/ckeditor/_source/plugins/templates/templates/default.js +94 -94
  281. data/vendor/assets/ckeditor/ckeditor/_source/plugins/toolbar/plugin.js +545 -545
  282. data/vendor/assets/ckeditor/ckeditor/_source/plugins/uicolor/dialogs/uicolor.js +205 -205
  283. data/vendor/assets/ckeditor/ckeditor/_source/plugins/uicolor/lang/en.js +15 -15
  284. data/vendor/assets/ckeditor/ckeditor/_source/plugins/uicolor/lang/he.js +15 -15
  285. data/vendor/assets/ckeditor/ckeditor/_source/plugins/uicolor/plugin.js +37 -37
  286. data/vendor/assets/ckeditor/ckeditor/_source/plugins/uicolor/yui/assets/yui.css +15 -15
  287. data/vendor/assets/ckeditor/ckeditor/_source/plugins/uicolor/yui/yui.js +71 -71
  288. data/vendor/assets/ckeditor/ckeditor/_source/plugins/undo/plugin.js +580 -580
  289. data/vendor/assets/ckeditor/ckeditor/_source/plugins/wsc/dialogs/ciframe.html +49 -49
  290. data/vendor/assets/ckeditor/ckeditor/_source/plugins/wsc/dialogs/tmpFrameset.html +52 -52
  291. data/vendor/assets/ckeditor/ckeditor/_source/plugins/wsc/dialogs/wsc.css +82 -82
  292. data/vendor/assets/ckeditor/ckeditor/_source/plugins/wsc/dialogs/wsc.js +192 -192
  293. data/vendor/assets/ckeditor/ckeditor/_source/plugins/wsc/plugin.js +33 -33
  294. data/vendor/assets/ckeditor/ckeditor/_source/plugins/wysiwygarea/plugin.js +1351 -1351
  295. data/vendor/assets/ckeditor/ckeditor/_source/plugins/xml/plugin.js +170 -170
  296. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/dialog.css +943 -943
  297. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/editor.css +25 -25
  298. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/elementspath.css +73 -73
  299. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/icons.css +366 -366
  300. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/mainui.css +203 -203
  301. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/menu.css +232 -232
  302. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/panel.css +217 -217
  303. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/presets.css +49 -49
  304. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/reset.css +84 -84
  305. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/richcombo.css +287 -287
  306. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/skin.js +236 -236
  307. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/templates.css +88 -88
  308. data/vendor/assets/ckeditor/ckeditor/_source/skins/kama/toolbar.css +407 -407
  309. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/dialog.css +844 -844
  310. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/editor.css +25 -25
  311. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/elementspath.css +74 -74
  312. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/icons.css +363 -363
  313. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/mainui.css +153 -153
  314. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/menu.css +229 -229
  315. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/panel.css +212 -212
  316. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/presets.css +49 -49
  317. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/reset.css +84 -84
  318. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/richcombo.css +309 -309
  319. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/skin.js +74 -74
  320. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/templates.css +87 -87
  321. data/vendor/assets/ckeditor/ckeditor/_source/skins/office2003/toolbar.css +522 -522
  322. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/dialog.css +861 -861
  323. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/editor.css +25 -25
  324. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/elementspath.css +74 -74
  325. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/icons.css +363 -363
  326. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/mainui.css +162 -162
  327. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/menu.css +232 -232
  328. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/panel.css +212 -212
  329. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/presets.css +50 -50
  330. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/reset.css +84 -84
  331. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/richcombo.css +302 -302
  332. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/skin.js +70 -70
  333. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/templates.css +87 -87
  334. data/vendor/assets/ckeditor/ckeditor/_source/skins/v2/toolbar.css +465 -465
  335. data/vendor/assets/ckeditor/ckeditor/_source/themes/default/theme.js +395 -395
  336. data/vendor/assets/ckeditor/ckeditor/adapters/jquery.js +6 -6
  337. data/vendor/assets/ckeditor/ckeditor/ckeditor.asp +955 -955
  338. data/vendor/assets/ckeditor/ckeditor/ckeditor.pack +211 -211
  339. data/vendor/assets/ckeditor/ckeditor/ckeditor.php +29 -29
  340. data/vendor/assets/ckeditor/ckeditor/ckeditor_basic.js +8 -8
  341. data/vendor/assets/ckeditor/ckeditor/ckeditor_basic_source.js +20 -20
  342. data/vendor/assets/ckeditor/ckeditor/ckeditor_php4.php +566 -566
  343. data/vendor/assets/ckeditor/ckeditor/ckeditor_php5.php +556 -556
  344. data/vendor/assets/ckeditor/ckeditor/config.js +11 -11
  345. data/vendor/assets/ckeditor/ckeditor/contents.css +25 -25
  346. data/vendor/assets/ckeditor/ckeditor/themes/default/theme.js +8 -8
  347. metadata +7 -9
@@ -1,6 +1,6 @@
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(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!CKEDITOR.env.isCompatible)return this;if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})();
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(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!CKEDITOR.env.isCompatible)return this;if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})();
@@ -1,955 +1,955 @@
1
- <%
2
- '
3
- ' Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
4
- ' For licensing, see LICENSE.html or http://ckeditor.com/license
5
-
6
- ' Shared variable for all instances ("static")
7
- dim CKEDITOR_initComplete
8
- dim CKEDITOR_returnedEvents
9
-
10
- ''
11
- ' \brief CKEditor class that can be used to create editor
12
- ' instances in ASP pages on server side.
13
- ' @see http://ckeditor.com
14
- '
15
- ' Sample usage:
16
- ' @code
17
- ' editor = new CKEditor
18
- ' editor.editor "editor1", "<p>Initial value.</p>", empty, empty
19
- ' @endcode
20
-
21
- Class CKEditor
22
-
23
- ''
24
- ' The version of %CKEditor.
25
- private version
26
-
27
- ''
28
- ' A constant string unique for each release of %CKEditor.
29
- private mTimeStamp
30
-
31
- ''
32
- ' URL to the %CKEditor installation directory (absolute or relative to document root).
33
- ' If not set, CKEditor will try to guess it's path.
34
- '
35
- ' Example usage:
36
- ' @code
37
- ' editor.basePath = "/ckeditor/"
38
- ' @endcode
39
- Public basePath
40
-
41
- ''
42
- ' A boolean variable indicating whether CKEditor has been initialized.
43
- ' Set it to true only if you have already included
44
- ' &lt;script&gt; tag loading ckeditor.js in your website.
45
- Public initialized
46
-
47
- ''
48
- ' Boolean variable indicating whether created code should be printed out or returned by a function.
49
- '
50
- ' Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function.
51
- ' @code
52
- ' editor = new CKEditor
53
- ' editor.returnOutput = true
54
- ' code = editor.editor("editor1", "<p>Initial value.</p>", empty, empty)
55
- ' response.write "<p>Editor 1:</p>"
56
- ' response.write code
57
- ' @endcode
58
- Public returnOutput
59
-
60
- ''
61
- ' A Dictionary with textarea attributes.
62
- '
63
- ' When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
64
- ' it will be displayed to anyone with JavaScript disabled or with incompatible browser.
65
- public textareaAttributes
66
-
67
- ''
68
- ' A string indicating the creation date of %CKEditor.
69
- ' Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
70
- public timestamp
71
-
72
- ''
73
- ' A dictionary that holds the instance configuration.
74
- private oInstanceConfig
75
-
76
- ''
77
- ' A dictionary that holds the configuration for all the instances.
78
- private oAllInstancesConfig
79
-
80
- ''
81
- ' A dictionary that holds event listeners for the instance.
82
- private oInstanceEvents
83
-
84
- ''
85
- ' A dictionary that holds event listeners for all the instances.
86
- private oAllInstancesEvents
87
-
88
- ''
89
- ' A Dictionary that holds global event listeners (CKEDITOR object)
90
- private oGlobalEvents
91
-
92
-
93
- Private Sub Class_Initialize()
94
- version = "3.6.1"
95
- timeStamp = "B5GJ5GG"
96
- mTimeStamp = "B5GJ5GG"
97
-
98
- Set oInstanceConfig = CreateObject("Scripting.Dictionary")
99
- Set oAllInstancesConfig = CreateObject("Scripting.Dictionary")
100
-
101
- Set oInstanceEvents = CreateObject("Scripting.Dictionary")
102
- Set oAllInstancesEvents = CreateObject("Scripting.Dictionary")
103
- Set oGlobalEvents = CreateObject("Scripting.Dictionary")
104
-
105
- Set textareaAttributes = CreateObject("Scripting.Dictionary")
106
- textareaAttributes.Add "rows", 8
107
- textareaAttributes.Add "cols", 60
108
- End Sub
109
-
110
- ''
111
- ' Creates a %CKEditor instance.
112
- ' In incompatible browsers %CKEditor will downgrade to plain HTML &lt;textarea&gt; element.
113
- '
114
- ' @param name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element).
115
- ' @param value (string) Initial value.
116
- '
117
- ' Example usage:
118
- ' @code
119
- ' set editor = New CKEditor
120
- ' editor.editor "field1", "<p>Initial value.</p>"
121
- ' @endcode
122
- '
123
- ' Advanced example:
124
- ' @code
125
- ' set editor = new CKEditor
126
- ' set config = CreateObject("Scripting.Dictionary")
127
- ' config.Add "toolbar", Array( _
128
- ' Array( "Source", "-", "Bold", "Italic", "Underline", "Strike" ), _
129
- ' Array( "Image", "Link", "Unlink", "Anchor" ) _
130
- ' )
131
- ' set events = CreateObject("Scripting.Dictionary")
132
- ' events.Add "instanceReady", "function (evt) { alert('Loaded second editor: ' + evt.editor.name );}"
133
-
134
- ' editor.editor "field1", "<p>Initial value.</p>", config, events
135
- ' @endcode
136
- '
137
- public function editor(name, value)
138
- dim attr, out, js, customConfig, extraConfig
139
- dim attribute
140
-
141
- attr = ""
142
-
143
- for each attribute in textareaAttributes
144
- attr = attr & " " & attribute & "=""" & replace( textareaAttributes( attribute ), """", "&quot" ) & """"
145
- next
146
-
147
- out = "<textarea name=""" & name & """" & attr & ">" & Server.HtmlEncode(value) & "</textarea>" & vbcrlf
148
-
149
- if not(initialized) then
150
- out = out & init()
151
- end if
152
-
153
- set customConfig = configSettings()
154
- js = returnGlobalEvents()
155
-
156
- extraConfig = (new JSON)( empty, customConfig, false )
157
- if extraConfig<>"" then extraConfig = ", " & extraConfig
158
- js = js & "CKEDITOR.replace('" & name & "'" & extraConfig & ");"
159
-
160
- out = out & script(js)
161
-
162
- if not(returnOutput) then
163
- response.write out
164
- out = ""
165
- end if
166
-
167
- editor = out
168
-
169
- oInstanceConfig.RemoveAll
170
- oInstanceEvents.RemoveAll
171
- end function
172
-
173
- ''
174
- ' Replaces a &lt;textarea&gt; with a %CKEditor instance.
175
- '
176
- ' @param id (string) The id or name of textarea element.
177
- '
178
- ' Example 1: adding %CKEditor to &lt;textarea name="article"&gt;&lt;/textarea&gt; element:
179
- ' @code
180
- ' set editor = New CKEditor
181
- ' editor.replace "article"
182
- ' @endcode
183
- '
184
- public function replaceInstance(id)
185
- dim out, js, customConfig, extraConfig
186
-
187
- out = ""
188
- if not(initialized) then
189
- out = out & init()
190
- end if
191
-
192
- set customConfig = configSettings()
193
- js = returnGlobalEvents()
194
-
195
- extraConfig = (new JSON)( empty, customConfig, false )
196
- if extraConfig<>"" then extraConfig = ", " & extraConfig
197
- js = js & "CKEDITOR.replace('" & id & "'" & extraConfig & ");"
198
-
199
- out = out & script(js)
200
-
201
- if not(returnOutput) then
202
- response.write out
203
- out = ""
204
- end if
205
-
206
- replaceInstance = out
207
-
208
- oInstanceConfig.RemoveAll
209
- oInstanceEvents.RemoveAll
210
- end function
211
-
212
- ''
213
- ' Replace all &lt;textarea&gt; elements available in the document with editor instances.
214
- '
215
- ' @param className (string) If set, replace all textareas with class className in the page.
216
- '
217
- ' Example 1: replace all &lt;textarea&gt; elements in the page.
218
- ' @code
219
- ' editor = new CKEditor
220
- ' editor.replaceAll empty
221
- ' @endcode
222
- '
223
- ' Example 2: replace all &lt;textarea class="myClassName"&gt; elements in the page.
224
- ' @code
225
- ' editor = new CKEditor
226
- ' editor.replaceAll 'myClassName'
227
- ' @endcode
228
- '
229
- function replaceAll(className)
230
- dim out, js, customConfig
231
-
232
- out = ""
233
- if not(initialized) then
234
- out = out & init()
235
- end if
236
-
237
- set customConfig = configSettings()
238
- js = returnGlobalEvents()
239
-
240
- if (customConfig.Count=0) then
241
- if (isEmpty(className)) then
242
- js = js & "CKEDITOR.replaceAll();"
243
- else
244
- js = js & "CKEDITOR.replaceAll('" & className & "');"
245
- end if
246
- else
247
- js = js & "CKEDITOR.replaceAll( function(textarea, config) {\n"
248
- if not(isEmpty(className)) then
249
- js = js & " var classRegex = new RegExp('(?:^| )' + '" & className & "' + '(?:$| )');\n"
250
- js = js & " if (!classRegex.test(textarea.className))\n"
251
- js = js & " return false;\n"
252
- end if
253
- js = js & " CKEDITOR.tools.extend(config, " & (new JSON)( empty, customConfig, false ) & ", true);"
254
- js = js & "} );"
255
- end if
256
-
257
- out = out & script(js)
258
-
259
- if not(returnOutput) then
260
- response.write out
261
- out = ""
262
- end if
263
-
264
- replaceAll = out
265
-
266
- oInstanceConfig.RemoveAll
267
- oInstanceEvents.RemoveAll
268
- end function
269
-
270
-
271
- ''
272
- ' A Dictionary that holds the %CKEditor configuration for all instances
273
- ' For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
274
- '
275
- ' Example usage:
276
- ' @code
277
- ' editor.config("height") = 400
278
- ' // Use @@ at the beggining of a string to ouput it without surrounding quotes.
279
- ' editor.config("width") = "@@screen.width * 0.8"
280
- ' @endcode
281
- Public Property Let Config( configKey, configValue )
282
- oAllInstancesConfig.Add configKey, configValue
283
- End Property
284
-
285
- ''
286
- ' Configuration options for the next instance
287
- '
288
- Public Property Let instanceConfig( configKey, configValue )
289
- oInstanceConfig.Add configKey, configValue
290
- End Property
291
-
292
- ''
293
- ' Adds event listener.
294
- ' Events are fired by %CKEditor in various situations.
295
- '
296
- ' @param eventName (string) Event name.
297
- ' @param javascriptCode (string) Javascript anonymous function or function name.
298
- '
299
- ' Example usage:
300
- ' @code
301
- ' editor.addEventHandler "instanceReady", "function (ev) { " & _
302
- ' " alert('Loaded: ' + ev.editor.name); " & _
303
- ' "}"
304
- ' @endcode
305
- '
306
- public sub addEventHandler(eventName, javascriptCode)
307
- if not(oAllInstancesEvents.Exists( eventName ) ) then
308
- oAllInstancesEvents.Add eventName, Array()
309
- end if
310
-
311
- dim listeners, size
312
- listeners = oAllInstancesEvents( eventName )
313
- size = ubound(listeners) + 1
314
- redim preserve listeners(size)
315
- listeners(size) = javascriptCode
316
-
317
- oAllInstancesEvents( eventName ) = listeners
318
- ' '' Avoid duplicates. fixme...
319
- ' if (!in_array($javascriptCode, $this->_events[$event])) {
320
- ' $this->_events[$event][] = $javascriptCode;
321
- ' }
322
- end sub
323
-
324
- ''
325
- ' Clear registered event handlers.
326
- ' Note: this function will have no effect on already created editor instances.
327
- '
328
- ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed.
329
- '
330
- public sub clearEventHandlers( eventName )
331
- if not(isEmpty( eventName )) then
332
- oAllInstancesEvents.Remove eventName
333
- else
334
- oAllInstancesEvents.RemoveAll
335
- end if
336
- end sub
337
-
338
-
339
- ''
340
- ' Adds event listener only for the next instance.
341
- ' Events are fired by %CKEditor in various situations.
342
- '
343
- ' @param eventName (string) Event name.
344
- ' @param javascriptCode (string) Javascript anonymous function or function name.
345
- '
346
- ' Example usage:
347
- ' @code
348
- ' editor.addInstanceEventHandler "instanceReady", "function (ev) { " & _
349
- ' " alert('Loaded: ' + ev.editor.name); " & _
350
- ' "}"
351
- ' @endcode
352
- '
353
- public sub addInstanceEventHandler(eventName, javascriptCode)
354
- if not(oInstanceEvents.Exists( eventName ) ) then
355
- oInstanceEvents.Add eventName, Array()
356
- end if
357
-
358
- dim listeners, size
359
- listeners = oInstanceEvents( eventName )
360
- size = ubound(listeners) + 1
361
- redim preserve listeners(size)
362
- listeners(size) = javascriptCode
363
-
364
- oInstanceEvents( eventName ) = listeners
365
- ' '' Avoid duplicates. fixme...
366
- ' if (!in_array($javascriptCode, $this->_events[$event])) {
367
- ' $this->_events[$event][] = $javascriptCode;
368
- ' }
369
- end sub
370
-
371
- ''
372
- ' Clear registered event handlers.
373
- ' Note: this function will have no effect on already created editor instances.
374
- '
375
- ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed.
376
- '
377
- public sub clearInstanceEventHandlers( eventName )
378
- if not(isEmpty( eventName )) then
379
- oInstanceEvents.Remove eventName
380
- else
381
- oInstanceEvents.RemoveAll
382
- end if
383
- end sub
384
-
385
- ''
386
- ' Adds global event listener.
387
- '
388
- ' @param event (string) Event name.
389
- ' @param javascriptCode (string) Javascript anonymous function or function name.
390
- '
391
- ' Example usage:
392
- ' @code
393
- ' editor.addGlobalEventHandler "dialogDefinition", "function (ev) { " & _
394
- ' " alert('Loading dialog: ' + ev.data.name); " & _
395
- ' "}"
396
- ' @endcode
397
- '
398
- public sub addGlobalEventHandler( eventName, javascriptCode)
399
- if not(oGlobalEvents.Exists( eventName ) ) then
400
- oGlobalEvents.Add eventName, Array()
401
- end if
402
-
403
- dim listeners, size
404
- listeners = oGlobalEvents( eventName )
405
- size = ubound(listeners) + 1
406
- redim preserve listeners(size)
407
- listeners(size) = javascriptCode
408
-
409
- oGlobalEvents( eventName ) = listeners
410
-
411
- ' // Avoid duplicates.
412
- ' if (!in_array($javascriptCode, $this->_globalEvents[$event])) {
413
- ' $this->_globalEvents[$event][] = $javascriptCode;
414
- ' }
415
- end sub
416
-
417
- ''
418
- ' Clear registered global event handlers.
419
- ' Note: this function will have no effect if the event handler has been already printed/returned.
420
- '
421
- ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed .
422
- '
423
- public sub clearGlobalEventHandlers( eventName )
424
- if not(isEmpty( eventName )) then
425
- oGlobalEvents.Remove eventName
426
- else
427
- oGlobalEvents.RemoveAll
428
- end if
429
- end sub
430
-
431
- ''
432
- ' Prints javascript code.
433
- '
434
- ' @param string js
435
- '
436
- private function script(js)
437
- script = "<script type=""text/javascript"">" & _
438
- "//<![CDATA[" & vbcrlf & _
439
- js & vbcrlf & _
440
- "//]]>" & _
441
- "</script>" & vbcrlf
442
- end function
443
-
444
- ''
445
- ' Returns the configuration array (global and instance specific settings are merged into one array).
446
- '
447
- ' @param instanceConfig (Dictionary) The specific configurations to apply to editor instance.
448
- ' @param instanceEvents (Dictionary) Event listeners for editor instance.
449
- '
450
- private function configSettings()
451
- dim mergedConfig, mergedEvents
452
- set mergedConfig = cloneDictionary(oAllInstancesConfig)
453
- set mergedEvents = cloneDictionary(oAllInstancesEvents)
454
-
455
- if not(isEmpty(oInstanceConfig)) then
456
- set mergedConfig = mergeDictionary(mergedConfig, oInstanceConfig)
457
- end if
458
-
459
- if not(isEmpty(oInstanceEvents)) then
460
- for each eventName in oInstanceEvents
461
- code = oInstanceEvents( eventName )
462
-
463
- if not(mergedEvents.Exists( eventName)) then
464
- mergedEvents.Add eventName, code
465
- else
466
-
467
- dim listeners, size
468
- listeners = mergedEvents( eventName )
469
- size = ubound(listeners)
470
- if isArray( code ) then
471
- addedCount = ubound(code)
472
- redim preserve listeners( size + addedCount + 1 )
473
- for i = 0 to addedCount
474
- listeners(size + i + 1) = code (i)
475
- next
476
- else
477
- size = size + 1
478
- redim preserve listeners(size)
479
- listeners(size) = code
480
- end if
481
-
482
- mergedEvents( eventName ) = listeners
483
- end if
484
- next
485
-
486
- end if
487
-
488
- dim i, eventName, handlers, configON, ub, code
489
-
490
- if mergedEvents.Count>0 then
491
- if mergedConfig.Exists( "on" ) then
492
- set configON = mergedConfig.items( "on" )
493
- else
494
- set configON = CreateObject("Scripting.Dictionary")
495
- mergedConfig.Add "on", configOn
496
- end if
497
-
498
- for each eventName in mergedEvents
499
- handlers = mergedEvents( eventName )
500
- code = ""
501
-
502
- if isArray(handlers) then
503
- uB = ubound(handlers)
504
- if (uB = 0) then
505
- code = handlers(0)
506
- else
507
- code = "function (ev) {"
508
- for i=0 to uB
509
- code = code & "(" & handlers(i) & ")(ev);"
510
- next
511
- code = code & "}"
512
- end if
513
- else
514
- code = handlers
515
- end if
516
- ' Using @@ at the beggining to signal JSON that we don't want this quoted.
517
- configON.Add eventName, "@@" & code
518
- next
519
-
520
- ' set mergedConfig.Item("on") = configOn
521
- end if
522
-
523
- set configSettings = mergedConfig
524
- end function
525
-
526
- ''
527
- ' Returns a copy of a scripting.dictionary object
528
- '
529
- private function cloneDictionary( base )
530
- dim newOne, tmpKey
531
-
532
- Set newOne = CreateObject("Scripting.Dictionary")
533
- for each tmpKey in base
534
- newOne.Add tmpKey , base( tmpKey )
535
- next
536
-
537
- set cloneDictionary = newOne
538
- end function
539
-
540
- ''
541
- ' Combines two scripting.dictionary objects
542
- ' The base object isn't modified, and extra gets all the properties in base
543
- '
544
- private function mergeDictionary(base, extra)
545
- dim newOne, tmpKey
546
-
547
- for each tmpKey in base
548
- if not(extra.Exists( tmpKey )) then
549
- extra.Add tmpKey, base( tmpKey )
550
- end if
551
- next
552
-
553
- set mergeDictionary = extra
554
- end function
555
-
556
- ''
557
- ' Return global event handlers.
558
- '
559
- private function returnGlobalEvents()
560
- dim out, eventName, handlers
561
- dim handlersForEvent, handler, code, i
562
- out = ""
563
-
564
- if (isempty(CKEDITOR_returnedEvents)) then
565
- set CKEDITOR_returnedEvents = CreateObject("Scripting.Dictionary")
566
- end if
567
-
568
- for each eventName in oGlobalEvents
569
- handlers = oGlobalEvents( eventName )
570
-
571
- if not(CKEDITOR_returnedEvents.Exists(eventName)) then
572
- CKEDITOR_returnedEvents.Add eventName, CreateObject("Scripting.Dictionary")
573
- end if
574
-
575
- set handlersForEvent = CKEDITOR_returnedEvents.Item( eventName )
576
-
577
- ' handlersForEvent is another dictionary
578
- ' and handlers is an array
579
-
580
- for i = 0 to ubound(handlers)
581
- code = handlers( i )
582
-
583
- ' Return only new events
584
- if not(handlersForEvent.Exists( code )) then
585
- if (out <> "") then out = out & vbcrlf
586
- out = out & "CKEDITOR.on('" & eventName & "', " & code & ");"
587
- handlersForEvent.Add code, code
588
- end if
589
- next
590
- next
591
-
592
- returnGlobalEvents = out
593
- end function
594
-
595
- ''
596
- ' Initializes CKEditor (executed only once).
597
- '
598
- private function init()
599
- dim out, args, path, extraCode, file
600
- out = ""
601
-
602
- if (CKEDITOR_initComplete) then
603
- init = ""
604
- exit function
605
- end if
606
-
607
- if (initialized) then
608
- CKEDITOR_initComplete = true
609
- init = ""
610
- exit function
611
- end if
612
-
613
- args = ""
614
- path = ckeditorPath()
615
-
616
- if (timestamp <> "") and (timestamp <> "%" & "TIMESTAMP%") then
617
- args = "?t=" & timestamp
618
- end if
619
-
620
- ' Skip relative paths...
621
- if (instr(path, "..") <> 0) then
622
- out = out & script("window.CKEDITOR_BASEPATH='" & path & "';")
623
- end if
624
-
625
- out = out & "<scr" & "ipt type=""text/javascript"" src=""" & path & ckeditorFileName() & args & """></scr" & "ipt>" & vbcrlf
626
-
627
- extraCode = ""
628
- if (timestamp <> mTimeStamp) then
629
- extraCode = extraCode & "CKEDITOR.timestamp = '" & timestamp & "';"
630
- end if
631
- if (extraCode <> "") then
632
- out = out & script(extraCode)
633
- end if
634
-
635
- CKEDITOR_initComplete = true
636
- initialized = true
637
-
638
- init = out
639
- end function
640
-
641
- private function ckeditorFileName()
642
- ckeditorFileName = "ckeditor.js"
643
- end function
644
-
645
- ''
646
- ' Return path to ckeditor.js.
647
- '
648
- private function ckeditorPath()
649
- if (basePath <> "") then
650
- ckeditorPath = basePath
651
- else
652
- ' In classic ASP we can't get the location of this included script
653
- ckeditorPath = "/ckeditor/"
654
- end if
655
-
656
- ' Try to check if that folder contains the CKEditor files:
657
- ' If it's a full URL avoid checking it as it might point to an external server.
658
- if (instr(ckeditorPath, "://") <> 0) then exit function
659
-
660
- dim filename, oFSO, exists
661
- filename = server.mapPath(basePath & ckeditorFileName())
662
- set oFSO = Server.CreateObject("Scripting.FileSystemObject")
663
- exists = oFSO.FileExists(filename)
664
- set oFSO = nothing
665
-
666
- if not(exists) then
667
- response.clear
668
- response.write "<h1>CKEditor path validation failed</h1>"
669
- response.write "<p>The path &quot;" & ckeditorPath & "&quot; doesn't include the CKEditor main file (" & ckeditorFileName() & ")</p>"
670
- response.write "<p>Please, verify that you have set it correctly and/or adjust the 'basePath' property</p>"
671
- response.write "<p>Checked for physical file: &quot;" & filename & "&quot;</p>"
672
- response.end
673
- end if
674
- end function
675
-
676
- End Class
677
-
678
-
679
-
680
- ' URL: http://www.webdevbros.net/2007/04/26/generate-json-from-asp-datatypes/
681
- '**************************************************************************************************************
682
- '' @CLASSTITLE: JSON
683
- '' @CREATOR: Michal Gabrukiewicz (gabru at grafix.at), Michael Rebec
684
- '' @CONTRIBUTORS: - Cliff Pruitt (opensource at crayoncowboy.com)
685
- '' - Sylvain Lafontaine
686
- '' - Jef Housein
687
- '' - Jeremy Brown
688
- '' @CREATEDON: 2007-04-26 12:46
689
- '' @CDESCRIPTION: Comes up with functionality for JSON (http://json.org) to use within ASP.
690
- '' Correct escaping of characters, generating JSON Grammer out of ASP datatypes and structures
691
- '' Some examples (all use the <em>toJSON()</em> method but as it is the class' default method it can be left out):
692
- '' <code>
693
- '' <%
694
- '' 'simple number
695
- '' output = (new JSON)("myNum", 2, false)
696
- '' 'generates {"myNum": 2}
697
- ''
698
- '' 'array with different datatypes
699
- '' output = (new JSON)("anArray", array(2, "x", null), true)
700
- '' 'generates "anArray": [2, "x", null]
701
- '' '(note: the last parameter was true, thus no surrounding brackets in the result)
702
- '' % >
703
- '' </code>
704
- '' @REQUIRES: -
705
- '' @OPTIONEXPLICIT: yes
706
- '' @VERSION: 1.5.1
707
-
708
- '**************************************************************************************************************
709
- class JSON
710
-
711
- 'private members
712
- private output, innerCall
713
-
714
- '**********************************************************************************************************
715
- '* constructor
716
- '**********************************************************************************************************
717
- public sub class_initialize()
718
- newGeneration()
719
- end sub
720
-
721
- '******************************************************************************************
722
- '' @SDESCRIPTION: STATIC! takes a given string and makes it JSON valid
723
- '' @DESCRIPTION: all characters which needs to be escaped are beeing replaced by their
724
- '' unicode representation according to the
725
- '' RFC4627#2.5 - http://www.ietf.org/rfc/rfc4627.txt?number=4627
726
- '' @PARAM: val [string]: value which should be escaped
727
- '' @RETURN: [string] JSON valid string
728
- '******************************************************************************************
729
- public function escape(val)
730
- dim cDoubleQuote, cRevSolidus, cSolidus
731
- cDoubleQuote = &h22
732
- cRevSolidus = &h5C
733
- cSolidus = &h2F
734
- dim i, currentDigit
735
- for i = 1 to (len(val))
736
- currentDigit = mid(val, i, 1)
737
- if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then
738
- currentDigit = escapequence(currentDigit)
739
- elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then
740
- currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC200), 2, 0), 2)
741
- elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then
742
- currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2)
743
- else
744
- select case ascw(currentDigit)
745
- case cDoubleQuote: currentDigit = escapequence(currentDigit)
746
- case cRevSolidus: currentDigit = escapequence(currentDigit)
747
- case cSolidus: currentDigit = escapequence(currentDigit)
748
- end select
749
- end if
750
- escape = escape & currentDigit
751
- next
752
- end function
753
-
754
- '******************************************************************************************************************
755
- '' @SDESCRIPTION: generates a representation of a name value pair in JSON grammer
756
- '' @DESCRIPTION: It generates a name value pair which is represented as <em>{"name": value}</em> in JSON.
757
- '' the generation is fully recursive. Thus the value can also be a complex datatype (array in dictionary, etc.) e.g.
758
- '' <code>
759
- '' <%
760
- '' set j = new JSON
761
- '' j.toJSON "n", array(RS, dict, false), false
762
- '' j.toJSON "n", array(array(), 2, true), false
763
- '' % >
764
- '' </code>
765
- '' @PARAM: name [string]: name of the value (accessible with javascript afterwards). leave empty to get just the value
766
- '' @PARAM: val [variant], [int], [float], [array], [object], [dictionary]: value which needs
767
- '' to be generated. Conversation of the data types is as follows:<br>
768
- '' - <strong>ASP datatype -> JavaScript datatype</strong>
769
- '' - NOTHING, NULL -> null
770
- '' - INT, DOUBLE -> number
771
- '' - STRING -> string
772
- '' - BOOLEAN -> bool
773
- '' - ARRAY -> array
774
- '' - DICTIONARY -> Represents it as name value pairs. Each key is accessible as property afterwards. json will look like <code>"name": {"key1": "some value", "key2": "other value"}</code>
775
- '' - <em>multidimensional array</em> -> Generates a 1-dimensional array (flat) with all values of the multidimensional array
776
- '' - <em>request</em> object -> every property and collection (cookies, form, querystring, etc) of the asp request object is exposed as an item of a dictionary. Property names are <strong>lowercase</strong>. e.g. <em>servervariables</em>.
777
- '' - OBJECT -> name of the type (if unknown type) or all its properties (if class implements <em>reflect()</em> method)
778
- '' Implement a <strong>reflect()</strong> function if you want your custom classes to be recognized. The function must return
779
- '' a dictionary where the key holds the property name and the value its value. Example of a reflect function within a User class which has firstname and lastname properties
780
- '' <code>
781
- '' <%
782
- '' function reflect()
783
- '' . set reflect = server.createObject("scripting.dictionary")
784
- '' . reflect.add "firstname", firstname
785
- '' . reflect.add "lastname", lastname
786
- '' end function
787
- '' % >
788
- '' </code>
789
- '' Example of how to generate a JSON representation of the asp request object and access the <em>HTTP_HOST</em> server variable in JavaScript:
790
- '' <code>
791
- '' <script>alert(<%= (new JSON)(empty, request, false) % >.servervariables.HTTP_HOST);</script>
792
- '' </code>
793
- '' @PARAM: nested [bool]: indicates if the name value pair is already nested within another? if yes then the <em>{}</em> are left out.
794
- '' @RETURN: [string] returns a JSON representation of the given name value pair
795
- '******************************************************************************************************************
796
- public default function toJSON(name, val, nested)
797
- if not nested and not isEmpty(name) then write("{")
798
- if not isEmpty(name) then write("""" & escape(name) & """: ")
799
- generateValue(val)
800
- if not nested and not isEmpty(name) then write("}")
801
- toJSON = output
802
-
803
- if innerCall = 0 then newGeneration()
804
- end function
805
-
806
- '******************************************************************************************************************
807
- '* generate
808
- '******************************************************************************************************************
809
- private function generateValue(val)
810
- if isNull(val) then
811
- write("null")
812
- elseif isArray(val) then
813
- generateArray(val)
814
- elseif isObject(val) then
815
- dim tName : tName = typename(val)
816
- if val is nothing then
817
- write("null")
818
- elseif tName = "Dictionary" or tName = "IRequestDictionary" then
819
- generateDictionary(val)
820
- elseif tName = "IRequest" then
821
- set req = server.createObject("scripting.dictionary")
822
- req.add "clientcertificate", val.ClientCertificate
823
- req.add "cookies", val.cookies
824
- req.add "form", val.form
825
- req.add "querystring", val.queryString
826
- req.add "servervariables", val.serverVariables
827
- req.add "totalbytes", val.totalBytes
828
- generateDictionary(req)
829
- elseif tName = "IStringList" then
830
- if val.count = 1 then
831
- toJSON empty, val(1), true
832
- else
833
- generateArray(val)
834
- end if
835
- else
836
- generateObject(val)
837
- end if
838
- else
839
- 'bool
840
- dim varTyp
841
- varTyp = varType(val)
842
- if varTyp = 11 then
843
- if val then write("true") else write("false")
844
- 'int, long, byte
845
- elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then
846
- write(cLng(val))
847
- 'single, double, currency
848
- elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then
849
- write(replace(cDbl(val), ",", "."))
850
- else
851
- ' Using @@ at the beggining to signal JSON that we don't want this quoted.
852
- if left(val, 2) = "@@" then
853
- write( mid( val, 3 ) )
854
- else
855
- write("""" & escape(val & "") & """")
856
- end if
857
- end if
858
- end if
859
- generateValue = output
860
- end function
861
-
862
- '******************************************************************************************************************
863
- '* generateArray
864
- '******************************************************************************************************************
865
- private sub generateArray(val)
866
- dim item, i
867
- write("[")
868
- i = 0
869
- 'the for each allows us to support also multi dimensional arrays
870
- for each item in val
871
- if i > 0 then write(",")
872
- generateValue(item)
873
- i = i + 1
874
- next
875
- write("]")
876
- end sub
877
-
878
- '******************************************************************************************************************
879
- '* generateDictionary
880
- '******************************************************************************************************************
881
- private sub generateDictionary(val)
882
- innerCall = innerCall + 1
883
- if val.count = 0 then
884
- toJSON empty, null, true
885
- exit sub
886
- end if
887
- dim key, i
888
- write("{")
889
- i = 0
890
- for each key in val
891
- if i > 0 then write(",")
892
- toJSON key, val(key), true
893
- i = i + 1
894
- next
895
- write("}")
896
- innerCall = innerCall - 1
897
- end sub
898
-
899
- '******************************************************************************************************************
900
- '* generateObject
901
- '******************************************************************************************************************
902
- private sub generateObject(val)
903
- dim props
904
- on error resume next
905
- set props = val.reflect()
906
- if err = 0 then
907
- on error goto 0
908
- innerCall = innerCall + 1
909
- toJSON empty, props, true
910
- innerCall = innerCall - 1
911
- else
912
- on error goto 0
913
- write("""" & escape(typename(val)) & """")
914
- end if
915
- end sub
916
-
917
- '******************************************************************************************************************
918
- '* newGeneration
919
- '******************************************************************************************************************
920
- private sub newGeneration()
921
- output = empty
922
- innerCall = 0
923
- end sub
924
-
925
- '******************************************************************************************
926
- '* JsonEscapeSquence
927
- '******************************************************************************************
928
- private function escapequence(digit)
929
- escapequence = "\u00" + right(padLeft(hex(ascw(digit)), 2, 0), 2)
930
- end function
931
-
932
- '******************************************************************************************
933
- '* padLeft
934
- '******************************************************************************************
935
- private function padLeft(value, totalLength, paddingChar)
936
- padLeft = right(clone(paddingChar, totalLength) & value, totalLength)
937
- end function
938
-
939
- '******************************************************************************************
940
- '* clone
941
- '******************************************************************************************
942
- private function clone(byVal str, n)
943
- dim i
944
- for i = 1 to n : clone = clone & str : next
945
- end function
946
-
947
- '******************************************************************************************
948
- '* write
949
- '******************************************************************************************
950
- private sub write(val)
951
- output = output & val
952
- end sub
953
-
954
- end class
955
- %>
1
+ <%
2
+ '
3
+ ' Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
4
+ ' For licensing, see LICENSE.html or http://ckeditor.com/license
5
+
6
+ ' Shared variable for all instances ("static")
7
+ dim CKEDITOR_initComplete
8
+ dim CKEDITOR_returnedEvents
9
+
10
+ ''
11
+ ' \brief CKEditor class that can be used to create editor
12
+ ' instances in ASP pages on server side.
13
+ ' @see http://ckeditor.com
14
+ '
15
+ ' Sample usage:
16
+ ' @code
17
+ ' editor = new CKEditor
18
+ ' editor.editor "editor1", "<p>Initial value.</p>", empty, empty
19
+ ' @endcode
20
+
21
+ Class CKEditor
22
+
23
+ ''
24
+ ' The version of %CKEditor.
25
+ private version
26
+
27
+ ''
28
+ ' A constant string unique for each release of %CKEditor.
29
+ private mTimeStamp
30
+
31
+ ''
32
+ ' URL to the %CKEditor installation directory (absolute or relative to document root).
33
+ ' If not set, CKEditor will try to guess it's path.
34
+ '
35
+ ' Example usage:
36
+ ' @code
37
+ ' editor.basePath = "/ckeditor/"
38
+ ' @endcode
39
+ Public basePath
40
+
41
+ ''
42
+ ' A boolean variable indicating whether CKEditor has been initialized.
43
+ ' Set it to true only if you have already included
44
+ ' &lt;script&gt; tag loading ckeditor.js in your website.
45
+ Public initialized
46
+
47
+ ''
48
+ ' Boolean variable indicating whether created code should be printed out or returned by a function.
49
+ '
50
+ ' Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function.
51
+ ' @code
52
+ ' editor = new CKEditor
53
+ ' editor.returnOutput = true
54
+ ' code = editor.editor("editor1", "<p>Initial value.</p>", empty, empty)
55
+ ' response.write "<p>Editor 1:</p>"
56
+ ' response.write code
57
+ ' @endcode
58
+ Public returnOutput
59
+
60
+ ''
61
+ ' A Dictionary with textarea attributes.
62
+ '
63
+ ' When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
64
+ ' it will be displayed to anyone with JavaScript disabled or with incompatible browser.
65
+ public textareaAttributes
66
+
67
+ ''
68
+ ' A string indicating the creation date of %CKEditor.
69
+ ' Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
70
+ public timestamp
71
+
72
+ ''
73
+ ' A dictionary that holds the instance configuration.
74
+ private oInstanceConfig
75
+
76
+ ''
77
+ ' A dictionary that holds the configuration for all the instances.
78
+ private oAllInstancesConfig
79
+
80
+ ''
81
+ ' A dictionary that holds event listeners for the instance.
82
+ private oInstanceEvents
83
+
84
+ ''
85
+ ' A dictionary that holds event listeners for all the instances.
86
+ private oAllInstancesEvents
87
+
88
+ ''
89
+ ' A Dictionary that holds global event listeners (CKEDITOR object)
90
+ private oGlobalEvents
91
+
92
+
93
+ Private Sub Class_Initialize()
94
+ version = "3.6.1"
95
+ timeStamp = "B5GJ5GG"
96
+ mTimeStamp = "B5GJ5GG"
97
+
98
+ Set oInstanceConfig = CreateObject("Scripting.Dictionary")
99
+ Set oAllInstancesConfig = CreateObject("Scripting.Dictionary")
100
+
101
+ Set oInstanceEvents = CreateObject("Scripting.Dictionary")
102
+ Set oAllInstancesEvents = CreateObject("Scripting.Dictionary")
103
+ Set oGlobalEvents = CreateObject("Scripting.Dictionary")
104
+
105
+ Set textareaAttributes = CreateObject("Scripting.Dictionary")
106
+ textareaAttributes.Add "rows", 8
107
+ textareaAttributes.Add "cols", 60
108
+ End Sub
109
+
110
+ ''
111
+ ' Creates a %CKEditor instance.
112
+ ' In incompatible browsers %CKEditor will downgrade to plain HTML &lt;textarea&gt; element.
113
+ '
114
+ ' @param name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element).
115
+ ' @param value (string) Initial value.
116
+ '
117
+ ' Example usage:
118
+ ' @code
119
+ ' set editor = New CKEditor
120
+ ' editor.editor "field1", "<p>Initial value.</p>"
121
+ ' @endcode
122
+ '
123
+ ' Advanced example:
124
+ ' @code
125
+ ' set editor = new CKEditor
126
+ ' set config = CreateObject("Scripting.Dictionary")
127
+ ' config.Add "toolbar", Array( _
128
+ ' Array( "Source", "-", "Bold", "Italic", "Underline", "Strike" ), _
129
+ ' Array( "Image", "Link", "Unlink", "Anchor" ) _
130
+ ' )
131
+ ' set events = CreateObject("Scripting.Dictionary")
132
+ ' events.Add "instanceReady", "function (evt) { alert('Loaded second editor: ' + evt.editor.name );}"
133
+
134
+ ' editor.editor "field1", "<p>Initial value.</p>", config, events
135
+ ' @endcode
136
+ '
137
+ public function editor(name, value)
138
+ dim attr, out, js, customConfig, extraConfig
139
+ dim attribute
140
+
141
+ attr = ""
142
+
143
+ for each attribute in textareaAttributes
144
+ attr = attr & " " & attribute & "=""" & replace( textareaAttributes( attribute ), """", "&quot" ) & """"
145
+ next
146
+
147
+ out = "<textarea name=""" & name & """" & attr & ">" & Server.HtmlEncode(value) & "</textarea>" & vbcrlf
148
+
149
+ if not(initialized) then
150
+ out = out & init()
151
+ end if
152
+
153
+ set customConfig = configSettings()
154
+ js = returnGlobalEvents()
155
+
156
+ extraConfig = (new JSON)( empty, customConfig, false )
157
+ if extraConfig<>"" then extraConfig = ", " & extraConfig
158
+ js = js & "CKEDITOR.replace('" & name & "'" & extraConfig & ");"
159
+
160
+ out = out & script(js)
161
+
162
+ if not(returnOutput) then
163
+ response.write out
164
+ out = ""
165
+ end if
166
+
167
+ editor = out
168
+
169
+ oInstanceConfig.RemoveAll
170
+ oInstanceEvents.RemoveAll
171
+ end function
172
+
173
+ ''
174
+ ' Replaces a &lt;textarea&gt; with a %CKEditor instance.
175
+ '
176
+ ' @param id (string) The id or name of textarea element.
177
+ '
178
+ ' Example 1: adding %CKEditor to &lt;textarea name="article"&gt;&lt;/textarea&gt; element:
179
+ ' @code
180
+ ' set editor = New CKEditor
181
+ ' editor.replace "article"
182
+ ' @endcode
183
+ '
184
+ public function replaceInstance(id)
185
+ dim out, js, customConfig, extraConfig
186
+
187
+ out = ""
188
+ if not(initialized) then
189
+ out = out & init()
190
+ end if
191
+
192
+ set customConfig = configSettings()
193
+ js = returnGlobalEvents()
194
+
195
+ extraConfig = (new JSON)( empty, customConfig, false )
196
+ if extraConfig<>"" then extraConfig = ", " & extraConfig
197
+ js = js & "CKEDITOR.replace('" & id & "'" & extraConfig & ");"
198
+
199
+ out = out & script(js)
200
+
201
+ if not(returnOutput) then
202
+ response.write out
203
+ out = ""
204
+ end if
205
+
206
+ replaceInstance = out
207
+
208
+ oInstanceConfig.RemoveAll
209
+ oInstanceEvents.RemoveAll
210
+ end function
211
+
212
+ ''
213
+ ' Replace all &lt;textarea&gt; elements available in the document with editor instances.
214
+ '
215
+ ' @param className (string) If set, replace all textareas with class className in the page.
216
+ '
217
+ ' Example 1: replace all &lt;textarea&gt; elements in the page.
218
+ ' @code
219
+ ' editor = new CKEditor
220
+ ' editor.replaceAll empty
221
+ ' @endcode
222
+ '
223
+ ' Example 2: replace all &lt;textarea class="myClassName"&gt; elements in the page.
224
+ ' @code
225
+ ' editor = new CKEditor
226
+ ' editor.replaceAll 'myClassName'
227
+ ' @endcode
228
+ '
229
+ function replaceAll(className)
230
+ dim out, js, customConfig
231
+
232
+ out = ""
233
+ if not(initialized) then
234
+ out = out & init()
235
+ end if
236
+
237
+ set customConfig = configSettings()
238
+ js = returnGlobalEvents()
239
+
240
+ if (customConfig.Count=0) then
241
+ if (isEmpty(className)) then
242
+ js = js & "CKEDITOR.replaceAll();"
243
+ else
244
+ js = js & "CKEDITOR.replaceAll('" & className & "');"
245
+ end if
246
+ else
247
+ js = js & "CKEDITOR.replaceAll( function(textarea, config) {\n"
248
+ if not(isEmpty(className)) then
249
+ js = js & " var classRegex = new RegExp('(?:^| )' + '" & className & "' + '(?:$| )');\n"
250
+ js = js & " if (!classRegex.test(textarea.className))\n"
251
+ js = js & " return false;\n"
252
+ end if
253
+ js = js & " CKEDITOR.tools.extend(config, " & (new JSON)( empty, customConfig, false ) & ", true);"
254
+ js = js & "} );"
255
+ end if
256
+
257
+ out = out & script(js)
258
+
259
+ if not(returnOutput) then
260
+ response.write out
261
+ out = ""
262
+ end if
263
+
264
+ replaceAll = out
265
+
266
+ oInstanceConfig.RemoveAll
267
+ oInstanceEvents.RemoveAll
268
+ end function
269
+
270
+
271
+ ''
272
+ ' A Dictionary that holds the %CKEditor configuration for all instances
273
+ ' For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
274
+ '
275
+ ' Example usage:
276
+ ' @code
277
+ ' editor.config("height") = 400
278
+ ' // Use @@ at the beggining of a string to ouput it without surrounding quotes.
279
+ ' editor.config("width") = "@@screen.width * 0.8"
280
+ ' @endcode
281
+ Public Property Let Config( configKey, configValue )
282
+ oAllInstancesConfig.Add configKey, configValue
283
+ End Property
284
+
285
+ ''
286
+ ' Configuration options for the next instance
287
+ '
288
+ Public Property Let instanceConfig( configKey, configValue )
289
+ oInstanceConfig.Add configKey, configValue
290
+ End Property
291
+
292
+ ''
293
+ ' Adds event listener.
294
+ ' Events are fired by %CKEditor in various situations.
295
+ '
296
+ ' @param eventName (string) Event name.
297
+ ' @param javascriptCode (string) Javascript anonymous function or function name.
298
+ '
299
+ ' Example usage:
300
+ ' @code
301
+ ' editor.addEventHandler "instanceReady", "function (ev) { " & _
302
+ ' " alert('Loaded: ' + ev.editor.name); " & _
303
+ ' "}"
304
+ ' @endcode
305
+ '
306
+ public sub addEventHandler(eventName, javascriptCode)
307
+ if not(oAllInstancesEvents.Exists( eventName ) ) then
308
+ oAllInstancesEvents.Add eventName, Array()
309
+ end if
310
+
311
+ dim listeners, size
312
+ listeners = oAllInstancesEvents( eventName )
313
+ size = ubound(listeners) + 1
314
+ redim preserve listeners(size)
315
+ listeners(size) = javascriptCode
316
+
317
+ oAllInstancesEvents( eventName ) = listeners
318
+ ' '' Avoid duplicates. fixme...
319
+ ' if (!in_array($javascriptCode, $this->_events[$event])) {
320
+ ' $this->_events[$event][] = $javascriptCode;
321
+ ' }
322
+ end sub
323
+
324
+ ''
325
+ ' Clear registered event handlers.
326
+ ' Note: this function will have no effect on already created editor instances.
327
+ '
328
+ ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed.
329
+ '
330
+ public sub clearEventHandlers( eventName )
331
+ if not(isEmpty( eventName )) then
332
+ oAllInstancesEvents.Remove eventName
333
+ else
334
+ oAllInstancesEvents.RemoveAll
335
+ end if
336
+ end sub
337
+
338
+
339
+ ''
340
+ ' Adds event listener only for the next instance.
341
+ ' Events are fired by %CKEditor in various situations.
342
+ '
343
+ ' @param eventName (string) Event name.
344
+ ' @param javascriptCode (string) Javascript anonymous function or function name.
345
+ '
346
+ ' Example usage:
347
+ ' @code
348
+ ' editor.addInstanceEventHandler "instanceReady", "function (ev) { " & _
349
+ ' " alert('Loaded: ' + ev.editor.name); " & _
350
+ ' "}"
351
+ ' @endcode
352
+ '
353
+ public sub addInstanceEventHandler(eventName, javascriptCode)
354
+ if not(oInstanceEvents.Exists( eventName ) ) then
355
+ oInstanceEvents.Add eventName, Array()
356
+ end if
357
+
358
+ dim listeners, size
359
+ listeners = oInstanceEvents( eventName )
360
+ size = ubound(listeners) + 1
361
+ redim preserve listeners(size)
362
+ listeners(size) = javascriptCode
363
+
364
+ oInstanceEvents( eventName ) = listeners
365
+ ' '' Avoid duplicates. fixme...
366
+ ' if (!in_array($javascriptCode, $this->_events[$event])) {
367
+ ' $this->_events[$event][] = $javascriptCode;
368
+ ' }
369
+ end sub
370
+
371
+ ''
372
+ ' Clear registered event handlers.
373
+ ' Note: this function will have no effect on already created editor instances.
374
+ '
375
+ ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed.
376
+ '
377
+ public sub clearInstanceEventHandlers( eventName )
378
+ if not(isEmpty( eventName )) then
379
+ oInstanceEvents.Remove eventName
380
+ else
381
+ oInstanceEvents.RemoveAll
382
+ end if
383
+ end sub
384
+
385
+ ''
386
+ ' Adds global event listener.
387
+ '
388
+ ' @param event (string) Event name.
389
+ ' @param javascriptCode (string) Javascript anonymous function or function name.
390
+ '
391
+ ' Example usage:
392
+ ' @code
393
+ ' editor.addGlobalEventHandler "dialogDefinition", "function (ev) { " & _
394
+ ' " alert('Loading dialog: ' + ev.data.name); " & _
395
+ ' "}"
396
+ ' @endcode
397
+ '
398
+ public sub addGlobalEventHandler( eventName, javascriptCode)
399
+ if not(oGlobalEvents.Exists( eventName ) ) then
400
+ oGlobalEvents.Add eventName, Array()
401
+ end if
402
+
403
+ dim listeners, size
404
+ listeners = oGlobalEvents( eventName )
405
+ size = ubound(listeners) + 1
406
+ redim preserve listeners(size)
407
+ listeners(size) = javascriptCode
408
+
409
+ oGlobalEvents( eventName ) = listeners
410
+
411
+ ' // Avoid duplicates.
412
+ ' if (!in_array($javascriptCode, $this->_globalEvents[$event])) {
413
+ ' $this->_globalEvents[$event][] = $javascriptCode;
414
+ ' }
415
+ end sub
416
+
417
+ ''
418
+ ' Clear registered global event handlers.
419
+ ' Note: this function will have no effect if the event handler has been already printed/returned.
420
+ '
421
+ ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed .
422
+ '
423
+ public sub clearGlobalEventHandlers( eventName )
424
+ if not(isEmpty( eventName )) then
425
+ oGlobalEvents.Remove eventName
426
+ else
427
+ oGlobalEvents.RemoveAll
428
+ end if
429
+ end sub
430
+
431
+ ''
432
+ ' Prints javascript code.
433
+ '
434
+ ' @param string js
435
+ '
436
+ private function script(js)
437
+ script = "<script type=""text/javascript"">" & _
438
+ "//<![CDATA[" & vbcrlf & _
439
+ js & vbcrlf & _
440
+ "//]]>" & _
441
+ "</script>" & vbcrlf
442
+ end function
443
+
444
+ ''
445
+ ' Returns the configuration array (global and instance specific settings are merged into one array).
446
+ '
447
+ ' @param instanceConfig (Dictionary) The specific configurations to apply to editor instance.
448
+ ' @param instanceEvents (Dictionary) Event listeners for editor instance.
449
+ '
450
+ private function configSettings()
451
+ dim mergedConfig, mergedEvents
452
+ set mergedConfig = cloneDictionary(oAllInstancesConfig)
453
+ set mergedEvents = cloneDictionary(oAllInstancesEvents)
454
+
455
+ if not(isEmpty(oInstanceConfig)) then
456
+ set mergedConfig = mergeDictionary(mergedConfig, oInstanceConfig)
457
+ end if
458
+
459
+ if not(isEmpty(oInstanceEvents)) then
460
+ for each eventName in oInstanceEvents
461
+ code = oInstanceEvents( eventName )
462
+
463
+ if not(mergedEvents.Exists( eventName)) then
464
+ mergedEvents.Add eventName, code
465
+ else
466
+
467
+ dim listeners, size
468
+ listeners = mergedEvents( eventName )
469
+ size = ubound(listeners)
470
+ if isArray( code ) then
471
+ addedCount = ubound(code)
472
+ redim preserve listeners( size + addedCount + 1 )
473
+ for i = 0 to addedCount
474
+ listeners(size + i + 1) = code (i)
475
+ next
476
+ else
477
+ size = size + 1
478
+ redim preserve listeners(size)
479
+ listeners(size) = code
480
+ end if
481
+
482
+ mergedEvents( eventName ) = listeners
483
+ end if
484
+ next
485
+
486
+ end if
487
+
488
+ dim i, eventName, handlers, configON, ub, code
489
+
490
+ if mergedEvents.Count>0 then
491
+ if mergedConfig.Exists( "on" ) then
492
+ set configON = mergedConfig.items( "on" )
493
+ else
494
+ set configON = CreateObject("Scripting.Dictionary")
495
+ mergedConfig.Add "on", configOn
496
+ end if
497
+
498
+ for each eventName in mergedEvents
499
+ handlers = mergedEvents( eventName )
500
+ code = ""
501
+
502
+ if isArray(handlers) then
503
+ uB = ubound(handlers)
504
+ if (uB = 0) then
505
+ code = handlers(0)
506
+ else
507
+ code = "function (ev) {"
508
+ for i=0 to uB
509
+ code = code & "(" & handlers(i) & ")(ev);"
510
+ next
511
+ code = code & "}"
512
+ end if
513
+ else
514
+ code = handlers
515
+ end if
516
+ ' Using @@ at the beggining to signal JSON that we don't want this quoted.
517
+ configON.Add eventName, "@@" & code
518
+ next
519
+
520
+ ' set mergedConfig.Item("on") = configOn
521
+ end if
522
+
523
+ set configSettings = mergedConfig
524
+ end function
525
+
526
+ ''
527
+ ' Returns a copy of a scripting.dictionary object
528
+ '
529
+ private function cloneDictionary( base )
530
+ dim newOne, tmpKey
531
+
532
+ Set newOne = CreateObject("Scripting.Dictionary")
533
+ for each tmpKey in base
534
+ newOne.Add tmpKey , base( tmpKey )
535
+ next
536
+
537
+ set cloneDictionary = newOne
538
+ end function
539
+
540
+ ''
541
+ ' Combines two scripting.dictionary objects
542
+ ' The base object isn't modified, and extra gets all the properties in base
543
+ '
544
+ private function mergeDictionary(base, extra)
545
+ dim newOne, tmpKey
546
+
547
+ for each tmpKey in base
548
+ if not(extra.Exists( tmpKey )) then
549
+ extra.Add tmpKey, base( tmpKey )
550
+ end if
551
+ next
552
+
553
+ set mergeDictionary = extra
554
+ end function
555
+
556
+ ''
557
+ ' Return global event handlers.
558
+ '
559
+ private function returnGlobalEvents()
560
+ dim out, eventName, handlers
561
+ dim handlersForEvent, handler, code, i
562
+ out = ""
563
+
564
+ if (isempty(CKEDITOR_returnedEvents)) then
565
+ set CKEDITOR_returnedEvents = CreateObject("Scripting.Dictionary")
566
+ end if
567
+
568
+ for each eventName in oGlobalEvents
569
+ handlers = oGlobalEvents( eventName )
570
+
571
+ if not(CKEDITOR_returnedEvents.Exists(eventName)) then
572
+ CKEDITOR_returnedEvents.Add eventName, CreateObject("Scripting.Dictionary")
573
+ end if
574
+
575
+ set handlersForEvent = CKEDITOR_returnedEvents.Item( eventName )
576
+
577
+ ' handlersForEvent is another dictionary
578
+ ' and handlers is an array
579
+
580
+ for i = 0 to ubound(handlers)
581
+ code = handlers( i )
582
+
583
+ ' Return only new events
584
+ if not(handlersForEvent.Exists( code )) then
585
+ if (out <> "") then out = out & vbcrlf
586
+ out = out & "CKEDITOR.on('" & eventName & "', " & code & ");"
587
+ handlersForEvent.Add code, code
588
+ end if
589
+ next
590
+ next
591
+
592
+ returnGlobalEvents = out
593
+ end function
594
+
595
+ ''
596
+ ' Initializes CKEditor (executed only once).
597
+ '
598
+ private function init()
599
+ dim out, args, path, extraCode, file
600
+ out = ""
601
+
602
+ if (CKEDITOR_initComplete) then
603
+ init = ""
604
+ exit function
605
+ end if
606
+
607
+ if (initialized) then
608
+ CKEDITOR_initComplete = true
609
+ init = ""
610
+ exit function
611
+ end if
612
+
613
+ args = ""
614
+ path = ckeditorPath()
615
+
616
+ if (timestamp <> "") and (timestamp <> "%" & "TIMESTAMP%") then
617
+ args = "?t=" & timestamp
618
+ end if
619
+
620
+ ' Skip relative paths...
621
+ if (instr(path, "..") <> 0) then
622
+ out = out & script("window.CKEDITOR_BASEPATH='" & path & "';")
623
+ end if
624
+
625
+ out = out & "<scr" & "ipt type=""text/javascript"" src=""" & path & ckeditorFileName() & args & """></scr" & "ipt>" & vbcrlf
626
+
627
+ extraCode = ""
628
+ if (timestamp <> mTimeStamp) then
629
+ extraCode = extraCode & "CKEDITOR.timestamp = '" & timestamp & "';"
630
+ end if
631
+ if (extraCode <> "") then
632
+ out = out & script(extraCode)
633
+ end if
634
+
635
+ CKEDITOR_initComplete = true
636
+ initialized = true
637
+
638
+ init = out
639
+ end function
640
+
641
+ private function ckeditorFileName()
642
+ ckeditorFileName = "ckeditor.js"
643
+ end function
644
+
645
+ ''
646
+ ' Return path to ckeditor.js.
647
+ '
648
+ private function ckeditorPath()
649
+ if (basePath <> "") then
650
+ ckeditorPath = basePath
651
+ else
652
+ ' In classic ASP we can't get the location of this included script
653
+ ckeditorPath = "/ckeditor/"
654
+ end if
655
+
656
+ ' Try to check if that folder contains the CKEditor files:
657
+ ' If it's a full URL avoid checking it as it might point to an external server.
658
+ if (instr(ckeditorPath, "://") <> 0) then exit function
659
+
660
+ dim filename, oFSO, exists
661
+ filename = server.mapPath(basePath & ckeditorFileName())
662
+ set oFSO = Server.CreateObject("Scripting.FileSystemObject")
663
+ exists = oFSO.FileExists(filename)
664
+ set oFSO = nothing
665
+
666
+ if not(exists) then
667
+ response.clear
668
+ response.write "<h1>CKEditor path validation failed</h1>"
669
+ response.write "<p>The path &quot;" & ckeditorPath & "&quot; doesn't include the CKEditor main file (" & ckeditorFileName() & ")</p>"
670
+ response.write "<p>Please, verify that you have set it correctly and/or adjust the 'basePath' property</p>"
671
+ response.write "<p>Checked for physical file: &quot;" & filename & "&quot;</p>"
672
+ response.end
673
+ end if
674
+ end function
675
+
676
+ End Class
677
+
678
+
679
+
680
+ ' URL: http://www.webdevbros.net/2007/04/26/generate-json-from-asp-datatypes/
681
+ '**************************************************************************************************************
682
+ '' @CLASSTITLE: JSON
683
+ '' @CREATOR: Michal Gabrukiewicz (gabru at grafix.at), Michael Rebec
684
+ '' @CONTRIBUTORS: - Cliff Pruitt (opensource at crayoncowboy.com)
685
+ '' - Sylvain Lafontaine
686
+ '' - Jef Housein
687
+ '' - Jeremy Brown
688
+ '' @CREATEDON: 2007-04-26 12:46
689
+ '' @CDESCRIPTION: Comes up with functionality for JSON (http://json.org) to use within ASP.
690
+ '' Correct escaping of characters, generating JSON Grammer out of ASP datatypes and structures
691
+ '' Some examples (all use the <em>toJSON()</em> method but as it is the class' default method it can be left out):
692
+ '' <code>
693
+ '' <%
694
+ '' 'simple number
695
+ '' output = (new JSON)("myNum", 2, false)
696
+ '' 'generates {"myNum": 2}
697
+ ''
698
+ '' 'array with different datatypes
699
+ '' output = (new JSON)("anArray", array(2, "x", null), true)
700
+ '' 'generates "anArray": [2, "x", null]
701
+ '' '(note: the last parameter was true, thus no surrounding brackets in the result)
702
+ '' % >
703
+ '' </code>
704
+ '' @REQUIRES: -
705
+ '' @OPTIONEXPLICIT: yes
706
+ '' @VERSION: 1.5.1
707
+
708
+ '**************************************************************************************************************
709
+ class JSON
710
+
711
+ 'private members
712
+ private output, innerCall
713
+
714
+ '**********************************************************************************************************
715
+ '* constructor
716
+ '**********************************************************************************************************
717
+ public sub class_initialize()
718
+ newGeneration()
719
+ end sub
720
+
721
+ '******************************************************************************************
722
+ '' @SDESCRIPTION: STATIC! takes a given string and makes it JSON valid
723
+ '' @DESCRIPTION: all characters which needs to be escaped are beeing replaced by their
724
+ '' unicode representation according to the
725
+ '' RFC4627#2.5 - http://www.ietf.org/rfc/rfc4627.txt?number=4627
726
+ '' @PARAM: val [string]: value which should be escaped
727
+ '' @RETURN: [string] JSON valid string
728
+ '******************************************************************************************
729
+ public function escape(val)
730
+ dim cDoubleQuote, cRevSolidus, cSolidus
731
+ cDoubleQuote = &h22
732
+ cRevSolidus = &h5C
733
+ cSolidus = &h2F
734
+ dim i, currentDigit
735
+ for i = 1 to (len(val))
736
+ currentDigit = mid(val, i, 1)
737
+ if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then
738
+ currentDigit = escapequence(currentDigit)
739
+ elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then
740
+ currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC200), 2, 0), 2)
741
+ elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then
742
+ currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2)
743
+ else
744
+ select case ascw(currentDigit)
745
+ case cDoubleQuote: currentDigit = escapequence(currentDigit)
746
+ case cRevSolidus: currentDigit = escapequence(currentDigit)
747
+ case cSolidus: currentDigit = escapequence(currentDigit)
748
+ end select
749
+ end if
750
+ escape = escape & currentDigit
751
+ next
752
+ end function
753
+
754
+ '******************************************************************************************************************
755
+ '' @SDESCRIPTION: generates a representation of a name value pair in JSON grammer
756
+ '' @DESCRIPTION: It generates a name value pair which is represented as <em>{"name": value}</em> in JSON.
757
+ '' the generation is fully recursive. Thus the value can also be a complex datatype (array in dictionary, etc.) e.g.
758
+ '' <code>
759
+ '' <%
760
+ '' set j = new JSON
761
+ '' j.toJSON "n", array(RS, dict, false), false
762
+ '' j.toJSON "n", array(array(), 2, true), false
763
+ '' % >
764
+ '' </code>
765
+ '' @PARAM: name [string]: name of the value (accessible with javascript afterwards). leave empty to get just the value
766
+ '' @PARAM: val [variant], [int], [float], [array], [object], [dictionary]: value which needs
767
+ '' to be generated. Conversation of the data types is as follows:<br>
768
+ '' - <strong>ASP datatype -> JavaScript datatype</strong>
769
+ '' - NOTHING, NULL -> null
770
+ '' - INT, DOUBLE -> number
771
+ '' - STRING -> string
772
+ '' - BOOLEAN -> bool
773
+ '' - ARRAY -> array
774
+ '' - DICTIONARY -> Represents it as name value pairs. Each key is accessible as property afterwards. json will look like <code>"name": {"key1": "some value", "key2": "other value"}</code>
775
+ '' - <em>multidimensional array</em> -> Generates a 1-dimensional array (flat) with all values of the multidimensional array
776
+ '' - <em>request</em> object -> every property and collection (cookies, form, querystring, etc) of the asp request object is exposed as an item of a dictionary. Property names are <strong>lowercase</strong>. e.g. <em>servervariables</em>.
777
+ '' - OBJECT -> name of the type (if unknown type) or all its properties (if class implements <em>reflect()</em> method)
778
+ '' Implement a <strong>reflect()</strong> function if you want your custom classes to be recognized. The function must return
779
+ '' a dictionary where the key holds the property name and the value its value. Example of a reflect function within a User class which has firstname and lastname properties
780
+ '' <code>
781
+ '' <%
782
+ '' function reflect()
783
+ '' . set reflect = server.createObject("scripting.dictionary")
784
+ '' . reflect.add "firstname", firstname
785
+ '' . reflect.add "lastname", lastname
786
+ '' end function
787
+ '' % >
788
+ '' </code>
789
+ '' Example of how to generate a JSON representation of the asp request object and access the <em>HTTP_HOST</em> server variable in JavaScript:
790
+ '' <code>
791
+ '' <script>alert(<%= (new JSON)(empty, request, false) % >.servervariables.HTTP_HOST);</script>
792
+ '' </code>
793
+ '' @PARAM: nested [bool]: indicates if the name value pair is already nested within another? if yes then the <em>{}</em> are left out.
794
+ '' @RETURN: [string] returns a JSON representation of the given name value pair
795
+ '******************************************************************************************************************
796
+ public default function toJSON(name, val, nested)
797
+ if not nested and not isEmpty(name) then write("{")
798
+ if not isEmpty(name) then write("""" & escape(name) & """: ")
799
+ generateValue(val)
800
+ if not nested and not isEmpty(name) then write("}")
801
+ toJSON = output
802
+
803
+ if innerCall = 0 then newGeneration()
804
+ end function
805
+
806
+ '******************************************************************************************************************
807
+ '* generate
808
+ '******************************************************************************************************************
809
+ private function generateValue(val)
810
+ if isNull(val) then
811
+ write("null")
812
+ elseif isArray(val) then
813
+ generateArray(val)
814
+ elseif isObject(val) then
815
+ dim tName : tName = typename(val)
816
+ if val is nothing then
817
+ write("null")
818
+ elseif tName = "Dictionary" or tName = "IRequestDictionary" then
819
+ generateDictionary(val)
820
+ elseif tName = "IRequest" then
821
+ set req = server.createObject("scripting.dictionary")
822
+ req.add "clientcertificate", val.ClientCertificate
823
+ req.add "cookies", val.cookies
824
+ req.add "form", val.form
825
+ req.add "querystring", val.queryString
826
+ req.add "servervariables", val.serverVariables
827
+ req.add "totalbytes", val.totalBytes
828
+ generateDictionary(req)
829
+ elseif tName = "IStringList" then
830
+ if val.count = 1 then
831
+ toJSON empty, val(1), true
832
+ else
833
+ generateArray(val)
834
+ end if
835
+ else
836
+ generateObject(val)
837
+ end if
838
+ else
839
+ 'bool
840
+ dim varTyp
841
+ varTyp = varType(val)
842
+ if varTyp = 11 then
843
+ if val then write("true") else write("false")
844
+ 'int, long, byte
845
+ elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then
846
+ write(cLng(val))
847
+ 'single, double, currency
848
+ elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then
849
+ write(replace(cDbl(val), ",", "."))
850
+ else
851
+ ' Using @@ at the beggining to signal JSON that we don't want this quoted.
852
+ if left(val, 2) = "@@" then
853
+ write( mid( val, 3 ) )
854
+ else
855
+ write("""" & escape(val & "") & """")
856
+ end if
857
+ end if
858
+ end if
859
+ generateValue = output
860
+ end function
861
+
862
+ '******************************************************************************************************************
863
+ '* generateArray
864
+ '******************************************************************************************************************
865
+ private sub generateArray(val)
866
+ dim item, i
867
+ write("[")
868
+ i = 0
869
+ 'the for each allows us to support also multi dimensional arrays
870
+ for each item in val
871
+ if i > 0 then write(",")
872
+ generateValue(item)
873
+ i = i + 1
874
+ next
875
+ write("]")
876
+ end sub
877
+
878
+ '******************************************************************************************************************
879
+ '* generateDictionary
880
+ '******************************************************************************************************************
881
+ private sub generateDictionary(val)
882
+ innerCall = innerCall + 1
883
+ if val.count = 0 then
884
+ toJSON empty, null, true
885
+ exit sub
886
+ end if
887
+ dim key, i
888
+ write("{")
889
+ i = 0
890
+ for each key in val
891
+ if i > 0 then write(",")
892
+ toJSON key, val(key), true
893
+ i = i + 1
894
+ next
895
+ write("}")
896
+ innerCall = innerCall - 1
897
+ end sub
898
+
899
+ '******************************************************************************************************************
900
+ '* generateObject
901
+ '******************************************************************************************************************
902
+ private sub generateObject(val)
903
+ dim props
904
+ on error resume next
905
+ set props = val.reflect()
906
+ if err = 0 then
907
+ on error goto 0
908
+ innerCall = innerCall + 1
909
+ toJSON empty, props, true
910
+ innerCall = innerCall - 1
911
+ else
912
+ on error goto 0
913
+ write("""" & escape(typename(val)) & """")
914
+ end if
915
+ end sub
916
+
917
+ '******************************************************************************************************************
918
+ '* newGeneration
919
+ '******************************************************************************************************************
920
+ private sub newGeneration()
921
+ output = empty
922
+ innerCall = 0
923
+ end sub
924
+
925
+ '******************************************************************************************
926
+ '* JsonEscapeSquence
927
+ '******************************************************************************************
928
+ private function escapequence(digit)
929
+ escapequence = "\u00" + right(padLeft(hex(ascw(digit)), 2, 0), 2)
930
+ end function
931
+
932
+ '******************************************************************************************
933
+ '* padLeft
934
+ '******************************************************************************************
935
+ private function padLeft(value, totalLength, paddingChar)
936
+ padLeft = right(clone(paddingChar, totalLength) & value, totalLength)
937
+ end function
938
+
939
+ '******************************************************************************************
940
+ '* clone
941
+ '******************************************************************************************
942
+ private function clone(byVal str, n)
943
+ dim i
944
+ for i = 1 to n : clone = clone & str : next
945
+ end function
946
+
947
+ '******************************************************************************************
948
+ '* write
949
+ '******************************************************************************************
950
+ private sub write(val)
951
+ output = output & val
952
+ end sub
953
+
954
+ end class
955
+ %>