narf 0.5.1
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.
- data/ChangeLog +163 -0
- data/InstalledFiles +2227 -0
- data/README +124 -0
- data/TODO +88 -0
- data/bin/narftest +17 -0
- data/bug.rb +9 -0
- data/build.rb +314 -0
- data/build.rb~ +314 -0
- data/config.save +12 -0
- data/doc/apache_cgi.txt +17 -0
- data/doc/fastcgi.txt +19 -0
- data/doc/mod_ruby.txt +7 -0
- data/doc/rdoc/classes/Web.html +366 -0
- data/doc/rdoc/classes/Web.src/M000002.html +15 -0
- data/doc/rdoc/classes/Web.src/M000003.html +15 -0
- data/doc/rdoc/classes/Web.src/M000004.html +15 -0
- data/doc/rdoc/classes/Web.src/M000005.html +15 -0
- data/doc/rdoc/classes/Web.src/M000006.html +20 -0
- data/doc/rdoc/classes/Web.src/M000007.html +18 -0
- data/doc/rdoc/classes/Web.src/M000008.html +18 -0
- data/doc/rdoc/classes/Web.src/M000009.html +18 -0
- data/doc/rdoc/classes/Web.src/M000010.html +15 -0
- data/doc/rdoc/classes/Web.src/M000011.html +15 -0
- data/doc/rdoc/classes/Web.src/M000012.html +15 -0
- data/doc/rdoc/classes/Web/CGD.html +173 -0
- data/doc/rdoc/classes/Web/CGD.src/M000037.html +24 -0
- data/doc/rdoc/classes/Web/CGD.src/M000038.html +23 -0
- data/doc/rdoc/classes/Web/CGD.src/M000039.html +15 -0
- data/doc/rdoc/classes/Web/CGD.src/M000040.html +15 -0
- data/doc/rdoc/classes/Web/CGD.src/M000041.html +23 -0
- data/doc/rdoc/classes/Web/CGI.html +946 -0
- data/doc/rdoc/classes/Web/CGI.src/M000051.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000052.html +24 -0
- data/doc/rdoc/classes/Web/CGI.src/M000053.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000054.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000055.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000056.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000057.html +17 -0
- data/doc/rdoc/classes/Web/CGI.src/M000058.html +34 -0
- data/doc/rdoc/classes/Web/CGI.src/M000059.html +22 -0
- data/doc/rdoc/classes/Web/CGI.src/M000060.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000061.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000062.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000063.html +18 -0
- data/doc/rdoc/classes/Web/CGI.src/M000064.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000065.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000066.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000067.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000068.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000069.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000070.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000071.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000072.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000073.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000074.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000075.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000076.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000077.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000078.html +20 -0
- data/doc/rdoc/classes/Web/CGI.src/M000079.html +36 -0
- data/doc/rdoc/classes/Web/CGI.src/M000080.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000081.html +18 -0
- data/doc/rdoc/classes/Web/CGI.src/M000082.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000083.html +17 -0
- data/doc/rdoc/classes/Web/CGI.src/M000084.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000085.html +16 -0
- data/doc/rdoc/classes/Web/CGI.src/M000086.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000087.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000088.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000089.html +16 -0
- data/doc/rdoc/classes/Web/CGI.src/M000090.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000091.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000092.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000093.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000094.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000095.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000096.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000097.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000098.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000099.html +43 -0
- data/doc/rdoc/classes/Web/CGI.src/M000100.html +18 -0
- data/doc/rdoc/classes/Web/CGI.src/M000101.html +20 -0
- data/doc/rdoc/classes/Web/CGI.src/M000102.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000103.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000104.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000105.html +24 -0
- data/doc/rdoc/classes/Web/CGI.src/M000106.html +24 -0
- data/doc/rdoc/classes/Web/CGI.src/M000107.html +22 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +104 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +15 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +15 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +15 -0
- data/doc/rdoc/classes/Web/Mime.html +122 -0
- data/doc/rdoc/classes/Web/Mime.src/M000118.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000119.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000120.html +23 -0
- data/doc/rdoc/classes/Web/Mime.src/M000121.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000122.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000123.html +23 -0
- data/doc/rdoc/classes/Web/Mime.src/M000124.html +15 -0
- data/doc/rdoc/classes/Web/Narflates.html +132 -0
- data/doc/rdoc/classes/Web/Parser.html +219 -0
- data/doc/rdoc/classes/Web/Parser.src/M000013.html +21 -0
- data/doc/rdoc/classes/Web/Parser.src/M000014.html +19 -0
- data/doc/rdoc/classes/Web/Parser.src/M000015.html +21 -0
- data/doc/rdoc/classes/Web/Parser.src/M000016.html +15 -0
- data/doc/rdoc/classes/Web/Parser.src/M000017.html +30 -0
- data/doc/rdoc/classes/Web/Parser.src/M000018.html +15 -0
- data/doc/rdoc/classes/Web/Parser.src/M000019.html +19 -0
- data/doc/rdoc/classes/Web/Parser.src/M000020.html +27 -0
- data/doc/rdoc/classes/Web/Parser.src/M000021.html +15 -0
- data/doc/rdoc/classes/Web/Parser.src/M000022.html +16 -0
- data/doc/rdoc/classes/Web/Parser.src/M000023.html +18 -0
- data/doc/rdoc/classes/Web/Session.html +178 -0
- data/doc/rdoc/classes/Web/Session.src/M000042.html +20 -0
- data/doc/rdoc/classes/Web/Session.src/M000043.html +19 -0
- data/doc/rdoc/classes/Web/Session.src/M000044.html +21 -0
- data/doc/rdoc/classes/Web/Session.src/M000045.html +21 -0
- data/doc/rdoc/classes/Web/Session.src/M000046.html +15 -0
- data/doc/rdoc/classes/Web/Session.src/M000047.html +17 -0
- data/doc/rdoc/classes/Web/Session.src/M000048.html +15 -0
- data/doc/rdoc/classes/Web/Session.src/M000049.html +15 -0
- data/doc/rdoc/classes/Web/Session.src/M000050.html +16 -0
- data/doc/rdoc/classes/Web/Testing.html +474 -0
- data/doc/rdoc/classes/Web/Testing.src/M000024.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000025.html +25 -0
- data/doc/rdoc/classes/Web/Testing.src/M000026.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000027.html +28 -0
- data/doc/rdoc/classes/Web/Testing.src/M000028.html +58 -0
- data/doc/rdoc/classes/Web/Testing.src/M000029.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000030.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000031.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000032.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000033.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000034.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000035.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000036.html +18 -0
- data/doc/rdoc/classes/Web/Upload.html +160 -0
- data/doc/rdoc/classes/Web/Upload.src/M000108.html +25 -0
- data/doc/rdoc/classes/Web/Upload.src/M000109.html +18 -0
- data/doc/rdoc/classes/Web/Upload.src/M000110.html +16 -0
- data/doc/rdoc/classes/Web/Upload.src/M000111.html +16 -0
- data/doc/rdoc/classes/Web/Wiki.html +249 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000112.html +25 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000113.html +15 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000114.html +26 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000115.html +21 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000116.html +18 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000117.html +19 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/README.html +226 -0
- data/doc/rdoc/files/doc/apache_cgi_txt.html +82 -0
- data/doc/rdoc/files/doc/fastcgi_txt.html +82 -0
- data/doc/rdoc/files/doc/mod_ruby_txt.html +62 -0
- data/doc/rdoc/files/doc/webrick_txt.html +79 -0
- data/doc/rdoc/files/examples/examples_rdoc.html +73 -0
- data/doc/rdoc/files/lib/web/cgi_rb.html +75 -0
- data/doc/rdoc/files/lib/web/mime_rb.html +67 -0
- data/doc/rdoc/files/lib/web/parser_rb.html +73 -0
- data/doc/rdoc/files/lib/web/session_rb.html +73 -0
- data/doc/rdoc/files/lib/web/template_rb.html +73 -0
- data/doc/rdoc/files/lib/web/testing_rb.html +67 -0
- data/doc/rdoc/files/lib/web/upload_rb.html +73 -0
- data/doc/rdoc/files/lib/web/wiki_rb.html +79 -0
- data/doc/rdoc/files/lib/web_rb.html +116 -0
- data/doc/rdoc/files/lib/web_rb.src/M000001.html +15 -0
- data/doc/rdoc/fr_class_index.html +47 -0
- data/doc/rdoc/fr_file_index.html +52 -0
- data/doc/rdoc/fr_method_index.html +158 -0
- data/doc/rdoc/index.html +22 -0
- data/doc/rdoc/rdoc-style.css +99 -0
- data/doc/webrick.txt +23 -0
- data/examples/admin.rb +8 -0
- data/examples/admin.rb~ +5 -0
- data/examples/cookbook.rdoc +247 -0
- data/examples/cookbook.rdoc~ +238 -0
- data/examples/examples.rdoc +19 -0
- data/examples/examples.rdoc~ +17 -0
- data/examples/hello.world.rb +5 -0
- data/examples/hello.world.rb~ +3 -0
- data/examples/session.rb +34 -0
- data/examples/session.rb~ +31 -0
- data/examples/test/test.hello.world.rb +9 -0
- data/examples/test/test.hello.world.rb~ +9 -0
- data/examples/test/test.session.rb +37 -0
- data/examples/test/test.session.rb~ +37 -0
- data/examples/webunit/COPYING +340 -0
- data/examples/webunit/Makefile +14 -0
- data/examples/webunit/TIPS-ja.html +126 -0
- data/examples/webunit/TIPS-ja.rd +154 -0
- data/examples/webunit/TODO-ja.html +35 -0
- data/examples/webunit/TODO-ja.rd +28 -0
- data/examples/webunit/changes.rd +185 -0
- data/examples/webunit/conv/digit-0.cgi +40 -0
- data/examples/webunit/conv/digit-0.rb +21 -0
- data/examples/webunit/conv/digit-1.cgi +44 -0
- data/examples/webunit/conv/digit-1.rb +17 -0
- data/examples/webunit/conv/digit.cgi +59 -0
- data/examples/webunit/conv/digit.rb +23 -0
- data/examples/webunit/conv/test_digit-0.rb +16 -0
- data/examples/webunit/conv/test_digit-1.rb +19 -0
- data/examples/webunit/conv/test_digit.rb +26 -0
- data/examples/webunit/conv/test_digit_view-0.rb +76 -0
- data/examples/webunit/conv/test_digit_view-1.rb +102 -0
- data/examples/webunit/conv/test_digit_view.rb +134 -0
- data/examples/webunit/example.rd +37 -0
- data/examples/webunit/index-en.html +263 -0
- data/examples/webunit/index-en.rd +60 -0
- data/examples/webunit/index-ja.html +263 -0
- data/examples/webunit/index-ja.rd +60 -0
- data/examples/wiki.rb +7 -0
- data/examples/wiki.rb~ +5 -0
- data/install.rb +1022 -0
- data/lib/web.rb +290 -0
- data/lib/web.rb~ +290 -0
- data/lib/web/#assertinclude.rb# +110 -0
- data/lib/web/action.rb +82 -0
- data/lib/web/assertinclude.rb +110 -0
- data/lib/web/assertinclude.rb~ +110 -0
- data/lib/web/buffer.rb +20 -0
- data/lib/web/cgi.rb +641 -0
- data/lib/web/cgi.rb~ +640 -0
- data/lib/web/formreader.rb +317 -0
- data/lib/web/forms.rb +104 -0
- data/lib/web/htmlparser/html-parser.rb +429 -0
- data/lib/web/htmlparser/html-parser.rb~ +429 -0
- data/lib/web/htmlparser/sgml-parser.rb +332 -0
- data/lib/web/htmlparser/sgml-parser.rb~ +332 -0
- data/lib/web/htmltools/element.rb +296 -0
- data/lib/web/htmltools/element.rb~ +296 -0
- data/lib/web/htmltools/stparser.rb +276 -0
- data/lib/web/htmltools/stparser.rb~ +276 -0
- data/lib/web/htmltools/tags.rb +286 -0
- data/lib/web/htmltools/tags.rb~ +286 -0
- data/lib/web/htmltools/tree.rb +139 -0
- data/lib/web/htmltools/tree.rb~ +139 -0
- data/lib/web/htmltools/xmltree.rb +160 -0
- data/lib/web/htmltools/xmltree.rb~ +160 -0
- data/lib/web/htmltools/xpath.rb +71 -0
- data/lib/web/htmltools/xpath.rb~ +71 -0
- data/lib/web/mime.rb +82 -0
- data/lib/web/parser.rb +266 -0
- data/lib/web/parser.rb~ +266 -0
- data/lib/web/request.rb~ +238 -0
- data/lib/web/resources/mime.types +483 -0
- data/lib/web/runner.rb +26 -0
- data/lib/web/runner.rb~ +26 -0
- data/lib/web/sapi/fastcgi.rb +26 -0
- data/lib/web/sapi/fastcgi.rb~ +25 -0
- data/lib/web/sapi/mod_ruby.rb +46 -0
- data/lib/web/sapi/mod_ruby.rb~ +46 -0
- data/lib/web/sapi/webrick.rb +91 -0
- data/lib/web/sapi/webrick.rb~ +89 -0
- data/lib/web/session.rb +75 -0
- data/lib/web/session.rb~ +75 -0
- data/lib/web/simpledispatcher.rb +155 -0
- data/lib/web/strscanparser.rb +24 -0
- data/lib/web/tagparser.rb +96 -0
- data/lib/web/tagparser.rb~ +96 -0
- data/lib/web/template.rb +613 -0
- data/lib/web/template.rb~ +613 -0
- data/lib/web/testing.rb +546 -0
- data/lib/web/testing.rb~ +546 -0
- data/lib/web/traceoutput.rb +32 -0
- data/lib/web/unit.rb +27 -0
- data/lib/web/unit/assert.rb +154 -0
- data/lib/web/unit/converter.rb +148 -0
- data/lib/web/unit/cookie.rb +120 -0
- data/lib/web/unit/domwalker.rb +187 -0
- data/lib/web/unit/exception.rb +15 -0
- data/lib/web/unit/form.rb +118 -0
- data/lib/web/unit/formatter.rb +314 -0
- data/lib/web/unit/frame.rb +39 -0
- data/lib/web/unit/html-parser.rb +432 -0
- data/lib/web/unit/htmlelem.rb +124 -0
- data/lib/web/unit/htmlrepair.rb +116 -0
- data/lib/web/unit/htmlsplit.rb +840 -0
- data/lib/web/unit/image.rb +27 -0
- data/lib/web/unit/jscript.rb +32 -0
- data/lib/web/unit/link.rb +35 -0
- data/lib/web/unit/params.rb +323 -0
- data/lib/web/unit/parser.rb +226 -0
- data/lib/web/unit/resources/assert.html +101 -0
- data/lib/web/unit/resources/auth/index.html +5 -0
- data/lib/web/unit/resources/badtags.html +7 -0
- data/lib/web/unit/resources/cookie.cgi +33 -0
- data/lib/web/unit/resources/document.xml +13 -0
- data/lib/web/unit/resources/form.html +150 -0
- data/lib/web/unit/resources/frame-0.html +10 -0
- data/lib/web/unit/resources/frame-1.html +10 -0
- data/lib/web/unit/resources/frame.html +10 -0
- data/lib/web/unit/resources/image.html +17 -0
- data/lib/web/unit/resources/images/x.gif +0 -0
- data/lib/web/unit/resources/images/y.gif +0 -0
- data/lib/web/unit/resources/jscript-0.html +10 -0
- data/lib/web/unit/resources/jscript-1.html +10 -0
- data/lib/web/unit/resources/jscript.html +19 -0
- data/lib/web/unit/resources/link.html +19 -0
- data/lib/web/unit/resources/multipart.cgi +28 -0
- data/lib/web/unit/resources/multipart.html +74 -0
- data/lib/web/unit/resources/params.html +65 -0
- data/lib/web/unit/resources/redirect.cgi +13 -0
- data/lib/web/unit/resources/response.html +67 -0
- data/lib/web/unit/resources/simple.cgi +14 -0
- data/lib/web/unit/resources/stock.cgi +35 -0
- data/lib/web/unit/resources/table.html +83 -0
- data/lib/web/unit/response.rb +469 -0
- data/lib/web/unit/response.rb~ +461 -0
- data/lib/web/unit/runtest.rb +44 -0
- data/lib/web/unit/sgml-parser.rb +336 -0
- data/lib/web/unit/table.rb +150 -0
- data/lib/web/unit/testcase.rb +49 -0
- data/lib/web/unit/ui/cui/testrunner.rb +52 -0
- data/lib/web/unit/ui/cui/testrunner.rb~ +50 -0
- data/lib/web/unit/utils.rb +70 -0
- data/lib/web/unit/webunit.rb +28 -0
- data/lib/web/upload.rb +55 -0
- data/lib/web/upload.rb~ +262 -0
- data/lib/web/wiki.rb +506 -0
- data/lib/web/wiki.rb~ +506 -0
- data/lib/web/wiki/linker.rb +72 -0
- data/lib/web/wiki/linker.rb~ +72 -0
- data/lib/web/wiki/mime.rb~ +68 -0
- data/lib/web/wiki/page.rb +192 -0
- data/lib/web/wiki/page.rb~ +192 -0
- data/lib/web/wiki/resources/#edit.html# +65 -0
- data/lib/web/wiki/resources/admin.html +13 -0
- data/lib/web/wiki/resources/admin.html~ +13 -0
- data/lib/web/wiki/resources/asset_history.html +3 -0
- data/lib/web/wiki/resources/basic.html +1 -0
- data/lib/web/wiki/resources/default-content_editor.html +1 -0
- data/lib/web/wiki/resources/default-content_editor.html~ +1 -0
- data/lib/web/wiki/resources/edit.html +1 -1
- data/lib/web/wiki/resources/edit.html~ +1 -1
- data/lib/web/wiki/resources/ekit-content_editor.html +1 -0
- data/lib/web/wiki/resources/home.html +10 -0
- data/lib/web/wiki/resources/home.html~ +10 -0
- data/lib/web/wiki/resources/htmlarea/ChangeLog +1185 -0
- data/lib/web/wiki/resources/htmlarea/dialog.js +72 -0
- data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +16 -0
- data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +158 -0
- data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +95 -0
- data/lib/web/wiki/resources/htmlarea/examples/core.html +184 -0
- data/lib/web/wiki/resources/htmlarea/examples/css.html +88 -0
- data/lib/web/wiki/resources/htmlarea/examples/custom.css +29 -0
- data/lib/web/wiki/resources/htmlarea/examples/full-page.html +75 -0
- data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +248 -0
- data/lib/web/wiki/resources/htmlarea/examples/index.html +40 -0
- data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +132 -0
- data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +116 -0
- data/lib/web/wiki/resources/htmlarea/examples/test.cgi +21 -0
- data/lib/web/wiki/resources/htmlarea/htmlarea.css +180 -0
- data/lib/web/wiki/resources/htmlarea/htmlarea.js +2175 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/index.html +199 -0
- data/lib/web/wiki/resources/htmlarea/lang/b5.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/cz.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/da.js +38 -0
- data/lib/web/wiki/resources/htmlarea/lang/de.js +54 -0
- data/lib/web/wiki/resources/htmlarea/lang/ee.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/el.js +75 -0
- data/lib/web/wiki/resources/htmlarea/lang/en.js +88 -0
- data/lib/web/wiki/resources/htmlarea/lang/es.js +51 -0
- data/lib/web/wiki/resources/htmlarea/lang/fi.js +46 -0
- data/lib/web/wiki/resources/htmlarea/lang/fr.js +61 -0
- data/lib/web/wiki/resources/htmlarea/lang/gb.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/he.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/hu.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/it.js +54 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/lt.js +55 -0
- data/lib/web/wiki/resources/htmlarea/lang/lv.js +55 -0
- data/lib/web/wiki/resources/htmlarea/lang/nb.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/nl.js +90 -0
- data/lib/web/wiki/resources/htmlarea/lang/no.js +79 -0
- data/lib/web/wiki/resources/htmlarea/lang/pl.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ro.js +80 -0
- data/lib/web/wiki/resources/htmlarea/lang/ru.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/se.js +38 -0
- data/lib/web/wiki/resources/htmlarea/lang/si.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/vn.js +51 -0
- data/lib/web/wiki/resources/htmlarea/license.txt +30 -0
- data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +116 -0
- data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +2 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +416 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +59 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +57 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +66 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +66 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +64 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +143 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +25 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +25 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +131 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +89 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +28 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +38 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +28 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +114 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +210 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +10 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +122 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +397 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +79 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +81 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +81 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +66 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +63 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +81 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +91 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +1160 -0
- data/lib/web/wiki/resources/htmlarea/popupdiv.js +369 -0
- data/lib/web/wiki/resources/htmlarea/popups/about.html +378 -0
- data/lib/web/wiki/resources/htmlarea/popups/blank.html +2 -0
- data/lib/web/wiki/resources/htmlarea/popups/custom2.html +35 -0
- data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +16 -0
- data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +133 -0
- data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +191 -0
- data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +174 -0
- data/lib/web/wiki/resources/htmlarea/popups/link.html +142 -0
- data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +131 -0
- data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +206 -0
- data/lib/web/wiki/resources/htmlarea/popups/popup.js +109 -0
- data/lib/web/wiki/resources/htmlarea/popups/select_color.html +347 -0
- data/lib/web/wiki/resources/htmlarea/popupwin.js +139 -0
- data/lib/web/wiki/resources/htmlarea/reference.html +523 -0
- data/lib/web/wiki/resources/htmlarea/release-notes.html +165 -0
- data/lib/web/wiki/resources/ie-content_editor.html +1 -0
- data/lib/web/wiki/resources/ie-content_editor.js +196 -0
- data/lib/web/wiki/resources/illustration.html +1 -0
- data/lib/web/wiki/resources/illustration.html~ +1 -0
- data/lib/web/wiki/resources/images.html +1 -0
- data/lib/web/wiki/resources/index.html +4 -0
- data/lib/web/wiki/resources/index.html~ +4 -0
- data/lib/web/wiki/resources/more_news.html +5 -0
- data/lib/web/wiki/resources/more_news.html~ +5 -0
- data/lib/web/wiki/resources/more_news_rss_0.91.html +23 -0
- data/lib/web/wiki/resources/narf-logo.gif +0 -0
- data/lib/web/wiki/resources/page_history.html +19 -0
- data/lib/web/wiki/resources/page_history.html~ +19 -0
- data/lib/web/wiki/resources/template.html +13 -0
- data/lib/web/wiki/resources/template.html~ +13 -0
- data/lib/web/wiki/resources/test_upload.gif +0 -0
- data/lib/web/wiki/resources/text-styles.css +1 -0
- data/lib/web/writableio.rb +33 -0
- data/narf-0.5.1.gem +0 -0
- data/narf.gemspec +40 -0
- data/narf.gemspec~ +52 -0
- data/pre-setup.rb +5 -0
- data/sapi/apache_cgi/INSTALL.txt~ +9 -0
- data/sapi/apache_cgi/README~ +0 -0
- data/sapi/apache_cgi/src/narf.c +13 -0
- data/sapi/fastcgi/INSTALL.txt~ +17 -0
- data/sapi/mod_ruby/INSTALL.txt~ +5 -0
- data/sapi/webrick/INSTALL.txt~ +21 -0
- data/sapi/webrick/run_webrick.rb~ +16 -0
- data/scripts/dump.rb +14 -0
- data/scripts/makedist.rb +49 -0
- data/scripts/upload.html +5 -0
- data/scripts/uri.rb +41 -0
- data/scripts/uri/common.rb +432 -0
- data/scripts/uri/ftp.rb +149 -0
- data/scripts/uri/generic.rb +1106 -0
- data/scripts/uri/http.rb +76 -0
- data/scripts/uri/https.rb +26 -0
- data/scripts/uri/ldap.rb +238 -0
- data/scripts/uri/mailto.rb +260 -0
- data/scripts/urireg.rb +174 -0
- data/test/bufferedtestrunner.rb +112 -0
- data/test/mod_ruby_stub.rb +39 -0
- data/test/mod_ruby_stub.rb~ +38 -0
- data/test/stringio.rb +2 -0
- data/test/test.action.rb +142 -0
- data/test/test.action.rb~ +142 -0
- data/test/test.app.rb +0 -0
- data/test/test.assertinclude.rb +109 -0
- data/test/test.assertinclude.rb~ +109 -0
- data/test/test.formreader-2.0.rb +352 -0
- data/test/test.formreader.rb +465 -0
- data/test/test.mime-type.rb +23 -0
- data/test/test.narf.cgi.rb +101 -0
- data/test/test.narf.cgi.rb~ +105 -0
- data/test/test.request.rb +328 -0
- data/test/test.request.rb~ +318 -0
- data/test/test.response.rb +565 -0
- data/test/test.response.rb~ +556 -0
- data/test/test.session.rb +50 -0
- data/test/test.simpledispatcher.rb +188 -0
- data/test/test.tagparser.rb +65 -0
- data/test/test.template.rb +831 -0
- data/test/test.template.rb~ +832 -0
- data/test/test.testing2.rb +341 -0
- data/test/test.web.test.rb +463 -0
- data/test/test.web.test.rb~ +461 -0
- data/test/testfiles/basictemplate.tpl +1 -0
- data/test/testfiles/explorer5.multipart.data +9 -0
- data/test/testfiles/form.html +7 -0
- data/test/testfiles/mozilla.multipart.data +9 -0
- data/test/testfiles/netscape4.multipart.data +9 -0
- data/test/testfiles/pic hydra.png +1 -0
- data/test/testfiles/post.data +1 -0
- data/test/testfiles/print.text +1 -0
- data/test/testfiles/text +1 -0
- data/test/webunit/dont_get_it.test_webunit.rb +27 -0
- data/test/webunit/ref +38 -0
- data/test/webunit/resources/uploadfile1.txt +1 -0
- data/test/webunit/resources/uploadfile2.txt +1 -0
- data/test/webunit/test_assert.rb +169 -0
- data/test/webunit/test_cookie.rb +128 -0
- data/test/webunit/test_cookie.rb~ +128 -0
- data/test/webunit/test_domwalker.rb +83 -0
- data/test/webunit/test_form.rb +43 -0
- data/test/webunit/test_form.rb~ +43 -0
- data/test/webunit/test_frame.rb +43 -0
- data/test/webunit/test_htmlelem.rb +75 -0
- data/test/webunit/test_image.rb +46 -0
- data/test/webunit/test_jscript.rb +58 -0
- data/test/webunit/test_link.rb +87 -0
- data/test/webunit/test_multipart.rb +53 -0
- data/test/webunit/test_multipart.rb~ +53 -0
- data/test/webunit/test_params.rb +212 -0
- data/test/webunit/test_params.rb~ +211 -0
- data/test/webunit/test_parser.rb +31 -0
- data/test/webunit/test_response.rb +145 -0
- data/test/webunit/test_response.rb~ +145 -0
- data/test/webunit/test_site/assert.html +101 -0
- data/test/webunit/test_site/assert.html~ +1 -0
- data/test/webunit/test_site/auth/index.html +5 -0
- data/test/webunit/test_site/auth/index.html~ +1 -0
- data/test/webunit/test_site/badtags.html +7 -0
- data/test/webunit/test_site/badtags.html~ +1 -0
- data/test/webunit/test_site/cookie.cgi +37 -0
- data/test/webunit/test_site/cookie.cgi~ +35 -0
- data/test/webunit/test_site/document.xml +13 -0
- data/test/webunit/test_site/document.xml~ +1 -0
- data/test/webunit/test_site/form.html +150 -0
- data/test/webunit/test_site/form.html~ +1 -0
- data/test/webunit/test_site/frame-0.html +10 -0
- data/test/webunit/test_site/frame-0.html~ +1 -0
- data/test/webunit/test_site/frame-1.html +10 -0
- data/test/webunit/test_site/frame-1.html~ +1 -0
- data/test/webunit/test_site/frame.html +10 -0
- data/test/webunit/test_site/frame.html~ +1 -0
- data/test/webunit/test_site/image.html +17 -0
- data/test/webunit/test_site/image.html~ +1 -0
- data/test/webunit/test_site/images/x.gif +0 -0
- data/test/webunit/test_site/images/y.gif +0 -0
- data/test/webunit/test_site/include.cgi~ +10 -0
- data/test/webunit/test_site/jscript-0.html +10 -0
- data/test/webunit/test_site/jscript-0.html~ +1 -0
- data/test/webunit/test_site/jscript-1.html +10 -0
- data/test/webunit/test_site/jscript-1.html~ +1 -0
- data/test/webunit/test_site/jscript.html +19 -0
- data/test/webunit/test_site/jscript.html~ +1 -0
- data/test/webunit/test_site/link.html +19 -0
- data/test/webunit/test_site/link.html~ +1 -0
- data/test/webunit/test_site/multipart.cgi +27 -0
- data/test/webunit/test_site/multipart.cgi~ +25 -0
- data/test/webunit/test_site/multipart.html +74 -0
- data/test/webunit/test_site/multipart.html~ +1 -0
- data/test/webunit/test_site/params.html +65 -0
- data/test/webunit/test_site/params.html~ +1 -0
- data/test/webunit/test_site/redirect.cgi +14 -0
- data/test/webunit/test_site/redirect.cgi~ +14 -0
- data/test/webunit/test_site/response.html +67 -0
- data/test/webunit/test_site/response.html~ +1 -0
- data/test/webunit/test_site/simple.cgi +17 -0
- data/test/webunit/test_site/simple.cgi~ +17 -0
- data/test/webunit/test_site/stock.cgi +36 -0
- data/test/webunit/test_site/stock.cgi~ +34 -0
- data/test/webunit/test_site/table.html +83 -0
- data/test/webunit/test_site/table.html~ +1 -0
- data/test/webunit/test_site/test.cgi~ +25 -0
- data/test/webunit/test_table.rb +70 -0
- data/test/webunit/test_utils.rb +107 -0
- data/test/wiki/test.history.rb +277 -0
- data/test/wiki/test.history.rb~ +254 -0
- data/test/wiki/test.illustration_page.rb +287 -0
- data/test/wiki/test.illustration_page.rb~ +287 -0
- data/test/wiki/test.linker.rb +197 -0
- data/test/wiki/test.tarpit.rb +40 -0
- data/test/wiki/test.wiki.rb +295 -0
- data/test/wiki/test.wiki.rb~ +295 -0
- data/test/wikitestroot/big_image.jpg +0 -0
- data/test/wikitestroot/mime.types +483 -0
- data/test/wikitestroot/test_upload.gif +0 -0
- data/vandals.test.txt +3 -0
- metadata +768 -0
data/lib/web.rb
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
require 'test/unit/assertions'
|
|
2
|
+
|
|
3
|
+
require 'web/strscanparser'
|
|
4
|
+
require 'web/action'
|
|
5
|
+
require 'web/buffer'
|
|
6
|
+
require 'web/upload'
|
|
7
|
+
require 'web/parser'
|
|
8
|
+
require 'web/session'
|
|
9
|
+
require 'web/writableio'
|
|
10
|
+
require 'web/template'
|
|
11
|
+
require 'web/assertinclude'
|
|
12
|
+
require 'web/forms'
|
|
13
|
+
require 'web/tagparser'
|
|
14
|
+
require 'web/testing'
|
|
15
|
+
require 'web/formreader.rb'
|
|
16
|
+
require 'web/simpledispatcher'
|
|
17
|
+
require 'web/traceoutput'
|
|
18
|
+
require 'web/mime'
|
|
19
|
+
require 'web/cgi'
|
|
20
|
+
|
|
21
|
+
require 'web/htmltools/tree'
|
|
22
|
+
|
|
23
|
+
# Write output to client. Replaces Kernel.puts;
|
|
24
|
+
# use that or $stderr.puts if you want the standard puts.
|
|
25
|
+
def puts( *args )
|
|
26
|
+
Web.puts args
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
begin
|
|
30
|
+
require('stringio')
|
|
31
|
+
rescue LoadError
|
|
32
|
+
module Web
|
|
33
|
+
class StringIO # :nodoc:
|
|
34
|
+
def initialize
|
|
35
|
+
@___content___ = ""
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def read
|
|
39
|
+
@___content___
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def clear
|
|
43
|
+
@___content___ = ""
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def string
|
|
47
|
+
@___content___
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def puts(*args)
|
|
51
|
+
@___content___ << args.join("\n") << "\n"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def << var
|
|
55
|
+
@___content___ << var.to_s
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def write var
|
|
59
|
+
@___content___ << var.to_s
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def print var
|
|
63
|
+
@___content___ << var.to_s
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
unless Kernel.const_defined? "StringIO"
|
|
69
|
+
StringIO = Web::StringIO.clone
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# == Purpose
|
|
74
|
+
# Web provides an infrastructure for building and testing
|
|
75
|
+
# web applications.
|
|
76
|
+
#
|
|
77
|
+
# == Usage
|
|
78
|
+
# Use the Web module to interact with the client. The module
|
|
79
|
+
# delegates to a Web::CGI object, which does the actual work.
|
|
80
|
+
#
|
|
81
|
+
# #!/usr/bin/narf
|
|
82
|
+
# Web["field"] # access parameters
|
|
83
|
+
# Web.cookies["muppet"] # access cookies
|
|
84
|
+
# Web.session["key"] ||= "value" # get and set session values
|
|
85
|
+
# Web.set_cookie( "muppet", "cookie monster" ) # set cookies
|
|
86
|
+
# Web.puts "something" # print 'something' out
|
|
87
|
+
#
|
|
88
|
+
# If the request contained multipart/form-data, uploaded files are returned as
|
|
89
|
+
# Web::Upload objects. Other parameters are treated as strings.
|
|
90
|
+
#
|
|
91
|
+
# == Output
|
|
92
|
+
#
|
|
93
|
+
# You write output as if it were an IO:
|
|
94
|
+
# Web << "<h1>Hello World!</h1>"
|
|
95
|
+
# Web.print "<p>We have lots of tricks for you.<br>"
|
|
96
|
+
# Web.write "From kungfu to jiujitsu<br>"
|
|
97
|
+
# Web.puts "anything and everything works</p>."
|
|
98
|
+
# or even:
|
|
99
|
+
# puts "hello world"
|
|
100
|
+
#
|
|
101
|
+
# Narf buffers output by default. Buffered output allows you to set headers
|
|
102
|
+
# (cookies, redirects, status, etc.) at any point before the cgi is flushed.
|
|
103
|
+
# You can force this by calling:
|
|
104
|
+
# Web.flush
|
|
105
|
+
#
|
|
106
|
+
# Once the headers are sent to the client, you cannot set any more headers.
|
|
107
|
+
#
|
|
108
|
+
# == Error Handling
|
|
109
|
+
#
|
|
110
|
+
# For cgi-scripts under Apache, one can use the 'bin/narf'
|
|
111
|
+
# script instead of using the ruby executable. This little c program
|
|
112
|
+
# doesn't do much fancy, but it can trap syntax errors and send them
|
|
113
|
+
# back to the browser. <i>I would especially appreciate security-related
|
|
114
|
+
# feedback; narf.c is contributed and I am not a c programmer.</i>
|
|
115
|
+
#
|
|
116
|
+
# == Sessions:
|
|
117
|
+
#
|
|
118
|
+
# Sessions provide a way of storing data between Web
|
|
119
|
+
# requests. Anything that can be marshalled can be stored in the
|
|
120
|
+
# session.
|
|
121
|
+
#
|
|
122
|
+
# === Getting and Setting values in a session
|
|
123
|
+
#
|
|
124
|
+
# Web.session["key"] = "value"
|
|
125
|
+
# Web.session["key"] # => "value"
|
|
126
|
+
#
|
|
127
|
+
# === Deleting session values
|
|
128
|
+
#
|
|
129
|
+
# Web.session["key"] = "value"
|
|
130
|
+
# Web.session["key"].delete # => "value"
|
|
131
|
+
# Web.session["key"] # => "nil"
|
|
132
|
+
#
|
|
133
|
+
# === Iterating through session keys
|
|
134
|
+
#
|
|
135
|
+
# Web.session.each do |key, val|
|
|
136
|
+
# Web.puts "#{key} => #{val}<br>"
|
|
137
|
+
# end
|
|
138
|
+
#
|
|
139
|
+
# === Resetting the Session
|
|
140
|
+
#
|
|
141
|
+
# Reseting the session to an empty hash is simple:
|
|
142
|
+
# Web.session.reset
|
|
143
|
+
#
|
|
144
|
+
# === Testing
|
|
145
|
+
#
|
|
146
|
+
# Narf takes testing very seriously. I consider supporting
|
|
147
|
+
# testing to be part of the contract when writing a IO library.
|
|
148
|
+
# See Web::Testing for more details.
|
|
149
|
+
#
|
|
150
|
+
module Web
|
|
151
|
+
class << self
|
|
152
|
+
# Web delegates to the current
|
|
153
|
+
# cgi object. This is the recommended
|
|
154
|
+
# way to use narf:
|
|
155
|
+
#
|
|
156
|
+
# Web["param"]
|
|
157
|
+
# Web << "hello world"
|
|
158
|
+
# Web.set_redirect( "http://www.narf-lib.org" )
|
|
159
|
+
# ...
|
|
160
|
+
#
|
|
161
|
+
# The documentation for these methods is on the Web::CGI object.
|
|
162
|
+
def method_missing(method, *args, &block)
|
|
163
|
+
CGI.get_cgi.send(method,*args, &block)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def set_cgi( cgi )
|
|
167
|
+
CGI.set_cgi( cgi )
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def get_cgi
|
|
171
|
+
CGI.get_cgi
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def process(options={}, &block)
|
|
175
|
+
CGI.process(options, &block)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# this is a bit incomplete -- only encodes ampersands
|
|
180
|
+
def Web::html_encode(string)
|
|
181
|
+
return nil unless string
|
|
182
|
+
newstring = string.dup
|
|
183
|
+
{ /&/ => '&' }.each{ |char, entity|
|
|
184
|
+
newstring.gsub!( char, entity )
|
|
185
|
+
}
|
|
186
|
+
newstring
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Escape URL encode
|
|
190
|
+
# url_encoded_string = Web::escape("string")
|
|
191
|
+
def Web::escape(string)
|
|
192
|
+
return nil unless string
|
|
193
|
+
string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
|
|
194
|
+
'%' + $1.unpack('H2' * $1.size).join('%').upcase
|
|
195
|
+
end.tr(' ', '+')
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Unescape URL encoded
|
|
199
|
+
# string = Web::unescape("url encoded string")
|
|
200
|
+
def Web::unescape(string)
|
|
201
|
+
return nil unless string
|
|
202
|
+
string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
|
|
203
|
+
[$1.delete('%')].pack('H*')
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]
|
|
208
|
+
RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
|
|
209
|
+
# Make RFC1123 date string
|
|
210
|
+
# Web::rfc1123_date(Time.now) # => Sat, 01 Jan 2000 00:00:00 GMT
|
|
211
|
+
def Web::rfc1123_date(time)
|
|
212
|
+
t = time.clone.gmtime
|
|
213
|
+
return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",
|
|
214
|
+
RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
|
|
215
|
+
t.hour, t.min, t.sec)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
HTTP_STATUS = {"200" => "OK",
|
|
219
|
+
"206" => "Partial Content",
|
|
220
|
+
"300" => "Multiple Choices",
|
|
221
|
+
"301" => "Moved Permanently",
|
|
222
|
+
"302" => "Found",
|
|
223
|
+
"304" => "Not Modified",
|
|
224
|
+
"400" => "Bad Request",
|
|
225
|
+
"401" => "Authorization Required",
|
|
226
|
+
"403" => "Forbidden",
|
|
227
|
+
"404" => "Not Found",
|
|
228
|
+
"405" => "Method Not Allowed",
|
|
229
|
+
"406" => "Not Acceptable",
|
|
230
|
+
"411" => "Length Required",
|
|
231
|
+
"412" => "Precondition Failed",
|
|
232
|
+
"500" => "Internal Server Error",
|
|
233
|
+
"501" => "Method Not Implemented",
|
|
234
|
+
"502" => "Bad Gateway",
|
|
235
|
+
"506" => "Variant Also Negotiates"
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
TRACE_STYLESHEET=<<-EOF
|
|
240
|
+
<style type="text/css">
|
|
241
|
+
span.tracecontent { background-color:white; color:black;font: 10pt verdana, arial; }
|
|
242
|
+
span.tracecontent table { font: 10pt verdana, arial; cellspacing:0; cellpadding:0; margin-bottom:25}
|
|
243
|
+
span.tracecontent tr.subhead { background-color:cccccc;}
|
|
244
|
+
span.tracecontent th { padding:0,3,0,3 }
|
|
245
|
+
span.tracecontent th.alt { background-color:black; color:white; padding:3,3,2,3; }
|
|
246
|
+
span.tracecontent td { padding:0,3,0,3 }
|
|
247
|
+
span.tracecontent tr.alt { background-color:eeeeee }
|
|
248
|
+
span.tracecontent h1 { font: 24pt verdana, arial; margin:0,0,0,0}
|
|
249
|
+
span.tracecontent h2 { font: 18pt verdana, arial; margin:0,0,0,0}
|
|
250
|
+
span.tracecontent h3 { font: 12pt verdana, arial; margin:0,0,0,0}
|
|
251
|
+
span.tracecontent th a { color:darkblue; font: 8pt verdana, arial; }
|
|
252
|
+
span.tracecontent a { color:darkblue;text-decoration:none }
|
|
253
|
+
span.tracecontent a:hover { color:darkblue;text-decoration:underline; }
|
|
254
|
+
span.tracecontent div.outer { width:90%; margin:15,15,15,15}
|
|
255
|
+
span.tracecontent table.viewmenu td { background-color:006699; color:white; padding:0,5,0,5; }
|
|
256
|
+
span.tracecontent table.viewmenu td.end { padding:0,0,0,0; }
|
|
257
|
+
span.tracecontent table.viewmenu a {color:white; font: 8pt verdana, arial; }
|
|
258
|
+
span.tracecontent table.viewmenu a:hover {color:white; font: 8pt verdana, arial; }
|
|
259
|
+
span.tracecontent a.tinylink {color:darkblue; font: 8pt verdana, arial;text-decoration:underline;}
|
|
260
|
+
span.tracecontent a.link {color:darkblue; text-decoration:underline;}
|
|
261
|
+
span.tracecontent div.buffer {padding-top:7; padding-bottom:17;}
|
|
262
|
+
span.tracecontent .small { font: 8pt verdana, arial }
|
|
263
|
+
span.tracecontent table td { padding-right:20 }
|
|
264
|
+
span.tracecontent table td.nopad { padding-right:5 }
|
|
265
|
+
</style>
|
|
266
|
+
EOF
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
# wrapper for web errors
|
|
270
|
+
class Error < Exception # :nodoc:
|
|
271
|
+
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
module HTMLTree # :nodoc: all
|
|
277
|
+
module TreeElement
|
|
278
|
+
def get_elements aname, elements=[]
|
|
279
|
+
children.each { |element|
|
|
280
|
+
if element.tag == aname
|
|
281
|
+
elements.push element
|
|
282
|
+
else
|
|
283
|
+
element.get_elements aname, elements
|
|
284
|
+
end
|
|
285
|
+
}
|
|
286
|
+
elements
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
data/lib/web.rb~
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
require 'test/unit/assertions'
|
|
2
|
+
|
|
3
|
+
require 'web/strscanparser'
|
|
4
|
+
require 'web/action'
|
|
5
|
+
require 'web/buffer'
|
|
6
|
+
require 'web/upload'
|
|
7
|
+
require 'web/parser'
|
|
8
|
+
require 'web/session'
|
|
9
|
+
require 'web/writableio'
|
|
10
|
+
require 'web/template'
|
|
11
|
+
require 'web/assertinclude'
|
|
12
|
+
require 'web/forms'
|
|
13
|
+
require 'web/tagparser'
|
|
14
|
+
require 'web/testing'
|
|
15
|
+
require 'web/formreader.rb'
|
|
16
|
+
require 'web/simpledispatcher'
|
|
17
|
+
require 'web/traceoutput'
|
|
18
|
+
require 'web/mime'
|
|
19
|
+
require 'web/cgi'
|
|
20
|
+
|
|
21
|
+
require 'web/htmltools/tree'
|
|
22
|
+
|
|
23
|
+
# Write output to client. Replaces Kernel.puts;
|
|
24
|
+
# use that or $stderr.puts if you want the standard puts.
|
|
25
|
+
def puts( *args )
|
|
26
|
+
Web.puts args
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
begin
|
|
30
|
+
require('stringio')
|
|
31
|
+
rescue LoadError
|
|
32
|
+
module Web
|
|
33
|
+
class StringIO # :nodoc:
|
|
34
|
+
def initialize
|
|
35
|
+
@___content___ = ""
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def read
|
|
39
|
+
@___content___
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def clear
|
|
43
|
+
@___content___ = ""
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def string
|
|
47
|
+
@___content___
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def puts(*args)
|
|
51
|
+
@___content___ << args.join("\n") << "\n"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def << var
|
|
55
|
+
@___content___ << var.to_s
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def write var
|
|
59
|
+
@___content___ << var.to_s
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def print var
|
|
63
|
+
@___content___ << var.to_s
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
unless Kernel.const_defined? "StringIO"
|
|
69
|
+
StringIO = Web::StringIO.clone
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# == Purpose
|
|
74
|
+
# Web provides an infrastructure for building and testing
|
|
75
|
+
# web applications.
|
|
76
|
+
#
|
|
77
|
+
# == Usage
|
|
78
|
+
# Use the Web module to interact with the client. The module
|
|
79
|
+
# delegates to a Web::CGI object, which does the actual work.
|
|
80
|
+
#
|
|
81
|
+
# #!/usr/bin/narf
|
|
82
|
+
# Web["field"] # access parameters
|
|
83
|
+
# Web.cookies["muppet"] # access cookies
|
|
84
|
+
# Web.session["key"] ||= "value" # get and set session values
|
|
85
|
+
# Web.set_cookie( "muppet", "cookie monster" ) # set cookies
|
|
86
|
+
# Web.puts "something" # print 'something' out
|
|
87
|
+
#
|
|
88
|
+
# If the request contained multipart/form-data, uploaded files are returned as
|
|
89
|
+
# Web::Upload objects. Other parameters are treated as strings.
|
|
90
|
+
#
|
|
91
|
+
# == Output
|
|
92
|
+
#
|
|
93
|
+
# You write output as if it were an IO:
|
|
94
|
+
# Web << "<h1>Hello World!</h1>"
|
|
95
|
+
# Web.print "<p>We have lots of tricks for you.<br>"
|
|
96
|
+
# Web.write "From kungfu to jiujitsu<br>"
|
|
97
|
+
# Web.puts "anything and everything works</p>."
|
|
98
|
+
# or even:
|
|
99
|
+
# puts "hello world"
|
|
100
|
+
#
|
|
101
|
+
# Narf buffers output by default. Buffered output allows you to set headers
|
|
102
|
+
# (cookies, redirects, status, etc.) at any point before the cgi is flushed.
|
|
103
|
+
# You can force this by calling:
|
|
104
|
+
# Web.flush
|
|
105
|
+
#
|
|
106
|
+
# Once the headers are sent to the client, you cannot set any more headers.
|
|
107
|
+
#
|
|
108
|
+
# == Error Handling
|
|
109
|
+
#
|
|
110
|
+
# For cgi-scripts under Apache, one can use the 'bin/narf'
|
|
111
|
+
# script instead of using the ruby executable. This little c program
|
|
112
|
+
# doesn't do much fancy, but it can trap syntax errors and send them
|
|
113
|
+
# back to the browser. <i>I would especially appreciate security-related
|
|
114
|
+
# feedback; narf.c is contributed and I am not a c programmer.</i>
|
|
115
|
+
#
|
|
116
|
+
# == Sessions:
|
|
117
|
+
#
|
|
118
|
+
# Sessions provide a way of storing data between Web
|
|
119
|
+
# requests. Anything that can be marshalled can be stored in the
|
|
120
|
+
# session.
|
|
121
|
+
#
|
|
122
|
+
# === Getting and Setting values in a session
|
|
123
|
+
#
|
|
124
|
+
# Web.session["key"] = "value"
|
|
125
|
+
# Web.session["key"] # => "value"
|
|
126
|
+
#
|
|
127
|
+
# === Deleting session values
|
|
128
|
+
#
|
|
129
|
+
# Web.session["key"] = "value"
|
|
130
|
+
# Web.session["key"].delete # => "value"
|
|
131
|
+
# Web.session["key"] # => "nil"
|
|
132
|
+
#
|
|
133
|
+
# === Iterating through session keys
|
|
134
|
+
#
|
|
135
|
+
# Web.session.each do |key, val|
|
|
136
|
+
# Web.puts "#{key} => #{val}<br>"
|
|
137
|
+
# end
|
|
138
|
+
#
|
|
139
|
+
# === Resetting the Session
|
|
140
|
+
#
|
|
141
|
+
# Reseting the session to an empty hash is simple:
|
|
142
|
+
# Web.session.reset
|
|
143
|
+
#
|
|
144
|
+
# === Testing
|
|
145
|
+
#
|
|
146
|
+
# Narf takes testing very seriously. I consider supporting
|
|
147
|
+
# testing to be part of the contract when writing a IO library.
|
|
148
|
+
# See Web::Testing for more details.
|
|
149
|
+
#
|
|
150
|
+
module Web
|
|
151
|
+
class << self
|
|
152
|
+
# Web delegates to the current
|
|
153
|
+
# cgi object. This is the recommended
|
|
154
|
+
# way to use narf:
|
|
155
|
+
#
|
|
156
|
+
# Web["param"]
|
|
157
|
+
# Web << "hello world"
|
|
158
|
+
# Web.set_redirect( "http://www.narf-lib.org" )
|
|
159
|
+
# ...
|
|
160
|
+
#
|
|
161
|
+
# The documentation for these methods is on the Web::CGI object.
|
|
162
|
+
def method_missing(method, *args, &block)
|
|
163
|
+
CGI.get_cgi.send(method,*args, &block)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def set_cgi( cgi )
|
|
167
|
+
CGI.set_cgi( cgi )
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def get_cgi
|
|
171
|
+
CGI.get_cgi
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def process(options={}, &block)
|
|
175
|
+
CGI.process(options, &block)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# this is a bit incomplete -- only encodes ampersands
|
|
180
|
+
def Web::html_encode(string)
|
|
181
|
+
return nil unless string
|
|
182
|
+
newstring = string.dup
|
|
183
|
+
{ /&/ => '&' }.each{ |char, entity|
|
|
184
|
+
newstring.gsub!( char, entity )
|
|
185
|
+
}
|
|
186
|
+
newstring
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Escape URL encode
|
|
190
|
+
# url_encoded_string = Web::escape("string")
|
|
191
|
+
def Web::escape(string)
|
|
192
|
+
return nil unless string
|
|
193
|
+
string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
|
|
194
|
+
'%' + $1.unpack('H2' * $1.size).join('%').upcase
|
|
195
|
+
end.tr(' ', '+')
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Unescape URL encoded
|
|
199
|
+
# string = Web::unescape("url encoded string")
|
|
200
|
+
def Web::unescape(string)
|
|
201
|
+
return nil unless string
|
|
202
|
+
string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
|
|
203
|
+
[$1.delete('%')].pack('H*')
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]
|
|
208
|
+
RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
|
|
209
|
+
# Make RFC1123 date string
|
|
210
|
+
# Web::rfc1123_date(Time.now) # => Sat, 01 Jan 2000 00:00:00 GMT
|
|
211
|
+
def Web::rfc1123_date(time)
|
|
212
|
+
t = time.clone.gmtime
|
|
213
|
+
return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",
|
|
214
|
+
RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
|
|
215
|
+
t.hour, t.min, t.sec)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
HTTP_STATUS = {"200" => "OK",
|
|
219
|
+
"206" => "Partial Content",
|
|
220
|
+
"300" => "Multiple Choices",
|
|
221
|
+
"301" => "Moved Permanently",
|
|
222
|
+
"302" => "Found",
|
|
223
|
+
"304" => "Not Modified",
|
|
224
|
+
"400" => "Bad Request",
|
|
225
|
+
"401" => "Authorization Required",
|
|
226
|
+
"403" => "Forbidden",
|
|
227
|
+
"404" => "Not Found",
|
|
228
|
+
"405" => "Method Not Allowed",
|
|
229
|
+
"406" => "Not Acceptable",
|
|
230
|
+
"411" => "Length Required",
|
|
231
|
+
"412" => "Precondition Failed",
|
|
232
|
+
"500" => "Internal Server Error",
|
|
233
|
+
"501" => "Method Not Implemented",
|
|
234
|
+
"502" => "Bad Gateway",
|
|
235
|
+
"506" => "Variant Also Negotiates"
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
TRACE_STYLESHEET=<<-EOF
|
|
240
|
+
<style type="text/css">
|
|
241
|
+
span.tracecontent { background-color:white; color:black;font: 10pt verdana, arial; }
|
|
242
|
+
span.tracecontent table { font: 10pt verdana, arial; cellspacing:0; cellpadding:0; margin-bottom:25}
|
|
243
|
+
span.tracecontent tr.subhead { background-color:cccccc;}
|
|
244
|
+
span.tracecontent th { padding:0,3,0,3 }
|
|
245
|
+
span.tracecontent th.alt { background-color:black; color:white; padding:3,3,2,3; }
|
|
246
|
+
span.tracecontent td { padding:0,3,0,3 }
|
|
247
|
+
span.tracecontent tr.alt { background-color:eeeeee }
|
|
248
|
+
span.tracecontent h1 { font: 24pt verdana, arial; margin:0,0,0,0}
|
|
249
|
+
span.tracecontent h2 { font: 18pt verdana, arial; margin:0,0,0,0}
|
|
250
|
+
span.tracecontent h3 { font: 12pt verdana, arial; margin:0,0,0,0}
|
|
251
|
+
span.tracecontent th a { color:darkblue; font: 8pt verdana, arial; }
|
|
252
|
+
span.tracecontent a { color:darkblue;text-decoration:none }
|
|
253
|
+
span.tracecontent a:hover { color:darkblue;text-decoration:underline; }
|
|
254
|
+
span.tracecontent div.outer { width:90%; margin:15,15,15,15}
|
|
255
|
+
span.tracecontent table.viewmenu td { background-color:006699; color:white; padding:0,5,0,5; }
|
|
256
|
+
span.tracecontent table.viewmenu td.end { padding:0,0,0,0; }
|
|
257
|
+
span.tracecontent table.viewmenu a {color:white; font: 8pt verdana, arial; }
|
|
258
|
+
span.tracecontent table.viewmenu a:hover {color:white; font: 8pt verdana, arial; }
|
|
259
|
+
span.tracecontent a.tinylink {color:darkblue; font: 8pt verdana, arial;text-decoration:underline;}
|
|
260
|
+
span.tracecontent a.link {color:darkblue; text-decoration:underline;}
|
|
261
|
+
span.tracecontent div.buffer {padding-top:7; padding-bottom:17;}
|
|
262
|
+
span.tracecontent .small { font: 8pt verdana, arial }
|
|
263
|
+
span.tracecontent table td { padding-right:20 }
|
|
264
|
+
span.tracecontent table td.nopad { padding-right:5 }
|
|
265
|
+
</style>
|
|
266
|
+
EOF
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
# wrapper for web errors
|
|
270
|
+
class Error < Exception # :nodoc:
|
|
271
|
+
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
module HTMLTree # :nodoc: all
|
|
277
|
+
module TreeElement
|
|
278
|
+
def get_elements aname, elements=[]
|
|
279
|
+
children.each { |element|
|
|
280
|
+
if element.tag == aname
|
|
281
|
+
elements.push element
|
|
282
|
+
else
|
|
283
|
+
element.get_elements aname, elements
|
|
284
|
+
end
|
|
285
|
+
}
|
|
286
|
+
elements
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|