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
data/lib/web/runner.rb~ DELETED
@@ -1,26 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require 'web'
4
-
5
- docroot = ENV["DOCUMENT_ROOT"]
6
- Web.set_docroot docroot
7
- $:.replace(["#{docroot}/../src","#{docroot}/../config"].concat($:))
8
-
9
- def cgi # :nodoc:
10
- Web::CGI.create()
11
- end
12
-
13
- begin
14
- load ARGV[0]
15
- rescue Exception => err
16
- cgi.puts "<h3>ruby error:</h3>"
17
- cgi.puts Dir.pwd
18
- cgi.puts err.to_s.gsub(/\n/,"<br><br>")
19
- cgi.puts "<blockquote>"
20
- cgi.puts (if (err.backtrace.size > 3)
21
- err.backtrace[0...-2]
22
- else
23
- err.backtrace
24
- end).collect{ |string| string + "<br>" }
25
- cgi.puts "</blockquote>"
26
- end
@@ -1,25 +0,0 @@
1
- # see cgi.rb and Web::process
2
-
3
- require 'web/cgi'
4
-
5
- module Web
6
- class FastCGD < CGD
7
- def FastCGD::new( options = {} )
8
- fcgi = options[:fcgi]
9
-
10
- options[:out] = fcgi.out
11
- options[:in] = fcgi.in
12
- options[:env] = fcgi.env
13
-
14
- super(options)
15
- end
16
-
17
- def close
18
- options[:fcgi].finish
19
- options[:fcgi] = nil
20
- end
21
-
22
- end
23
-
24
- end
25
-
@@ -1,46 +0,0 @@
1
- # see cgi.rb and Web::process
2
-
3
- require 'web/cgi'
4
-
5
- module Web
6
- class CGD
7
- class ModRubyCGD < CGD
8
- def initialize( options = {} )
9
- options[:env] = {}
10
- ENV.each{|k,v|
11
- options[:env][k] = v
12
- }
13
- Apache::request.headers_in.each{ |k,v|
14
- options[:env][k] = v
15
- }
16
- super(options)
17
- end
18
-
19
- def send_header header
20
- Apache::request.status_line = header['Status'].first.split.shift
21
- Apache::request.content_type = header['Content-Type'].first
22
- Apache::request.content_encoding = (header['Content-Encoding'] || [ ]).first
23
-
24
- header.delete( "Status" )
25
- header.delete( "Content-Type" )
26
- header.delete( "Content-Encoding" )
27
-
28
- if (header["Set-Cookie"])
29
- header["Set-Cookie"].each{ |cookie|
30
- Apache::request.headers_out.add( "Set-Cookie", cookie )
31
- }
32
- header.delete( "Set-Cookie" )
33
- end
34
-
35
- header.each{ |k,v|
36
- Apache::request.headers_out[k] = v.last
37
- }
38
-
39
- Apache::request.send_http_header
40
-
41
- end
42
-
43
- end
44
- end
45
- end
46
-
@@ -1,89 +0,0 @@
1
- # Based on:
2
- # cgihandler.rb -- CGIHandler Class
3
- #
4
- # Author: IPR -- Internet Programming with Ruby -- writers
5
- # Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
6
- # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
7
- # reserved.
8
- #
9
- # $IPR: cgihandler.rb,v 1.27 2003/03/21 19:56:01 gotoyuzo Exp $
10
-
11
- require 'tempfile'
12
- require 'webrick/httpservlet/abstract'
13
-
14
- require 'web'
15
-
16
- module Web
17
-
18
- class WebrickCGD < Web::CGD
19
- def send_header( header )
20
-
21
- end
22
- end
23
-
24
- class NarfHandler < WEBrick::HTTPServlet::AbstractServlet
25
-
26
- def initialize(server, name)
27
- super
28
- @script_filename = name
29
- @tempdir = server[:TempDir]
30
- end
31
-
32
- def do_GET(req, res)
33
- header, body = nil, nil
34
-
35
- cgi_out = Tempfile.new("webrick.cgiout.", @tempdir)
36
- cgi_err = Tempfile.new("webrick.cgierr.", @tempdir)
37
-
38
- old_stderr = $stderr
39
-
40
- begin
41
- $stderr = cgi_err
42
-
43
- meta = req.meta_vars
44
- meta["SCRIPT_FILENAME"] = @script_filename
45
- meta["PATH"] = @config[:CGIPathEnv]
46
-
47
- Web::process( :cgd => Web::WebrickCGD.new(:out => cgi_out,
48
- :in => StringIO.new( req.body || '' ),
49
- :env => meta ) ) {
50
- load( @script_filename, true )
51
- }
52
-
53
- ensure
54
- Web::close
55
-
56
- cgi_out.rewind
57
- body = cgi_out.read
58
- cgi_out.close(true)
59
-
60
- if errmsg = cgi_err.read
61
- if errmsg.size > 0
62
- @logger.error("NarfHandler: #{@script_filename}:\n" + errmsg)
63
- end
64
- end
65
- cgi_err.close(true)
66
-
67
- $stderr = old_stderr
68
- end
69
-
70
- begin
71
- header = Web::header
72
-
73
- if /^(\d+)/ =~ header['Status'].last
74
- res.status = $1.to_i
75
- header.delete('Status')
76
- end
77
- header.each{|key, val|
78
- res[key] = val.join(", ") }
79
- rescue => ex
80
- raise HTTPStatus::InternalServerError, ex.message
81
- end
82
-
83
- res.body = body
84
-
85
- end
86
- alias do_POST do_GET
87
- end
88
-
89
- end
data/lib/web/session.rb~ DELETED
@@ -1,75 +0,0 @@
1
- require 'digest/md5'
2
- module Web
3
- # == Purpose
4
- # Provides a file based implemetation of a session.
5
- # This is hacked up from matz's CGI::Session
6
- class Session
7
-
8
-
9
- class << self
10
- def create_id
11
- md5 = Digest::MD5.new
12
- md5.update( String(Time.now.to_f) )
13
- md5.update( String(rand(0)) )
14
- #md5.update( String($$) )
15
- #md5.update( 'thanks matz' )
16
- md5.hexdigest[0,16]
17
- end
18
- end
19
-
20
- def initialize( cgi, options={} )
21
- @session_id = load_id( cgi, options )
22
-
23
- send_cookie( cgi, options[:session_key] || "_session_id" )
24
-
25
- @session = get_session_from_disk
26
- end
27
-
28
- def get_session_from_disk
29
- if File.exists? file
30
- File.open( file, "r" ) { |store|
31
- Marshal.load store
32
- }
33
- else
34
- {}
35
- end
36
- end
37
-
38
- def load_id( cgi, options )
39
- if (options.has_key? :session_id)
40
- options[:session_id]
41
- elsif(cgi.cookies["_session_id"] && !cgi.cookies["_session_id"].empty?)
42
- cgi.cookies["_session_id"][0]
43
- else
44
- Session.create_id
45
- end
46
- end
47
-
48
-
49
- def send_cookie( cgi, session_key )
50
- cgi.set_cookie( session_key, @session_id )
51
- end
52
-
53
-
54
- # saves session to disk
55
- def save
56
- File.open( file, "w+" ) { |store|
57
- Marshal.dump( @session, store )
58
- }
59
- end
60
-
61
- def file
62
- File.expand_path(File.join((ENV['TMP'] || '/tmp' ), @session_id.to_s))
63
- end
64
-
65
- # resets session to empty hash, for use in testing
66
- def reset
67
- @session = {}
68
- end
69
-
70
- def method_missing(method, *args, &block)
71
- # much faster than simple delegator
72
- @session.send(method,*args,&block)
73
- end
74
- end
75
- end
@@ -1,96 +0,0 @@
1
- Struct.new("Tag",:name,:attributes)
2
- Tag = Struct::Tag
3
-
4
- class StrScanParser < StrScanParserR #:nodoc:
5
-
6
- TAG_START = /<narf:/
7
- TAG_END = />/
8
- TAG_CLOSE_START = /<\/narf:/
9
- TAG_NAME = /(\w+)/
10
- WHITESPACE = /\s*/
11
- QUOTE = /"/
12
- QUOTED_ATTRIBUTE_VALUE = /([^"?]+)/
13
- UNQUOTED_ATTRIBUTE_VALUE = /([\w.\/\$?]+)/
14
- EQUALS = /=/
15
- ATTRIBUTE_NAME = /(\w+)/
16
-
17
- def match_value
18
- if @scanner.scan(QUOTE)
19
- if @scanner.scan(QUOTED_ATTRIBUTE_VALUE)
20
- yield @scanner[1]
21
- @scanner.scan(QUOTE) || raise(MissingQuoteException.new)
22
- end
23
- elsif @scanner.scan(UNQUOTED_ATTRIBUTE_VALUE)
24
- yield @scanner[1]
25
- end
26
- end
27
-
28
- def match_attribute
29
- if @scanner.scan(ATTRIBUTE_NAME)
30
- name = @scanner[1]
31
- if @scanner.scan(EQUALS)
32
- match_value do |value|
33
- yield({ name => value })
34
- end || raise(MissingAttributeException.new)
35
- else
36
- yield({ name => nil })
37
- end
38
- end
39
- end
40
-
41
- def match_tag
42
- if @scanner.scan(TAG_START)
43
- name = ""
44
- nvs = {}
45
- if @scanner.scan(TAG_NAME)
46
- name = @scanner[1]
47
- while true
48
- @scanner.scan(WHITESPACE)
49
- match_attribute do |nv|
50
- nvs.update(nv)
51
- end || if @scanner.scan(TAG_END)
52
- yield Tag.new(name,nvs)
53
- return true
54
- else
55
- raise(TagNotClosedException.new)
56
- end
57
- end
58
- else
59
- raise(TagNotNamedException.new)
60
- end
61
- end
62
- end
63
-
64
- def match_close_tag
65
- if @scanner.scan (TAG_CLOSE_START)
66
- tag = nil
67
- if @scanner.scan(TAG_NAME)
68
- tag = @scanner[1]
69
- end # TODO raise missing name exception
70
- @scanner.scan(TAG_END) # TODO raise missing end tag exception
71
- yield tag if tag
72
- end
73
- end
74
-
75
- def match_identifier
76
- if @scanner.scan(/\{\$([\w.\?]*?)\}/)
77
- yield @scanner[1]
78
- end
79
- end
80
- end
81
-
82
- class MissingAttributeException < Exception # :nodoc:
83
-
84
- end
85
-
86
- class TagNotClosedException < Exception # :nodoc:
87
-
88
- end
89
-
90
- class TagNotNamedException < Exception # :nodoc:
91
-
92
- end
93
-
94
- class MissingQuoteException < Exception # :nodoc:
95
-
96
- end
data/lib/web/template.rb~ DELETED
@@ -1,613 +0,0 @@
1
- require 'strscan'
2
-
3
- NOT_TOKEN = /(.*?)(?=[<{]\/?[n$])/m
4
- MAXFILESIZE = 1000000
5
-
6
- module Web
7
- class TemplateException < Exception # :nodoc:
8
-
9
- end
10
-
11
- class Node # :nodoc:
12
- attr_reader :canonical_name, :value, :parent, :name
13
- attr_accessor :anAlias, :scope
14
-
15
- def initialize canonical_name, value, parent, name
16
- @canonical_name = canonical_name
17
- @value = value
18
- @parent = parent
19
- @name = name
20
- end
21
-
22
- def each
23
- @value.each_with_index { |value,i|
24
- yield Scope.new(value,"#{@canonical_name}[#{i}]",@scope,@anAlias)
25
- }
26
- end
27
- end
28
-
29
- NODE = /^([\w?_]+)/
30
- SEPARATOR = /^\./
31
- ARRAY_VAR = /^\[(\d+)\]$/
32
- ARRAY = /^\[(\d+)\]/
33
- VAR = /^([\w?_]+)$/
34
-
35
- class Scope # :nodoc: all
36
- def concat_name rootname, name
37
- if rootname != ""
38
- "#{rootname}.#{name}"
39
- else
40
- "#{name}"
41
- end
42
- end
43
-
44
- attr_reader :rootname, :anAlias
45
-
46
- def initialize hash, rootname ="", parent = nil, anAlias = ""
47
- @hash = hash
48
- @rootname = rootname
49
- @parent = parent
50
- @anAlias = anAlias
51
- end
52
-
53
- class VarNotFoundException < Exception # :nodoc:
54
- end
55
-
56
- def pull_value( name, collection )
57
- value = if collection.kind_of? Hash
58
- raise(VarNotFoundException.new("'#{name}' not found in #{collection.inspect}")) unless collection.has_key? name
59
- collection[name]
60
- elsif collection.kind_of? Array
61
- raise(VarNotFoundException.new("'#{name}' not found in #{collection.inspect}")) unless collection.has_key? name.to_i
62
- collection[name.to_i]
63
- elsif collection.respond_to? name.intern
64
- collection.send name.intern
65
- else
66
- raise(VarNotFoundException.new("'#{name}' not found in #{collection.inspect}"))
67
- # collection.instance_eval { eval "@" + name }
68
- end
69
-
70
- # raise(VarNotFoundException.new("'#{name}' not found in #{collection.inspect}")) if value == nil
71
-
72
- value
73
- end
74
-
75
- def resolve_recurse scanner, hash, rootname
76
- scanner.scan(SEPARATOR)
77
- if scanner.scan(VAR)
78
- nodename = scanner[1]
79
- return Node.new(concat_name(rootname,nodename),pull_value( nodename, hash ),hash,nodename)
80
- elsif scanner.scan(NODE)
81
- nodename = scanner[1]
82
- return resolve_recurse(scanner, pull_value( nodename, hash ), concat_name(rootname, nodename))
83
- elsif scanner.scan(ARRAY_VAR)
84
- nodename = scanner[1]
85
- return Node.new(concat_name(rootname,"[" + nodename + "]"),pull_value( nodename, hash ),hash,nodename)
86
- elsif scanner.scan(ARRAY)
87
- #TODO check is hash->array
88
- index = scanner[1]
89
- return resolve_recurse(scanner, hash[index.to_i], "#{rootname}[#{index}]")
90
- else
91
- raise(scanner.rest)
92
- end
93
- end
94
-
95
- def resolve varname, anAlias = ""
96
- # strip alias off front of varname
97
- varname = varname.sub(/\A#{@anAlias}\./, "")
98
- raise "Varname is empty" if varname.empty?
99
- node = begin
100
- scanner = StringScanner.new(varname)
101
- resolve_recurse scanner, @hash, @rootname
102
- rescue VarNotFoundException => error
103
- if @parent
104
- @parent.resolve varname
105
- else
106
- raise error
107
- end
108
- end
109
- node.anAlias = anAlias
110
- node.scope = self
111
- node
112
- end
113
-
114
- def update submitted
115
- submitted.keys.each { |param|
116
- begin
117
- var = resolve param
118
- if var.parent.kind_of? Hash
119
- var.parent[var.name] = submitted[param]
120
- elsif var.parent.kind_of? Array
121
- var.parent[var.name.to_i] = submitted[param]
122
- else
123
- var.parent.send( (var.name + "=").intern, submitted[param] )
124
- end
125
- rescue VarNotFoundException
126
- end
127
- }
128
- @hash
129
- end
130
- end
131
-
132
- # == Purpose
133
- # Templates allow you to seperate the design, which is a constant,
134
- # from the things that change. Testing is much easier if you can
135
- # focus on just the things that change.
136
- #
137
- # <i>Note: Narf intends to support multiple templating libraries.
138
- # After supporting multiple backends, I will work on the supporting
139
- # multiple templating libraries. I will probably start with rdoc
140
- # and amrita.</i>
141
- #
142
- # Back to business! Here's an example Narflate:
143
- #
144
- # <html>
145
- # <body>
146
- # {$myvar}
147
- # <narf:foreach from=alist item=i>
148
- # {$i.x}, {$i.x}<br>
149
- # </narf:foreach>
150
- # </body>
151
- # </html>
152
- #
153
- # You use the Web::print_template( template, value_hash ) to print
154
- # the template merged with values:
155
- #
156
- # --- script.rb:
157
- # Web.print_template "mytemplate.html",
158
- # "field1" => "val1",
159
- # "field2" => "val2",
160
- # "field3" => "val3",
161
- # "field4" => "3",
162
- # "values" => [{ "name" => "one", "value" => "1"},
163
- # { "name" => "two", "value" => "2"},
164
- # { "name' => "three", "value" => "3"}]
165
- #
166
- # --- mytemplate.html:
167
- # <narf:input type="text" name="field1">
168
- # <narf:input type="hidden" name="field2">
169
- # <narf:textarea name="field3">
170
- # <narf:select name="field4" values="values">
171
- #
172
- # This will produce the output:
173
- #
174
- # <input type="text" name="field1" value="val1">
175
- # <input type="hidden" name="field2" value="val2">
176
- # <textarea name="field3">
177
- # val3
178
- # </textarea>
179
- # <select name="field3">
180
- # <option value="1">one</option>
181
- # <option value="2">two</option>
182
- # <option value="3" selected>three</option>
183
- # </select>
184
- #
185
- class Narflates
186
- attr_reader :templates #:nodoc
187
-
188
- # This is the default template_include_path
189
- def Narflates.template_include_path #:nodoc:
190
- [Dir.pwd,
191
- File.join(Web.document_root.to_s,
192
- Web.script_path.to_s,
193
- "templates" ).gsub( /\/\//, "/" ),
194
- ]
195
- end
196
-
197
- def Narflates.template_file( template ) #:nodoc:
198
- template_file = template
199
- Web.template_include_path.reverse.each{ |dir|
200
- full_template_path = File.join( dir, template )
201
- if (File.exists? full_template_path)
202
- template_file = full_template_path
203
- end
204
- }
205
- template_file
206
- end
207
-
208
- def initialize template, query = {} # :nodoc:
209
- @templates = [template]
210
- @template = if (File.exists? Narflates.template_file(template))
211
- File.open(Narflates.template_file(template), "r") do |file|
212
- file.read || "" # this is because of a fixed bug in ruby.
213
- end # eventually the || "" should disappear
214
- else
215
- template
216
- end
217
- @parser = StrScanParser.new(StringScanner.new( @template ))
218
- @query = query
219
- end
220
-
221
- def parse io, vars # :nodoc:
222
- vars = if vars.kind_of? Scope
223
- vars
224
- else
225
- Scope.new(vars)
226
- end
227
-
228
- parse_recurse.each do |item|
229
- item.print(vars,io)
230
- end
231
-
232
- end
233
-
234
- class Foreach # :nodoc:
235
- attr_reader :array, :itemname, :contents
236
- def initialize (array,itemname,contents)
237
- @array = array
238
- @itemname = itemname
239
- @contents = contents
240
- end
241
-
242
- def print (globals,io)
243
- globals.resolve(array,@itemname).each { |item|
244
- contents.each { |i|
245
- i.print(item,io)
246
- }
247
- }
248
- end
249
- end
250
-
251
- class Form # :nodoc:
252
- attr_reader :formname, :method
253
- def initialize (formname,method,contents,query)
254
- @formname = formname
255
- @method = method
256
- @contents = contents
257
- @query = query
258
- end
259
-
260
- def print (globals,io)
261
- io << "<form name=\"#{@formname}\" method=\"#{@method}\">"
262
- io << "<input type=\"hidden\" name=\"__submitted\" value=\"#{@formname}\">"
263
- @query.each do | k,v|
264
- io << "<input type=\"hidden\" name=\"__q.#{k}\" value=\"" + v.gsub(/"/,"&quot;") +"\">"
265
- end
266
-
267
- @contents.each do |i|
268
- i.print(globals,io)
269
- end
270
- io << "</form>"
271
- end
272
- end
273
-
274
- class If # :nodoc:
275
- attr_reader :condvar, :contents
276
- def initialize (condvar,contents)
277
- @condvar = condvar
278
- @contents = contents
279
- end
280
-
281
- def print (globals,io)
282
- var = globals.resolve(@condvar)
283
- if var.value && var.value != []
284
- contents.each { |i|
285
- i.print(globals,io)
286
- }
287
- end
288
- end
289
- end
290
-
291
- class Unless # :nodoc:
292
- attr_reader :condvar, :contents
293
- def initialize (condvar,contents)
294
- @condvar = condvar
295
- @contents = contents
296
- end
297
-
298
- def print (globals,io)
299
- var = globals.resolve(@condvar)
300
- unless var.value || var.value == []
301
- contents.each { |i|
302
- i.print(globals,io)
303
- }
304
- end
305
- end
306
- end
307
-
308
- class Var # :nodoc:
309
- attr_reader :varname
310
- def initialize (varname)
311
- @varname = varname
312
- end
313
-
314
- def print (globals,io)
315
- io << globals.resolve(@varname).value
316
- end
317
- end
318
-
319
- class Link # :nodoc:
320
- def initialize (link,contents)
321
- @link = link
322
- @contents = contents
323
- end
324
-
325
- def print (globals,io)
326
- io << "<a href=\"#{globals.resolve(@link).value.get_link}\">"
327
- @contents.each { |i|
328
- i.print(globals,io)
329
- }
330
- io << "</a>"
331
- end
332
- end
333
-
334
- class Include # :nodoc:
335
- def initialize (filename, vars, template_list)
336
- @vars = vars
337
- @filename = filename
338
- @template_list = template_list
339
- end
340
-
341
- def print (globals,io)
342
- # resolve filename if it is var
343
- filename = if @filename =~ /^\$(.*)/
344
- globals.resolve( $1 ).value
345
- else
346
- @filename
347
- end
348
-
349
- # load file
350
-
351
- unless File.exists? Web::Narflates.template_file(filename)
352
- raise(TemplateException.new("Could not locate template file: " + filename))
353
- end
354
-
355
- templater = Narflates.new(filename,@query)
356
-
357
- if @vars == nil
358
- templater.parse(io, globals )
359
- else
360
- templater.parse(io, Scope.new(globals.resolve(@vars).value))
361
- end
362
-
363
- @template_list.concat( templater.templates )
364
- end
365
- end
366
-
367
- class Data # :nodoc:
368
- attr_reader :data
369
- def initialize (data)
370
- @data = data
371
- end
372
-
373
- def print (globals,io)
374
- io << @data if @data != nil
375
- end
376
- end
377
-
378
- class Text # :nodoc:
379
- attr_reader :name
380
- def initialize (name)
381
- @name = name
382
- end
383
-
384
- def print (globals,io)
385
- var = globals.resolve(@name)
386
- io << "<input type=\"text\" name=\"#{var.canonical_name}\" value=\"#{var.value}\">"
387
- end
388
- end
389
-
390
- class Hidden # :nodoc:
391
- attr_reader :name
392
- def initialize (name)
393
- @name = name
394
- end
395
-
396
- def print (globals,io)
397
- var = globals.resolve(@name)
398
- io << "<input type=\"hidden\" name=\"#{var.canonical_name}\" value=\"#{var.value}\">"
399
- end
400
- end
401
-
402
- class Password # :nodoc:
403
- attr_reader :name
404
- def initialize (name)
405
- @name = name
406
- end
407
-
408
- def print (globals,io)
409
- var = globals.resolve(@name)
410
- io << "<input type=\"password\" name=\"#{var.canonical_name}\" value=\"#{var.value}\">"
411
- end
412
- end
413
-
414
- class CheckBox # :nodoc:
415
- attr_reader :name
416
- def initialize (name)
417
- @name = name
418
- end
419
-
420
- def print (globals,io)
421
- var = globals.resolve(@name)
422
- io << "<input type=\"checkbox\" name=\"#{var.canonical_name}\""
423
- if var.value == true
424
- io << " checked>"
425
- end
426
- io << "><input type=\"hidden\" name=\"__#{var.canonical_name}\" value=\"e\">"
427
- end
428
- end
429
-
430
- class TextArea # :nodoc:
431
- attr_reader :name
432
- def initialize (name,rows,cols,virtual,style,id)
433
- @name = name
434
- @rows = rows
435
- @cols = cols
436
- @virtual = virtual
437
- @style = style
438
- @id = id
439
- end
440
-
441
- def print (globals,io)
442
- value = globals.resolve(@name).value
443
- io << "<textarea id=\"#{@id}\" name=\"#{@name}\" rows=\"#{@rows}\" cols=\"#{@cols}\" virtual=\"#{@virtual}\" style=\"#{@style}\">#{value}</textarea>"
444
- end
445
- end
446
-
447
- class Select # :nodoc:
448
- attr_reader :name, :values
449
- def initialize (name,values)
450
- @name = name
451
- @values = values
452
- end
453
-
454
- def print (globals,io)
455
- value = globals.resolve(@name).value
456
- values = globals.resolve(@values).value
457
- io << "<select name=\"#{@name}\">"
458
-
459
- values = values.collect { |i|
460
- unless i.kind_of? Hash
461
- { "name" => i, "value" => i }
462
- else
463
- { "name" => i["name"], "value" => i["value"] }
464
- end
465
- }
466
-
467
- values.each { |item|
468
- item = item
469
- selected = if item["value"].to_s == value.to_s
470
- " selected"
471
- else
472
- ""
473
- end
474
- io << "<option value=\"#{item['value']}\"#{selected}>#{item['name']}</option>"
475
- }
476
- io << "</select>"
477
- end
478
- end
479
-
480
-
481
- def match_identifiers tree=[] # :nodoc:
482
- @parser.match_identifier do |identifier|
483
- tree.push Var.new(identifier)
484
- end
485
- end
486
-
487
-
488
- def match_tags tree=[] # :nodoc:
489
- @parser.match_tag() do |tag|
490
- case tag.name
491
- when "input"
492
- case tag.attributes["type"]
493
- when "text"
494
- tree.push Text.new(tag.attributes["name"])
495
- when "hidden"
496
- tree.push Hidden.new(tag.attributes["name"])
497
- when "password"
498
- tree.push Password.new(tag.attributes["name"])
499
- when "checkbox"
500
- tree.push CheckBox.new(tag.attributes["name"])
501
- end
502
- when "textarea"
503
- tree.push TextArea.new(tag.attributes["name"],tag.attributes["rows"],tag.attributes["cols"],tag.attributes["virtual"],tag.attributes["style"],tag.attributes["id"])
504
- when "foreach"
505
- parse_recurse("foreach") { |contents|
506
- tree.push Foreach.new(tag.attributes["from"],tag.attributes["item"],contents)
507
- }
508
- when "form"
509
- parse_recurse("form") { |contents|
510
- tree.push Form.new(tag.attributes["name"],tag.attributes["method"],contents,@query)
511
- }
512
- when "link"
513
- parse_recurse("link") { |contents|
514
- tree.push Link.new(tag.attributes["value"],contents)
515
- }
516
- when "select"
517
- tree.push Select.new(tag.attributes["name"], tag.attributes["values"])
518
- when "if"
519
- parse_recurse("if") do |contents|
520
- tree.push If.new(tag.attributes["condition"],contents)
521
- end
522
- when "unless"
523
- parse_recurse("unless")do |contents|
524
- tree.push Unless.new(tag.attributes["condition"],contents)
525
- end
526
- when "include"
527
- tree.push Include.new(tag.attributes["file"],tag.attributes["vars"],@templates)
528
- else
529
- #TODO: raise unknown token exception
530
- end
531
- end
532
- end
533
-
534
- def parse_recurse closeTag = nil, tree = [], &block # :nodoc:
535
- catch(:done) do
536
- while @parser.rest? do
537
- @parser.match( NOT_TOKEN ) do |m|
538
- tree.push Data.new(m[1])
539
- end
540
-
541
- @parser.match_close_tag do |tag|
542
- if closeTag # TODO: make sure the correct close tag is given
543
- yield(tree) if block
544
- throw :done
545
- end
546
- end ||
547
- match_identifiers(tree) ||
548
- match_tags(tree) ||
549
- (tree.push(Data.new(@parser.rest)) &&
550
- throw(:done))
551
- end
552
- end
553
- tree
554
- end
555
- end
556
-
557
-
558
- module TemplatePrinter #:nodoc:
559
- attr_reader :template_name, :template_vars
560
- # writes template to self. Added by require 'narf/template'
561
- # template can be a filename or a template string
562
- def print_template (template, template_object ={}, query={})
563
- flush
564
- @template_vars = template_object
565
- templater = Narflates.new(template,query)
566
- templater.parse(self ,template_object)
567
- @templates = templater.templates
568
- end
569
-
570
- # this must be an instance variable so that one can append
571
- # to the include path without
572
- # carrying over to the next test
573
- def template_include_path
574
- @template_include_path ||= Web::Narflates.template_include_path
575
- #Web::Narflates.template_include_path
576
- end
577
-
578
- # Check that a particluar template was used
579
- def assert_template_used expected, message =""
580
- _wrap_assertion {
581
- raise TemplateException.new("No template used") if @templates == nil
582
- unless @templates.include? expected
583
- msg = "expected template:<#{expected}> but not one of:<#{@templates.inspect}>"
584
- flunk(msg)
585
- end
586
- }
587
- end
588
-
589
- # Check that a particluar template was not used
590
- def assert_template_not_used expected, message =""
591
- _wrap_assertion {
592
- raise TemplateException.new("No template used") if @templates == nil
593
- if @templates.include? expected
594
- msg = "template:<#{expected}> not supposed to be used in:<#{@templates.inspect}>"
595
- flunk(msg)
596
- end
597
- }
598
- end
599
-
600
- # Check that these values were included in the output
601
- def assert_vars_includes expected
602
- assert_includes expected, @template_vars
603
- end
604
-
605
- def assert_vars_equals
606
- raise Exception.new("Not yet implemented")
607
- end
608
- end
609
-
610
- class CGI
611
- include TemplatePrinter
612
- end
613
- end