narf 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (424) hide show
  1. data/ChangeLog +22 -0
  2. data/lib/web/htmltools/xmltree.rb +2 -2
  3. data/lib/web/htmltools/xpath.rb +1 -1
  4. data/narf.gemspec +1 -1
  5. metadata +2 -460
  6. data/InstalledFiles +0 -2227
  7. data/config.save +0 -12
  8. data/doc/apache_cgi.txt~ +0 -17
  9. data/doc/fastcgi.txt~ +0 -19
  10. data/doc/rdoc/classes/Web.html +0 -369
  11. data/doc/rdoc/classes/Web.src/M000002.html +0 -15
  12. data/doc/rdoc/classes/Web.src/M000003.html +0 -15
  13. data/doc/rdoc/classes/Web.src/M000004.html +0 -15
  14. data/doc/rdoc/classes/Web.src/M000005.html +0 -15
  15. data/doc/rdoc/classes/Web.src/M000006.html +0 -20
  16. data/doc/rdoc/classes/Web.src/M000007.html +0 -18
  17. data/doc/rdoc/classes/Web.src/M000008.html +0 -18
  18. data/doc/rdoc/classes/Web.src/M000009.html +0 -18
  19. data/doc/rdoc/classes/Web.src/M000010.html +0 -15
  20. data/doc/rdoc/classes/Web.src/M000011.html +0 -15
  21. data/doc/rdoc/classes/Web.src/M000012.html +0 -15
  22. data/doc/rdoc/classes/Web/CGD.html +0 -173
  23. data/doc/rdoc/classes/Web/CGD.src/M000037.html +0 -24
  24. data/doc/rdoc/classes/Web/CGD.src/M000038.html +0 -24
  25. data/doc/rdoc/classes/Web/CGD.src/M000039.html +0 -15
  26. data/doc/rdoc/classes/Web/CGD.src/M000040.html +0 -15
  27. data/doc/rdoc/classes/Web/CGD.src/M000041.html +0 -23
  28. data/doc/rdoc/classes/Web/CGI.html +0 -946
  29. data/doc/rdoc/classes/Web/CGI.src/M000051.html +0 -15
  30. data/doc/rdoc/classes/Web/CGI.src/M000052.html +0 -24
  31. data/doc/rdoc/classes/Web/CGI.src/M000053.html +0 -15
  32. data/doc/rdoc/classes/Web/CGI.src/M000054.html +0 -15
  33. data/doc/rdoc/classes/Web/CGI.src/M000055.html +0 -15
  34. data/doc/rdoc/classes/Web/CGI.src/M000056.html +0 -15
  35. data/doc/rdoc/classes/Web/CGI.src/M000057.html +0 -17
  36. data/doc/rdoc/classes/Web/CGI.src/M000058.html +0 -34
  37. data/doc/rdoc/classes/Web/CGI.src/M000059.html +0 -22
  38. data/doc/rdoc/classes/Web/CGI.src/M000060.html +0 -15
  39. data/doc/rdoc/classes/Web/CGI.src/M000061.html +0 -15
  40. data/doc/rdoc/classes/Web/CGI.src/M000062.html +0 -19
  41. data/doc/rdoc/classes/Web/CGI.src/M000063.html +0 -18
  42. data/doc/rdoc/classes/Web/CGI.src/M000064.html +0 -19
  43. data/doc/rdoc/classes/Web/CGI.src/M000065.html +0 -15
  44. data/doc/rdoc/classes/Web/CGI.src/M000066.html +0 -15
  45. data/doc/rdoc/classes/Web/CGI.src/M000067.html +0 -15
  46. data/doc/rdoc/classes/Web/CGI.src/M000068.html +0 -13
  47. data/doc/rdoc/classes/Web/CGI.src/M000069.html +0 -13
  48. data/doc/rdoc/classes/Web/CGI.src/M000070.html +0 -13
  49. data/doc/rdoc/classes/Web/CGI.src/M000071.html +0 -13
  50. data/doc/rdoc/classes/Web/CGI.src/M000072.html +0 -19
  51. data/doc/rdoc/classes/Web/CGI.src/M000073.html +0 -15
  52. data/doc/rdoc/classes/Web/CGI.src/M000074.html +0 -19
  53. data/doc/rdoc/classes/Web/CGI.src/M000075.html +0 -15
  54. data/doc/rdoc/classes/Web/CGI.src/M000076.html +0 -15
  55. data/doc/rdoc/classes/Web/CGI.src/M000077.html +0 -15
  56. data/doc/rdoc/classes/Web/CGI.src/M000078.html +0 -20
  57. data/doc/rdoc/classes/Web/CGI.src/M000079.html +0 -36
  58. data/doc/rdoc/classes/Web/CGI.src/M000080.html +0 -19
  59. data/doc/rdoc/classes/Web/CGI.src/M000081.html +0 -18
  60. data/doc/rdoc/classes/Web/CGI.src/M000082.html +0 -15
  61. data/doc/rdoc/classes/Web/CGI.src/M000083.html +0 -17
  62. data/doc/rdoc/classes/Web/CGI.src/M000084.html +0 -15
  63. data/doc/rdoc/classes/Web/CGI.src/M000085.html +0 -16
  64. data/doc/rdoc/classes/Web/CGI.src/M000086.html +0 -15
  65. data/doc/rdoc/classes/Web/CGI.src/M000087.html +0 -15
  66. data/doc/rdoc/classes/Web/CGI.src/M000088.html +0 -15
  67. data/doc/rdoc/classes/Web/CGI.src/M000089.html +0 -16
  68. data/doc/rdoc/classes/Web/CGI.src/M000090.html +0 -15
  69. data/doc/rdoc/classes/Web/CGI.src/M000091.html +0 -15
  70. data/doc/rdoc/classes/Web/CGI.src/M000092.html +0 -15
  71. data/doc/rdoc/classes/Web/CGI.src/M000093.html +0 -15
  72. data/doc/rdoc/classes/Web/CGI.src/M000094.html +0 -15
  73. data/doc/rdoc/classes/Web/CGI.src/M000095.html +0 -15
  74. data/doc/rdoc/classes/Web/CGI.src/M000096.html +0 -19
  75. data/doc/rdoc/classes/Web/CGI.src/M000097.html +0 -15
  76. data/doc/rdoc/classes/Web/CGI.src/M000098.html +0 -15
  77. data/doc/rdoc/classes/Web/CGI.src/M000099.html +0 -43
  78. data/doc/rdoc/classes/Web/CGI.src/M000100.html +0 -18
  79. data/doc/rdoc/classes/Web/CGI.src/M000101.html +0 -20
  80. data/doc/rdoc/classes/Web/CGI.src/M000102.html +0 -15
  81. data/doc/rdoc/classes/Web/CGI.src/M000103.html +0 -15
  82. data/doc/rdoc/classes/Web/CGI.src/M000104.html +0 -15
  83. data/doc/rdoc/classes/Web/CGI.src/M000105.html +0 -24
  84. data/doc/rdoc/classes/Web/CGI.src/M000106.html +0 -24
  85. data/doc/rdoc/classes/Web/CGI.src/M000107.html +0 -22
  86. data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +0 -104
  87. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +0 -15
  88. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +0 -15
  89. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +0 -15
  90. data/doc/rdoc/classes/Web/Mime.html +0 -122
  91. data/doc/rdoc/classes/Web/Mime.src/M000118.html +0 -15
  92. data/doc/rdoc/classes/Web/Mime.src/M000119.html +0 -15
  93. data/doc/rdoc/classes/Web/Mime.src/M000120.html +0 -23
  94. data/doc/rdoc/classes/Web/Mime.src/M000121.html +0 -15
  95. data/doc/rdoc/classes/Web/Mime.src/M000122.html +0 -15
  96. data/doc/rdoc/classes/Web/Mime.src/M000123.html +0 -23
  97. data/doc/rdoc/classes/Web/Mime.src/M000124.html +0 -15
  98. data/doc/rdoc/classes/Web/Narflates.html +0 -134
  99. data/doc/rdoc/classes/Web/Parser.html +0 -219
  100. data/doc/rdoc/classes/Web/Parser.src/M000013.html +0 -21
  101. data/doc/rdoc/classes/Web/Parser.src/M000014.html +0 -19
  102. data/doc/rdoc/classes/Web/Parser.src/M000015.html +0 -21
  103. data/doc/rdoc/classes/Web/Parser.src/M000016.html +0 -15
  104. data/doc/rdoc/classes/Web/Parser.src/M000017.html +0 -30
  105. data/doc/rdoc/classes/Web/Parser.src/M000018.html +0 -15
  106. data/doc/rdoc/classes/Web/Parser.src/M000019.html +0 -19
  107. data/doc/rdoc/classes/Web/Parser.src/M000020.html +0 -27
  108. data/doc/rdoc/classes/Web/Parser.src/M000021.html +0 -15
  109. data/doc/rdoc/classes/Web/Parser.src/M000022.html +0 -16
  110. data/doc/rdoc/classes/Web/Parser.src/M000023.html +0 -18
  111. data/doc/rdoc/classes/Web/Session.html +0 -178
  112. data/doc/rdoc/classes/Web/Session.src/M000042.html +0 -20
  113. data/doc/rdoc/classes/Web/Session.src/M000043.html +0 -19
  114. data/doc/rdoc/classes/Web/Session.src/M000044.html +0 -21
  115. data/doc/rdoc/classes/Web/Session.src/M000045.html +0 -21
  116. data/doc/rdoc/classes/Web/Session.src/M000046.html +0 -15
  117. data/doc/rdoc/classes/Web/Session.src/M000047.html +0 -17
  118. data/doc/rdoc/classes/Web/Session.src/M000048.html +0 -15
  119. data/doc/rdoc/classes/Web/Session.src/M000049.html +0 -15
  120. data/doc/rdoc/classes/Web/Session.src/M000050.html +0 -16
  121. data/doc/rdoc/classes/Web/Testing.html +0 -474
  122. data/doc/rdoc/classes/Web/Testing.src/M000024.html +0 -15
  123. data/doc/rdoc/classes/Web/Testing.src/M000025.html +0 -25
  124. data/doc/rdoc/classes/Web/Testing.src/M000026.html +0 -15
  125. data/doc/rdoc/classes/Web/Testing.src/M000027.html +0 -25
  126. data/doc/rdoc/classes/Web/Testing.src/M000028.html +0 -57
  127. data/doc/rdoc/classes/Web/Testing.src/M000029.html +0 -15
  128. data/doc/rdoc/classes/Web/Testing.src/M000030.html +0 -15
  129. data/doc/rdoc/classes/Web/Testing.src/M000031.html +0 -15
  130. data/doc/rdoc/classes/Web/Testing.src/M000032.html +0 -15
  131. data/doc/rdoc/classes/Web/Testing.src/M000033.html +0 -15
  132. data/doc/rdoc/classes/Web/Testing.src/M000034.html +0 -15
  133. data/doc/rdoc/classes/Web/Testing.src/M000035.html +0 -15
  134. data/doc/rdoc/classes/Web/Testing.src/M000036.html +0 -18
  135. data/doc/rdoc/classes/Web/Upload.html +0 -160
  136. data/doc/rdoc/classes/Web/Upload.src/M000108.html +0 -25
  137. data/doc/rdoc/classes/Web/Upload.src/M000109.html +0 -18
  138. data/doc/rdoc/classes/Web/Upload.src/M000110.html +0 -16
  139. data/doc/rdoc/classes/Web/Upload.src/M000111.html +0 -16
  140. data/doc/rdoc/classes/Web/Wiki.html +0 -249
  141. data/doc/rdoc/classes/Web/Wiki.src/M000112.html +0 -25
  142. data/doc/rdoc/classes/Web/Wiki.src/M000113.html +0 -15
  143. data/doc/rdoc/classes/Web/Wiki.src/M000114.html +0 -26
  144. data/doc/rdoc/classes/Web/Wiki.src/M000115.html +0 -21
  145. data/doc/rdoc/classes/Web/Wiki.src/M000116.html +0 -18
  146. data/doc/rdoc/classes/Web/Wiki.src/M000117.html +0 -19
  147. data/doc/rdoc/created.rid +0 -1
  148. data/doc/rdoc/files/README.html +0 -230
  149. data/doc/rdoc/files/doc/apache_cgi_txt.html +0 -76
  150. data/doc/rdoc/files/doc/fastcgi_txt.html +0 -82
  151. data/doc/rdoc/files/doc/mod_ruby_txt.html +0 -62
  152. data/doc/rdoc/files/doc/webrick_txt.html +0 -79
  153. data/doc/rdoc/files/examples/examples_rdoc.html +0 -73
  154. data/doc/rdoc/files/lib/web/cgi_rb.html +0 -75
  155. data/doc/rdoc/files/lib/web/mime_rb.html +0 -67
  156. data/doc/rdoc/files/lib/web/parser_rb.html +0 -73
  157. data/doc/rdoc/files/lib/web/session_rb.html +0 -73
  158. data/doc/rdoc/files/lib/web/template_rb.html +0 -73
  159. data/doc/rdoc/files/lib/web/testing_rb.html +0 -67
  160. data/doc/rdoc/files/lib/web/upload_rb.html +0 -73
  161. data/doc/rdoc/files/lib/web/wiki_rb.html +0 -79
  162. data/doc/rdoc/files/lib/web_rb.html +0 -116
  163. data/doc/rdoc/files/lib/web_rb.src/M000001.html +0 -15
  164. data/doc/rdoc/fr_class_index.html +0 -47
  165. data/doc/rdoc/fr_file_index.html +0 -52
  166. data/doc/rdoc/fr_method_index.html +0 -158
  167. data/doc/rdoc/index.html +0 -22
  168. data/doc/rdoc/rdoc-style.css +0 -99
  169. data/examples/admin.rb~ +0 -5
  170. data/examples/cookbook.rdoc~ +0 -238
  171. data/examples/examples.rdoc~ +0 -17
  172. data/examples/hello.world.rb~ +0 -3
  173. data/examples/session.rb~ +0 -31
  174. data/examples/test/test.hello.world.rb~ +0 -9
  175. data/examples/test/test.session.rb~ +0 -37
  176. data/examples/wiki.rb~ +0 -5
  177. data/lib/web.rb~ +0 -290
  178. data/lib/web/#assertinclude.rb# +0 -110
  179. data/lib/web/assertinclude.rb~ +0 -110
  180. data/lib/web/cgi.rb~ +0 -640
  181. data/lib/web/htmlparser/html-parser.rb~ +0 -429
  182. data/lib/web/htmlparser/sgml-parser.rb~ +0 -332
  183. data/lib/web/htmltools/element.rb~ +0 -296
  184. data/lib/web/htmltools/stparser.rb~ +0 -276
  185. data/lib/web/htmltools/tags.rb~ +0 -286
  186. data/lib/web/htmltools/tree.rb~ +0 -139
  187. data/lib/web/htmltools/xmltree.rb~ +0 -160
  188. data/lib/web/htmltools/xpath.rb~ +0 -71
  189. data/lib/web/parser.rb~ +0 -288
  190. data/lib/web/request.rb~ +0 -238
  191. data/lib/web/runner.rb~ +0 -26
  192. data/lib/web/sapi/fastcgi.rb~ +0 -25
  193. data/lib/web/sapi/mod_ruby.rb~ +0 -46
  194. data/lib/web/sapi/webrick.rb~ +0 -89
  195. data/lib/web/session.rb~ +0 -75
  196. data/lib/web/tagparser.rb~ +0 -96
  197. data/lib/web/template.rb~ +0 -613
  198. data/lib/web/testing.rb~ +0 -546
  199. data/lib/web/unit/response.rb~ +0 -461
  200. data/lib/web/unit/ui/cui/testrunner.rb~ +0 -50
  201. data/lib/web/upload.rb~ +0 -262
  202. data/lib/web/wiki.rb~ +0 -517
  203. data/lib/web/wiki/linker.rb~ +0 -72
  204. data/lib/web/wiki/mime.rb~ +0 -68
  205. data/lib/web/wiki/page.rb~ +0 -192
  206. data/lib/web/wiki/resources/#edit.html# +0 -65
  207. data/lib/web/wiki/resources/admin.html~ +0 -13
  208. data/lib/web/wiki/resources/default-content_editor.html~ +0 -1
  209. data/lib/web/wiki/resources/edit.html~ +0 -2
  210. data/lib/web/wiki/resources/home.html~ +0 -10
  211. data/lib/web/wiki/resources/htmlarea/ChangeLog +0 -1185
  212. data/lib/web/wiki/resources/htmlarea/dialog.js +0 -72
  213. data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +0 -16
  214. data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +0 -158
  215. data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +0 -95
  216. data/lib/web/wiki/resources/htmlarea/examples/core.html +0 -184
  217. data/lib/web/wiki/resources/htmlarea/examples/css.html +0 -88
  218. data/lib/web/wiki/resources/htmlarea/examples/custom.css +0 -29
  219. data/lib/web/wiki/resources/htmlarea/examples/full-page.html +0 -75
  220. data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +0 -248
  221. data/lib/web/wiki/resources/htmlarea/examples/index.html +0 -40
  222. data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +0 -132
  223. data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +0 -116
  224. data/lib/web/wiki/resources/htmlarea/examples/test.cgi +0 -21
  225. data/lib/web/wiki/resources/htmlarea/htmlarea.css +0 -180
  226. data/lib/web/wiki/resources/htmlarea/htmlarea.js +0 -2175
  227. data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
  228. data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
  229. data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
  230. data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
  231. data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
  232. data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
  233. data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
  234. data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
  235. data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
  236. data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
  237. data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
  238. data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
  239. data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
  240. data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
  241. data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
  242. data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
  243. data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
  244. data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
  245. data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
  246. data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
  247. data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
  248. data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
  249. data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
  250. data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
  251. data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
  252. data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
  253. data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
  254. data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
  255. data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
  256. data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
  257. data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
  258. data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
  259. data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
  260. data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
  261. data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
  262. data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
  263. data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
  264. data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
  265. data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
  266. data/lib/web/wiki/resources/htmlarea/index.html +0 -199
  267. data/lib/web/wiki/resources/htmlarea/lang/b5.js +0 -36
  268. data/lib/web/wiki/resources/htmlarea/lang/cz.js +0 -63
  269. data/lib/web/wiki/resources/htmlarea/lang/da.js +0 -38
  270. data/lib/web/wiki/resources/htmlarea/lang/de.js +0 -54
  271. data/lib/web/wiki/resources/htmlarea/lang/ee.js +0 -63
  272. data/lib/web/wiki/resources/htmlarea/lang/el.js +0 -75
  273. data/lib/web/wiki/resources/htmlarea/lang/en.js +0 -88
  274. data/lib/web/wiki/resources/htmlarea/lang/es.js +0 -51
  275. data/lib/web/wiki/resources/htmlarea/lang/fi.js +0 -46
  276. data/lib/web/wiki/resources/htmlarea/lang/fr.js +0 -61
  277. data/lib/web/wiki/resources/htmlarea/lang/gb.js +0 -36
  278. data/lib/web/wiki/resources/htmlarea/lang/he.js +0 -63
  279. data/lib/web/wiki/resources/htmlarea/lang/hu.js +0 -63
  280. data/lib/web/wiki/resources/htmlarea/lang/it.js +0 -54
  281. data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +0 -37
  282. data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +0 -37
  283. data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +0 -37
  284. data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +0 -37
  285. data/lib/web/wiki/resources/htmlarea/lang/lt.js +0 -55
  286. data/lib/web/wiki/resources/htmlarea/lang/lv.js +0 -55
  287. data/lib/web/wiki/resources/htmlarea/lang/nb.js +0 -36
  288. data/lib/web/wiki/resources/htmlarea/lang/nl.js +0 -90
  289. data/lib/web/wiki/resources/htmlarea/lang/no.js +0 -79
  290. data/lib/web/wiki/resources/htmlarea/lang/pl.js +0 -36
  291. data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +0 -37
  292. data/lib/web/wiki/resources/htmlarea/lang/ro.js +0 -80
  293. data/lib/web/wiki/resources/htmlarea/lang/ru.js +0 -63
  294. data/lib/web/wiki/resources/htmlarea/lang/se.js +0 -38
  295. data/lib/web/wiki/resources/htmlarea/lang/si.js +0 -63
  296. data/lib/web/wiki/resources/htmlarea/lang/vn.js +0 -51
  297. data/lib/web/wiki/resources/htmlarea/license.txt +0 -30
  298. data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +0 -116
  299. data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +0 -2
  300. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +0 -416
  301. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +0 -59
  302. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +0 -57
  303. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +0 -66
  304. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +0 -66
  305. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +0 -64
  306. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +0 -143
  307. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
  308. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +0 -25
  309. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +0 -25
  310. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +0 -131
  311. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +0 -89
  312. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
  313. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +0 -37
  314. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +0 -37
  315. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +0 -28
  316. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +0 -38
  317. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +0 -37
  318. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +0 -28
  319. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +0 -37
  320. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +0 -114
  321. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +0 -210
  322. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +0 -10
  323. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +0 -122
  324. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +0 -397
  325. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +0 -79
  326. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
  327. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
  328. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
  329. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
  330. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
  331. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
  332. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
  333. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
  334. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
  335. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
  336. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
  337. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
  338. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
  339. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
  340. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
  341. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
  342. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +0 -90
  343. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +0 -90
  344. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +0 -81
  345. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +0 -81
  346. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +0 -90
  347. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +0 -66
  348. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +0 -63
  349. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +0 -81
  350. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +0 -90
  351. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +0 -91
  352. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +0 -90
  353. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +0 -1160
  354. data/lib/web/wiki/resources/htmlarea/popupdiv.js +0 -369
  355. data/lib/web/wiki/resources/htmlarea/popups/about.html +0 -378
  356. data/lib/web/wiki/resources/htmlarea/popups/blank.html +0 -2
  357. data/lib/web/wiki/resources/htmlarea/popups/custom2.html +0 -35
  358. data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +0 -16
  359. data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +0 -133
  360. data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +0 -191
  361. data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +0 -174
  362. data/lib/web/wiki/resources/htmlarea/popups/link.html +0 -142
  363. data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +0 -131
  364. data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +0 -206
  365. data/lib/web/wiki/resources/htmlarea/popups/popup.js +0 -109
  366. data/lib/web/wiki/resources/htmlarea/popups/select_color.html +0 -347
  367. data/lib/web/wiki/resources/htmlarea/popupwin.js +0 -139
  368. data/lib/web/wiki/resources/htmlarea/reference.html +0 -523
  369. data/lib/web/wiki/resources/htmlarea/release-notes.html +0 -165
  370. data/lib/web/wiki/resources/illustration.html~ +0 -1
  371. data/lib/web/wiki/resources/index.html~ +0 -4
  372. data/lib/web/wiki/resources/more_news.html~ +0 -5
  373. data/lib/web/wiki/resources/more_news_rss_0.91.html +0 -23
  374. data/lib/web/wiki/resources/page_history.html~ +0 -19
  375. data/lib/web/wiki/resources/template.html~ +0 -13
  376. data/narf.gemspec~ +0 -40
  377. data/sapi/apache_cgi/INSTALL.txt~ +0 -9
  378. data/sapi/apache_cgi/README~ +0 -0
  379. data/sapi/fastcgi/INSTALL.txt~ +0 -17
  380. data/sapi/mod_ruby/INSTALL.txt~ +0 -5
  381. data/sapi/webrick/INSTALL.txt~ +0 -21
  382. data/sapi/webrick/run_webrick.rb~ +0 -16
  383. data/scripts/makedist.rb~ +0 -49
  384. data/test/mod_ruby_stub.rb~ +0 -38
  385. data/test/test.action.rb~ +0 -142
  386. data/test/test.assertinclude.rb~ +0 -109
  387. data/test/test.narf.cgi.rb~ +0 -105
  388. data/test/test.request.rb~ +0 -328
  389. data/test/test.response.rb~ +0 -556
  390. data/test/test.template.rb~ +0 -832
  391. data/test/test.web.test.rb~ +0 -461
  392. data/test/webunit/test_cookie.rb~ +0 -128
  393. data/test/webunit/test_form.rb~ +0 -43
  394. data/test/webunit/test_multipart.rb~ +0 -53
  395. data/test/webunit/test_params.rb~ +0 -211
  396. data/test/webunit/test_response.rb~ +0 -145
  397. data/test/webunit/test_site/assert.html~ +0 -1
  398. data/test/webunit/test_site/auth/index.html~ +0 -1
  399. data/test/webunit/test_site/badtags.html~ +0 -1
  400. data/test/webunit/test_site/cookie.cgi~ +0 -35
  401. data/test/webunit/test_site/document.xml~ +0 -1
  402. data/test/webunit/test_site/form.html~ +0 -1
  403. data/test/webunit/test_site/frame-0.html~ +0 -1
  404. data/test/webunit/test_site/frame-1.html~ +0 -1
  405. data/test/webunit/test_site/frame.html~ +0 -1
  406. data/test/webunit/test_site/image.html~ +0 -1
  407. data/test/webunit/test_site/include.cgi~ +0 -10
  408. data/test/webunit/test_site/jscript-0.html~ +0 -1
  409. data/test/webunit/test_site/jscript-1.html~ +0 -1
  410. data/test/webunit/test_site/jscript.html~ +0 -1
  411. data/test/webunit/test_site/link.html~ +0 -1
  412. data/test/webunit/test_site/multipart.cgi~ +0 -25
  413. data/test/webunit/test_site/multipart.html~ +0 -1
  414. data/test/webunit/test_site/params.html~ +0 -1
  415. data/test/webunit/test_site/redirect.cgi~ +0 -14
  416. data/test/webunit/test_site/response.html~ +0 -1
  417. data/test/webunit/test_site/simple.cgi~ +0 -17
  418. data/test/webunit/test_site/stock.cgi~ +0 -34
  419. data/test/webunit/test_site/table.html~ +0 -1
  420. data/test/webunit/test_site/test.cgi~ +0 -25
  421. data/test/wiki/test.history.rb~ +0 -254
  422. data/test/wiki/test.illustration_page.rb~ +0 -287
  423. data/test/wiki/test.tarpit.rb~ +0 -40
  424. data/test/wiki/test.wiki.rb~ +0 -295
@@ -1,50 +0,0 @@
1
- require 'web/unit/converter'
2
-
3
- module WebUnit #:nodoc: all
4
- module UI
5
- module CUI
6
- class TestRunner
7
-
8
- def initialize(quiet_mode=true)
9
- case USING_FRAMEWORK
10
- when 'Test::Unit'
11
- require 'test/unit/ui/console/testrunner'
12
- @runner = Test::Unit::UI::Console::TestRunner
13
- when 'RubyUnit'
14
- require 'runit/cui/testrunner'
15
- @runner = RUNIT::CUI::TestRunner.new
16
- end
17
- quiet_mode(quiet_mode)
18
- end
19
-
20
- def quiet_mode(boolean)
21
- case USING_FRAMEWORK
22
- when 'RubyUnit'
23
- @runner.class.quiet_mode = boolean
24
- end
25
- end
26
-
27
- def all_suite
28
- case USING_FRAMEWORK
29
- when 'Test::Unit'
30
- suite_name = $0.sub(/\.rb$/, '')
31
- suite = TestSuite.new(suite_name)
32
- test_classes = []
33
- ObjectSpace.each_object(Class) do |klass|
34
- test_classes << klass if TestCase > klass
35
- end
36
- test_classes.each {|klass| suite << klass.suite}
37
- suite
38
- when 'RubyUnit'
39
- TestCase.all_suite
40
- end
41
- end
42
-
43
- def run(suite=all_suite)
44
- @runner.run(suite)
45
- end
46
-
47
- end
48
- end
49
- end
50
- end
data/lib/web/upload.rb~ DELETED
@@ -1,262 +0,0 @@
1
- require 'tempfile'
2
-
3
- module Web
4
- # == Purpose
5
- # This class delegates to the uploaded Tempfile, and adds
6
- # content type and original filename attributes.
7
- #
8
- # If you are testing a multipart/form, use this class
9
- # to pretend you uploaded a file:
10
- #
11
- # "uploaded_file" => Upload.new(anIO,
12
- # "image/png",
13
- # "my_favorite_image.png" )
14
- #
15
- # See Web::Testing for more information.
16
- #
17
- class Upload
18
- attr_reader :content_type, :original_filename
19
-
20
- def initialize( tempfile, content_type, original_filename )
21
- if (tempfile.is_a? String)
22
- contents = File.open( tempfile, "r" ) { |f| f.read }
23
- tempfile = Tempfile.new("Web")
24
- tempfile.binmode
25
- tempfile.write contents
26
- tempfile.rewind
27
- end
28
-
29
- @content_type = content_type
30
- @original_filename = original_filename
31
- @tempfile = tempfile
32
- end
33
-
34
- # use this method to move an upload somewhere you care about
35
- def write_to_file( filename )
36
- File.open( filename, "w" ) { |f|
37
- f.binmode
38
- f.write( self.read )
39
- }
40
- end
41
-
42
- # how do I get the contents of an upload?
43
- def read
44
- @tempfile.rewind
45
- @tempfile.read
46
- end
47
-
48
- # how do I get in IO object from an upload?
49
- def open
50
- @tempfile.rewind
51
- yield @tempfile
52
- end
53
- end
54
-
55
-
56
-
57
- # === Purpose
58
- # Web::Request parses the cookies and parameters and contains methods to access them.
59
- #
60
- module Request #:nodoc:
61
- def Request.normalize( params ) #:nodoc:
62
- params.each { |key, value|
63
- unless value.kind_of? Array
64
- params[key] = [value]
65
- end
66
- }
67
- params.default = []
68
- params
69
- end
70
-
71
- def Request.cookies(mock=nil)
72
- Request.normalize( mock || Request.parse_cookie( ENV['HTTP_COOKIE'] || ENV['COOKIE'] ) )
73
- end
74
-
75
- def Request.parse_cookie(raw_cookie) #:nodoc:
76
- cookies = Hash.new([])
77
- return cookies unless raw_cookie
78
-
79
- raw_cookie.split(/; /).each do |pairs|
80
- name, values = pairs.split('=',2)
81
- name = Web::unescape(name)
82
- values ||= ""
83
- values = values.split('&').collect{|v| Web::unescape(v) }
84
- if cookies.has_key?(name)
85
- cookies[name].push(*values)
86
- else
87
- cookies[name] = values
88
- end
89
- end
90
-
91
- cookies
92
- end
93
-
94
- def Request.parse #:nodoc:
95
- if (multipart?)
96
- parse_multipart
97
- else
98
- parse_query_string( query_string )
99
- end
100
- end
101
-
102
- def Request.query_string
103
- case ENV["REQUEST_METHOD"]
104
- when "GET", "HEAD"
105
- if (defined? MOD_RUBY) # <= this check is untested.
106
- # search the test files for
107
- # test_parse_get_with_mod_ruby
108
- # for an explanation
109
- mod_ruby_query_string
110
- else
111
- ENV["QUERY_STRING"]
112
- end
113
- when "POST"
114
- $stdin.binmode
115
- $stdin.read(Integer(ENV['CONTENT_LENGTH']))
116
- end
117
- end
118
-
119
- # this method solely exists b/c of difficulties setting MOD_RUBY dynamically.
120
- # so this method exists so I can test the effect separately
121
- # from the (currently untestable) cause
122
- def Request.mod_ruby_query_string #:nodoc:
123
- Apache::request.args
124
- end
125
-
126
- def Request.parse_query_string(query) #:nodoc:
127
- query ||= ""
128
- params = Hash.new([])
129
-
130
- query.split(/[&;]/n).each do |pairs|
131
- key, value = pairs.split('=',2).collect{|v| Web::unescape(v) }
132
- if params.has_key?(key)
133
- params[key].push(value)
134
- else
135
- params[key] = [value]
136
- end
137
- end
138
-
139
- params
140
- end
141
-
142
-
143
- # note this returns the un-arrayified version of the array
144
- def Request.parse_query_string_typed(query) #:nodoc: :notest:
145
- params = parse_query_string query
146
- params2 = {}
147
- params.collect do |k,v|
148
- if ! (k =~ /type/)
149
- if (atype = params["#{k}#type"][0])
150
- params2[k] = Module.const_get(atype.intern).unencode(v[0])
151
- else
152
- params2[k] = v[0]
153
- end
154
- end
155
- end
156
- params2
157
- end
158
-
159
- def Request.multipart?
160
- ("POST" == ENV['REQUEST_METHOD']) &&
161
- (/multipart\/form-data/.match(ENV['CONTENT_TYPE']))
162
- end
163
-
164
- def Request.parse_multipart #:nodoc:
165
- %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n.match(ENV['CONTENT_TYPE'])
166
- boundary = $1.dup
167
-
168
- read_multipart(boundary, Integer(ENV['CONTENT_LENGTH']))
169
- end
170
-
171
- EOL="\r\n"
172
-
173
- def Request.read_multipart(boundary, content_length) #:nodoc:
174
- params = Hash.new([])
175
- boundary = "--" + boundary
176
- buf = ""
177
- bufsize = 10 * 1024
178
-
179
- # start multipart/form-data
180
- $stdin.binmode
181
- boundary_size = boundary.size + EOL.size
182
- content_length -= boundary_size
183
- status = $stdin.read(boundary_size)
184
- if nil == status
185
- raise EOFError, "no content body"
186
- end
187
-
188
- until -1 == content_length
189
- head = nil
190
- body = Tempfile.new("Web")
191
- body.binmode
192
-
193
- until head and /#{boundary}(?:#{EOL}|--)/n.match(buf)
194
-
195
- if head
196
- trim_size = (EOL + boundary + EOL).size
197
- if trim_size < buf.size
198
- body.print buf[0 ... (buf.size - trim_size)]
199
- buf[0 ... (buf.size - trim_size)] = ""
200
- end
201
- elsif /#{EOL}#{EOL}/n.match(buf)
202
- buf = buf.sub(/\A((?:.|\n)*?#{EOL})#{EOL}/n) do
203
- head = $1.dup
204
- ""
205
- end
206
- next
207
- end
208
-
209
- c = if bufsize < content_length
210
- $stdin.read(bufsize) or ''
211
- else
212
- $stdin.read(content_length) or ''
213
- end
214
- buf.concat c
215
- content_length -= c.size
216
-
217
- end
218
-
219
-
220
- /Content-Disposition:.* filename="?([^\";]*)"?/ni.match(head)
221
- filename = ($1 or "").dup
222
- if /Mac/ni.match(ENV['HTTP_USER_AGENT']) and
223
- /Mozilla/ni.match(ENV['HTTP_USER_AGENT']) and
224
- (not /MSIE/ni.match(ENV['HTTP_USER_AGENT']))
225
- filename = Web::unescape(filename)
226
- end
227
-
228
- /Content-Type: (.*)/ni.match(head)
229
- content_type = ($1 or "").strip
230
-
231
- buf = buf.sub(/\A((?:.|\n)*?)(?:#{EOL})?#{boundary}(#{EOL}|--)/n) do
232
- body.print $1
233
- if "--" == $2
234
- content_length = -1
235
- end
236
- ""
237
- end
238
-
239
- body.rewind
240
-
241
- if (content_type.empty?)
242
- upload = body.read
243
- else
244
- upload = Web::Upload.new( body, content_type, filename )
245
- end
246
-
247
- /Content-Disposition:.* name="?([^\";]*)"?/ni.match(head)
248
- name = $1.dup
249
-
250
- if params.has_key?(name)
251
- params[name].push(upload)
252
- else
253
- params[name] = [upload]
254
- end
255
-
256
- end
257
-
258
- params
259
- end # read_multipart
260
-
261
- end
262
- end
data/lib/web/wiki.rb~ DELETED
@@ -1,517 +0,0 @@
1
- require 'web'
2
- require 'web/wiki/linker'
3
- require 'web/wiki/page'
4
- require 'yaml'
5
- require 'ftools'
6
- require 'strscan'
7
- require 'ipaddr'
8
-
9
- module Web
10
- # == Purpose
11
- # This wiki exists to:
12
- # * Serve http://www.narf-lib.org
13
- # * Test the utility of features in the NARF toolkit, and serve
14
- # as an example of how to build a decent-sized application
15
- # with NARF
16
- # * Be a nice, useful wiki; aka UseMod with HTMLArea integration
17
- # and image uploads
18
- #
19
- # == Usage
20
- # This is the quickest way to embed the narf wiki:
21
- #
22
- # #!/usr/bin/env ruby
23
- # require 'web/wiki'
24
- # Web::process{
25
- # Web::Wiki::handle_request()
26
- # }
27
- #
28
- # You will enjoy your wiki more, however, by fiddling with
29
- # a few config settings. Here what a production wiki.rb might
30
- # look like:
31
- #
32
- # #!/usr/bin/env ruby
33
- # require 'web/wiki'
34
- #
35
- # Web::process{
36
- # # this line allows me to overload the default templates
37
- # Web::template_include_path << "../"
38
- #
39
- # # here I set a number of config variables.
40
- # Web::Wiki::set_pref( :store_url => "/pages/",
41
- # :store_dir => "../pages/",
42
- # :home_page => "NarfRocks",
43
- # :resourceurl => "/resources" )
44
- #
45
- # # finally, I handle the request
46
- # Web::Wiki.handle_request
47
- # }
48
- #
49
- # The default templates for the NARF wiki are located in
50
- #
51
- # site_lib/web/wiki/resources/
52
- #
53
- # Append your template dir to the template_include_path and
54
- # only worry about overriding the templates you care about.
55
- # Chances are, you'll care about these two templates:
56
- #
57
- # template.html:: the overall template
58
- # home.html:: the template for the homepage
59
- #
60
- # The following preferences can make a difference for
61
- # your wiki:
62
- #
63
- # store_dir::
64
- # Web::Wiki uses YAML to save pages. By default,
65
- # these pages will be saved in "./pages/".
66
- # store_url::
67
- # If you make your store files publicly accessible,
68
- # Web::Wiki can let the webserver handle any the download
69
- # of any upload page assets.
70
- # home_page::
71
- # The default home page for the wiki is HomePage. Set the
72
- # HomePage to something meaningful in your wiki.
73
- # resourceurl::
74
- # By default, the NARF wiki will download various resource files
75
- # from sitelib/web/wiki/resources. This makes installation easy,
76
- # but a single visit to the edit page will incur the hit of
77
- # executing ruby for every single image. Make these files
78
- # accessible online and tell NARF where to find them, and
79
- # things should run more quickly.
80
- #
81
- # == Credits
82
- # Web::Wiki must extend its thanks to these very, very useful projects:
83
- #
84
- # YAML:: http://yaml4r.sourceforge.net/
85
- # HTMLArea:: http://sourceforge.net/projects/itools-htmlarea/
86
- #
87
- class Wiki
88
-
89
- # It seems nicer to define the class
90
- # methods on an object and
91
- # delegate a few class methods
92
- def Wiki.method_missing( symbol, *args )
93
- if [:handle_request,
94
- :store_dir,
95
- :store_url,
96
- :store_basedir,
97
- :more_news,
98
- :page_list,
99
- :exit_handler ].include? symbol
100
- wiki.send symbol, *args
101
- else
102
- super( symbol, args )
103
- end
104
- end
105
-
106
- @@wiki = nil
107
- def Wiki.wiki
108
- @@wiki ||= Wiki.new
109
- end
110
-
111
- def Wiki.wipe #:nodoc:
112
- @@wiki = nil
113
- end
114
-
115
- @@preferences = nil
116
- def Wiki.preferences
117
- @@preferences ||= {"baseurl" => Web::script_name,
118
- "resourceurl" => "{$baseurl}/resources",
119
- "store_dir" => "./pages/",
120
- "tarpit_dir" => "./tarpit/",
121
- "resource_dir" => File.join( File.dirname( __FILE__ ),
122
- "wiki",
123
- "resources" ),
124
- "vandals" => "vandals.txt",
125
- "home_page" => "HomePage",
126
- "home_template" => "home.html",
127
- "allowed_actions" => Wiki::Request.actions.keys
128
- }
129
- end
130
-
131
- def Wiki.pref( key )
132
- key = key.to_s unless (key.kind_of? String)
133
- pref = Wiki.preferences[key]
134
- while (pref =~ /\{\$([^\}]*)\}/)
135
- variable = $1
136
- pref.gsub!( /\{\$#{variable}\}/, Wiki.pref( variable.strip ) || "")
137
- end
138
- pref
139
- end
140
-
141
- def Wiki.set_pref( new_prefs={} )
142
- new_prefs.each{ |key,value|
143
- key = key.to_s unless (key.kind_of? String)
144
- Wiki.preferences[key] = value
145
- }
146
- end
147
- #-------------------------------------------------------------
148
-
149
- module Store #:nodoc:
150
-
151
- def move_asset( from, filename )
152
- historical = File.expand_path(filename)
153
- i=0
154
- while( File.exists? historical )
155
- i += 1
156
- historical = File.dirname( historical ) + "/\#" + i.to_s + "." + File.basename( historical ).gsub( /^\#\d*\./, "" )
157
- end
158
-
159
- File.move( filename, historical ) if File.exists? filename
160
-
161
- if (from.is_a? Web::Upload)
162
- from.write_to_file(filename)
163
- else
164
- File.move( from, filename )
165
- end
166
- end
167
-
168
- def page_list
169
- Dir[store_dir + "/*.yaml"].entries.collect { |e|
170
- File.basename( e, ".yaml" ).gsub( /-slash-/, "/" )
171
- }
172
- end
173
-
174
- def store( name )
175
- File.join( store_dir, name.gsub(/\//, "-slash-") + ".yaml" )
176
- end
177
-
178
- def load_page( name = Web["page.name"] )
179
- if name.size == 0
180
- if (Web.path_info)
181
- name = Web.path_info.gsub( Regexp.new(Web.script_name), "" ).gsub(/^\/|\.html$/,"")
182
- end
183
- if name.size == 0
184
- name = Web::Wiki::pref( :home_page )
185
- end
186
- end
187
-
188
- page = ""
189
- page_file = store( name )
190
- if File.exists? page_file
191
- File.open( page_file, "r" ) { |f|
192
- page = YAML.load( f )
193
- }
194
- else
195
- page = Web::Wiki::Page.new( name )
196
- end
197
-
198
- {/\\r/ => "\r",
199
- /\\n/ => "\n",
200
- /\\"/ => "\"",
201
- /\\'/ => "'", }.each{ |find, replace|
202
- page.content.gsub!( find, replace )
203
- }
204
- page
205
- end
206
-
207
- def news
208
- more_news[0..4]
209
- end
210
-
211
- def more_news
212
- if File.exists?(store_dir + "/more_news.yaml")
213
- contents = File.open( store_dir + "/more_news.yaml" ) { |f| f.read }
214
- unless contents.empty?
215
- YAML.load(contents)
216
- else
217
- [ ]
218
- end
219
- else
220
- [ ]
221
- end
222
- end
223
-
224
- def save( page )
225
- # save a slim version of the page for recent changes
226
- rcpage = page.clone
227
- rcpage.content = ""
228
- rcpage.history = [ ]
229
- rc = more_news
230
- rc = rc.unshift(rcpage) unless rcpage.comment.empty?
231
- rc.pop if rc.size > Page::max_revisions
232
- File.open( store_dir + "/more_news.yaml", "w" ) { |f|
233
- YAML.dump( rc, f )
234
- }
235
-
236
- comment = page.comment
237
- # clear out comment now that we've saved more news
238
- page.comment = ""
239
- File.open( store( page.name ), "w" ) { |f|
240
- YAML.dump( page, f )
241
- }
242
- end
243
-
244
-
245
- def store_basedir
246
- if ( vandal? )
247
- Wiki.pref( "tarpit_dir" )
248
- else
249
- Wiki.pref( "store_dir" )
250
- end
251
- end
252
-
253
- def store_dir
254
- unless (File.exists? store_dirname)
255
- File.makedirs( store_dirname)
256
- end
257
- store_dirname
258
- end
259
-
260
- def store_url
261
- Wiki::pref( :store_url ) || Wiki::pref( :store_dir )
262
- end
263
-
264
- def store_dirname
265
- unless ( store_basedir =~ /^\// )
266
- File.expand_path( Dir.pwd + "/" + self.store_basedir )
267
- else
268
- store_basedir
269
- end
270
- end
271
-
272
- def vandal?
273
- vandal = false
274
- vandals.each do |pattern|
275
- if pattern =~ ENV["REMOTE_ADDR"]
276
- vandal = true
277
- break
278
- end
279
- end
280
- vandal
281
- end
282
-
283
- def vandals
284
- @vandals ||= if File.exists?( Wiki.pref("vandals") || "" )
285
- File.open( Wiki.pref("vandals") ) { |f|
286
- f.to_a
287
- }.collect{ |line|
288
- /^#{line.chomp.strip.gsub(/"/, '')}/
289
- }
290
- else
291
- [ ]
292
- end
293
- end
294
-
295
- def exit_handler
296
- require 'find'
297
- Find.find( store_dir ) { |name|
298
- begin
299
- if File.directory? name
300
- File.chmod( 0777, name )
301
- else
302
- File.chmod( 0666, name )
303
- end
304
- rescue Exception
305
- # this should be more specific to access errors
306
- end
307
- }
308
- end
309
-
310
- end
311
-
312
- include Wiki::Store
313
-
314
- #-------------------------------------------------------------
315
-
316
- def handle_request
317
- Request.new( self ).handle_request
318
- unless (Wiki.pref("added_exit_handler"))
319
- exit_handler
320
- Wiki.set_pref("added_exit_handler" => true )
321
- end
322
- end
323
-
324
- class Request # :nodoc:
325
-
326
- attr_accessor :page, :template, :content_template, :vars, :wiki
327
-
328
- def initialize( wiki )
329
- @handled = false
330
- @wiki = wiki
331
- @template = if (File.basename(Web.script_name) == "admin.rb")
332
- "admin.html"
333
- else
334
- "template.html"
335
- end
336
- end
337
-
338
- def page
339
- unless @page
340
- @page = self.wiki.load_page
341
- unless (Web["revision"] == nil || Web["revision"].empty? || Web["revision"].to_s == "0")
342
- history = @page.history
343
- @page = history.find{ |p|
344
- Web["revision"].to_i == p.revision
345
- }
346
- @page.history = history
347
- end
348
- end
349
- @page
350
- end
351
-
352
- def vars
353
- @vars ||= {"page" => self.page,
354
- "wiki" => self.wiki,
355
- "action" => Web["action"],
356
- "baseurl" => Web::Wiki::pref(:baseurl),
357
- "resourceurl" => Web::Wiki::pref(:resourceurl),
358
- }
359
- end
360
-
361
- def handle_request
362
- cmd = Web["action"]
363
- cmd = "default" if cmd.empty? || cmd == "view_revision"
364
- cmd = "download_resource" if Web::path_info =~ /^\/resources\//
365
- cmd = "default" unless Web::Wiki::pref("allowed_actions").include?(cmd)
366
-
367
- Request.actions[cmd].call(self)
368
-
369
-
370
- unless @handled
371
- Web.template_include_path << Web::Wiki::pref("resource_dir")
372
- self.vars["content_template"] = self.content_template
373
- Web.print_template( self.template, self.vars ) if self.template
374
- @handled = true
375
- end
376
- end
377
-
378
- @@actions = {}
379
- def Request.actions
380
- @@actions
381
- end
382
-
383
- def Request.action( name, &action )
384
- Action.new name, &action
385
- end
386
-
387
-
388
- class Action #:nodoc:
389
- attr_accessor :name
390
- def initialize( name, &action )
391
- @name = name
392
- @action = action
393
- Request.actions[name] = self
394
- end
395
-
396
- def call( request )
397
- if (self.name == "default")
398
- request.content_template = request.page.template
399
- else
400
- request.content_template = self.name + ".html"
401
- end
402
- @action.call(request) if @action
403
- if ( [ "illustration.html",
404
- "images.html" ].include? request.content_template )
405
- request.template = request.content_template
406
- end
407
- end
408
- end
409
-
410
- [ "default", "page_history", "images", "more_news" ].each{ |boring_action|
411
- action( boring_action )
412
- }
413
-
414
- #action( "more_news_rss_0.91" ) {|r|
415
- # r.template = "more_news_rss_0.91.html"
416
- #}
417
-
418
- action( "edit" ) { |r|
419
- r.page.comment = "";
420
- r.vars["options"] = {
421
- "content_editor" => case ENV["HTTP_USER_AGENT"]
422
- when /MSIE.*Windows/
423
- "ie-content_editor.html"
424
- when /Mozilla.*(?!MSIE).*Windows/
425
- "ekit-content_editor.html"
426
- else
427
- "default-content_editor.html"
428
- end,
429
- "page_types" => ["Normal", "Illustration"],
430
- "align" => ["left", "center", "right"],
431
- "valign" => ["top", "middle", "bottom"],
432
- }
433
- }
434
-
435
- def download_file( basedir, requested_asset )
436
- self.template = nil
437
- self.content_template = nil
438
-
439
- basedir = File.expand_path( basedir )
440
- requested_asset = File.expand_path( File.join(basedir,
441
- requested_asset.gsub( /\\/, "/") ) )
442
- # security check on the requested_asset --
443
- # it must be underneath the basedir
444
- if ( requested_asset.index( basedir ) == 0 && \
445
- File.exists?( requested_asset ) )
446
- # deliver the file
447
- Web.content_type = Web.get_mime_type( requested_asset )
448
- Web.write File.open(requested_asset, "r" ) { |f|
449
- f.read
450
- }
451
- Web.flush
452
- else
453
- Web.status = "404";
454
- Web.write "404 File Not Found"
455
- Web.flush
456
- end
457
- end
458
-
459
- action( "download" ) { |r|
460
- r.download_file( r.page.dir,Web["asset"] )
461
- }
462
-
463
- action("download_resource") { |r|
464
- r.download_file( Wiki::pref(:resource_dir),
465
- Web::path_info.gsub( /^\/resources/, '' ) )
466
- }
467
-
468
-
469
-
470
- ["select_illustration", "insert_download"].each{ |images_target|
471
- action(images_target) { |r|
472
- r.template = "images.html"
473
- }
474
- }
475
-
476
- action( "Upload" ) { |r|
477
- r.content_template = "images.html"
478
- r.vars["action"] = Web["calling_action"]
479
- Dir.mkdir r.page.dir unless (File.exists? r.page.dir)
480
- r.wiki.move_asset( Web["upload"],
481
- File.join( r.page.dir,
482
- File.basename(Web["upload"] \
483
- .original_filename \
484
- .gsub( /\\/, "/") ) ) )
485
- }
486
-
487
- action( "asset_history" ) { |r|
488
- r.vars["asset"] = { "name" => Web["asset"],
489
- "history" => r.page.historical_assets[Web["asset"]] }
490
- }
491
-
492
- action( "Save" ) { |r|
493
- # patrick's (seemed simpler at the moment)
494
- # comment out if you want to try the
495
- # simple dispatcher code below
496
- r.page.set_by_request
497
- r.wiki.save( r.page )
498
-
499
- # redirect back to default
500
- Web::multiple_params["action"] = ["default"]
501
- Web::clear()
502
- r.handle_request
503
- }
504
-
505
-
506
-
507
- action( "delete_asset" ) { |r|
508
- r.content_template = "images.html"
509
- r.vars["action"] = Web["calling_action"]
510
- r.wiki.move_asset( File.join( r.page.dir, File.basename( Web["asset"] ) ),
511
- File.join( r.page.dir, File.basename( "\#deleted." + Web["asset"] ) ) )
512
- }
513
-
514
- end
515
-
516
- end
517
- end