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,137 @@
1
+ #!/usr/bin/env perl
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
+ # This is the File Manager Connector for Perl.
24
+ #####
25
+
26
+ ##
27
+ # ATTENTION: To enable this connector, look for the "SECURITY" comment in this file.
28
+ ##
29
+
30
+ ## START: Hack for Windows (Not important to understand the editor code... Perl specific).
31
+ if(Windows_check()) {
32
+ chdir(GetScriptPath($0));
33
+ }
34
+
35
+ sub Windows_check
36
+ {
37
+ # IIS,PWS(NT/95)
38
+ $www_server_os = $^O;
39
+ # Win98 & NT(SP4)
40
+ if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
41
+ # AnHTTPd/Omni/IIS
42
+ if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
43
+ # Win Apache
44
+ if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
45
+ if($www_server_os=~ /win/i) { return(1); }
46
+ return(0);
47
+ }
48
+
49
+ sub GetScriptPath {
50
+ local($path) = @_;
51
+ if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
52
+ $path;
53
+ }
54
+ ## END: Hack for IIS
55
+
56
+ require 'util.pl';
57
+ require 'io.pl';
58
+ require 'basexml.pl';
59
+ require 'commands.pl';
60
+ require 'upload_fck.pl';
61
+
62
+ ##
63
+ # SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR.
64
+ ##
65
+ &SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/browser/default/connectors/perl/connector.cgi" file' ) ;
66
+
67
+ &read_input();
68
+
69
+ if($FORM{'ServerPath'} ne "") {
70
+ $GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'};
71
+ if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) {
72
+ $GLOBALS{'UserFilesPath'} .= '/' ;
73
+ }
74
+ } else {
75
+ $GLOBALS{'UserFilesPath'} = '/userfiles/';
76
+ }
77
+
78
+ # Map the "UserFiles" path to a local directory.
79
+ $rootpath = &GetRootPath();
80
+ $GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'};
81
+
82
+ &DoResponse();
83
+
84
+ sub DoResponse
85
+ {
86
+
87
+ if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") {
88
+ return ;
89
+ }
90
+ # Get the main request informaiton.
91
+ $sCommand = $FORM{'Command'};
92
+ $sResourceType = $FORM{'Type'};
93
+ $sCurrentFolder = $FORM{'CurrentFolder'};
94
+
95
+ # Check the current folder syntax (must begin and start with a slash).
96
+ if(!($sCurrentFolder =~ /\/$/)) {
97
+ $sCurrentFolder .= '/';
98
+ }
99
+ if(!($sCurrentFolder =~ /^\//)) {
100
+ $sCurrentFolder = '/' . $sCurrentFolder;
101
+ }
102
+
103
+ # Check for invalid folder paths (..)
104
+ if ( $sCurrentFolder =~ /\.\./ ) {
105
+ SendError( 102, "" ) ;
106
+ }
107
+
108
+ # File Upload doesn't have to Return XML, so it must be intercepted before anything.
109
+ if($sCommand eq 'FileUpload') {
110
+ FileUpload($sResourceType,$sCurrentFolder);
111
+ return ;
112
+ }
113
+
114
+ print << "_HTML_HEAD_";
115
+ Content-Type:text/xml; charset=utf-8
116
+ Pragma: no-cache
117
+ Cache-Control: no-cache
118
+ Expires: Thu, 01 Dec 1994 16:00:00 GMT
119
+
120
+ _HTML_HEAD_
121
+
122
+ &CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder);
123
+
124
+ # Execute the required command.
125
+ if($sCommand eq 'GetFolders') {
126
+ &GetFolders($sResourceType,$sCurrentFolder);
127
+ } elsif($sCommand eq 'GetFoldersAndFiles') {
128
+ &GetFoldersAndFiles($sResourceType,$sCurrentFolder);
129
+ } elsif($sCommand eq 'CreateFolder') {
130
+ &CreateFolder($sResourceType,$sCurrentFolder);
131
+ }
132
+
133
+ &CreateXmlFooter();
134
+
135
+ exit ;
136
+ }
137
+
@@ -0,0 +1,131 @@
1
+ #####
2
+ # FCKeditor - The text editor for Internet - http://www.fckeditor.net
3
+ # Copyright (C) 2003-2007 Frederico Caldeira Knabben
4
+ #
5
+ # == BEGIN LICENSE ==
6
+ #
7
+ # Licensed under the terms of any of the following licenses at your
8
+ # choice:
9
+ #
10
+ # - GNU General Public License Version 2 or later (the "GPL")
11
+ # http://www.gnu.org/licenses/gpl.html
12
+ #
13
+ # - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
14
+ # http://www.gnu.org/licenses/lgpl.html
15
+ #
16
+ # - Mozilla Public License Version 1.1 or later (the "MPL")
17
+ # http://www.mozilla.org/MPL/MPL-1.1.html
18
+ #
19
+ # == END LICENSE ==
20
+ #
21
+ # This is the File Manager Connector for Perl.
22
+ #####
23
+
24
+ sub GetUrlFromPath
25
+ {
26
+ local($resourceType, $folderPath) = @_;
27
+
28
+ if($resourceType eq '') {
29
+ $rmpath = &RemoveFromEnd($GLOBALS{'UserFilesPath'},'/');
30
+ return("$rmpath$folderPath");
31
+ } else {
32
+ return("$GLOBALS{'UserFilesPath'}$resourceType$folderPath");
33
+ }
34
+ }
35
+
36
+ sub RemoveExtension
37
+ {
38
+ local($fileName) = @_;
39
+ local($path, $base, $ext);
40
+ if($fileName !~ /\./) {
41
+ $fileName .= '.';
42
+ }
43
+ if($fileName =~ /([^\\\/]*)\.(.*)$/) {
44
+ $base = $1;
45
+ $ext = $2;
46
+ if($fileName =~ /(.*)$base\.$ext$/) {
47
+ $path = $1;
48
+ }
49
+ }
50
+ return($path,$base,$ext);
51
+
52
+ }
53
+
54
+ sub ServerMapFolder
55
+ {
56
+ local($resourceType,$folderPath) = @_;
57
+
58
+ # Get the resource type directory.
59
+ $sResourceTypePath = $GLOBALS{'UserFilesDirectory'} . $resourceType . '/';
60
+
61
+ # Ensure that the directory exists.
62
+ &CreateServerFolder($sResourceTypePath);
63
+
64
+ # Return the resource type directory combined with the required path.
65
+ $rmpath = &RemoveFromStart($folderPath,'/');
66
+ return("$sResourceTypePath$rmpath");
67
+ }
68
+
69
+ sub GetParentFolder
70
+ {
71
+ local($folderPath) = @_;
72
+
73
+ $folderPath =~ s/[\/][^\/]+[\/]?$//g;
74
+ return $folderPath;
75
+ }
76
+
77
+ sub CreateServerFolder
78
+ {
79
+ local($folderPath) = @_;
80
+
81
+ $sParent = &GetParentFolder($folderPath);
82
+ # Check if the parent exists, or create it.
83
+ if(!(-e $sParent)) {
84
+ $sErrorMsg = &CreateServerFolder($sParent);
85
+ if($sErrorMsg == 1) {
86
+ return(1);
87
+ }
88
+ }
89
+ if(!(-e $folderPath)) {
90
+ umask(000);
91
+ mkdir("$folderPath",0777);
92
+ chmod(0777,"$folderPath");
93
+ return(0);
94
+ } else {
95
+ return(1);
96
+ }
97
+ }
98
+
99
+ sub GetRootPath
100
+ {
101
+ #use Cwd;
102
+
103
+ # my $dir = getcwd;
104
+ # print $dir;
105
+ # $dir =~ s/$ENV{'DOCUMENT_ROOT'}//g;
106
+ # print $dir;
107
+ # return($dir);
108
+
109
+ # $wk = $0;
110
+ # $wk =~ s/\/connector\.cgi//g;
111
+ # if($wk) {
112
+ # $current_dir = $wk;
113
+ # } else {
114
+ # $current_dir = `pwd`;
115
+ # }
116
+ # return($current_dir);
117
+ use Cwd;
118
+
119
+ if($ENV{'DOCUMENT_ROOT'}) {
120
+ $dir = $ENV{'DOCUMENT_ROOT'};
121
+ } else {
122
+ my $dir = getcwd;
123
+ $workdir =~ s/\/connector\.cgi//g;
124
+ $dir =~ s/$workdir//g;
125
+ }
126
+ return($dir);
127
+
128
+
129
+
130
+ }
131
+ 1;
@@ -0,0 +1,667 @@
1
+ #####
2
+ # FCKeditor - The text editor for Internet - http://www.fckeditor.net
3
+ # Copyright (C) 2003-2007 Frederico Caldeira Knabben
4
+ #
5
+ # == BEGIN LICENSE ==
6
+ #
7
+ # Licensed under the terms of any of the following licenses at your
8
+ # choice:
9
+ #
10
+ # - GNU General Public License Version 2 or later (the "GPL")
11
+ # http://www.gnu.org/licenses/gpl.html
12
+ #
13
+ # - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
14
+ # http://www.gnu.org/licenses/lgpl.html
15
+ #
16
+ # - Mozilla Public License Version 1.1 or later (the "MPL")
17
+ # http://www.mozilla.org/MPL/MPL-1.1.html
18
+ #
19
+ # == END LICENSE ==
20
+ #
21
+ # This is the File Manager Connector for Perl.
22
+ #####
23
+
24
+ # image data save dir
25
+ $img_dir = './temp/';
26
+
27
+
28
+ # File size max(unit KB)
29
+ $MAX_CONTENT_SIZE = 30000;
30
+
31
+ # Filelock (1=use,0=not use)
32
+ $PM{'flock'} = '1';
33
+
34
+
35
+ # upload Content-Type list
36
+ my %UPLOAD_CONTENT_TYPE_LIST = (
37
+ 'image/(x-)?png' => 'png', # PNG image
38
+ 'image/p?jpe?g' => 'jpg', # JPEG image
39
+ 'image/gif' => 'gif', # GIF image
40
+ 'image/x-xbitmap' => 'xbm', # XBM image
41
+
42
+ 'image/(x-(MS-)?)?bmp' => 'bmp', # Windows BMP image
43
+ 'image/pict' => 'pict', # Macintosh PICT image
44
+ 'image/tiff' => 'tif', # TIFF image
45
+ 'application/pdf' => 'pdf', # PDF image
46
+ 'application/x-shockwave-flash' => 'swf', # Shockwave Flash
47
+
48
+ 'video/(x-)?msvideo' => 'avi', # Microsoft Video
49
+ 'video/quicktime' => 'mov', # QuickTime Video
50
+ 'video/mpeg' => 'mpeg', # MPEG Video
51
+ 'video/x-mpeg2' => 'mpv2', # MPEG2 Video
52
+
53
+ 'audio/(x-)?midi?' => 'mid', # MIDI Audio
54
+ 'audio/(x-)?wav' => 'wav', # WAV Audio
55
+ 'audio/basic' => 'au', # ULAW Audio
56
+ 'audio/mpeg' => 'mpga', # MPEG Audio
57
+
58
+ 'application/(x-)?zip(-compressed)?' => 'zip', # ZIP Compress
59
+
60
+ 'text/html' => 'html', # HTML
61
+ 'text/plain' => 'txt', # TEXT
62
+ '(?:application|text)/(?:rtf|richtext)' => 'rtf', # RichText
63
+
64
+ 'application/msword' => 'doc', # Microsoft Word
65
+ 'application/vnd.ms-excel' => 'xls', # Microsoft Excel
66
+
67
+ ''
68
+ );
69
+
70
+ # Upload is permitted.
71
+ # A regular expression is possible.
72
+ my %UPLOAD_EXT_LIST = (
73
+ 'png' => 'PNG image',
74
+ 'p?jpe?g|jpe|jfif|pjp' => 'JPEG image',
75
+ 'gif' => 'GIF image',
76
+ 'xbm' => 'XBM image',
77
+
78
+ 'bmp|dib|rle' => 'Windows BMP image',
79
+ 'pi?ct' => 'Macintosh PICT image',
80
+ 'tiff?' => 'TIFF image',
81
+ 'pdf' => 'PDF image',
82
+ 'swf' => 'Shockwave Flash',
83
+
84
+ 'avi' => 'Microsoft Video',
85
+ 'moo?v|qt' => 'QuickTime Video',
86
+ 'm(p(e?gv?|e|v)|1v)' => 'MPEG Video',
87
+ 'mp(v2|2v)' => 'MPEG2 Video',
88
+
89
+ 'midi?|kar|smf|rmi|mff' => 'MIDI Audio',
90
+ 'wav' => 'WAVE Audio',
91
+ 'au|snd' => 'ULAW Audio',
92
+ 'mp(e?ga|2|a|3)|abs' => 'MPEG Audio',
93
+
94
+ 'zip' => 'ZIP Compress',
95
+ 'lzh' => 'LZH Compress',
96
+ 'cab' => 'CAB Compress',
97
+
98
+ 'd?html?' => 'HTML',
99
+ 'rtf|rtx' => 'RichText',
100
+ 'txt|text' => 'Text',
101
+
102
+ ''
103
+ );
104
+
105
+
106
+ # sjis or euc
107
+ my $CHARCODE = 'sjis';
108
+
109
+ $TRANS_2BYTE_CODE = 0;
110
+
111
+ ##############################################################################
112
+ # Summary
113
+ #
114
+ # Form Read input
115
+ #
116
+ # Parameters
117
+ # Returns
118
+ # Memo
119
+ ##############################################################################
120
+ sub read_input
121
+ {
122
+ eval("use File::Copy;");
123
+ eval("use File::Path;");
124
+
125
+ my ($FORM) = @_;
126
+
127
+
128
+ mkdir($img_dir,0777);
129
+ chmod(0777,$img_dir);
130
+
131
+ undef $img_data_exists;
132
+ undef @NEWFNAMES;
133
+ undef @NEWFNAME_DATA;
134
+
135
+ if($ENV{'CONTENT_LENGTH'} > 10000000 || $ENV{'CONTENT_LENGTH'} > $MAX_CONTENT_SIZE * 1024) {
136
+ &upload_error(
137
+ 'Size Error',
138
+ sprintf(
139
+ "Transmitting size is too large.MAX <strong>%d KB</strong> Now Size <strong>%d KB</strong>(<strong>%d bytes</strong> Over)",
140
+ $MAX_CONTENT_SIZE,
141
+ int($ENV{'CONTENT_LENGTH'} / 1024),
142
+ $ENV{'CONTENT_LENGTH'} - $MAX_CONTENT_SIZE * 1024
143
+ )
144
+ );
145
+ }
146
+
147
+ my $Buffer;
148
+ if($ENV{'CONTENT_TYPE'} =~ /multipart\/form-data/) {
149
+ # METHOD POST only
150
+ return unless($ENV{'CONTENT_LENGTH'});
151
+
152
+ binmode(STDIN);
153
+ # STDIN A pause character is detected.'(MacIE3.0 boundary of $ENV{'CONTENT_TYPE'} cannot be trusted.)
154
+ my $Boundary = <STDIN>;
155
+ $Boundary =~ s/\x0D\x0A//;
156
+ $Boundary = quotemeta($Boundary);
157
+ while(<STDIN>) {
158
+ if(/^\s*Content-Disposition:/i) {
159
+ my($name,$ContentType,$FileName);
160
+ # form data get
161
+ if(/\bname="([^"]+)"/i || /\bname=([^\s:;]+)/i) {
162
+ $name = $1;
163
+ $name =~ tr/+/ /;
164
+ $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
165
+ &Encode(\$name);
166
+ }
167
+ if(/\bfilename="([^"]*)"/i || /\bfilename=([^\s:;]*)/i) {
168
+ $FileName = $1 || 'unknown';
169
+ }
170
+ # head read
171
+ while(<STDIN>) {
172
+ last if(! /\w/);
173
+ if(/^\s*Content-Type:\s*"([^"]+)"/i || /^\s*Content-Type:\s*([^\s:;]+)/i) {
174
+ $ContentType = $1;
175
+ }
176
+ }
177
+ # body read
178
+ $value = "";
179
+ while(<STDIN>) {
180
+ last if(/^$Boundary/o);
181
+ $value .= $_;
182
+ };
183
+ $lastline = $_;
184
+ $value =~s /\x0D\x0A$//;
185
+ if($value ne '') {
186
+ if($FileName || $ContentType) {
187
+ $img_data_exists = 1;
188
+ (
189
+ $FileName, #
190
+ $Ext, #
191
+ $Length, #
192
+ $ImageWidth, #
193
+ $ImageHeight, #
194
+ $ContentName #
195
+ ) = &CheckContentType(\$value,$FileName,$ContentType);
196
+
197
+ $FORM{$name} = $FileName;
198
+ $new_fname = $FileName;
199
+ push(@NEWFNAME_DATA,"$FileName\t$Ext\t$Length\t$ImageWidth\t$ImageHeight\t$ContentName");
200
+
201
+ # Multi-upload correspondence
202
+ push(@NEWFNAMES,$new_fname);
203
+ open(OUT,">$img_dir/$new_fname");
204
+ binmode(OUT);
205
+ eval "flock(OUT,2);" if($PM{'flock'} == 1);
206
+ print OUT $value;
207
+ eval "flock(OUT,8);" if($PM{'flock'} == 1);
208
+ close(OUT);
209
+
210
+ } elsif($name) {
211
+ $value =~ tr/+/ /;
212
+ $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
213
+ &Encode(\$value,'trans');
214
+ $FORM{$name} .= "\0" if(defined($FORM{$name}));
215
+ $FORM{$name} .= $value;
216
+ }
217
+ }
218
+ };
219
+ last if($lastline =~ /^$Boundary\-\-/o);
220
+ }
221
+ } elsif($ENV{'CONTENT_LENGTH'}) {
222
+ read(STDIN,$Buffer,$ENV{'CONTENT_LENGTH'});
223
+ }
224
+ foreach(split(/&/,$Buffer),split(/&/,$ENV{'QUERY_STRING'})) {
225
+ my($name, $value) = split(/=/);
226
+ $name =~ tr/+/ /;
227
+ $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
228
+ $value =~ tr/+/ /;
229
+ $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
230
+
231
+ &Encode(\$name);
232
+ &Encode(\$value,'trans');
233
+ $FORM{$name} .= "\0" if(defined($FORM{$name}));
234
+ $FORM{$name} .= $value;
235
+
236
+ }
237
+
238
+ }
239
+
240
+ ##############################################################################
241
+ # Summary
242
+ #
243
+ # CheckContentType
244
+ #
245
+ # Parameters
246
+ # Returns
247
+ # Memo
248
+ ##############################################################################
249
+ sub CheckContentType
250
+ {
251
+
252
+ my($DATA,$FileName,$ContentType) = @_;
253
+ my($Ext,$ImageWidth,$ImageHeight,$ContentName,$Infomation);
254
+ my $DataLength = length($$DATA);
255
+
256
+ # An unknown file type
257
+
258
+ $_ = $ContentType;
259
+ my $UnknownType = (
260
+ !$_
261
+ || /^application\/(x-)?macbinary$/i
262
+ || /^application\/applefile$/i
263
+ || /^application\/octet-stream$/i
264
+ || /^text\/plane$/i
265
+ || /^x-unknown-content-type/i
266
+ );
267
+
268
+ # MacBinary(Mac Unnecessary data are deleted.)
269
+ if($UnknownType || $ENV{'HTTP_USER_AGENT'} =~ /Macintosh|Mac_/) {
270
+ if($DataLength > 128 && !unpack("C",substr($$DATA,0,1)) && !unpack("C",substr($$DATA,74,1)) && !unpack("C",substr($$DATA,82,1)) ) {
271
+ my $MacBinary_ForkLength = unpack("N", substr($$DATA, 83, 4)); # ForkLength Get
272
+ my $MacBinary_FileName = quotemeta(substr($$DATA, 2, unpack("C",substr($$DATA, 1, 1))));
273
+ if($MacBinary_FileName && $MacBinary_ForkLength && $DataLength >= $MacBinary_ForkLength + 128
274
+ && ($FileName =~ /$MacBinary_FileName/i || substr($$DATA,102,4) eq 'mBIN')) { # DATA TOP 128byte MacBinary!!
275
+ $$DATA = substr($$DATA,128,$MacBinary_ForkLength);
276
+ my $ResourceLength = $DataLength - $MacBinary_ForkLength - 128;
277
+ $DataLength = $MacBinary_ForkLength;
278
+ }
279
+ }
280
+ }
281
+
282
+ # A file name is changed into EUC.
283
+ # &jcode::convert(\$FileName,'euc',$FormCodeDefault);
284
+ # &jcode::h2z_euc(\$FileName);
285
+ $FileName =~ s/^.*\\//; # Windows, Mac
286
+ $FileName =~ s/^.*\///; # UNIX
287
+ $FileName =~ s/&/&amp;/g;
288
+ $FileName =~ s/"/&quot;/g;
289
+ $FileName =~ s/</&lt;/g;
290
+ $FileName =~ s/>/&gt;/g;
291
+ #
292
+ # if($CHARCODE ne 'euc') {
293
+ # &jcode::convert(\$FileName,$CHARCODE,'euc');
294
+ # }
295
+
296
+ # An extension is extracted and it changes into a small letter.
297
+ my $FileExt;
298
+ if($FileName =~ /\.(\w+)$/) {
299
+ $FileExt = $1;
300
+ $FileExt =~ tr/A-Z/a-z/;
301
+ }
302
+
303
+ # Executable file detection (ban on upload)
304
+ if($$DATA =~ /^MZ/) {
305
+ $Ext = 'exe';
306
+ }
307
+ # text
308
+ if(!$Ext && ($UnknownType || $ContentType =~ /^text\//i || $ContentType =~ /^application\/(?:rtf|richtext)$/i || $ContentType =~ /^image\/x-xbitmap$/i)
309
+ && ! $$DATA =~ /[\000-\006\177\377]/) {
310
+ # $$DATA =~ s/\x0D\x0A/\n/g;
311
+ # $$DATA =~ tr/\x0D\x0A/\n\n/;
312
+ #
313
+ # if(
314
+ # $$DATA =~ /<\s*SCRIPT(?:.|\n)*?>/i
315
+ # || $$DATA =~ /<\s*(?:.|\n)*?\bONLOAD\s*=(?:.|\n)*?>/i
316
+ # || $$DATA =~ /<\s*(?:.|\n)*?\bONCLICK\s*=(?:.|\n)*?>/i
317
+ # ) {
318
+ # $Infomation = '(JavaScript contains)';
319
+ # }
320
+ # if($$DATA =~ /<\s*TABLE(?:.|\n)*?>/i
321
+ # || $$DATA =~ /<\s*BLINK(?:.|\n)*?>/i
322
+ # || $$DATA =~ /<\s*MARQUEE(?:.|\n)*?>/i
323
+ # || $$DATA =~ /<\s*OBJECT(?:.|\n)*?>/i
324
+ # || $$DATA =~ /<\s*EMBED(?:.|\n)*?>/i
325
+ # || $$DATA =~ /<\s*FRAME(?:.|\n)*?>/i
326
+ # || $$DATA =~ /<\s*APPLET(?:.|\n)*?>/i
327
+ # || $$DATA =~ /<\s*FORM(?:.|\n)*?>/i
328
+ # || $$DATA =~ /<\s*(?:.|\n)*?\bSRC\s*=(?:.|\n)*?>/i
329
+ # || $$DATA =~ /<\s*(?:.|\n)*?\bDYNSRC\s*=(?:.|\n)*?>/i
330
+ # ) {
331
+ # $Infomation = '(the HTML tag which is not safe is included)';
332
+ # }
333
+
334
+ if($FileExt =~ /^txt$/i || $FileExt =~ /^cgi$/i || $FileExt =~ /^pl$/i) { # Text File
335
+ $Ext = 'txt';
336
+ } elsif($ContentType =~ /^text\/html$/i || $FileExt =~ /html?/i || $$DATA =~ /<\s*HTML(?:.|\n)*?>/i) { # HTML File
337
+ $Ext = 'html';
338
+ } elsif($ContentType =~ /^image\/x-xbitmap$/i || $FileExt =~ /^xbm$/i) { # XBM(x-BitMap) Image
339
+ my $XbmName = $1;
340
+ my ($XbmWidth, $XbmHeight);
341
+ if($$DATA =~ /\#define\s*$XbmName\_width\s*(\d+)/i) {
342
+ $XbmWidth = $1;
343
+ }
344
+ if($$DATA =~ /\#define\s*$XbmName\_height\s*(\d+)/i) {
345
+ $XbmHeight = $1;
346
+ }
347
+ if($XbmWidth && $XbmHeight) {
348
+ $Ext = 'xbm';
349
+ $ImageWidth = $XbmWidth;
350
+ $ImageHeight = $XbmHeight;
351
+ }
352
+ } else { #
353
+ $Ext = 'txt';
354
+ }
355
+ }
356
+
357
+ # image
358
+ if(!$Ext && ($UnknownType || $ContentType =~ /^image\//i)) {
359
+ # PNG
360
+ if($$DATA =~ /^\x89PNG\x0D\x0A\x1A\x0A/) {
361
+ if(substr($$DATA, 12, 4) eq 'IHDR') {
362
+ $Ext = 'png';
363
+ ($ImageWidth, $ImageHeight) = unpack("N2", substr($$DATA, 16, 8));
364
+ }
365
+ } elsif($$DATA =~ /^GIF8(?:9|7)a/) { # GIF89a(modified), GIF89a, GIF87a
366
+ $Ext = 'gif';
367
+ ($ImageWidth, $ImageHeight) = unpack("v2", substr($$DATA, 6, 4));
368
+ } elsif($$DATA =~ /^II\x2a\x00\x08\x00\x00\x00/ || $$DATA =~ /^MM\x00\x2a\x00\x00\x00\x08/) { # TIFF
369
+ $Ext = 'tif';
370
+ } elsif($$DATA =~ /^BM/) { # BMP
371
+ $Ext = 'bmp';
372
+ } elsif($$DATA =~ /^\xFF\xD8\xFF/ || $$DATA =~ /JFIF/) { # JPEG
373
+ my $HeaderPoint = index($$DATA, "\xFF\xD8\xFF", 0);
374
+ my $Point = $HeaderPoint + 2;
375
+ while($Point < $DataLength) {
376
+ my($Maker, $MakerType, $MakerLength) = unpack("C2n",substr($$DATA,$Point,4));
377
+ if($Maker != 0xFF || $MakerType == 0xd9 || $MakerType == 0xda) {
378
+ last;
379
+ } elsif($MakerType >= 0xC0 && $MakerType <= 0xC3) {
380
+ $Ext = 'jpg';
381
+ ($ImageHeight, $ImageWidth) = unpack("n2", substr($$DATA, $Point + 5, 4));
382
+ if($HeaderPoint > 0) {
383
+ $$DATA = substr($$DATA, $HeaderPoint);
384
+ $DataLength = length($$DATA);
385
+ }
386
+ last;
387
+ } else {
388
+ $Point += $MakerLength + 2;
389
+ }
390
+ }
391
+ }
392
+ }
393
+
394
+ # audio
395
+ if(!$Ext && ($UnknownType || $ContentType =~ /^audio\//i)) {
396
+ # MIDI Audio
397
+ if($$DATA =~ /^MThd/) {
398
+ $Ext = 'mid';
399
+ } elsif($$DATA =~ /^\x2esnd/) { # ULAW Audio
400
+ $Ext = 'au';
401
+ } elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {
402
+ my $HeaderPoint = index($$DATA, "RIFF", 0);
403
+ $_ = substr($$DATA, $HeaderPoint + 8, 8);
404
+ if(/^WAVEfmt $/) {
405
+ # WAVE
406
+ if(unpack("V",substr($$DATA, $HeaderPoint + 16, 4)) == 16) {
407
+ $Ext = 'wav';
408
+ } else { # RIFF WAVE MP3
409
+ $Ext = 'mp3';
410
+ }
411
+ } elsif(/^RMIDdata$/) { # RIFF MIDI
412
+ $Ext = 'rmi';
413
+ } elsif(/^RMP3data$/) { # RIFF MP3
414
+ $Ext = 'rmp';
415
+ }
416
+ if($ContentType =~ /^audio\//i) {
417
+ $Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';
418
+ }
419
+ }
420
+ }
421
+
422
+ # a binary file
423
+ unless ($Ext) {
424
+ # PDF image
425
+ if($$DATA =~ /^\%PDF/) {
426
+ # Picture size is not measured.
427
+ $Ext = 'pdf';
428
+ } elsif($$DATA =~ /^FWS/) { # Shockwave Flash
429
+ $Ext = 'swf';
430
+ } elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {
431
+ my $HeaderPoint = index($$DATA, "RIFF", 0);
432
+ $_ = substr($$DATA,$HeaderPoint + 8, 8);
433
+ # AVI
434
+ if(/^AVI LIST$/) {
435
+ $Ext = 'avi';
436
+ }
437
+ if($ContentType =~ /^video\//i) {
438
+ $Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';
439
+ }
440
+ } elsif($$DATA =~ /^PK/) { # ZIP Compress File
441
+ $Ext = 'zip';
442
+ } elsif($$DATA =~ /^MSCF/) { # CAB Compress File
443
+ $Ext = 'cab';
444
+ } elsif($$DATA =~ /^Rar\!/) { # RAR Compress File
445
+ $Ext = 'rar';
446
+ } elsif(substr($$DATA, 2, 5) =~ /^\-lh(\d+|d)\-$/) { # LHA Compress File
447
+ $Infomation .= "(lh$1)";
448
+ $Ext = 'lzh';
449
+ } elsif(substr($$DATA, 325, 25) eq "Apple Video Media Handler" || substr($$DATA, 325, 30) eq "Apple \x83\x72\x83\x66\x83\x49\x81\x45\x83\x81\x83\x66\x83\x42\x83\x41\x83\x6E\x83\x93\x83\x68\x83\x89") {
450
+ # QuickTime
451
+ $Ext = 'mov';
452
+ }
453
+ }
454
+
455
+ # Header analysis failure
456
+ unless ($Ext) {
457
+ # It will be followed if it applies for the MIME type from the browser.
458
+ foreach (keys %UPLOAD_CONTENT_TYPE_LIST) {
459
+ next unless ($_);
460
+ if($ContentType =~ /^$_$/i) {
461
+ $Ext = $UPLOAD_CONTENT_TYPE_LIST{$_};
462
+ $ContentName = &CheckContentExt($Ext);
463
+ if(
464
+ grep {$_ eq $Ext;} (
465
+ 'png',
466
+ 'gif',
467
+ 'jpg',
468
+ 'xbm',
469
+ 'tif',
470
+ 'bmp',
471
+ 'pdf',
472
+ 'swf',
473
+ 'mov',
474
+ 'zip',
475
+ 'cab',
476
+ 'lzh',
477
+ 'rar',
478
+ 'mid',
479
+ 'rmi',
480
+ 'au',
481
+ 'wav',
482
+ 'avi',
483
+ 'exe'
484
+ )
485
+ ) {
486
+ $Infomation .= ' / Header analysis failure';
487
+ }
488
+ if($Ext ne $FileExt && &CheckContentExt($FileExt) eq $ContentName) {
489
+ $Ext = $FileExt;
490
+ }
491
+ last;
492
+ }
493
+ }
494
+ # a MIME type is unknown--It judges from an extension.
495
+ unless ($Ext) {
496
+ $ContentName = &CheckContentExt($FileExt);
497
+ if($ContentName) {
498
+ $Ext = $FileExt;
499
+ $Infomation .= ' / MIME type is unknown('. $ContentType. ')';
500
+ last;
501
+ }
502
+ }
503
+ }
504
+
505
+ # $ContentName = &CheckContentExt($Ext) unless($ContentName);
506
+ # if($Ext && $ContentName) {
507
+ # $ContentName .= $Infomation;
508
+ # } else {
509
+ # &upload_error(
510
+ # 'Extension Error',
511
+ # "$FileName A not corresponding extension ($Ext)<BR>The extension which can be responded ". join(',', sort values(%UPLOAD_EXT_LIST))
512
+ # );
513
+ # }
514
+
515
+ # # SSI Tag Deletion
516
+ # if($Ext =~ /.?html?/ && $$DATA =~ /<\!/) {
517
+ # foreach (
518
+ # 'config',
519
+ # 'echo',
520
+ # 'exec',
521
+ # 'flastmod',
522
+ # 'fsize',
523
+ # 'include'
524
+ # ) {
525
+ # $$DATA =~ s/\#\s*$_/\&\#35\;$_/ig
526
+ # }
527
+ # }
528
+
529
+ return (
530
+ $FileName,
531
+ $Ext,
532
+ int($DataLength / 1024 + 1),
533
+ $ImageWidth,
534
+ $ImageHeight,
535
+ $ContentName
536
+ );
537
+ }
538
+
539
+ ##############################################################################
540
+ # Summary
541
+ #
542
+ # Extension discernment
543
+ #
544
+ # Parameters
545
+ # Returns
546
+ # Memo
547
+ ##############################################################################
548
+
549
+ sub CheckContentExt
550
+ {
551
+
552
+ my($Ext) = @_;
553
+ my $ContentName;
554
+ foreach (keys %UPLOAD_EXT_LIST) {
555
+ next unless ($_);
556
+ if($_ && $Ext =~ /^$_$/) {
557
+ $ContentName = $UPLOAD_EXT_LIST{$_};
558
+ last;
559
+ }
560
+ }
561
+ return $ContentName;
562
+
563
+ }
564
+
565
+ ##############################################################################
566
+ # Summary
567
+ #
568
+ # Form decode
569
+ #
570
+ # Parameters
571
+ # Returns
572
+ # Memo
573
+ ##############################################################################
574
+ sub Encode
575
+ {
576
+
577
+ my($value,$Trans) = @_;
578
+
579
+ # my $FormCode = &jcode::getcode($value) || $FormCodeDefault;
580
+ # $FormCodeDefault ||= $FormCode;
581
+ #
582
+ # if($Trans && $TRANS_2BYTE_CODE) {
583
+ # if($FormCode ne 'euc') {
584
+ # &jcode::convert($value, 'euc', $FormCode);
585
+ # }
586
+ # &jcode::tr(
587
+ # $value,
588
+ # "\xA3\xB0-\xA3\xB9\xA3\xC1-\xA3\xDA\xA3\xE1-\xA3\xFA",
589
+ # '0-9A-Za-z'
590
+ # );
591
+ # if($CHARCODE ne 'euc') {
592
+ # &jcode::convert($value,$CHARCODE,'euc');
593
+ # }
594
+ # } else {
595
+ # if($CHARCODE ne $FormCode) {
596
+ # &jcode::convert($value,$CHARCODE,$FormCode);
597
+ # }
598
+ # }
599
+ # if($CHARCODE eq 'euc') {
600
+ # &jcode::h2z_euc($value);
601
+ # } elsif($CHARCODE eq 'sjis') {
602
+ # &jcode::h2z_sjis($value);
603
+ # }
604
+
605
+ }
606
+
607
+ ##############################################################################
608
+ # Summary
609
+ #
610
+ # Error Msg
611
+ #
612
+ # Parameters
613
+ # Returns
614
+ # Memo
615
+ ##############################################################################
616
+
617
+ sub upload_error
618
+ {
619
+
620
+ local($error_message) = $_[0];
621
+ local($error_message2) = $_[1];
622
+
623
+ print "Content-type: text/html\n\n";
624
+ print<<EOF;
625
+ <HTML>
626
+ <HEAD>
627
+ <TITLE>Error Message</TITLE></HEAD>
628
+ <BODY>
629
+ <table border="1" cellspacing="10" cellpadding="10">
630
+ <TR bgcolor="#0000B0">
631
+ <TD bgcolor="#0000B0" NOWRAP><font size="-1" color="white"><B>Error Message</B></font></TD>
632
+ </TR>
633
+ </table>
634
+ <UL>
635
+ <H4> $error_message </H4>
636
+ $error_message2 <BR>
637
+ </UL>
638
+ </BODY>
639
+ </HTML>
640
+ EOF
641
+ &rm_tmp_uploaded_files; # Image Temporary deletion
642
+ exit;
643
+ }
644
+
645
+ ##############################################################################
646
+ # Summary
647
+ #
648
+ # Image Temporary deletion
649
+ #
650
+ # Parameters
651
+ # Returns
652
+ # Memo
653
+ ##############################################################################
654
+
655
+ sub rm_tmp_uploaded_files
656
+ {
657
+ if($img_data_exists == 1){
658
+ sleep 1;
659
+ foreach $fname_list(@NEWFNAMES) {
660
+ if(-e "$img_dir/$fname_list") {
661
+ unlink("$img_dir/$fname_list");
662
+ }
663
+ }
664
+ }
665
+
666
+ }
667
+ 1;