Wiki2GoEditor 1.0.0

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