narf 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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