cyberweb 0.4.174

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of cyberweb might be problematic. Click here for more details.

Files changed (573) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3259 -0
  3. data/bin/cyberweb +27 -0
  4. data/cyberweb.gemspec +119 -0
  5. data/doc/AUTHORS.md +12 -0
  6. data/doc/CONVENTIONS.md +7 -0
  7. data/doc/CYBERWEB_TUTORIAL.cgi +43 -0
  8. data/doc/DOCUMENTATION_FOR_CYBERSPRAWL.md +50 -0
  9. data/doc/FUTURE_DESIGN_GOAL_CONSIDERATIONS.md +13 -0
  10. data/doc/JQUERY.md +122 -0
  11. data/doc/MOUSE.md +80 -0
  12. data/doc/README.gen +3231 -0
  13. data/doc/RENDER_WEB_BASE.md +46 -0
  14. data/doc/USAGE.md +246 -0
  15. data/doc/configuration/configuration.md +23 -0
  16. data/doc/deprecations.md +32 -0
  17. data/doc/html_characters.md +15 -0
  18. data/doc/todo/TODO_FOR_THE_CYBERWEB_PROJECT.md +1089 -0
  19. data/examples/README.md +4 -0
  20. data/examples/advanced/delayed_update_of_the_body_via_javascript.cgi +38 -0
  21. data/examples/advanced/hybrid_experiment.cgi +108 -0
  22. data/examples/advanced/larger_image_on_mouse_over_example.cgi +35 -0
  23. data/examples/advanced/no_right_click.cgi +26 -0
  24. data/examples/advanced/objectified_html_tags.cgi +35 -0
  25. data/examples/advanced/simple_calculator.cgi +42 -0
  26. data/examples/advanced/simple_form_example.cgi +38 -0
  27. data/examples/css/blue_border.html +28 -0
  28. data/examples/css/caret_colour_example.html +22 -0
  29. data/examples/css/css_border_spacing_example.html +69 -0
  30. data/examples/css/css_bubbles.html +43 -0
  31. data/examples/css/css_clock.html +344 -0
  32. data/examples/css/css_drag_and_drop.html +89 -0
  33. data/examples/css/css_neon_glow_effects.html +317 -0
  34. data/examples/css/css_text_decoration_example.html +70 -0
  35. data/examples/css/css_tooltip.html +44 -0
  36. data/examples/css/fade_in_and_fade_out_effect.html +66 -0
  37. data/examples/css/font_size_examples.html +40 -0
  38. data/examples/css/letter_spacing_example.cgi +36 -0
  39. data/examples/css/meter_example.html +31 -0
  40. data/examples/css/on_mouse_button_pressed.html +41 -0
  41. data/examples/css/planets.html +187 -0
  42. data/examples/css/scale_example.html +25 -0
  43. data/examples/css/shadow_example_in_CSS.cgi +30 -0
  44. data/examples/css/sticky_div_example.html +56 -0
  45. data/examples/css/stitched_div.html +36 -0
  46. data/examples/csv/README.md +1 -0
  47. data/examples/csv/sample.csv +10 -0
  48. data/examples/example1.rb +7 -0
  49. data/examples/flip_card_example/flip_card_example.html +72 -0
  50. data/examples/frames/frame_left.html +1 -0
  51. data/examples/frames/frame_right.html +1 -0
  52. data/examples/html/README.md +1 -0
  53. data/examples/html/abbr_example.html +25 -0
  54. data/examples/html/base64_image_example.html +26 -0
  55. data/examples/html/colour_wheel.html +1389 -0
  56. data/examples/html/column_width_example.html +34 -0
  57. data/examples/html/custom_cursor.html +103 -0
  58. data/examples/html/draggable_paragraph.html +12 -0
  59. data/examples/html/fieldset_example.html +25 -0
  60. data/examples/html/frames_example.html +7 -0
  61. data/examples/html/glyph_example.html +43 -0
  62. data/examples/html/hbox_and_vbox_example.html +65 -0
  63. data/examples/html/href_examples.html +27 -0
  64. data/examples/html/input_autofocus_example.html +16 -0
  65. data/examples/html/larger_image_on_mouse_over_example.html +30 -0
  66. data/examples/html/ordered_and_unordered_bulletsin.html +33 -0
  67. data/examples/html/play_video_example.html +13 -0
  68. data/examples/html/readonly_textarea_example.html +23 -0
  69. data/examples/html/remote_image_example.html +10 -0
  70. data/examples/html/simple_unordered_list.html +16 -0
  71. data/examples/html/table_with_header_example.html +27 -0
  72. data/examples/html/two_columns_flex_example.html +39 -0
  73. data/examples/javascript/README.md +2 -0
  74. data/examples/javascript/arrays/arrays_example_in_javascript.html +16 -0
  75. data/examples/javascript/delay_example/delay_example.html +46 -0
  76. data/examples/javascript/drag_support/drag_support.html +37 -0
  77. data/examples/javascript/jquery_drag_and_drop/drag_and_drop_image_example.html +33 -0
  78. data/examples/javascript/on_click_event_hello_world/on_click_event_hello_world.html +21 -0
  79. data/examples/javascript/rgb_to_hex/rgb_to_hex.html +15 -0
  80. data/examples/javascript/screen_resolution/screen_resolution.html +20 -0
  81. data/examples/javascript/select_everything/select_everything.html +14 -0
  82. data/examples/javascript/write_into_a_file/write_into_a_file.html +39 -0
  83. data/examples/rack/README.md +4 -0
  84. data/examples/rack/example_with_html_template.rb +123 -0
  85. data/examples/rack/example_with_rack_and_cyberweb_showing_how_to_use_images.rb +56 -0
  86. data/examples/rack/hello_world_example_with_rack.rb +45 -0
  87. data/examples/rack/lobster.rb +79 -0
  88. data/examples/rack/rack_env.rb +10 -0
  89. data/examples/rack/standalone_example.rb +26 -0
  90. data/examples/show_greek_letters.rb +3 -0
  91. data/examples/simple/on_click_event_hello_world.cgi +34 -0
  92. data/examples/sinatra/001_your_ip_address_is.rb +8 -0
  93. data/examples/sinatra/002_the_request_object.rb +16 -0
  94. data/examples/sinatra/003_hello_world_example.rb +82 -0
  95. data/examples/sinatra/004_splat_example.rb +10 -0
  96. data/examples/sinatra/005_attachment_example.rb +11 -0
  97. data/examples/sinatra/006_outer_self_example.rb +8 -0
  98. data/examples/sinatra/007_mime_type_example.rb +17 -0
  99. data/examples/sinatra/008_post_example.rb +55 -0
  100. data/examples/table_example.rb +37 -0
  101. data/images/cyberweb_favicon.png +0 -0
  102. data/images/cyberweb_logo.png +0 -0
  103. data/images/cyberweb_theme.png +0 -0
  104. data/lib/cyberweb/and_sinatra_base.rb +9 -0
  105. data/lib/cyberweb/autoinclude.rb +20 -0
  106. data/lib/cyberweb/autoinclude_webobject.rb +14 -0
  107. data/lib/cyberweb/base/base.rb +41 -0
  108. data/lib/cyberweb/base/colours.rb +69 -0
  109. data/lib/cyberweb/base/constants.rb +18 -0
  110. data/lib/cyberweb/base/encoding.rb +19 -0
  111. data/lib/cyberweb/base/misc.rb +239 -0
  112. data/lib/cyberweb/base/reset.rb +23 -0
  113. data/lib/cyberweb/base/save_file.rb +22 -0
  114. data/lib/cyberweb/cascading_style_sheets/README.md +4 -0
  115. data/lib/cyberweb/cascading_style_sheets/admonition.css +33 -0
  116. data/lib/cyberweb/cascading_style_sheets/balloon.css +344 -0
  117. data/lib/cyberweb/cascading_style_sheets/border.css +202 -0
  118. data/lib/cyberweb/cascading_style_sheets/code.css +58 -0
  119. data/lib/cyberweb/cascading_style_sheets/colours.css +476 -0
  120. data/lib/cyberweb/cascading_style_sheets/default.css +1836 -0
  121. data/lib/cyberweb/cascading_style_sheets/div.css +26 -0
  122. data/lib/cyberweb/cascading_style_sheets/fonts.css +365 -0
  123. data/lib/cyberweb/cascading_style_sheets/links.css +207 -0
  124. data/lib/cyberweb/cascading_style_sheets/margin.css +677 -0
  125. data/lib/cyberweb/cascading_style_sheets/menu.css +37 -0
  126. data/lib/cyberweb/cascading_style_sheets/message_boxes.css +48 -0
  127. data/lib/cyberweb/cascading_style_sheets/misc.css +162 -0
  128. data/lib/cyberweb/cascading_style_sheets/popup.css +63 -0
  129. data/lib/cyberweb/cascading_style_sheets/rpg.css +51 -0
  130. data/lib/cyberweb/cascading_style_sheets/ruby_regexes.css +33 -0
  131. data/lib/cyberweb/cascading_style_sheets/template2.css +18 -0
  132. data/lib/cyberweb/cascading_style_sheets/text_shadow.css +19 -0
  133. data/lib/cyberweb/cascading_style_sheets/tooltip.css +36 -0
  134. data/lib/cyberweb/cgi/README.md +6 -0
  135. data/lib/cyberweb/cgi/cgi.rb +340 -0
  136. data/lib/cyberweb/cgi/constants.rb +121 -0
  137. data/lib/cyberweb/cgi/cookie.rb +218 -0
  138. data/lib/cyberweb/cgi/core.rb +638 -0
  139. data/lib/cyberweb/cgi/exceptions.rb +223 -0
  140. data/lib/cyberweb/cgi/html.rb +1025 -0
  141. data/lib/cyberweb/cgi/mod_ruby_exception_printer.rb +40 -0
  142. data/lib/cyberweb/cgi/query_extension.rb +431 -0
  143. data/lib/cyberweb/cgi/session/file_store.rb +131 -0
  144. data/lib/cyberweb/cgi/session/memory_store.rb +90 -0
  145. data/lib/cyberweb/cgi/session/pstore.rb +127 -0
  146. data/lib/cyberweb/cgi/session.rb +444 -0
  147. data/lib/cyberweb/cgi/tag_maker.rb +94 -0
  148. data/lib/cyberweb/cgi/util.rb +239 -0
  149. data/lib/cyberweb/charts/README.md +2 -0
  150. data/lib/cyberweb/charts/google_charts.rb +51 -0
  151. data/lib/cyberweb/classes/simple_form.rb +55 -0
  152. data/lib/cyberweb/classes/tooltips.rb +169 -0
  153. data/lib/cyberweb/coloured_tags/coloured_tags.rb +3099 -0
  154. data/lib/cyberweb/colours/colour_chart.rb +117 -0
  155. data/lib/cyberweb/colours/colours.rb +50 -0
  156. data/lib/cyberweb/colours/random_colour.rb +28 -0
  157. data/lib/cyberweb/colours/sanitize_for_colours.rb +95 -0
  158. data/lib/cyberweb/commandline/commandline_interface.rb +49 -0
  159. data/lib/cyberweb/configuration/configuration.rb +66 -0
  160. data/lib/cyberweb/configuration/load_the_configuration_file.rb +73 -0
  161. data/lib/cyberweb/constants/array_images.rb +21 -0
  162. data/lib/cyberweb/constants/array_local_css_files.rb +35 -0
  163. data/lib/cyberweb/constants/array_predefined_constants.rb +23 -0
  164. data/lib/cyberweb/constants/configuration_file.rb +33 -0
  165. data/lib/cyberweb/constants/constants.rb +9 -0
  166. data/lib/cyberweb/constants/file_constants.rb +16 -0
  167. data/lib/cyberweb/constants/http_status_codes.rb +42 -0
  168. data/lib/cyberweb/constants/nl.rb +22 -0
  169. data/lib/cyberweb/constants/project_constants.rb +99 -0
  170. data/lib/cyberweb/constants/roebe.rb +28 -0
  171. data/lib/cyberweb/constants/standalone_constants.rb +309 -0
  172. data/lib/cyberweb/controller/README.md +4 -0
  173. data/lib/cyberweb/controller/webobject_controller.rb +50 -0
  174. data/lib/cyberweb/csv/README.md +2 -0
  175. data/lib/cyberweb/csv/csv.rb +58 -0
  176. data/lib/cyberweb/cybersprawl +1 -0
  177. data/lib/cyberweb/debug/debug.rb +69 -0
  178. data/lib/cyberweb/encoding/encoding.rb +84 -0
  179. data/lib/cyberweb/erb/test.rhtml +81 -0
  180. data/lib/cyberweb/erb/test_template.erb +9 -0
  181. data/lib/cyberweb/evaluate_from_the_same_named_file_then_serve.rb +9 -0
  182. data/lib/cyberweb/favicon/favicon.rb +196 -0
  183. data/lib/cyberweb/generator/README.md +2 -0
  184. data/lib/cyberweb/generator/cgi.rb +201 -0
  185. data/lib/cyberweb/generator/class.rb +25 -0
  186. data/lib/cyberweb/generator/static_webpage.rb +162 -0
  187. data/lib/cyberweb/generator/webpage_for_images.rb +553 -0
  188. data/lib/cyberweb/help/help.rb +29 -0
  189. data/lib/cyberweb/html_codes/README.md +15 -0
  190. data/lib/cyberweb/html_codes/greek_letters.rb +204 -0
  191. data/lib/cyberweb/html_tags/README.md +3 -0
  192. data/lib/cyberweb/html_tags/a.rb +65 -0
  193. data/lib/cyberweb/html_tags/accesskey.rb +25 -0
  194. data/lib/cyberweb/html_tags/blockquote.rb +56 -0
  195. data/lib/cyberweb/html_tags/body.rb +14 -0
  196. data/lib/cyberweb/html_tags/br.rb +19 -0
  197. data/lib/cyberweb/html_tags/button.rb +110 -0
  198. data/lib/cyberweb/html_tags/canvas.rb +59 -0
  199. data/lib/cyberweb/html_tags/chtml.rb +14 -0
  200. data/lib/cyberweb/html_tags/div.rb +163 -0
  201. data/lib/cyberweb/html_tags/fieldset.rb +67 -0
  202. data/lib/cyberweb/html_tags/figure.rb +72 -0
  203. data/lib/cyberweb/html_tags/form.rb +203 -0
  204. data/lib/cyberweb/html_tags/h1.rb +75 -0
  205. data/lib/cyberweb/html_tags/h2.rb +73 -0
  206. data/lib/cyberweb/html_tags/h3.rb +58 -0
  207. data/lib/cyberweb/html_tags/h4.rb +60 -0
  208. data/lib/cyberweb/html_tags/h5.rb +54 -0
  209. data/lib/cyberweb/html_tags/h6.rb +54 -0
  210. data/lib/cyberweb/html_tags/hr.rb +22 -0
  211. data/lib/cyberweb/html_tags/html_tags.rb +240 -0
  212. data/lib/cyberweb/html_tags/i.rb +50 -0
  213. data/lib/cyberweb/html_tags/img.rb +294 -0
  214. data/lib/cyberweb/html_tags/input.rb +345 -0
  215. data/lib/cyberweb/html_tags/label.rb +63 -0
  216. data/lib/cyberweb/html_tags/legend.rb +56 -0
  217. data/lib/cyberweb/html_tags/li.rb +67 -0
  218. data/lib/cyberweb/html_tags/map.rb +31 -0
  219. data/lib/cyberweb/html_tags/nav.rb +63 -0
  220. data/lib/cyberweb/html_tags/object.rb +56 -0
  221. data/lib/cyberweb/html_tags/ol.rb +56 -0
  222. data/lib/cyberweb/html_tags/option.rb +61 -0
  223. data/lib/cyberweb/html_tags/p.rb +90 -0
  224. data/lib/cyberweb/html_tags/pre.rb +164 -0
  225. data/lib/cyberweb/html_tags/section.rb +33 -0
  226. data/lib/cyberweb/html_tags/select.rb +100 -0
  227. data/lib/cyberweb/html_tags/span.rb +338 -0
  228. data/lib/cyberweb/html_tags/strong.rb +39 -0
  229. data/lib/cyberweb/html_tags/table.rb +273 -0
  230. data/lib/cyberweb/html_tags/tbody.rb +24 -0
  231. data/lib/cyberweb/html_tags/td.rb +214 -0
  232. data/lib/cyberweb/html_tags/textarea.rb +138 -0
  233. data/lib/cyberweb/html_tags/th.rb +68 -0
  234. data/lib/cyberweb/html_tags/thead.rb +36 -0
  235. data/lib/cyberweb/html_tags/tr.rb +97 -0
  236. data/lib/cyberweb/html_tags/ul.rb +51 -0
  237. data/lib/cyberweb/html_template/html_template.rb +352 -0
  238. data/lib/cyberweb/images/embed_this_image.rb +37 -0
  239. data/lib/cyberweb/images/images.rb +58 -0
  240. data/lib/cyberweb/images/is_image.rb +22 -0
  241. data/lib/cyberweb/images/path_to_images.rb +60 -0
  242. data/lib/cyberweb/images/real/README.md +6 -0
  243. data/lib/cyberweb/images/remove_this_substring_from_all_images.rb +44 -0
  244. data/lib/cyberweb/images/standalone_drag_and_drop_this_image.rb +64 -0
  245. data/lib/cyberweb/images/string_image.rb +399 -0
  246. data/lib/cyberweb/images_base64_encoded/AUSRUFUNGSZEICHEN.png.md +1 -0
  247. data/lib/cyberweb/images_base64_encoded/BLUEARROW.png.md +1 -0
  248. data/lib/cyberweb/images_base64_encoded/BUBBLE.png.md +1 -0
  249. data/lib/cyberweb/images_base64_encoded/CAT.png.md +1 -0
  250. data/lib/cyberweb/images_base64_encoded/CAUTION.png.md +1 -0
  251. data/lib/cyberweb/images_base64_encoded/CHEERING_PERSON.png.md +1 -0
  252. data/lib/cyberweb/images_base64_encoded/CURSOR.png.md +1 -0
  253. data/lib/cyberweb/images_base64_encoded/DOT_01.png.md +5 -0
  254. data/lib/cyberweb/images_base64_encoded/DUCKY.png.md +1 -0
  255. data/lib/cyberweb/images_base64_encoded/ELEPHANT.png.md +1 -0
  256. data/lib/cyberweb/images_base64_encoded/HALLOWEEN.png.md +1 -0
  257. data/lib/cyberweb/images_base64_encoded/HANGING_MONKEY.png.md +1 -0
  258. data/lib/cyberweb/images_base64_encoded/LENS.png.md +1 -0
  259. data/lib/cyberweb/images_base64_encoded/README.md +2 -0
  260. data/lib/cyberweb/images_base64_encoded/TU_WIEN_LOGO.png.md +1 -0
  261. data/lib/cyberweb/images_base64_encoded/VOGEL.png.md +1 -0
  262. data/lib/cyberweb/io/README.md +1 -0
  263. data/lib/cyberweb/io/io.rb +19 -0
  264. data/lib/cyberweb/javascript/drag_and_drop.rb +105 -0
  265. data/lib/cyberweb/javascript/dragula_collection.rb +54 -0
  266. data/lib/cyberweb/javascript/javascript.rb +211 -0
  267. data/lib/cyberweb/javascript/javascript_bundle.rb +223 -0
  268. data/lib/cyberweb/javascript/javascript_clock.rb +69 -0
  269. data/lib/cyberweb/javascript/javascript_last_modified.rb +27 -0
  270. data/lib/cyberweb/javascript/javascript_magic.rb +150 -0
  271. data/lib/cyberweb/javascript/javascript_selectable.rb +24 -0
  272. data/lib/cyberweb/javascript/jquery.rb +30 -0
  273. data/lib/cyberweb/javascript/on_click_change_opacity.rb +97 -0
  274. data/lib/cyberweb/javascript/on_click_hide.rb +63 -0
  275. data/lib/cyberweb/javascript/popup.rb +80 -0
  276. data/lib/cyberweb/javascript/print_javascript.rb +33 -0
  277. data/lib/cyberweb/javascript/registered_javascript_methods.rb +30 -0
  278. data/lib/cyberweb/javascript/resize.rb +28 -0
  279. data/lib/cyberweb/javascript/return_javascript.rb +48 -0
  280. data/lib/cyberweb/javascript/scroll.rb +17 -0
  281. data/lib/cyberweb/javascript/snoweffect.rb +122 -0
  282. data/lib/cyberweb/javascript_code/README.md +6 -0
  283. data/lib/cyberweb/javascript_code/chmod_displayer.js +74 -0
  284. data/lib/cyberweb/javascript_code/custom_functions.js +267 -0
  285. data/lib/cyberweb/javascript_code/jquery/jquery-3.6.0.js +10881 -0
  286. data/lib/cyberweb/javascript_code/jquery/jquery-ui-1.12.1.js +18706 -0
  287. data/lib/cyberweb/javascript_code/rgb_to_hex.js +14 -0
  288. data/lib/cyberweb/javascript_code/select_even_numbers.js +7 -0
  289. data/lib/cyberweb/javascript_code/select_everything.js +22 -0
  290. data/lib/cyberweb/javascript_code/simple_calculator.js +15 -0
  291. data/lib/cyberweb/javascript_code/sleep.js +3 -0
  292. data/lib/cyberweb/javascript_code/to_celsius.js +8 -0
  293. data/lib/cyberweb/mouse/README.md +3 -0
  294. data/lib/cyberweb/mouse/libxdo.rb +321 -0
  295. data/lib/cyberweb/mouse/mouse.rb +264 -0
  296. data/lib/cyberweb/objectified_html_tags/README.md +8 -0
  297. data/lib/cyberweb/objectified_html_tags/a.rb +129 -0
  298. data/lib/cyberweb/objectified_html_tags/abbr.rb +84 -0
  299. data/lib/cyberweb/objectified_html_tags/base.rb +376 -0
  300. data/lib/cyberweb/objectified_html_tags/button.rb +135 -0
  301. data/lib/cyberweb/objectified_html_tags/combobox.rb +165 -0
  302. data/lib/cyberweb/objectified_html_tags/div.rb +129 -0
  303. data/lib/cyberweb/objectified_html_tags/embed.rb +161 -0
  304. data/lib/cyberweb/objectified_html_tags/form.rb +129 -0
  305. data/lib/cyberweb/objectified_html_tags/h1.rb +129 -0
  306. data/lib/cyberweb/objectified_html_tags/h2.rb +129 -0
  307. data/lib/cyberweb/objectified_html_tags/h3.rb +129 -0
  308. data/lib/cyberweb/objectified_html_tags/h4.rb +129 -0
  309. data/lib/cyberweb/objectified_html_tags/h5.rb +129 -0
  310. data/lib/cyberweb/objectified_html_tags/h6.rb +129 -0
  311. data/lib/cyberweb/objectified_html_tags/hbox.rb +71 -0
  312. data/lib/cyberweb/objectified_html_tags/img.rb +202 -0
  313. data/lib/cyberweb/objectified_html_tags/input.rb +185 -0
  314. data/lib/cyberweb/objectified_html_tags/p.rb +129 -0
  315. data/lib/cyberweb/objectified_html_tags/pre.rb +129 -0
  316. data/lib/cyberweb/objectified_html_tags/span.rb +92 -0
  317. data/lib/cyberweb/objectified_html_tags/table.rb +174 -0
  318. data/lib/cyberweb/objectified_html_tags/textarea.rb +173 -0
  319. data/lib/cyberweb/objectified_html_tags/title.rb +82 -0
  320. data/lib/cyberweb/objectified_html_tags/window.rb +79 -0
  321. data/lib/cyberweb/predefined_and_freeform_methods/README.md +1 -0
  322. data/lib/cyberweb/predefined_and_freeform_methods/frage.rb +45 -0
  323. data/lib/cyberweb/predefined_and_freeform_methods/freeform_methods.rb +93 -0
  324. data/lib/cyberweb/predefined_and_freeform_methods/hash_css_class_to_use.rb +55 -0
  325. data/lib/cyberweb/predefined_and_freeform_methods/hash_registered_extra_tags.rb +29 -0
  326. data/lib/cyberweb/predefined_and_freeform_methods/header.rb +81 -0
  327. data/lib/cyberweb/predefined_and_freeform_methods/predefined_methods.rb +413 -0
  328. data/lib/cyberweb/project/project.rb +85 -0
  329. data/lib/cyberweb/rack/README.md +1 -0
  330. data/lib/cyberweb/rack/request.rb +31 -0
  331. data/lib/cyberweb/requires/README.md +4 -0
  332. data/lib/cyberweb/requires/do_require_web_object_files.rb +9 -0
  333. data/lib/cyberweb/requires/remove_html.rb +9 -0
  334. data/lib/cyberweb/requires/require_cgi.rb +16 -0
  335. data/lib/cyberweb/requires/require_charts.rb +20 -0
  336. data/lib/cyberweb/requires/require_generators.rb +23 -0
  337. data/lib/cyberweb/requires/require_html_tags_files.rb +23 -0
  338. data/lib/cyberweb/requires/require_javascript_files.rb +23 -0
  339. data/lib/cyberweb/requires/require_kimurai.rb +13 -0
  340. data/lib/cyberweb/requires/require_objectified_html_tags_files.rb +23 -0
  341. data/lib/cyberweb/requires/require_sinatra.rb +7 -0
  342. data/lib/cyberweb/requires/require_the_constants.rb +26 -0
  343. data/lib/cyberweb/requires/require_the_cyberweb_project.rb +172 -0
  344. data/lib/cyberweb/requires/require_the_html_template.rb +7 -0
  345. data/lib/cyberweb/requires/require_the_toplevel_methods_files.rb +24 -0
  346. data/lib/cyberweb/requires/require_web_images.rb +7 -0
  347. data/lib/cyberweb/requires/require_web_object_files.rb +25 -0
  348. data/lib/cyberweb/requires/require_yaml.rb +11 -0
  349. data/lib/cyberweb/sinatra/README.md +11 -0
  350. data/lib/cyberweb/sinatra/base.rb +145 -0
  351. data/lib/cyberweb/sinatra/custom_extensions.rb +131 -0
  352. data/lib/cyberweb/standalone_classes/all_css_classes.rb +255 -0
  353. data/lib/cyberweb/standalone_classes/calculator.rb +127 -0
  354. data/lib/cyberweb/standalone_classes/correct_image_entries_in_html_file.rb +207 -0
  355. data/lib/cyberweb/standalone_classes/input_focus.rb +97 -0
  356. data/lib/cyberweb/standalone_classes/tag_prototype.rb +43 -0
  357. data/lib/cyberweb/standalone_classes/turn_html_into_cyberweb.rb +174 -0
  358. data/lib/cyberweb/svg/blue_rect.svg +12 -0
  359. data/lib/cyberweb/svg/butterfly.svg +15 -0
  360. data/lib/cyberweb/svg/chemical_molecule.svg +192 -0
  361. data/lib/cyberweb/svg/circles_on_background.svg +29 -0
  362. data/lib/cyberweb/svg/ellipse.svg +12 -0
  363. data/lib/cyberweb/svg/five_circles.svg +26 -0
  364. data/lib/cyberweb/svg/flag_germany.svg +10 -0
  365. data/lib/cyberweb/svg/gaussian_blur.svg +20 -0
  366. data/lib/cyberweb/svg/gradient_circle.svg +18 -0
  367. data/lib/cyberweb/svg/green_butterfly.svg +18 -0
  368. data/lib/cyberweb/svg/green_tilted_lines.svg +25 -0
  369. data/lib/cyberweb/svg/lion.svg +161 -0
  370. data/lib/cyberweb/svg/one_circle.svg +12 -0
  371. data/lib/cyberweb/svg/pie_chart.svg +130 -0
  372. data/lib/cyberweb/svg/svg.cgi +61 -0
  373. data/lib/cyberweb/svg/tetris.svg +487 -0
  374. data/lib/cyberweb/svg/three_circles.svg +18 -0
  375. data/lib/cyberweb/svg/tiger.svg +732 -0
  376. data/lib/cyberweb/svg/tilted_arcs.svg +74 -0
  377. data/lib/cyberweb/svg/transparent_rect.svg +12 -0
  378. data/lib/cyberweb/svg/yellow_fe_blending.svg +42 -0
  379. data/lib/cyberweb/toplevel_methods/a.rb +131 -0
  380. data/lib/cyberweb/toplevel_methods/anmerkung.rb +67 -0
  381. data/lib/cyberweb/toplevel_methods/audio.rb +59 -0
  382. data/lib/cyberweb/toplevel_methods/bold.rb +65 -0
  383. data/lib/cyberweb/toplevel_methods/cgi.rb +65 -0
  384. data/lib/cyberweb/toplevel_methods/charsets.rb +52 -0
  385. data/lib/cyberweb/toplevel_methods/clear.rb +30 -0
  386. data/lib/cyberweb/toplevel_methods/close.rb +62 -0
  387. data/lib/cyberweb/toplevel_methods/consider_serving_the_web_object.rb +41 -0
  388. data/lib/cyberweb/toplevel_methods/css.rb +732 -0
  389. data/lib/cyberweb/toplevel_methods/date.rb +71 -0
  390. data/lib/cyberweb/toplevel_methods/dictionary.rb +48 -0
  391. data/lib/cyberweb/toplevel_methods/disable.rb +49 -0
  392. data/lib/cyberweb/toplevel_methods/document.rb +56 -0
  393. data/lib/cyberweb/toplevel_methods/dot.rb +182 -0
  394. data/lib/cyberweb/toplevel_methods/download_webpage.rb +18 -0
  395. data/lib/cyberweb/toplevel_methods/edit_configuration_file.rb +26 -0
  396. data/lib/cyberweb/toplevel_methods/ee.rb +44 -0
  397. data/lib/cyberweb/toplevel_methods/env.rb +44 -0
  398. data/lib/cyberweb/toplevel_methods/escape_html.rb +54 -0
  399. data/lib/cyberweb/toplevel_methods/fields.rb +46 -0
  400. data/lib/cyberweb/toplevel_methods/filename.rb +33 -0
  401. data/lib/cyberweb/toplevel_methods/frames.rb +131 -0
  402. data/lib/cyberweb/toplevel_methods/glob.rb +30 -0
  403. data/lib/cyberweb/toplevel_methods/google.rb +35 -0
  404. data/lib/cyberweb/toplevel_methods/hardware_information.rb +90 -0
  405. data/lib/cyberweb/toplevel_methods/hfin.rb +56 -0
  406. data/lib/cyberweb/toplevel_methods/html_comment.rb +48 -0
  407. data/lib/cyberweb/toplevel_methods/html_mode.rb +39 -0
  408. data/lib/cyberweb/toplevel_methods/html_tables.rb +818 -0
  409. data/lib/cyberweb/toplevel_methods/input.rb +54 -0
  410. data/lib/cyberweb/toplevel_methods/jquery.rb +82 -0
  411. data/lib/cyberweb/toplevel_methods/last_modified.rb +39 -0
  412. data/lib/cyberweb/toplevel_methods/links.rb +426 -0
  413. data/lib/cyberweb/toplevel_methods/listing.rb +96 -0
  414. data/lib/cyberweb/toplevel_methods/localhost.rb +18 -0
  415. data/lib/cyberweb/toplevel_methods/log_directory.rb +84 -0
  416. data/lib/cyberweb/toplevel_methods/logging.rb +42 -0
  417. data/lib/cyberweb/toplevel_methods/logo.rb +30 -0
  418. data/lib/cyberweb/toplevel_methods/markdown.rb +112 -0
  419. data/lib/cyberweb/toplevel_methods/mathml.rb +130 -0
  420. data/lib/cyberweb/toplevel_methods/message_boxes.rb +140 -0
  421. data/lib/cyberweb/toplevel_methods/misc.rb +1398 -0
  422. data/lib/cyberweb/toplevel_methods/name_of_img_dir.rb +51 -0
  423. data/lib/cyberweb/toplevel_methods/padlem_and_marlem.rb +107 -0
  424. data/lib/cyberweb/toplevel_methods/params.rb +57 -0
  425. data/lib/cyberweb/toplevel_methods/path.rb +69 -0
  426. data/lib/cyberweb/toplevel_methods/pdf.rb +103 -0
  427. data/lib/cyberweb/toplevel_methods/process_content.rb +102 -0
  428. data/lib/cyberweb/toplevel_methods/progress.rb +42 -0
  429. data/lib/cyberweb/toplevel_methods/quote.rb +44 -0
  430. data/lib/cyberweb/toplevel_methods/random.rb +70 -0
  431. data/lib/cyberweb/toplevel_methods/rds.rb +35 -0
  432. data/lib/cyberweb/toplevel_methods/read_and_display.rb +284 -0
  433. data/lib/cyberweb/toplevel_methods/readlines.rb +31 -0
  434. data/lib/cyberweb/toplevel_methods/redirect.rb +29 -0
  435. data/lib/cyberweb/toplevel_methods/registered_ids.rb +178 -0
  436. data/lib/cyberweb/toplevel_methods/remove_html.rb +32 -0
  437. data/lib/cyberweb/toplevel_methods/remove_newlines.rb +28 -0
  438. data/lib/cyberweb/toplevel_methods/return_head_start.rb +33 -0
  439. data/lib/cyberweb/toplevel_methods/return_html_fin.rb +34 -0
  440. data/lib/cyberweb/toplevel_methods/return_html_header.rb +35 -0
  441. data/lib/cyberweb/toplevel_methods/return_html_start.rb +24 -0
  442. data/lib/cyberweb/toplevel_methods/return_html_to_head_start.rb +42 -0
  443. data/lib/cyberweb/toplevel_methods/return_meta_collection.rb +54 -0
  444. data/lib/cyberweb/toplevel_methods/return_pwd.rb +23 -0
  445. data/lib/cyberweb/toplevel_methods/return_strict_doctype.rb +51 -0
  446. data/lib/cyberweb/toplevel_methods/roebe.rb +43 -0
  447. data/lib/cyberweb/toplevel_methods/s2.rb +30 -0
  448. data/lib/cyberweb/toplevel_methods/sanitize_url.rb +57 -0
  449. data/lib/cyberweb/toplevel_methods/sbr.rb +170 -0
  450. data/lib/cyberweb/toplevel_methods/server_base_directory.rb +148 -0
  451. data/lib/cyberweb/toplevel_methods/show_and_display.rb +215 -0
  452. data/lib/cyberweb/toplevel_methods/show_configuration.rb +83 -0
  453. data/lib/cyberweb/toplevel_methods/sitemap.rb +111 -0
  454. data/lib/cyberweb/toplevel_methods/spacer.rb +119 -0
  455. data/lib/cyberweb/toplevel_methods/string_body_start.rb +65 -0
  456. data/lib/cyberweb/toplevel_methods/string_content.rb +35 -0
  457. data/lib/cyberweb/toplevel_methods/svg.rb +66 -0
  458. data/lib/cyberweb/toplevel_methods/tag.rb +237 -0
  459. data/lib/cyberweb/toplevel_methods/temp_directory.rb +73 -0
  460. data/lib/cyberweb/toplevel_methods/test_css.rb +24 -0
  461. data/lib/cyberweb/toplevel_methods/textile.rb +45 -0
  462. data/lib/cyberweb/toplevel_methods/title.rb +125 -0
  463. data/lib/cyberweb/toplevel_methods/umlaute.rb +90 -0
  464. data/lib/cyberweb/toplevel_methods/video.rb +352 -0
  465. data/lib/cyberweb/toplevel_methods/view_source.rb +50 -0
  466. data/lib/cyberweb/toplevel_methods/web_object.rb +42 -0
  467. data/lib/cyberweb/toplevel_methods/write_what_into.rb +27 -0
  468. data/lib/cyberweb/utility_scripts/README.md +4 -0
  469. data/lib/cyberweb/utility_scripts/create_coloured_tags.rb +172 -0
  470. data/lib/cyberweb/utility_scripts/download_balloon_css.rb +160 -0
  471. data/lib/cyberweb/utility_scripts/hyperlink_all_images_from.rb +148 -0
  472. data/lib/cyberweb/version/version.rb +25 -0
  473. data/lib/cyberweb/web_base/web_base.rb +28 -0
  474. data/lib/cyberweb/web_images/array_listing_all_project_images.rb +52 -0
  475. data/lib/cyberweb/web_images/map_symbol_to_image_location.rb +1661 -0
  476. data/lib/cyberweb/web_images/web_images.rb +270 -0
  477. data/lib/cyberweb/web_object/css.rb +627 -0
  478. data/lib/cyberweb/web_object/evaluate.rb +126 -0
  479. data/lib/cyberweb/web_object/favicon.rb +160 -0
  480. data/lib/cyberweb/web_object/html_related_tags.rb +320 -0
  481. data/lib/cyberweb/web_object/images.rb +693 -0
  482. data/lib/cyberweb/web_object/initialize.rb +51 -0
  483. data/lib/cyberweb/web_object/input_related_functionality.rb +414 -0
  484. data/lib/cyberweb/web_object/javascript.rb +427 -0
  485. data/lib/cyberweb/web_object/languages.rb +172 -0
  486. data/lib/cyberweb/web_object/links.rb +228 -0
  487. data/lib/cyberweb/web_object/misc.rb +5159 -0
  488. data/lib/cyberweb/web_object/params.rb +289 -0
  489. data/lib/cyberweb/web_object/reset.rb +192 -0
  490. data/lib/cyberweb/web_object/run.rb +44 -0
  491. data/lib/cyberweb/web_object/sinatra_related_functionality.rb +30 -0
  492. data/lib/cyberweb/web_object/sitemap.rb +176 -0
  493. data/lib/cyberweb/web_object/table.rb +378 -0
  494. data/lib/cyberweb/web_object/web_object.rb +126 -0
  495. data/lib/cyberweb/web_scraper/README.md +8 -0
  496. data/lib/cyberweb/web_scraper/scrape_this_url.rb +183 -0
  497. data/lib/cyberweb/webmin/biology_server.cgi +256 -0
  498. data/lib/cyberweb/webmin/calculator.cgi +52 -0
  499. data/lib/cyberweb/webmin/colour_chart.cgi +33 -0
  500. data/lib/cyberweb/webmin/comments.cgi +137 -0
  501. data/lib/cyberweb/webmin/comments_data +18 -0
  502. data/lib/cyberweb/webmin/constants.rb +46 -0
  503. data/lib/cyberweb/webmin/dictionary.cgi +39 -0
  504. data/lib/cyberweb/webmin/sys_info.cgi +26 -0
  505. data/lib/cyberweb/webmin/webforum.cgi +58 -0
  506. data/lib/cyberweb/webmin/webmin.cgi +679 -0
  507. data/lib/cyberweb/yaml/autogenerated_system_settings.yml +14 -0
  508. data/lib/cyberweb/yaml/custom_tags.yml +7 -0
  509. data/lib/cyberweb/yaml/debug.yml +1 -0
  510. data/lib/cyberweb/yaml/html5_global_attributes.yml +12 -0
  511. data/lib/cyberweb/yaml/html5_new_elements.yml +108 -0
  512. data/lib/cyberweb/yaml/html_tag_legend.yml +12 -0
  513. data/lib/cyberweb/yaml/http_status_codes.yml +38 -0
  514. data/lib/cyberweb/yaml/js_files_to_load.yml +28 -0
  515. data/lib/cyberweb/yaml/project_configuration.yml +229 -0
  516. data/lib/cyberweb/yaml/video_attributes.yml +35 -0
  517. data/lib/cyberweb/yaml/web_images.yml +306 -0
  518. data/lib/cyberweb.rb +5 -0
  519. data/test/README.md +5 -0
  520. data/test/complex_tests/all_tests_in_one_page.cgi +666 -0
  521. data/test/complex_tests/simple_sinatra_example_using_cyberweb/simple.rb +60 -0
  522. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.cgi +7 -0
  523. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.rb +23 -0
  524. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.sinatra +65 -0
  525. data/test/complex_tests/testing_frames.cgi +42 -0
  526. data/test/complex_tests/testing_objectified_html_tags.rb +82 -0
  527. data/test/complex_tests/testing_style_variants/README.md +2 -0
  528. data/test/complex_tests/testing_style_variants/show_coloured_boxes.cgi +58 -0
  529. data/test/complex_tests/testing_tables.cgi +67 -0
  530. data/test/complex_tests/testing_the_cyberweb_shell.rb +188 -0
  531. data/test/complex_tests/testing_web_object.rb +94 -0
  532. data/test/css/README.md +5 -0
  533. data/test/css/return_the_content_of_these_css_classes.rb +7 -0
  534. data/test/css/testing_css_effects.cgi +159 -0
  535. data/test/css/testing_css_masking.cgi +36 -0
  536. data/test/dummy.pdf +0 -0
  537. data/test/hello_world/hello_world.cgi +25 -0
  538. data/test/javascript/README.md +2 -0
  539. data/test/javascript/testing_cheerleader_javascript.cgi +0 -0
  540. data/test/javascript/testing_drag_and_drop_support.cgi +33 -0
  541. data/test/javascript/testing_on_click_change_opacity.cgi +26 -0
  542. data/test/javascript/testing_snowflakes.cgi +20 -0
  543. data/test/simple_tests/README.md +3 -0
  544. data/test/simple_tests/ad-hoc-test.cgi +55 -0
  545. data/test/simple_tests/commandline_tests.rb +70 -0
  546. data/test/simple_tests/display_this_file.cgi +11 -0
  547. data/test/simple_tests/simple_html_example.cgi +29 -0
  548. data/test/simple_tests/simple_status_page.cgi +52 -0
  549. data/test/simple_tests/string_s2_test.rb +11 -0
  550. data/test/simple_tests/test_simple_string_as_input.rb +12 -0
  551. data/test/simple_tests/testing_base64_images.cgi +26 -0
  552. data/test/simple_tests/testing_dragging_an_image.cgi +23 -0
  553. data/test/simple_tests/testing_editable_text.cgi +16 -0
  554. data/test/simple_tests/testing_email.cgi +31 -0
  555. data/test/simple_tests/testing_embedding_a_pdf_file.cgi +32 -0
  556. data/test/simple_tests/testing_google_charts.cgi +24 -0
  557. data/test/simple_tests/testing_html_forms.cgi +31 -0
  558. data/test/simple_tests/testing_html_template.rb +13 -0
  559. data/test/simple_tests/testing_popup_div.cgi +22 -0
  560. data/test/simple_tests/testing_return_dataset_without_any_comments.rb +11 -0
  561. data/test/simple_tests/testing_the_cap_box.cgi +20 -0
  562. data/test/simple_tests/testing_the_div_tag.cgi +21 -0
  563. data/test/simple_tests/testing_the_headers_tag.cgi +36 -0
  564. data/test/simple_tests/testing_the_html_colours.cgi +19 -0
  565. data/test/simple_tests/testing_the_info_box.cgi +19 -0
  566. data/test/simple_tests/testing_the_li_tag.cgi +24 -0
  567. data/test/simple_tests/testing_the_s2_method.rb +7 -0
  568. data/test/simple_tests/testing_the_select_tag.cgi +23 -0
  569. data/test/simple_tests/testing_the_span_tag.cgi +36 -0
  570. data/test/simple_tests/testing_web_images.rb +12 -0
  571. data/test/testing_html_tags/README.md +7 -0
  572. data/test/testing_html_tags/button_example.cgi +42 -0
  573. metadata +759 -0
@@ -0,0 +1,638 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # Methods for generating HTML, parsing CGI-related parameters, and
6
+ # generating HTTP responses.
7
+ # =========================================================================== #
8
+ module Cyberweb
9
+
10
+ class CGI # === Cyberweb::CGI
11
+
12
+ require 'cyberweb/cgi/constants.rb'
13
+ require 'cyberweb/cgi/query_extension.rb'
14
+
15
+ # =========================================================================== #
16
+ # === MAX_MULTIPART_LENGTH
17
+ #
18
+ # MAX_MULTIPART_LENGTH is the maximum length of multipart data.
19
+ #
20
+ # The default value is:
21
+ #
22
+ # 128 * 1024 * 1024 bytes
23
+ #
24
+ # The default can be set to something else in the CGI constructor,
25
+ # via the :max_multipart_length key in the option hash.
26
+ #
27
+ # Also have a look at the CGI.new documentation.
28
+ # =========================================================================== #
29
+ MAX_MULTIPART_LENGTH = 128 * 1024 * 1024
30
+
31
+ # =========================================================================== #
32
+ # === $CGI_ENV
33
+ # =========================================================================== #
34
+ $CGI_ENV = ENV # for FCGI support, we keep a copy of the old ENV setting.
35
+
36
+ # =========================================================================== #
37
+ # Exception raised when there is an invalid encoding detected
38
+ # =========================================================================== #
39
+ class InvalidEncoding < Exception; end
40
+
41
+ # ========================================================================= #
42
+ # === initialize
43
+ #
44
+ # Create a new CGI instance.
45
+ #
46
+ # :call-seq:
47
+ #
48
+ # CGI.new(tag_maker) { block }
49
+ # CGI.new(options_hash = {}) { block }
50
+ #
51
+ #
52
+ # <tt>tag_maker</tt>::
53
+ #
54
+ # This is the same as using the +options_hash+ form with the value <tt>{
55
+ # :tag_maker => tag_maker }</tt> Note that it is recommended to use the
56
+ # +options_hash+ form, since it also allows you specify the charset you
57
+ # will accept.
58
+ #
59
+ # <tt>options_hash</tt>::
60
+ #
61
+ # A Hash that recognizes three options:
62
+ #
63
+ # <tt>:accept_charset</tt>::
64
+ #
65
+ # specifies encoding of received query string. If omitted,
66
+ # <tt>@@accept_charset</tt> is used. If the encoding is not
67
+ # valid, a CGI::InvalidEncoding will be raised.
68
+ #
69
+ # Example. Suppose <tt>@@accept_charset</tt> is "UTF-8"
70
+ #
71
+ # when not specified:
72
+ #
73
+ # cgi=CGI.new # @accept_charset # => "UTF-8"
74
+ #
75
+ # when specified as "EUC-JP":
76
+ #
77
+ # cgi=CGI.new(:accept_charset => "EUC-JP") # => "EUC-JP"
78
+ #
79
+ # <tt>:tag_maker</tt>::
80
+ #
81
+ # String that specifies which version of the HTML generation methods
82
+ # to use. If not specified, no HTML generation methods will be loaded.
83
+ #
84
+ # The following values are supported:
85
+ #
86
+ # "html3":: HTML 3.x
87
+ # "html4":: HTML 4.0
88
+ # "html4Tr":: HTML 4.0 Transitional
89
+ # "html4Fr":: HTML 4.0 with Framesets
90
+ # "html5":: HTML 5
91
+ #
92
+ # <tt>:max_multipart_length</tt>::
93
+ #
94
+ # Specifies maximum length of multipart data. Can be an Integer scalar or
95
+ # a lambda, that will be evaluated when the request is parsed. This
96
+ # allows more complex logic to be set when determining whether to accept
97
+ # multipart data (e.g. consult a registered users upload allowance)
98
+ #
99
+ # Default is 128 * 1024 * 1024 bytes
100
+ #
101
+ # cgi = CGI.new(:max_multipart_length => 268435456) # simple scalar
102
+ #
103
+ # cgi = CGI.new(:max_multipart_length => -> {check_filesystem}) # lambda
104
+ #
105
+ # <tt>block</tt>::
106
+ #
107
+ # If provided, the block is called when an invalid encoding
108
+ # is encountered.
109
+ #
110
+ # For example:
111
+ #
112
+ # encoding_errors = {}
113
+ # cgi =CGI.new(:accept_charset=>"EUC-JP") do |name,value|
114
+ # encoding_errors[name] = value
115
+ # end
116
+ #
117
+ # Finally, if the CGI object is not created in a standard CGI call
118
+ # environment (that is, it can't locate REQUEST_METHOD in its environment),
119
+ # then it will run in "offline" mode.
120
+ #
121
+ # In this mode, it reads its parameters from the command line or, failing
122
+ # that, from standard input.
123
+ #
124
+ # Otherwise, cookies and other parameters are parsed automatically
125
+ # from the standard CGI locations, which varies according to the
126
+ # REQUEST_METHOD.
127
+ # ========================================================================= #
128
+ def initialize(
129
+ options = {}, &block
130
+ ) # :yields: name, value
131
+ reset # Set to a clean initial state here.
132
+ @accept_charset_error_block = block_given? ? block : nil
133
+ # ======================================================================= #
134
+ # The available options:
135
+ # ======================================================================= #
136
+ @options = {
137
+ accept_charset: @@accept_charset,
138
+ max_multipart_length: MAX_MULTIPART_LENGTH
139
+ }
140
+ # ======================================================================= #
141
+ # And the passed options to this method.
142
+ # ======================================================================= #
143
+ case options
144
+ when Hash
145
+ @options.merge!(options)
146
+ when String # Assume that we wish to add the tag_maker entry here.
147
+ @options[:tag_maker] = options
148
+ end
149
+ @accept_charset = @options[:accept_charset]
150
+ @max_multipart_length = @options[:max_multipart_length]
151
+ if defined?(MOD_RUBY) && !ENV.key?('GATEWAY_INTERFACE')
152
+ Apache.request.setup_cgi_env
153
+ end
154
+
155
+ extend QueryExtension
156
+
157
+ initialize_query # set @params, @cookies
158
+ check_for_which_tag_maker_to_use
159
+ end
160
+
161
+ # ========================================================================= #
162
+ # === check_for_which_tag_maker_to_use
163
+ # ========================================================================= #
164
+ def check_for_which_tag_maker_to_use
165
+
166
+ case @options[:tag_maker] # case tag
167
+ # === html3
168
+ when 'html3'
169
+ require 'cyberweb/cgi/html.rb'
170
+ extend Html3
171
+ extend HtmlExtension
172
+ when 'html4'
173
+ require 'cyberweb/cgi/html.rb'
174
+ extend Html4
175
+ extend HtmlExtension
176
+ when 'html4Tr'
177
+ require 'cyberweb/cgi/html.rb'
178
+ extend Html4Tr
179
+ extend HtmlExtension
180
+ when 'html4Fr'
181
+ require 'cyberweb/cgi/html.rb'
182
+ extend Html4Tr
183
+ extend Html4Fr
184
+ extend HtmlExtension
185
+ # === html5
186
+ when 'html5'
187
+ require 'cyberweb/cgi/html.rb'
188
+ extend Html5
189
+ extend HtmlExtension
190
+ end
191
+ end
192
+
193
+ # ========================================================================= #
194
+ # === reset
195
+ # ========================================================================= #
196
+ def reset
197
+ @multipart = false
198
+ @output_cookies = nil
199
+ @output_hidden = nil
200
+ end
201
+
202
+ # ========================================================================= #
203
+ # === stdinput
204
+ #
205
+ # Synonym for $stdin.
206
+ # ========================================================================= #
207
+ def stdinput
208
+ $stdin
209
+ end; private :stdinput
210
+
211
+ # ========================================================================= #
212
+ # === stdoutput
213
+ #
214
+ # Synonym for $stdout.
215
+ # ========================================================================= #
216
+ def stdoutput
217
+ $stdout
218
+ end; private :stdoutput
219
+
220
+ # ========================================================================= #
221
+ # === http_header
222
+ #
223
+ # Create an HTTP header block as a string.
224
+ #
225
+ # :call-seq:
226
+ # http_header(content_type_string="text/html")
227
+ # http_header(headers_hash)
228
+ #
229
+ # Includes the empty line that ends the header block.
230
+ #
231
+ # +content_type_string+::
232
+ # If this form is used, this string is the <tt>Content-Type</tt>
233
+ # +headers_hash+::
234
+ # A Hash of header values. The following header keys are recognized:
235
+ #
236
+ # type:: The Content-Type header. Defaults to "text/html"
237
+ # charset:: The charset of the body, appended to the Content-Type header.
238
+ # nph:: A boolean value. If true, prepend protocol string and status
239
+ # code, and date; and sets default values for "server" and
240
+ # "connection" if not explicitly set.
241
+ # status::
242
+ # The HTTP status code as a String, returned as the Status header. The
243
+ # values are:
244
+ #
245
+ # OK:: 200 OK
246
+ # PARTIAL_CONTENT:: 206 Partial Content
247
+ # MULTIPLE_CHOICES:: 300 Multiple Choices
248
+ # MOVED:: 301 Moved Permanently
249
+ # REDIRECT:: 302 Found
250
+ # NOT_MODIFIED:: 304 Not Modified
251
+ # BAD_REQUEST:: 400 Bad Request
252
+ # AUTH_REQUIRED:: 401 Authorization Required
253
+ # FORBIDDEN:: 403 Forbidden
254
+ # NOT_FOUND:: 404 Not Found
255
+ # METHOD_NOT_ALLOWED:: 405 Method Not Allowed
256
+ # NOT_ACCEPTABLE:: 406 Not Acceptable
257
+ # LENGTH_REQUIRED:: 411 Length Required
258
+ # PRECONDITION_FAILED:: 412 Precondition Failed
259
+ # SERVER_ERROR:: 500 Internal Server Error
260
+ # NOT_IMPLEMENTED:: 501 Method Not Implemented
261
+ # BAD_GATEWAY:: 502 Bad Gateway
262
+ # VARIANT_ALSO_VARIES:: 506 Variant Also Negotiates
263
+ #
264
+ # server:: The server software, returned as the Server header.
265
+ # connection:: The connection type, returned as the Connection header (for
266
+ # instance, "close".
267
+ # length:: The length of the content that will be sent, returned as the
268
+ # Content-Length header.
269
+ # language:: The language of the content, returned as the Content-Language
270
+ # header.
271
+ # expires:: The time on which the current content expires, as a +Time+
272
+ # object, returned as the Expires header.
273
+ # cookie::
274
+ # A cookie or cookies, returned as one or more Set-Cookie headers. The
275
+ # value can be the literal string of the cookie; a CGI::Cookie object;
276
+ # an Array of literal cookie strings or Cookie objects; or a hash all of
277
+ # whose values are literal cookie strings or Cookie objects.
278
+ #
279
+ # These cookies are in addition to the cookies held in the
280
+ # @output_cookies field.
281
+ #
282
+ # Other headers can also be set; they are appended as key: value.
283
+ #
284
+ # Examples:
285
+ #
286
+ # http_header
287
+ # # Content-Type: text/html
288
+ #
289
+ # http_header("text/plain")
290
+ # # Content-Type: text/plain
291
+ #
292
+ # http_header("nph" => true,
293
+ # "status" => "OK", # == "200 OK"
294
+ # # "status" => "200 GOOD",
295
+ # "server" => ENV['SERVER_SOFTWARE'],
296
+ # "connection" => "close",
297
+ # "type" => "text/html",
298
+ # "charset" => "iso-2022-jp",
299
+ # # Content-Type: text/html; charset=iso-2022-jp
300
+ # "length" => 103,
301
+ # "language" => "ja",
302
+ # "expires" => Time.now + 30,
303
+ # "cookie" => [cookie1, cookie2],
304
+ # "my_header1" => "my_value"
305
+ # "my_header2" => "my_value")
306
+ #
307
+ # This method does not perform charset conversion.
308
+ # ========================================================================= #
309
+ def http_header(
310
+ options = 'text/html'
311
+ )
312
+ if options.is_a? String
313
+ content_type = options
314
+ buf = _header_for_string(content_type)
315
+ elsif options.is_a? Hash
316
+ if options.size == 1 && options.has_key?('type')
317
+ content_type = options['type']
318
+ buf = _header_for_string(content_type)
319
+ else
320
+ buf = _header_for_hash(options.dup)
321
+ end
322
+ else
323
+ raise ArgumentError.new("expected String or Hash but got #{options.class}")
324
+ end
325
+ if defined?(MOD_RUBY)
326
+ _header_for_modruby(buf)
327
+ return ''
328
+ else
329
+ buf << EOL # empty line of separator
330
+ return buf
331
+ end
332
+ end # http_header()
333
+
334
+ # ========================================================================= #
335
+ # This method is an alias for #http_header, when HTML5 tag maker is
336
+ # inactive.
337
+ #
338
+ # NOTE: use #http_header to create HTTP header blocks, this alias is
339
+ # only provided for backwards compatibility.
340
+ #
341
+ # Using #header with the HTML5 tag maker will create a <header> element.
342
+ # ========================================================================= #
343
+ alias header http_header # === header
344
+
345
+ # ========================================================================= #
346
+ # === _header_for_string
347
+ # ========================================================================= #
348
+ def _header_for_string(content_type)
349
+ buf = ''.dup
350
+ if nph?
351
+ buf << "#{$CGI_ENV['SERVER_PROTOCOL'] || 'HTTP/1.0'} 200 OK#{EOL}"
352
+ buf << "Date: #{CGI.rfc1123_date(Time.now)}#{EOL}"
353
+ buf << "Server: #{$CGI_ENV['SERVER_SOFTWARE']}#{EOL}"
354
+ buf << "Connection: close#{EOL}"
355
+ end
356
+ buf << "Content-Type: #{content_type}#{EOL}"
357
+ if @output_cookies
358
+ @output_cookies.each {|cookie| buf << "Set-Cookie: #{cookie}#{EOL}" }
359
+ end
360
+ return buf
361
+ end # _header_for_string
362
+ private :_header_for_string
363
+
364
+ # ========================================================================= #
365
+ # === _header_for_hash
366
+ # ========================================================================= #
367
+ def _header_for_hash(options)
368
+ buf = ''.dup
369
+ # ======================================================================= #
370
+ # Add charset to option['type']
371
+ # ======================================================================= #
372
+ options['type'] ||= 'text/html'.dup
373
+ charset = options.delete('charset')
374
+ options['type'] << "; charset=#{charset}" if charset
375
+ # ======================================================================= #
376
+ # NPH
377
+ # ======================================================================= #
378
+ options.delete('nph') if defined?(MOD_RUBY)
379
+ if options.delete('nph') || nph?()
380
+ protocol = $CGI_ENV['SERVER_PROTOCOL'] || 'HTTP/1.0'
381
+ status = options.delete('status')
382
+ status = HTTP_STATUS[status] || status || '200 OK'
383
+ buf << "#{protocol} #{status}#{EOL}"
384
+ buf << "Date: #{CGI.rfc1123_date(Time.now)}#{EOL}"
385
+ options['server'] ||= $CGI_ENV['SERVER_SOFTWARE'] || ''
386
+ options['connection'] ||= 'close'
387
+ end
388
+ # ======================================================================= #
389
+ # common headers
390
+ # ======================================================================= #
391
+ status = options.delete('status')
392
+ buf << "Status: #{HTTP_STATUS[status] || status}#{EOL}" if status
393
+ server = options.delete('server')
394
+ buf << "Server: #{server}#{EOL}" if server
395
+ connection = options.delete('connection')
396
+ buf << "Connection: #{connection}#{EOL}" if connection
397
+ type = options.delete('type')
398
+ buf << "Content-Type: #{type}#{EOL}" #if type
399
+ length = options.delete('length')
400
+ buf << "Content-Length: #{length}#{EOL}" if length
401
+ language = options.delete('language')
402
+ buf << "Content-Language: #{language}#{EOL}" if language
403
+ expires = options.delete('expires')
404
+ buf << "Expires: #{CGI.rfc1123_date(expires)}#{EOL}" if expires
405
+ # ======================================================================= #
406
+ # cookie
407
+ # ======================================================================= #
408
+ if cookie = options.delete('cookie')
409
+ case cookie
410
+ when String, Cookie
411
+ buf << "Set-Cookie: #{cookie}#{EOL}"
412
+ when Array
413
+ arr = cookie
414
+ arr.each {|c| buf << "Set-Cookie: #{c}#{EOL}" }
415
+ when Hash
416
+ hash = cookie
417
+ hash.each_value {|c| buf << "Set-Cookie: #{c}#{EOL}" }
418
+ end
419
+ end
420
+ if @output_cookies
421
+ @output_cookies.each {|c| buf << "Set-Cookie: #{c}#{EOL}" }
422
+ end
423
+ # ======================================================================= #
424
+ # Other headers
425
+ # ======================================================================= #
426
+ options.each { |key, value|
427
+ buf << "#{key}: #{value}#{EOL}"
428
+ }
429
+ return buf
430
+ end # _header_for_hash
431
+ private :_header_for_hash
432
+
433
+ # ========================================================================= #
434
+ # === nph?
435
+ # ========================================================================= #
436
+ def nph?
437
+ return /IIS\/(\d+)/.match($CGI_ENV['SERVER_SOFTWARE']) && $1.to_i < 5
438
+ end
439
+
440
+ # ========================================================================= #
441
+ # === _header_for_modruby
442
+ # ========================================================================= #
443
+ def _header_for_modruby(buf)
444
+ request = Apache::request
445
+ buf.scan(/([^:]+): (.+)#{EOL}/o) do |name, value|
446
+ $stderr.printf("name:%s value:%s\n", name, value) if $DEBUG
447
+ case name
448
+ when 'Set-Cookie'
449
+ request.headers_out.add(name, value)
450
+ when /^status$/i
451
+ request.status_line = value
452
+ request.status = value.to_i
453
+ when /^content-type$/i
454
+ request.content_type = value
455
+ when /^content-encoding$/i
456
+ request.content_encoding = value
457
+ when /^location$/i
458
+ request.status = 302 if request.status == 200
459
+ request.headers_out[name] = value
460
+ else
461
+ request.headers_out[name] = value
462
+ end
463
+ end
464
+ request.send_http_header
465
+ return ''
466
+ end; private :_header_for_modruby
467
+
468
+ # ========================================================================= #
469
+ # === out
470
+ #
471
+ # Print an HTTP header and body to $DEFAULT_OUTPUT ($>)
472
+ #
473
+ # :call-seq:
474
+ # cgi.out(content_type_string='text/html')
475
+ # cgi.out(headers_hash)
476
+ #
477
+ # +content_type_string+::
478
+ # If a string is passed, it is assumed to be the content type.
479
+ #
480
+ # +headers_hash+::
481
+ # This is a Hash of headers, similar to that used by #http_header.
482
+ #
483
+ # +block+::
484
+ # A block is required and should evaluate to the body of the response.
485
+ #
486
+ # <tt>Content-Length</tt> is automatically calculated from the size of
487
+ # the String returned by the content block.
488
+ #
489
+ # If <tt>ENV['REQUEST_METHOD'] == "HEAD"</tt>, then only the header
490
+ # is output (the content block is still required, but it is ignored).
491
+ #
492
+ # If the charset is "iso-2022-jp" or "euc-jp" or "shift_jis" then the
493
+ # content is converted to this charset, and the language is set to "ja".
494
+ #
495
+ # Example:
496
+ #
497
+ # cgi = CGI.new
498
+ # cgi.out{ "string" }
499
+ # # Content-Type: text/html
500
+ # # Content-Length: 6
501
+ # #
502
+ # # string
503
+ #
504
+ # cgi.out("text/plain") { "string" }
505
+ # # Content-Type: text/plain
506
+ # # Content-Length: 6
507
+ # #
508
+ # # string
509
+ #
510
+ # cgi.out("nph" => true,
511
+ # "status" => "OK", # == "200 OK"
512
+ # "server" => ENV['SERVER_SOFTWARE'],
513
+ # "connection" => "close",
514
+ # "type" => "text/html",
515
+ # "charset" => "iso-2022-jp",
516
+ # # Content-Type: text/html; charset=iso-2022-jp
517
+ # "language" => "ja",
518
+ # "expires" => Time.now + (3600 * 24 * 30),
519
+ # "cookie" => [cookie1, cookie2],
520
+ # "my_header1" => "my_value",
521
+ # "my_header2" => "my_value") { "string" }
522
+ # # HTTP/1.1 200 OK
523
+ # # Date: Sun, 15 May 2011 17:35:54 GMT
524
+ # # Server: Apache 2.2.0
525
+ # # Connection: close
526
+ # # Content-Type: text/html; charset=iso-2022-jp
527
+ # # Content-Length: 6
528
+ # # Content-Language: ja
529
+ # # Expires: Tue, 14 Jun 2011 17:35:54 GMT
530
+ # # Set-Cookie: foo
531
+ # # Set-Cookie: bar
532
+ # # my_header1: my_value
533
+ # # my_header2: my_value
534
+ # #
535
+ # # string
536
+ # ========================================================================= #
537
+ def out(options = 'text/html') # :yield:
538
+ options = { 'type' => options } if options.is_a? String
539
+ content = yield
540
+ options['length'] = content.bytesize.to_s
541
+ output = stdoutput
542
+ output.binmode if defined? output.binmode
543
+ output.print http_header(options)
544
+ output.print content unless 'HEAD' == env_table['REQUEST_METHOD']
545
+ end
546
+
547
+ # ========================================================================= #
548
+ # === print
549
+ #
550
+ # Print an argument or list of arguments to the default output stream
551
+ #
552
+ # cgi = CGI.new
553
+ # cgi.print # default: cgi.print == $DEFAULT_OUTPUT.print
554
+ # ========================================================================= #
555
+ def print(*options)
556
+ stdoutput.print(*options)
557
+ end
558
+
559
+ # ========================================================================= #
560
+ # === CGI.parse
561
+ #
562
+ # Parse an HTTP query string into a hash of key=>value pairs.
563
+ #
564
+ # params = CGI::parse("query_string")
565
+ # # {"name1" => ["value1", "value2", ...],
566
+ # # "name2" => ["value1", "value2", ...], ... }
567
+ # ========================================================================= #
568
+ def self.parse(query)
569
+ params = {}
570
+ splitted = query.split(/[&;]/)
571
+ splitted.each { |pairs|
572
+ key, value = pairs.split('=', 2).map {|v|
573
+ CGI.unescape(v)
574
+ }
575
+ next unless key
576
+ params[key] ||= []
577
+ params[key].push(value) if value
578
+ }
579
+ params.default = [].freeze
580
+ return params
581
+ end
582
+
583
+ # =========================================================================== #
584
+ # Maximum content length of post data
585
+ # MAX_CONTENT_LENGTH = 2 * 1024 * 1024
586
+ # =========================================================================== #
587
+
588
+ # =========================================================================== #
589
+ # === MAX_MULTIPART_COUNT
590
+ #
591
+ # Maximum number of request parameters when multipart
592
+ # =========================================================================== #
593
+ MAX_MULTIPART_COUNT = 128
594
+
595
+ # =========================================================================== #
596
+ # Return the accept character set for this CGI instance.
597
+ # =========================================================================== #
598
+ attr_reader :accept_charset
599
+
600
+ # =========================================================================== #
601
+ # @@accept_charset is default accept character set.
602
+ #
603
+ # This default value default is "UTF-8"
604
+ # If you want to change the default accept character set
605
+ # when create a new CGI instance, set this:
606
+ #
607
+ # CGI.accept_charset = 'EUC-JP'
608
+ # =========================================================================== #
609
+ @@accept_charset = 'UTF-8'
610
+
611
+ # =========================================================================== #
612
+ # === CGI.accept_charset?
613
+ #
614
+ # Return the accept character set for all new CGI instances.
615
+ # =========================================================================== #
616
+ def self.accept_charset?
617
+ @@accept_charset
618
+ end; self.instance_eval { alias accept_charset accept_charset? } # === CGI.accept_charset
619
+
620
+ # =========================================================================== #
621
+ # === CGI.accept_charset=
622
+ #
623
+ # Set the accepted character set for all new CGI instances.
624
+ # =========================================================================== #
625
+ def self.accept_charset=(i)
626
+ @@accept_charset = i
627
+ end
628
+
629
+ # ========================================================================= #
630
+ # === env_table
631
+ #
632
+ # Synonym for ENV.
633
+ # ========================================================================= #
634
+ def env_table
635
+ ENV
636
+ end; private :env_table
637
+
638
+ end; end # class CGI