Wiki2GoEditor 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. data/bin/Wiki2Go_install_editor.rb +13 -0
  2. data/fckeditor/editor/_source/classes/fckcontextmenu.js +134 -0
  3. data/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js +46 -0
  4. data/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js +58 -0
  5. data/fckeditor/editor/_source/classes/fckdomrange.js +452 -0
  6. data/fckeditor/editor/_source/classes/fckdomrange_gecko.js +71 -0
  7. data/fckeditor/editor/_source/classes/fckdomrange_ie.js +149 -0
  8. data/fckeditor/editor/_source/classes/fckeditingarea.js +253 -0
  9. data/fckeditor/editor/_source/classes/fckelementpath.js +66 -0
  10. data/fckeditor/editor/_source/classes/fckenterkey.js +556 -0
  11. data/fckeditor/editor/_source/classes/fckevents.js +53 -0
  12. data/fckeditor/editor/_source/classes/fckicon.js +98 -0
  13. data/fckeditor/editor/_source/classes/fckiecleanup.js +68 -0
  14. data/fckeditor/editor/_source/classes/fckimagepreloader.js +68 -0
  15. data/fckeditor/editor/_source/classes/fckkeystrokehandler.js +136 -0
  16. data/fckeditor/editor/_source/classes/fckmenublock.js +143 -0
  17. data/fckeditor/editor/_source/classes/fckmenublockpanel.js +54 -0
  18. data/fckeditor/editor/_source/classes/fckmenuitem.js +160 -0
  19. data/fckeditor/editor/_source/classes/fckpanel.js +303 -0
  20. data/fckeditor/editor/_source/classes/fckplugin.js +56 -0
  21. data/fckeditor/editor/_source/classes/fckspecialcombo.js +363 -0
  22. data/fckeditor/editor/_source/classes/fckstyledef.js +59 -0
  23. data/fckeditor/editor/_source/classes/fckstyledef_gecko.js +119 -0
  24. data/fckeditor/editor/_source/classes/fckstyledef_ie.js +142 -0
  25. data/fckeditor/editor/_source/classes/fckstylesloader.js +88 -0
  26. data/fckeditor/editor/_source/classes/fcktoolbar.js +120 -0
  27. data/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js +36 -0
  28. data/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js +38 -0
  29. data/fckeditor/editor/_source/classes/fcktoolbarbutton.js +74 -0
  30. data/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js +222 -0
  31. data/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js +114 -0
  32. data/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js +47 -0
  33. data/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js +52 -0
  34. data/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js +91 -0
  35. data/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js +134 -0
  36. data/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js +111 -0
  37. data/fckeditor/editor/_source/classes/fckw3crange.js +448 -0
  38. data/fckeditor/editor/_source/classes/fckxml_gecko.js +87 -0
  39. data/fckeditor/editor/_source/classes/fckxml_ie.js +90 -0
  40. data/fckeditor/editor/_source/commandclasses/fck_othercommands.js +380 -0
  41. data/fckeditor/editor/_source/commandclasses/fckfitwindow.js +169 -0
  42. data/fckeditor/editor/_source/commandclasses/fcknamedcommand.js +37 -0
  43. data/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js +38 -0
  44. data/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js +40 -0
  45. data/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js +39 -0
  46. data/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js +67 -0
  47. data/fckeditor/editor/_source/commandclasses/fckstylecommand.js +99 -0
  48. data/fckeditor/editor/_source/commandclasses/fcktablecommand.js +71 -0
  49. data/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js +175 -0
  50. data/fckeditor/editor/_source/fckconstants.js +52 -0
  51. data/fckeditor/editor/_source/fckeditorapi.js +161 -0
  52. data/fckeditor/editor/_source/fckjscoreextensions.js +152 -0
  53. data/fckeditor/editor/_source/fckscriptloader.js +108 -0
  54. data/fckeditor/editor/_source/internals/fck.js +859 -0
  55. data/fckeditor/editor/_source/internals/fck_contextmenu.js +307 -0
  56. data/fckeditor/editor/_source/internals/fck_gecko.js +254 -0
  57. data/fckeditor/editor/_source/internals/fck_ie.js +383 -0
  58. data/fckeditor/editor/_source/internals/fckbrowserinfo.js +48 -0
  59. data/fckeditor/editor/_source/internals/fckcodeformatter.js +100 -0
  60. data/fckeditor/editor/_source/internals/fckcommands.js +132 -0
  61. data/fckeditor/editor/_source/internals/fckconfig.js +199 -0
  62. data/fckeditor/editor/_source/internals/fckdebug.js +56 -0
  63. data/fckeditor/editor/_source/internals/fckdialog.js +38 -0
  64. data/fckeditor/editor/_source/internals/fckdialog_gecko.js +103 -0
  65. data/fckeditor/editor/_source/internals/fckdialog_ie.js +48 -0
  66. data/fckeditor/editor/_source/internals/fckdocumentprocessor.js +243 -0
  67. data/fckeditor/editor/_source/internals/fckdomtools.js +294 -0
  68. data/fckeditor/editor/_source/internals/fcklanguagemanager.js +161 -0
  69. data/fckeditor/editor/_source/internals/fcklisthandler.js +152 -0
  70. data/fckeditor/editor/_source/internals/fcklistslib.js +60 -0
  71. data/fckeditor/editor/_source/internals/fckplugins.js +46 -0
  72. data/fckeditor/editor/_source/internals/fckregexlib.js +95 -0
  73. data/fckeditor/editor/_source/internals/fckselection.js +24 -0
  74. data/fckeditor/editor/_source/internals/fckselection_gecko.js +151 -0
  75. data/fckeditor/editor/_source/internals/fckselection_ie.js +158 -0
  76. data/fckeditor/editor/_source/internals/fcktablehandler.js +385 -0
  77. data/fckeditor/editor/_source/internals/fcktablehandler_gecko.js +57 -0
  78. data/fckeditor/editor/_source/internals/fcktablehandler_ie.js +58 -0
  79. data/fckeditor/editor/_source/internals/fcktoolbaritems.js +121 -0
  80. data/fckeditor/editor/_source/internals/fcktoolbarset.js +357 -0
  81. data/fckeditor/editor/_source/internals/fcktools.js +225 -0
  82. data/fckeditor/editor/_source/internals/fcktools_gecko.js +235 -0
  83. data/fckeditor/editor/_source/internals/fcktools_ie.js +214 -0
  84. data/fckeditor/editor/_source/internals/fckundo_gecko.js +27 -0
  85. data/fckeditor/editor/_source/internals/fckundo_ie.js +123 -0
  86. data/fckeditor/editor/_source/internals/fckurlparams.js +39 -0
  87. data/fckeditor/editor/_source/internals/fckxhtml.js +466 -0
  88. data/fckeditor/editor/_source/internals/fckxhtml_gecko.js +66 -0
  89. data/fckeditor/editor/_source/internals/fckxhtml_ie.js +194 -0
  90. data/fckeditor/editor/_source/internals/fckxhtmlentities.js +345 -0
  91. data/fckeditor/editor/css/behaviors/disablehandles.htc +15 -0
  92. data/fckeditor/editor/css/behaviors/showtableborders.htc +36 -0
  93. data/fckeditor/editor/css/fck_editorarea.css +91 -0
  94. data/fckeditor/editor/css/fck_internal.css +111 -0
  95. data/fckeditor/editor/css/fck_showtableborders_gecko.css +42 -0
  96. data/fckeditor/editor/css/images/fck_anchor.gif +0 -0
  97. data/fckeditor/editor/css/images/fck_flashlogo.gif +0 -0
  98. data/fckeditor/editor/css/images/fck_hiddenfield.gif +0 -0
  99. data/fckeditor/editor/css/images/fck_pagebreak.gif +0 -0
  100. data/fckeditor/editor/dialog/common/fck_dialog_common.css +83 -0
  101. data/fckeditor/editor/dialog/common/fck_dialog_common.js +154 -0
  102. data/fckeditor/editor/dialog/common/fcknumericfield.htc +24 -0
  103. data/fckeditor/editor/dialog/common/images/locked.gif +0 -0
  104. data/fckeditor/editor/dialog/common/images/reset.gif +0 -0
  105. data/fckeditor/editor/dialog/common/images/unlocked.gif +0 -0
  106. data/fckeditor/editor/dialog/common/moz-bindings.xml +30 -0
  107. data/fckeditor/editor/dialog/fck_about.html +155 -0
  108. data/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif +0 -0
  109. data/fckeditor/editor/dialog/fck_about/logo_fredck.gif +0 -0
  110. data/fckeditor/editor/dialog/fck_anchor.html +227 -0
  111. data/fckeditor/editor/dialog/fck_button.html +107 -0
  112. data/fckeditor/editor/dialog/fck_checkbox.html +107 -0
  113. data/fckeditor/editor/dialog/fck_colorselector.html +171 -0
  114. data/fckeditor/editor/dialog/fck_docprops.html +600 -0
  115. data/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html +113 -0
  116. data/fckeditor/editor/dialog/fck_find.html +173 -0
  117. data/fckeditor/editor/dialog/fck_flash.html +146 -0
  118. data/fckeditor/editor/dialog/fck_flash/fck_flash.js +288 -0
  119. data/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html +46 -0
  120. data/fckeditor/editor/dialog/fck_form.html +105 -0
  121. data/fckeditor/editor/dialog/fck_hiddenfield.html +116 -0
  122. data/fckeditor/editor/dialog/fck_image.html +252 -0
  123. data/fckeditor/editor/dialog/fck_image/fck_image.js +486 -0
  124. data/fckeditor/editor/dialog/fck_image/fck_image_preview.html +66 -0
  125. data/fckeditor/editor/dialog/fck_link.html +293 -0
  126. data/fckeditor/editor/dialog/fck_link/fck_link.js +664 -0
  127. data/fckeditor/editor/dialog/fck_listprop.html +116 -0
  128. data/fckeditor/editor/dialog/fck_paste.html +285 -0
  129. data/fckeditor/editor/dialog/fck_radiobutton.html +107 -0
  130. data/fckeditor/editor/dialog/fck_replace.html +156 -0
  131. data/fckeditor/editor/dialog/fck_select.html +176 -0
  132. data/fckeditor/editor/dialog/fck_select/fck_select.js +169 -0
  133. data/fckeditor/editor/dialog/fck_smiley.html +105 -0
  134. data/fckeditor/editor/dialog/fck_source.html +65 -0
  135. data/fckeditor/editor/dialog/fck_specialchar.html +113 -0
  136. data/fckeditor/editor/dialog/fck_spellerpages.html +64 -0
  137. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html +0 -0
  138. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js +87 -0
  139. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html +153 -0
  140. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm +174 -0
  141. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +196 -0
  142. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +180 -0
  143. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +462 -0
  144. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +71 -0
  145. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css +49 -0
  146. data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js +272 -0
  147. data/fckeditor/editor/dialog/fck_table.html +286 -0
  148. data/fckeditor/editor/dialog/fck_tablecell.html +255 -0
  149. data/fckeditor/editor/dialog/fck_template.html +242 -0
  150. data/fckeditor/editor/dialog/fck_template/images/template1.gif +0 -0
  151. data/fckeditor/editor/dialog/fck_template/images/template2.gif +0 -0
  152. data/fckeditor/editor/dialog/fck_template/images/template3.gif +0 -0
  153. data/fckeditor/editor/dialog/fck_textarea.html +94 -0
  154. data/fckeditor/editor/dialog/fck_textfield.html +139 -0
  155. data/fckeditor/editor/fckdebug.html +153 -0
  156. data/fckeditor/editor/fckdialog.html +324 -0
  157. data/fckeditor/editor/fckeditor.html +227 -0
  158. data/fckeditor/editor/fckeditor.original.html +319 -0
  159. data/fckeditor/editor/filemanager/browser/default/browser.css +88 -0
  160. data/fckeditor/editor/filemanager/browser/default/browser.html +154 -0
  161. data/fckeditor/editor/filemanager/browser/default/connectors/asp/basexml.asp +62 -0
  162. data/fckeditor/editor/filemanager/browser/default/connectors/asp/class_upload.asp +234 -0
  163. data/fckeditor/editor/filemanager/browser/default/connectors/asp/commands.asp +183 -0
  164. data/fckeditor/editor/filemanager/browser/default/connectors/asp/config.asp +49 -0
  165. data/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp +124 -0
  166. data/fckeditor/editor/filemanager/browser/default/connectors/asp/io.asp +89 -0
  167. data/fckeditor/editor/filemanager/browser/default/connectors/asp/util.asp +55 -0
  168. data/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx +30 -0
  169. data/fckeditor/editor/filemanager/browser/default/connectors/cfm/config.cfm +99 -0
  170. data/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm +363 -0
  171. data/fckeditor/editor/filemanager/browser/default/connectors/lasso/config.lasso +65 -0
  172. data/fckeditor/editor/filemanager/browser/default/connectors/lasso/connector.lasso +249 -0
  173. data/fckeditor/editor/filemanager/browser/default/connectors/perl/basexml.pl +63 -0
  174. data/fckeditor/editor/filemanager/browser/default/connectors/perl/commands.pl +158 -0
  175. data/fckeditor/editor/filemanager/browser/default/connectors/perl/connector.cgi +137 -0
  176. data/fckeditor/editor/filemanager/browser/default/connectors/perl/io.pl +131 -0
  177. data/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl +667 -0
  178. data/fckeditor/editor/filemanager/browser/default/connectors/perl/util.pl +60 -0
  179. data/fckeditor/editor/filemanager/browser/default/connectors/php/basexml.php +75 -0
  180. data/fckeditor/editor/filemanager/browser/default/connectors/php/commands.php +222 -0
  181. data/fckeditor/editor/filemanager/browser/default/connectors/php/config.php +56 -0
  182. data/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php +113 -0
  183. data/fckeditor/editor/filemanager/browser/default/connectors/php/io.php +101 -0
  184. data/fckeditor/editor/filemanager/browser/default/connectors/php/util.php +41 -0
  185. data/fckeditor/editor/filemanager/browser/default/connectors/py/connector.py +785 -0
  186. data/fckeditor/editor/filemanager/browser/default/connectors/test.html +180 -0
  187. data/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +67 -0
  188. data/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html +113 -0
  189. data/fckeditor/editor/filemanager/browser/default/frmfolders.html +196 -0
  190. data/fckeditor/editor/filemanager/browser/default/frmresourceslist.html +160 -0
  191. data/fckeditor/editor/filemanager/browser/default/frmresourcetype.html +65 -0
  192. data/fckeditor/editor/filemanager/browser/default/frmupload.html +113 -0
  193. data/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif +0 -0
  194. data/fckeditor/editor/filemanager/browser/default/images/Folder.gif +0 -0
  195. data/fckeditor/editor/filemanager/browser/default/images/Folder32.gif +0 -0
  196. data/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif +0 -0
  197. data/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif +0 -0
  198. data/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif +0 -0
  199. data/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif +0 -0
  200. data/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif +0 -0
  201. data/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif +0 -0
  202. data/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif +0 -0
  203. data/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif +0 -0
  204. data/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif +0 -0
  205. data/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif +0 -0
  206. data/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif +0 -0
  207. data/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif +0 -0
  208. data/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif +0 -0
  209. data/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif +0 -0
  210. data/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif +0 -0
  211. data/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif +0 -0
  212. data/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif +0 -0
  213. data/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif +0 -0
  214. data/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif +0 -0
  215. data/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif +0 -0
  216. data/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif +0 -0
  217. data/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif +0 -0
  218. data/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif +0 -0
  219. data/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif +0 -0
  220. data/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif +0 -0
  221. data/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif +0 -0
  222. data/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif +0 -0
  223. data/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif +0 -0
  224. data/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif +0 -0
  225. data/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif +0 -0
  226. data/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif +0 -0
  227. data/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif +0 -0
  228. data/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif +0 -0
  229. data/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif +0 -0
  230. data/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif +0 -0
  231. data/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif +0 -0
  232. data/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif +0 -0
  233. data/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif +0 -0
  234. data/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif +0 -0
  235. data/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif +0 -0
  236. data/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif +0 -0
  237. data/fckeditor/editor/filemanager/browser/default/images/icons/html.gif +0 -0
  238. data/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif +0 -0
  239. data/fckeditor/editor/filemanager/browser/default/images/icons/js.gif +0 -0
  240. data/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif +0 -0
  241. data/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif +0 -0
  242. data/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif +0 -0
  243. data/fckeditor/editor/filemanager/browser/default/images/icons/png.gif +0 -0
  244. data/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif +0 -0
  245. data/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif +0 -0
  246. data/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif +0 -0
  247. data/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif +0 -0
  248. data/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif +0 -0
  249. data/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif +0 -0
  250. data/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif +0 -0
  251. data/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif +0 -0
  252. data/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif +0 -0
  253. data/fckeditor/editor/filemanager/browser/default/images/spacer.gif +0 -0
  254. data/fckeditor/editor/filemanager/browser/default/js/common.js +55 -0
  255. data/fckeditor/editor/filemanager/browser/default/js/fckxml.js +130 -0
  256. data/fckeditor/editor/filemanager/upload/asp/class_upload.asp +234 -0
  257. data/fckeditor/editor/filemanager/upload/asp/config.asp +52 -0
  258. data/fckeditor/editor/filemanager/upload/asp/io.asp +29 -0
  259. data/fckeditor/editor/filemanager/upload/asp/upload.asp +121 -0
  260. data/fckeditor/editor/filemanager/upload/aspx/upload.aspx +30 -0
  261. data/fckeditor/editor/filemanager/upload/cfm/config.cfm +98 -0
  262. data/fckeditor/editor/filemanager/upload/cfm/upload.cfm +168 -0
  263. data/fckeditor/editor/filemanager/upload/lasso/config.lasso +65 -0
  264. data/fckeditor/editor/filemanager/upload/lasso/upload.lasso +157 -0
  265. data/fckeditor/editor/filemanager/upload/php/config.php +56 -0
  266. data/fckeditor/editor/filemanager/upload/php/upload.php +124 -0
  267. data/fckeditor/editor/filemanager/upload/php/util.php +40 -0
  268. data/fckeditor/editor/filemanager/upload/test.html +133 -0
  269. data/fckeditor/editor/images/anchor.gif +0 -0
  270. data/fckeditor/editor/images/arrow_ltr.gif +0 -0
  271. data/fckeditor/editor/images/arrow_rtl.gif +0 -0
  272. data/fckeditor/editor/images/smiley/msn/angel_smile.gif +0 -0
  273. data/fckeditor/editor/images/smiley/msn/angry_smile.gif +0 -0
  274. data/fckeditor/editor/images/smiley/msn/broken_heart.gif +0 -0
  275. data/fckeditor/editor/images/smiley/msn/cake.gif +0 -0
  276. data/fckeditor/editor/images/smiley/msn/confused_smile.gif +0 -0
  277. data/fckeditor/editor/images/smiley/msn/cry_smile.gif +0 -0
  278. data/fckeditor/editor/images/smiley/msn/devil_smile.gif +0 -0
  279. data/fckeditor/editor/images/smiley/msn/embaressed_smile.gif +0 -0
  280. data/fckeditor/editor/images/smiley/msn/envelope.gif +0 -0
  281. data/fckeditor/editor/images/smiley/msn/heart.gif +0 -0
  282. data/fckeditor/editor/images/smiley/msn/kiss.gif +0 -0
  283. data/fckeditor/editor/images/smiley/msn/lightbulb.gif +0 -0
  284. data/fckeditor/editor/images/smiley/msn/omg_smile.gif +0 -0
  285. data/fckeditor/editor/images/smiley/msn/regular_smile.gif +0 -0
  286. data/fckeditor/editor/images/smiley/msn/sad_smile.gif +0 -0
  287. data/fckeditor/editor/images/smiley/msn/shades_smile.gif +0 -0
  288. data/fckeditor/editor/images/smiley/msn/teeth_smile.gif +0 -0
  289. data/fckeditor/editor/images/smiley/msn/thumbs_down.gif +0 -0
  290. data/fckeditor/editor/images/smiley/msn/thumbs_up.gif +0 -0
  291. data/fckeditor/editor/images/smiley/msn/tounge_smile.gif +0 -0
  292. data/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif +0 -0
  293. data/fckeditor/editor/images/smiley/msn/wink_smile.gif +0 -0
  294. data/fckeditor/editor/images/spacer.gif +0 -0
  295. data/fckeditor/editor/js/fckeditorcode_gecko.js +98 -0
  296. data/fckeditor/editor/js/fckeditorcode_ie.js +99 -0
  297. data/fckeditor/editor/lang/_getfontformat.html +85 -0
  298. data/fckeditor/editor/lang/_translationstatus.txt +76 -0
  299. data/fckeditor/editor/lang/af.js +504 -0
  300. data/fckeditor/editor/lang/ar.js +504 -0
  301. data/fckeditor/editor/lang/bg.js +504 -0
  302. data/fckeditor/editor/lang/bn.js +504 -0
  303. data/fckeditor/editor/lang/bs.js +504 -0
  304. data/fckeditor/editor/lang/ca.js +504 -0
  305. data/fckeditor/editor/lang/cs.js +504 -0
  306. data/fckeditor/editor/lang/da.js +504 -0
  307. data/fckeditor/editor/lang/de.js +504 -0
  308. data/fckeditor/editor/lang/el.js +504 -0
  309. data/fckeditor/editor/lang/en-au.js +504 -0
  310. data/fckeditor/editor/lang/en-ca.js +504 -0
  311. data/fckeditor/editor/lang/en-uk.js +504 -0
  312. data/fckeditor/editor/lang/en.js +504 -0
  313. data/fckeditor/editor/lang/eo.js +504 -0
  314. data/fckeditor/editor/lang/es.js +504 -0
  315. data/fckeditor/editor/lang/et.js +504 -0
  316. data/fckeditor/editor/lang/eu.js +505 -0
  317. data/fckeditor/editor/lang/fa.js +504 -0
  318. data/fckeditor/editor/lang/fi.js +504 -0
  319. data/fckeditor/editor/lang/fo.js +504 -0
  320. data/fckeditor/editor/lang/fr.js +504 -0
  321. data/fckeditor/editor/lang/gl.js +504 -0
  322. data/fckeditor/editor/lang/he.js +504 -0
  323. data/fckeditor/editor/lang/hi.js +504 -0
  324. data/fckeditor/editor/lang/hr.js +504 -0
  325. data/fckeditor/editor/lang/hu.js +504 -0
  326. data/fckeditor/editor/lang/it.js +504 -0
  327. data/fckeditor/editor/lang/ja.js +504 -0
  328. data/fckeditor/editor/lang/km.js +504 -0
  329. data/fckeditor/editor/lang/ko.js +504 -0
  330. data/fckeditor/editor/lang/lt.js +504 -0
  331. data/fckeditor/editor/lang/lv.js +504 -0
  332. data/fckeditor/editor/lang/mn.js +504 -0
  333. data/fckeditor/editor/lang/ms.js +504 -0
  334. data/fckeditor/editor/lang/nb.js +504 -0
  335. data/fckeditor/editor/lang/nl.js +504 -0
  336. data/fckeditor/editor/lang/no.js +504 -0
  337. data/fckeditor/editor/lang/pl.js +504 -0
  338. data/fckeditor/editor/lang/pt-br.js +504 -0
  339. data/fckeditor/editor/lang/pt.js +504 -0
  340. data/fckeditor/editor/lang/ro.js +504 -0
  341. data/fckeditor/editor/lang/ru.js +504 -0
  342. data/fckeditor/editor/lang/sk.js +504 -0
  343. data/fckeditor/editor/lang/sl.js +504 -0
  344. data/fckeditor/editor/lang/sr-latn.js +504 -0
  345. data/fckeditor/editor/lang/sr.js +504 -0
  346. data/fckeditor/editor/lang/sv.js +504 -0
  347. data/fckeditor/editor/lang/th.js +504 -0
  348. data/fckeditor/editor/lang/tr.js +504 -0
  349. data/fckeditor/editor/lang/uk.js +504 -0
  350. data/fckeditor/editor/lang/vi.js +504 -0
  351. data/fckeditor/editor/lang/zh-cn.js +504 -0
  352. data/fckeditor/editor/lang/zh.js +504 -0
  353. data/fckeditor/editor/plugins/autogrow/fckplugin.js +92 -0
  354. data/fckeditor/editor/plugins/placeholder/fck_placeholder.html +100 -0
  355. data/fckeditor/editor/plugins/placeholder/fckplugin.js +187 -0
  356. data/fckeditor/editor/plugins/placeholder/lang/de.js +27 -0
  357. data/fckeditor/editor/plugins/placeholder/lang/en.js +27 -0
  358. data/fckeditor/editor/plugins/placeholder/lang/fr.js +27 -0
  359. data/fckeditor/editor/plugins/placeholder/lang/it.js +27 -0
  360. data/fckeditor/editor/plugins/placeholder/lang/pl.js +27 -0
  361. data/fckeditor/editor/plugins/placeholder/placeholder.gif +0 -0
  362. data/fckeditor/editor/plugins/simplecommands/fckplugin.js +29 -0
  363. data/fckeditor/editor/plugins/tablecommands/fckplugin.js +32 -0
  364. data/fckeditor/editor/skins/_fckviewstrips.html +121 -0
  365. data/fckeditor/editor/skins/default/fck_dialog.css +137 -0
  366. data/fckeditor/editor/skins/default/fck_editor.css +464 -0
  367. data/fckeditor/editor/skins/default/fck_strip.gif +0 -0
  368. data/fckeditor/editor/skins/default/images/toolbar.arrowright.gif +0 -0
  369. data/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif +0 -0
  370. data/fckeditor/editor/skins/default/images/toolbar.collapse.gif +0 -0
  371. data/fckeditor/editor/skins/default/images/toolbar.end.gif +0 -0
  372. data/fckeditor/editor/skins/default/images/toolbar.expand.gif +0 -0
  373. data/fckeditor/editor/skins/default/images/toolbar.separator.gif +0 -0
  374. data/fckeditor/editor/skins/default/images/toolbar.start.gif +0 -0
  375. data/fckeditor/editor/skins/office2003/fck_dialog.css +138 -0
  376. data/fckeditor/editor/skins/office2003/fck_editor.css +476 -0
  377. data/fckeditor/editor/skins/office2003/fck_strip.gif +0 -0
  378. data/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif +0 -0
  379. data/fckeditor/editor/skins/office2003/images/toolbar.bg.gif +0 -0
  380. data/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif +0 -0
  381. data/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif +0 -0
  382. data/fckeditor/editor/skins/office2003/images/toolbar.end.gif +0 -0
  383. data/fckeditor/editor/skins/office2003/images/toolbar.expand.gif +0 -0
  384. data/fckeditor/editor/skins/office2003/images/toolbar.separator.gif +0 -0
  385. data/fckeditor/editor/skins/office2003/images/toolbar.start.gif +0 -0
  386. data/fckeditor/editor/skins/silver/fck_dialog.css +141 -0
  387. data/fckeditor/editor/skins/silver/fck_editor.css +473 -0
  388. data/fckeditor/editor/skins/silver/fck_strip.gif +0 -0
  389. data/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif +0 -0
  390. data/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif +0 -0
  391. data/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif +0 -0
  392. data/fckeditor/editor/skins/silver/images/toolbar.collapse.gif +0 -0
  393. data/fckeditor/editor/skins/silver/images/toolbar.end.gif +0 -0
  394. data/fckeditor/editor/skins/silver/images/toolbar.expand.gif +0 -0
  395. data/fckeditor/editor/skins/silver/images/toolbar.separator.gif +0 -0
  396. data/fckeditor/editor/skins/silver/images/toolbar.start.gif +0 -0
  397. data/fckeditor/fckconfig.js +224 -0
  398. data/fckeditor/fckeditor.js +214 -0
  399. data/fckeditor/fckstyles.xml +53 -0
  400. data/fckeditor/fcktemplates.xml +103 -0
  401. data/lib/Wiki2GoEditor/Install/editor.rb +39 -0
  402. data/test/test_install.rb +40 -0
  403. metadata +517 -0
@@ -0,0 +1,101 @@
1
+ <?php
2
+ /*
3
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
5
+ *
6
+ * == BEGIN LICENSE ==
7
+ *
8
+ * Licensed under the terms of any of the following licenses at your
9
+ * choice:
10
+ *
11
+ * - GNU General Public License Version 2 or later (the "GPL")
12
+ * http://www.gnu.org/licenses/gpl.html
13
+ *
14
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
+ * http://www.gnu.org/licenses/lgpl.html
16
+ *
17
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
18
+ * http://www.mozilla.org/MPL/MPL-1.1.html
19
+ *
20
+ * == END LICENSE ==
21
+ *
22
+ * This is the File Manager Connector for PHP.
23
+ */
24
+
25
+ function GetUrlFromPath( $resourceType, $folderPath )
26
+ {
27
+ if ( $resourceType == '' )
28
+ return RemoveFromEnd( $GLOBALS["UserFilesPath"], '/' ) . $folderPath ;
29
+ else
30
+ return $GLOBALS["UserFilesPath"] . strtolower( $resourceType ) . $folderPath ;
31
+ }
32
+
33
+ function RemoveExtension( $fileName )
34
+ {
35
+ return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ;
36
+ }
37
+
38
+ function ServerMapFolder( $resourceType, $folderPath )
39
+ {
40
+ // Get the resource type directory.
41
+ $sResourceTypePath = $GLOBALS["UserFilesDirectory"] . strtolower( $resourceType ) . '/' ;
42
+
43
+ // Ensure that the directory exists.
44
+ CreateServerFolder( $sResourceTypePath ) ;
45
+
46
+ // Return the resource type directory combined with the required path.
47
+ return $sResourceTypePath . RemoveFromStart( $folderPath, '/' ) ;
48
+ }
49
+
50
+ function GetParentFolder( $folderPath )
51
+ {
52
+ $sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ;
53
+ return preg_replace( $sPattern, '', $folderPath ) ;
54
+ }
55
+
56
+ function CreateServerFolder( $folderPath )
57
+ {
58
+ $sParent = GetParentFolder( $folderPath ) ;
59
+
60
+ // Check if the parent exists, or create it.
61
+ if ( !file_exists( $sParent ) )
62
+ {
63
+ $sErrorMsg = CreateServerFolder( $sParent ) ;
64
+ if ( $sErrorMsg != '' )
65
+ return $sErrorMsg ;
66
+ }
67
+
68
+ if ( !file_exists( $folderPath ) )
69
+ {
70
+ // Turn off all error reporting.
71
+ error_reporting( 0 ) ;
72
+ // Enable error tracking to catch the error.
73
+ ini_set( 'track_errors', '1' ) ;
74
+
75
+ // To create the folder with 0777 permissions, we need to set umask to zero.
76
+ $oldumask = umask(0) ;
77
+ mkdir( $folderPath, 0777 ) ;
78
+ umask( $oldumask ) ;
79
+
80
+ $sErrorMsg = $php_errormsg ;
81
+
82
+ // Restore the configurations.
83
+ ini_restore( 'track_errors' ) ;
84
+ ini_restore( 'error_reporting' ) ;
85
+
86
+ return $sErrorMsg ;
87
+ }
88
+ else
89
+ return '' ;
90
+ }
91
+
92
+ function GetRootPath()
93
+ {
94
+ $sRealPath = realpath( './' ) ;
95
+
96
+ $sSelfPath = $_SERVER['PHP_SELF'] ;
97
+ $sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ;
98
+
99
+ return substr( $sRealPath, 0, strlen( $sRealPath ) - strlen( $sSelfPath ) ) ;
100
+ }
101
+ ?>
@@ -0,0 +1,41 @@
1
+ <?php
2
+ /*
3
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
5
+ *
6
+ * == BEGIN LICENSE ==
7
+ *
8
+ * Licensed under the terms of any of the following licenses at your
9
+ * choice:
10
+ *
11
+ * - GNU General Public License Version 2 or later (the "GPL")
12
+ * http://www.gnu.org/licenses/gpl.html
13
+ *
14
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
+ * http://www.gnu.org/licenses/lgpl.html
16
+ *
17
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
18
+ * http://www.mozilla.org/MPL/MPL-1.1.html
19
+ *
20
+ * == END LICENSE ==
21
+ *
22
+ * Utility functions for the File Manager Connector for PHP.
23
+ */
24
+
25
+ function RemoveFromStart( $sourceString, $charToRemove )
26
+ {
27
+ $sPattern = '|^' . $charToRemove . '+|' ;
28
+ return preg_replace( $sPattern, '', $sourceString ) ;
29
+ }
30
+
31
+ function RemoveFromEnd( $sourceString, $charToRemove )
32
+ {
33
+ $sPattern = '|' . $charToRemove . '+$|' ;
34
+ return preg_replace( $sPattern, '', $sourceString ) ;
35
+ }
36
+
37
+ function ConvertToXmlAttribute( $value )
38
+ {
39
+ return utf8_encode( htmlspecialchars( $value ) ) ;
40
+ }
41
+ ?>
@@ -0,0 +1,785 @@
1
+ #!/usr/bin/env python
2
+
3
+ """
4
+ FCKeditor - The text editor for Internet - http://www.fckeditor.net
5
+ Copyright (C) 2003-2007 Frederico Caldeira Knabben
6
+
7
+ == BEGIN LICENSE ==
8
+
9
+ Licensed under the terms of any of the following licenses at your
10
+ choice:
11
+
12
+ - GNU General Public License Version 2 or later (the "GPL")
13
+ http://www.gnu.org/licenses/gpl.html
14
+
15
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
16
+ http://www.gnu.org/licenses/lgpl.html
17
+
18
+ - Mozilla Public License Version 1.1 or later (the "MPL")
19
+ http://www.mozilla.org/MPL/MPL-1.1.html
20
+
21
+ == END LICENSE ==
22
+
23
+ Connector for Python.
24
+
25
+ Tested With:
26
+ Standard:
27
+ Python 2.3.3
28
+ Zope:
29
+ Zope Version: (Zope 2.8.1-final, python 2.3.5, linux2)
30
+ Python Version: 2.3.5 (#4, Mar 10 2005, 01:40:25)
31
+ [GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)]
32
+ System Platform: linux2
33
+ """
34
+
35
+ """
36
+ Author Notes (04 December 2005):
37
+ This module has gone through quite a few phases of change. Obviously,
38
+ I am only supporting that part of the code that I use. Initially
39
+ I had the upload directory as a part of zope (ie. uploading files
40
+ directly into Zope), before realising that there were too many
41
+ complex intricacies within Zope to deal with. Zope is one ugly piece
42
+ of code. So I decided to complement Zope by an Apache server (which
43
+ I had running anyway, and doing nothing). So I mapped all uploads
44
+ from an arbitrary server directory to an arbitrary web directory.
45
+ All the FCKeditor uploading occurred this way, and I didn't have to
46
+ stuff around with fiddling with Zope objects and the like (which are
47
+ terribly complex and something you don't want to do - trust me).
48
+
49
+ Maybe a Zope expert can touch up the Zope components. In the end,
50
+ I had FCKeditor loaded in Zope (probably a bad idea as well), and
51
+ I replaced the connector.py with an alias to a server module.
52
+ Right now, all Zope components will simple remain as is because
53
+ I've had enough of Zope.
54
+
55
+ See notes right at the end of this file for how I aliased out of Zope.
56
+
57
+ Anyway, most of you probably wont use Zope, so things are pretty
58
+ simple in that regard.
59
+
60
+ Typically, SERVER_DIR is the root of WEB_DIR (not necessarily).
61
+ Most definitely, SERVER_USERFILES_DIR points to WEB_USERFILES_DIR.
62
+ """
63
+
64
+ import cgi
65
+ import re
66
+ import os
67
+ import string
68
+
69
+ """
70
+ escape
71
+
72
+ Converts the special characters '<', '>', and '&'.
73
+
74
+ RFC 1866 specifies that these characters be represented
75
+ in HTML as &lt; &gt; and &amp; respectively. In Python
76
+ 1.5 we use the new string.replace() function for speed.
77
+ """
78
+ def escape(text, replace=string.replace):
79
+ text = replace(text, '&', '&amp;') # must be done 1st
80
+ text = replace(text, '<', '&lt;')
81
+ text = replace(text, '>', '&gt;')
82
+ text = replace(text, '"', '&quot;')
83
+ return text
84
+
85
+ """
86
+ getFCKeditorConnector
87
+
88
+ Creates a new instance of an FCKeditorConnector, and runs it
89
+ """
90
+ def getFCKeditorConnector(context=None):
91
+ # Called from Zope. Passes the context through
92
+ connector = FCKeditorConnector(context=context)
93
+ return connector.run()
94
+
95
+
96
+ """
97
+ FCKeditorRequest
98
+
99
+ A wrapper around the request object
100
+ Can handle normal CGI request, or a Zope request
101
+ Extend as required
102
+ """
103
+ class FCKeditorRequest(object):
104
+ def __init__(self, context=None):
105
+ if (context is not None):
106
+ r = context.REQUEST
107
+ else:
108
+ r = cgi.FieldStorage()
109
+ self.context = context
110
+ self.request = r
111
+
112
+ def isZope(self):
113
+ if (self.context is not None):
114
+ return True
115
+ return False
116
+
117
+ def has_key(self, key):
118
+ return self.request.has_key(key)
119
+
120
+ def get(self, key, default=None):
121
+ value = None
122
+ if (self.isZope()):
123
+ value = self.request.get(key, default)
124
+ else:
125
+ if key in self.request.keys():
126
+ value = self.request[key].value
127
+ else:
128
+ value = default
129
+ return value
130
+
131
+ """
132
+ FCKeditorConnector
133
+
134
+ The connector class
135
+ """
136
+ class FCKeditorConnector(object):
137
+ # Configuration for FCKEditor
138
+ # can point to another server here, if linked correctly
139
+ #WEB_HOST = "http://127.0.0.1/"
140
+ WEB_HOST = ""
141
+ SERVER_DIR = "/var/www/html/"
142
+
143
+ WEB_USERFILES_FOLDER = WEB_HOST + "upload/"
144
+ SERVER_USERFILES_FOLDER = SERVER_DIR + "upload/"
145
+
146
+ # Allow access (Zope)
147
+ __allow_access_to_unprotected_subobjects__ = 1
148
+ # Class Attributes
149
+ parentFolderRe = re.compile("[\/][^\/]+[\/]?$")
150
+
151
+ """
152
+ Constructor
153
+ """
154
+ def __init__(self, context=None):
155
+ # The given root path will NOT be shown to the user
156
+ # Only the userFilesPath will be shown
157
+
158
+ # Instance Attributes
159
+ self.context = context
160
+ self.request = FCKeditorRequest(context=context)
161
+ self.rootPath = self.SERVER_DIR
162
+ self.userFilesFolder = self.SERVER_USERFILES_FOLDER
163
+ self.webUserFilesFolder = self.WEB_USERFILES_FOLDER
164
+
165
+ # Enables / Disables the connector
166
+ self.enabled = False # Set to True to enable this connector
167
+
168
+ # These are instance variables
169
+ self.zopeRootContext = None
170
+ self.zopeUploadContext = None
171
+
172
+ # Copied from php module =)
173
+ self.allowedExtensions = {
174
+ "File": None,
175
+ "Image": None,
176
+ "Flash": None,
177
+ "Media": None
178
+ }
179
+ self.deniedExtensions = {
180
+ "File": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ],
181
+ "Image": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ],
182
+ "Flash": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ],
183
+ "Media": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ]
184
+ }
185
+
186
+ """
187
+ Zope specific functions
188
+ """
189
+ def isZope(self):
190
+ # The context object is the zope object
191
+ if (self.context is not None):
192
+ return True
193
+ return False
194
+
195
+ def getZopeRootContext(self):
196
+ if self.zopeRootContext is None:
197
+ self.zopeRootContext = self.context.getPhysicalRoot()
198
+ return self.zopeRootContext
199
+
200
+ def getZopeUploadContext(self):
201
+ if self.zopeUploadContext is None:
202
+ folderNames = self.userFilesFolder.split("/")
203
+ c = self.getZopeRootContext()
204
+ for folderName in folderNames:
205
+ if (folderName <> ""):
206
+ c = c[folderName]
207
+ self.zopeUploadContext = c
208
+ return self.zopeUploadContext
209
+
210
+ """
211
+ Generic manipulation functions
212
+ """
213
+ def getUserFilesFolder(self):
214
+ return self.userFilesFolder
215
+
216
+ def getWebUserFilesFolder(self):
217
+ return self.webUserFilesFolder
218
+
219
+ def getAllowedExtensions(self, resourceType):
220
+ return self.allowedExtensions[resourceType]
221
+
222
+ def getDeniedExtensions(self, resourceType):
223
+ return self.deniedExtensions[resourceType]
224
+
225
+ def removeFromStart(self, string, char):
226
+ return string.lstrip(char)
227
+
228
+ def removeFromEnd(self, string, char):
229
+ return string.rstrip(char)
230
+
231
+ def convertToXmlAttribute(self, value):
232
+ if (value is None):
233
+ value = ""
234
+ return escape(value)
235
+
236
+ def convertToPath(self, path):
237
+ if (path[-1] <> "/"):
238
+ return path + "/"
239
+ else:
240
+ return path
241
+
242
+ def getUrlFromPath(self, resourceType, path):
243
+ if (resourceType is None) or (resourceType == ''):
244
+ url = "%s%s" % (
245
+ self.removeFromEnd(self.getUserFilesFolder(), '/'),
246
+ path
247
+ )
248
+ else:
249
+ url = "%s%s%s" % (
250
+ self.getUserFilesFolder(),
251
+ resourceType,
252
+ path
253
+ )
254
+ return url
255
+
256
+ def getWebUrlFromPath(self, resourceType, path):
257
+ if (resourceType is None) or (resourceType == ''):
258
+ url = "%s%s" % (
259
+ self.removeFromEnd(self.getWebUserFilesFolder(), '/'),
260
+ path
261
+ )
262
+ else:
263
+ url = "%s%s%s" % (
264
+ self.getWebUserFilesFolder(),
265
+ resourceType,
266
+ path
267
+ )
268
+ return url
269
+
270
+ def removeExtension(self, fileName):
271
+ index = fileName.rindex(".")
272
+ newFileName = fileName[0:index]
273
+ return newFileName
274
+
275
+ def getExtension(self, fileName):
276
+ index = fileName.rindex(".") + 1
277
+ fileExtension = fileName[index:]
278
+ return fileExtension
279
+
280
+ def getParentFolder(self, folderPath):
281
+ parentFolderPath = self.parentFolderRe.sub('', folderPath)
282
+ return parentFolderPath
283
+
284
+ """
285
+ serverMapFolder
286
+
287
+ Purpose: works out the folder map on the server
288
+ """
289
+ def serverMapFolder(self, resourceType, folderPath):
290
+ # Get the resource type directory
291
+ resourceTypeFolder = "%s%s/" % (
292
+ self.getUserFilesFolder(),
293
+ resourceType
294
+ )
295
+ # Ensure that the directory exists
296
+ self.createServerFolder(resourceTypeFolder)
297
+
298
+ # Return the resource type directory combined with the
299
+ # required path
300
+ return "%s%s" % (
301
+ resourceTypeFolder,
302
+ self.removeFromStart(folderPath, '/')
303
+ )
304
+
305
+ """
306
+ createServerFolder
307
+
308
+ Purpose: physically creates a folder on the server
309
+ """
310
+ def createServerFolder(self, folderPath):
311
+ # Check if the parent exists
312
+ parentFolderPath = self.getParentFolder(folderPath)
313
+ if not(os.path.exists(parentFolderPath)):
314
+ errorMsg = self.createServerFolder(parentFolderPath)
315
+ if errorMsg is not None:
316
+ return errorMsg
317
+ # Check if this exists
318
+ if not(os.path.exists(folderPath)):
319
+ os.mkdir(folderPath)
320
+ os.chmod(folderPath, 0755)
321
+ errorMsg = None
322
+ else:
323
+ if os.path.isdir(folderPath):
324
+ errorMsg = None
325
+ else:
326
+ raise "createServerFolder: Non-folder of same name already exists"
327
+ return errorMsg
328
+
329
+
330
+ """
331
+ getRootPath
332
+
333
+ Purpose: returns the root path on the server
334
+ """
335
+ def getRootPath(self):
336
+ return self.rootPath
337
+
338
+ """
339
+ setXmlHeaders
340
+
341
+ Purpose: to prepare the headers for the xml to return
342
+ """
343
+ def setXmlHeaders(self):
344
+ #now = self.context.BS_get_now()
345
+ #yesterday = now - 1
346
+ self.setHeader("Content-Type", "text/xml")
347
+ #self.setHeader("Expires", yesterday)
348
+ #self.setHeader("Last-Modified", now)
349
+ #self.setHeader("Cache-Control", "no-store, no-cache, must-revalidate")
350
+ self.printHeaders()
351
+ return
352
+
353
+ def setHeader(self, key, value):
354
+ if (self.isZope()):
355
+ self.context.REQUEST.RESPONSE.setHeader(key, value)
356
+ else:
357
+ print "%s: %s" % (key, value)
358
+ return
359
+
360
+ def printHeaders(self):
361
+ # For non-Zope requests, we need to print an empty line
362
+ # to denote the end of headers
363
+ if (not(self.isZope())):
364
+ print ""
365
+
366
+ """
367
+ createXmlFooter
368
+
369
+ Purpose: returns the xml header
370
+ """
371
+ def createXmlHeader(self, command, resourceType, currentFolder):
372
+ self.setXmlHeaders()
373
+ s = ""
374
+ # Create the XML document header
375
+ s += """<?xml version="1.0" encoding="utf-8" ?>"""
376
+ # Create the main connector node
377
+ s += """<Connector command="%s" resourceType="%s">""" % (
378
+ command,
379
+ resourceType
380
+ )
381
+ # Add the current folder node
382
+ s += """<CurrentFolder path="%s" url="%s" />""" % (
383
+ self.convertToXmlAttribute(currentFolder),
384
+ self.convertToXmlAttribute(
385
+ self.getWebUrlFromPath(
386
+ resourceType,
387
+ currentFolder
388
+ )
389
+ ),
390
+ )
391
+ return s
392
+
393
+ """
394
+ createXmlFooter
395
+
396
+ Purpose: returns the xml footer
397
+ """
398
+ def createXmlFooter(self):
399
+ s = """</Connector>"""
400
+ return s
401
+
402
+ """
403
+ sendError
404
+
405
+ Purpose: in the event of an error, return an xml based error
406
+ """
407
+ def sendError(self, number, text):
408
+ self.setXmlHeaders()
409
+ s = ""
410
+ # Create the XML document header
411
+ s += """<?xml version="1.0" encoding="utf-8" ?>"""
412
+ s += """<Connector>"""
413
+ s += """<Error number="%s" text="%s" />""" % (number, text)
414
+ s += """</Connector>"""
415
+ return s
416
+
417
+ """
418
+ getFolders
419
+
420
+ Purpose: command to recieve a list of folders
421
+ """
422
+ def getFolders(self, resourceType, currentFolder):
423
+ if (self.isZope()):
424
+ return self.getZopeFolders(resourceType, currentFolder)
425
+ else:
426
+ return self.getNonZopeFolders(resourceType, currentFolder)
427
+
428
+ def getZopeFolders(self, resourceType, currentFolder):
429
+ # Open the folders node
430
+ s = ""
431
+ s += """<Folders>"""
432
+ zopeFolder = self.findZopeFolder(resourceType, currentFolder)
433
+ for (name, o) in zopeFolder.objectItems(["Folder"]):
434
+ s += """<Folder name="%s" />""" % (
435
+ self.convertToXmlAttribute(name)
436
+ )
437
+ # Close the folders node
438
+ s += """</Folders>"""
439
+ return s
440
+
441
+ def getNonZopeFolders(self, resourceType, currentFolder):
442
+ # Map the virtual path to our local server
443
+ serverPath = self.serverMapFolder(resourceType, currentFolder)
444
+ # Open the folders node
445
+ s = ""
446
+ s += """<Folders>"""
447
+ for someObject in os.listdir(serverPath):
448
+ someObjectPath = os.path.join(serverPath, someObject)
449
+ if os.path.isdir(someObjectPath):
450
+ s += """<Folder name="%s" />""" % (
451
+ self.convertToXmlAttribute(someObject)
452
+ )
453
+ # Close the folders node
454
+ s += """</Folders>"""
455
+ return s
456
+
457
+ """
458
+ getFoldersAndFiles
459
+
460
+ Purpose: command to recieve a list of folders and files
461
+ """
462
+ def getFoldersAndFiles(self, resourceType, currentFolder):
463
+ if (self.isZope()):
464
+ return self.getZopeFoldersAndFiles(resourceType, currentFolder)
465
+ else:
466
+ return self.getNonZopeFoldersAndFiles(resourceType, currentFolder)
467
+
468
+ def getNonZopeFoldersAndFiles(self, resourceType, currentFolder):
469
+ # Map the virtual path to our local server
470
+ serverPath = self.serverMapFolder(resourceType, currentFolder)
471
+ # Open the folders / files node
472
+ folders = """<Folders>"""
473
+ files = """<Files>"""
474
+ for someObject in os.listdir(serverPath):
475
+ someObjectPath = os.path.join(serverPath, someObject)
476
+ if os.path.isdir(someObjectPath):
477
+ folders += """<Folder name="%s" />""" % (
478
+ self.convertToXmlAttribute(someObject)
479
+ )
480
+ elif os.path.isfile(someObjectPath):
481
+ size = os.path.getsize(someObjectPath)
482
+ files += """<File name="%s" size="%s" />""" % (
483
+ self.convertToXmlAttribute(someObject),
484
+ os.path.getsize(someObjectPath)
485
+ )
486
+ # Close the folders / files node
487
+ folders += """</Folders>"""
488
+ files += """</Files>"""
489
+ # Return it
490
+ s = folders + files
491
+ return s
492
+
493
+ def getZopeFoldersAndFiles(self, resourceType, currentFolder):
494
+ folders = self.getZopeFolders(resourceType, currentFolder)
495
+ files = self.getZopeFiles(resourceType, currentFolder)
496
+ s = folders + files
497
+ return s
498
+
499
+ def getZopeFiles(self, resourceType, currentFolder):
500
+ # Open the files node
501
+ s = ""
502
+ s += """<Files>"""
503
+ zopeFolder = self.findZopeFolder(resourceType, currentFolder)
504
+ for (name, o) in zopeFolder.objectItems(["File","Image"]):
505
+ s += """<File name="%s" size="%s" />""" % (
506
+ self.convertToXmlAttribute(name),
507
+ ((o.get_size() / 1024) + 1)
508
+ )
509
+ # Close the files node
510
+ s += """</Files>"""
511
+ return s
512
+
513
+ def findZopeFolder(self, resourceType, folderName):
514
+ # returns the context of the resource / folder
515
+ zopeFolder = self.getZopeUploadContext()
516
+ folderName = self.removeFromStart(folderName, "/")
517
+ folderName = self.removeFromEnd(folderName, "/")
518
+ if (resourceType <> ""):
519
+ try:
520
+ zopeFolder = zopeFolder[resourceType]
521
+ except:
522
+ zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=resourceType, title=resourceType)
523
+ zopeFolder = zopeFolder[resourceType]
524
+ if (folderName <> ""):
525
+ folderNames = folderName.split("/")
526
+ for folderName in folderNames:
527
+ zopeFolder = zopeFolder[folderName]
528
+ return zopeFolder
529
+
530
+ """
531
+ createFolder
532
+
533
+ Purpose: command to create a new folder
534
+ """
535
+ def createFolder(self, resourceType, currentFolder):
536
+ if (self.isZope()):
537
+ return self.createZopeFolder(resourceType, currentFolder)
538
+ else:
539
+ return self.createNonZopeFolder(resourceType, currentFolder)
540
+
541
+ def createZopeFolder(self, resourceType, currentFolder):
542
+ # Find out where we are
543
+ zopeFolder = self.findZopeFolder(resourceType, currentFolder)
544
+ errorNo = 0
545
+ errorMsg = ""
546
+ if self.request.has_key("NewFolderName"):
547
+ newFolder = self.request.get("NewFolderName", None)
548
+ zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=newFolder, title=newFolder)
549
+ else:
550
+ errorNo = 102
551
+ error = """<Error number="%s" originalDescription="%s" />""" % (
552
+ errorNo,
553
+ self.convertToXmlAttribute(errorMsg)
554
+ )
555
+ return error
556
+
557
+ def createNonZopeFolder(self, resourceType, currentFolder):
558
+ errorNo = 0
559
+ errorMsg = ""
560
+ if self.request.has_key("NewFolderName"):
561
+ newFolder = self.request.get("NewFolderName", None)
562
+ currentFolderPath = self.serverMapFolder(
563
+ resourceType,
564
+ currentFolder
565
+ )
566
+ try:
567
+ newFolderPath = currentFolderPath + newFolder
568
+ errorMsg = self.createServerFolder(newFolderPath)
569
+ if (errorMsg is not None):
570
+ errorNo = 110
571
+ except:
572
+ errorNo = 103
573
+ else:
574
+ errorNo = 102
575
+ error = """<Error number="%s" originalDescription="%s" />""" % (
576
+ errorNo,
577
+ self.convertToXmlAttribute(errorMsg)
578
+ )
579
+ return error
580
+
581
+ """
582
+ getFileName
583
+
584
+ Purpose: helper function to extrapolate the filename
585
+ """
586
+ def getFileName(self, filename):
587
+ for splitChar in ["/", "\\"]:
588
+ array = filename.split(splitChar)
589
+ if (len(array) > 1):
590
+ filename = array[-1]
591
+ return filename
592
+
593
+ """
594
+ fileUpload
595
+
596
+ Purpose: command to upload files to server
597
+ """
598
+ def fileUpload(self, resourceType, currentFolder):
599
+ if (self.isZope()):
600
+ return self.zopeFileUpload(resourceType, currentFolder)
601
+ else:
602
+ return self.nonZopeFileUpload(resourceType, currentFolder)
603
+
604
+ def zopeFileUpload(self, resourceType, currentFolder, count=None):
605
+ zopeFolder = self.findZopeFolder(resourceType, currentFolder)
606
+ file = self.request.get("NewFile", None)
607
+ fileName = self.getFileName(file.filename)
608
+ fileNameOnly = self.removeExtension(fileName)
609
+ fileExtension = self.getExtension(fileName).lower()
610
+ if (count):
611
+ nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension)
612
+ else:
613
+ nid = fileName
614
+ title = nid
615
+ try:
616
+ zopeFolder.manage_addProduct['OFSP'].manage_addFile(
617
+ id=nid,
618
+ title=title,
619
+ file=file.read()
620
+ )
621
+ except:
622
+ if (count):
623
+ count += 1
624
+ else:
625
+ count = 1
626
+ self.zopeFileUpload(resourceType, currentFolder, count)
627
+ return
628
+
629
+ def nonZopeFileUpload(self, resourceType, currentFolder):
630
+ errorNo = 0
631
+ errorMsg = ""
632
+ if self.request.has_key("NewFile"):
633
+ # newFile has all the contents we need
634
+ newFile = self.request.get("NewFile", "")
635
+ # Get the file name
636
+ newFileName = newFile.filename
637
+ newFileNameOnly = self.removeExtension(newFileName)
638
+ newFileExtension = self.getExtension(newFileName).lower()
639
+ allowedExtensions = self.getAllowedExtensions(resourceType)
640
+ deniedExtensions = self.getDeniedExtensions(resourceType)
641
+ if (allowedExtensions is not None):
642
+ # Check for allowed
643
+ isAllowed = False
644
+ if (newFileExtension in allowedExtensions):
645
+ isAllowed = True
646
+ elif (deniedExtensions is not None):
647
+ # Check for denied
648
+ isAllowed = True
649
+ if (newFileExtension in deniedExtensions):
650
+ isAllowed = False
651
+ else:
652
+ # No extension limitations
653
+ isAllowed = True
654
+
655
+ if (isAllowed):
656
+ if (self.isZope()):
657
+ # Upload into zope
658
+ self.zopeFileUpload(resourceType, currentFolder)
659
+ else:
660
+ # Upload to operating system
661
+ # Map the virtual path to the local server path
662
+ currentFolderPath = self.serverMapFolder(
663
+ resourceType,
664
+ currentFolder
665
+ )
666
+ i = 0
667
+ while (True):
668
+ newFilePath = "%s%s" % (
669
+ currentFolderPath,
670
+ newFileName
671
+ )
672
+ if os.path.exists(newFilePath):
673
+ i += 1
674
+ newFilePath = "%s%s(%s).%s" % (
675
+ currentFolderPath,
676
+ newFileNameOnly,
677
+ i,
678
+ newFileExtension
679
+ )
680
+ errorNo = 201
681
+ break
682
+ else:
683
+ fileHandle = open(newFilePath,'w')
684
+ linecount = 0
685
+ while (1):
686
+ #line = newFile.file.readline()
687
+ line = newFile.readline()
688
+ if not line: break
689
+ fileHandle.write("%s" % line)
690
+ linecount += 1
691
+ os.chmod(newFilePath, 0777)
692
+ break
693
+ else:
694
+ newFileName = "Extension not allowed"
695
+ errorNo = 203
696
+ else:
697
+ newFileName = "No File"
698
+ errorNo = 202
699
+
700
+ string = """
701
+ <script type="text/javascript">
702
+ window.parent.frames["frmUpload"].OnUploadCompleted(%s,"%s");
703
+ </script>
704
+ """ % (
705
+ errorNo,
706
+ newFileName.replace('"',"'")
707
+ )
708
+ return string
709
+
710
+ def run(self):
711
+ s = ""
712
+ try:
713
+ # Check if this is disabled
714
+ if not(self.enabled):
715
+ return self.sendError(1, "This connector is disabled. Please check the connector configurations and try again")
716
+ # Make sure we have valid inputs
717
+ if not(
718
+ (self.request.has_key("Command")) and
719
+ (self.request.has_key("Type")) and
720
+ (self.request.has_key("CurrentFolder"))
721
+ ):
722
+ return
723
+ # Get command
724
+ command = self.request.get("Command", None)
725
+ # Get resource type
726
+ resourceType = self.request.get("Type", None)
727
+ # folder syntax must start and end with "/"
728
+ currentFolder = self.request.get("CurrentFolder", None)
729
+ if (currentFolder[-1] <> "/"):
730
+ currentFolder += "/"
731
+ if (currentFolder[0] <> "/"):
732
+ currentFolder = "/" + currentFolder
733
+ # Check for invalid paths
734
+ if (".." in currentFolder):
735
+ return self.sendError(102, "")
736
+ # File upload doesn't have to return XML, so intercept
737
+ # her:e
738
+ if (command == "FileUpload"):
739
+ return self.fileUpload(resourceType, currentFolder)
740
+ # Begin XML
741
+ s += self.createXmlHeader(command, resourceType, currentFolder)
742
+ # Execute the command
743
+ if (command == "GetFolders"):
744
+ f = self.getFolders
745
+ elif (command == "GetFoldersAndFiles"):
746
+ f = self.getFoldersAndFiles
747
+ elif (command == "CreateFolder"):
748
+ f = self.createFolder
749
+ else:
750
+ f = None
751
+ if (f is not None):
752
+ s += f(resourceType, currentFolder)
753
+ s += self.createXmlFooter()
754
+ except Exception, e:
755
+ s = "ERROR: %s" % e
756
+ return s
757
+
758
+ # Running from command line
759
+ if __name__ == '__main__':
760
+ # To test the output, uncomment the standard headers
761
+ #print "Content-Type: text/html"
762
+ #print ""
763
+ print getFCKeditorConnector()
764
+
765
+ """
766
+ Running from zope, you will need to modify this connector.
767
+ If you have uploaded the FCKeditor into Zope (like me), you need to
768
+ move this connector out of Zope, and replace the "connector" with an
769
+ alias as below. The key to it is to pass the Zope context in, as
770
+ we then have a like to the Zope context.
771
+
772
+ ## Script (Python) "connector.py"
773
+ ##bind container=container
774
+ ##bind context=context
775
+ ##bind namespace=
776
+ ##bind script=script
777
+ ##bind subpath=traverse_subpath
778
+ ##parameters=*args, **kws
779
+ ##title=ALIAS
780
+ ##
781
+ import Products.connector as connector
782
+ return connector.getFCKeditorConnector(context=context).run()
783
+ """
784
+
785
+