cyberweb 0.4.174 → 0.5.225

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.

Potentially problematic release.


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

Files changed (625) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1782 -405
  3. data/bin/cyberweb_sanitize +10 -0
  4. data/bin/download_webpage +7 -0
  5. data/bin/html_to_cyberweb_converter +7 -0
  6. data/cyberweb.gemspec +25 -25
  7. data/doc/README.gen +1745 -383
  8. data/doc/USAGE.md +16 -16
  9. data/doc/{AUTHORS.md → authors.md} +0 -0
  10. data/doc/configuration/configuration.md +3 -1
  11. data/doc/deprecations.md +13 -7
  12. data/doc/{DOCUMENTATION_FOR_CYBERSPRAWL.md → documentation_for_cybersprawl.md} +7 -4
  13. data/doc/future_design_goals.md +33 -0
  14. data/doc/html_characters.md +7 -7
  15. data/doc/{JQUERY.md → jquery/jquery.md} +20 -12
  16. data/doc/{MOUSE.md → mouse.md} +1 -9
  17. data/doc/{RENDER_WEB_BASE.md → render_web_base.md} +11 -4
  18. data/doc/todo/todo_for_the_cyberweb_project.md +791 -0
  19. data/examples/advanced/animated_css_example/animated_css_example.html +47 -0
  20. data/examples/advanced/animated_submarine/animated_submarine.html +511 -0
  21. data/examples/advanced/animated_windmill/animated_windmill.html +468 -0
  22. data/examples/advanced/delayed_update_of_the_body_via_javascript.cgi +8 -5
  23. data/examples/advanced/draw_circle/draw_circle.cgi +36 -0
  24. data/examples/advanced/drop_shadow_examples.cgi +37 -0
  25. data/examples/advanced/games/snake/food.png +0 -0
  26. data/examples/advanced/games/snake/ground.png +0 -0
  27. data/examples/advanced/games/snake/snake.cgi +28 -0
  28. data/examples/advanced/games/tetris/tetris.cgi +7 -0
  29. data/examples/advanced/games/tetris/tetris.rb +17 -0
  30. data/examples/advanced/games/tetris/tetris.sinatra +58 -0
  31. data/examples/advanced/games/tic-tac-toe/tic-tac-toe.cgi +123 -0
  32. data/examples/advanced/get_some_coffee/get_some_coffee.html +293 -0
  33. data/examples/advanced/glow_on_hover_example/glow_on_hover_example.cgi +27 -0
  34. data/examples/advanced/hybrid_experiment.cgi +34 -12
  35. data/examples/advanced/images/global_css_rules_for_the_images.cgi +32 -0
  36. data/examples/advanced/larger_image_on_mouse_over_example.cgi +2 -2
  37. data/examples/advanced/no_right_click.cgi +4 -3
  38. data/examples/advanced/{objectified_html_tags.cgi → objectified_html_tags/objectified_html_tags.cgi} +12 -3
  39. data/examples/advanced/objectified_html_tags/testing_objectified_html_tags_with_the_webobject.cgi +28 -0
  40. data/examples/advanced/random_glow_effects.cgi +34 -0
  41. data/examples/advanced/select_everything_example/select_everything_example.cgi +25 -0
  42. data/examples/advanced/simple_calculator.cgi +13 -21
  43. data/examples/advanced/simple_form_example.cgi +11 -11
  44. data/examples/advanced/traffic_light/traffic_light.html +163 -0
  45. data/examples/advanced/weather_animation/weather_animation.html +560 -0
  46. data/examples/css/animated_3D_cube_example/animated_3D_cube_example.html +265 -0
  47. data/examples/css/animated_bird_example/animated_bird_example.html +207 -0
  48. data/examples/css/animated_desk_example/animated_desk_example.html +120 -0
  49. data/examples/css/animated_dog_example/animated_dog_example.html +432 -0
  50. data/examples/css/animated_submit_button.html +190 -0
  51. data/examples/css/animated_text_colour_change/animated_text_colour_change.html +41 -0
  52. data/examples/css/blue_border.html +3 -1
  53. data/examples/css/border_image_example/border_image_example.html +40 -0
  54. data/examples/css/box_shadow/box_shadow_example.html +18 -0
  55. data/examples/css/christmas_snow_globe_animation.html +596 -0
  56. data/examples/css/css_border_spacing_example.html +5 -5
  57. data/examples/css/css_bubbles.html +3 -1
  58. data/examples/css/css_checkboxes_example/css_checkboxes_example.html +110 -0
  59. data/examples/css/css_drag_and_drop.html +1 -5
  60. data/examples/css/css_grid_feline_style/css_grid_feline_style.html +161 -0
  61. data/examples/css/css_neon_glow_effects.html +1 -1
  62. data/examples/css/css_rotate_these_words.html +83 -0
  63. data/examples/css/css_text_decoration_example.html +7 -7
  64. data/examples/css/css_thermometer/css_thermometer.html +91 -0
  65. data/examples/css/{css_tooltip.html → css_tooltip/css_tooltip.html} +8 -6
  66. data/examples/css/css_typewriter_example/css_typewriter_example.html +226 -0
  67. data/examples/css/cyberweb_animated_logo/cyberweb_animated_logo.html +179 -0
  68. data/examples/css/daily_coffee/daily_coffee.html +1110 -0
  69. data/examples/css/different_colour_on_selected_text/different_colour_on_selected_text.html +31 -0
  70. data/examples/css/differentially_glowing_text_example/differentially_glowing_text_example.html +82 -0
  71. data/examples/css/fade_in_and_fade_out_effect.html +2 -2
  72. data/examples/css/flying_birds_example/flying_birds_example.html +171 -0
  73. data/examples/css/folding_cards_example/folding_cards_example.html +624 -0
  74. data/examples/css/font_size_examples.html +7 -5
  75. data/examples/css/glowing_on_hover_animation/glowing_on_hover_animation.html +90 -0
  76. data/examples/css/grow_example.html +31 -0
  77. data/examples/css/happy_toaster_example/happy_toaster_example.html +830 -0
  78. data/examples/css/landing_on_mars_animation/landing_on_mars_animation.html +374 -0
  79. data/examples/css/letter_spacing_example.cgi +18 -14
  80. data/examples/css/lighthouse_example/lighthouse_example.html +1161 -0
  81. data/examples/css/{meter_example.html → meter_example/meter_example.html} +0 -0
  82. data/examples/css/motorcycle_on_the_go/motorcycle_on_the_go.html +227 -0
  83. data/examples/css/on_hover_glow_effect/on_hover_glow_effect.html +50 -0
  84. data/examples/css/on_mouse_button_pressed.html +6 -4
  85. data/examples/css/our_solar_system/our_solar_system.html +441 -0
  86. data/examples/css/outline/outline_versus_border_example.html +57 -0
  87. data/examples/css/polaroid_card_effect_example/polaroid_card_effect_example.html +130 -0
  88. data/examples/css/responsive_image_gallery/responsive_image_gallery.html +97 -0
  89. data/examples/css/rotating_DNA/rotating_DNA.html +626 -0
  90. data/examples/css/rotating_sphere_example/rotating_sphere_example.html +112 -0
  91. data/examples/css/scale_example.html +4 -5
  92. data/examples/css/shadow_example_in_CSS/shadow_example_in_CSS.cgi +62 -0
  93. data/examples/css/shaking_shapes_example.html +133 -0
  94. data/examples/css/simple_stars_example/simple_stars_example.html +27 -0
  95. data/examples/css/slide_checkbox_example/slide_checkbox_example.html +564 -0
  96. data/examples/css/speak_bubble_quote_example/speak_bubble_quote_example.html +109 -0
  97. data/examples/css/speedy_truck_example/speedy_truck_example.html +168 -0
  98. data/examples/css/{sticky_div_example.html → sticky_div_example/sticky_div_example.html} +0 -0
  99. data/examples/css/stitched_div.html +9 -0
  100. data/examples/css/sun_and_clouds_animation/sun_and_clouds_animation.html +292 -0
  101. data/examples/css/talking_candles_example/talking_candles_example.html +550 -0
  102. data/examples/css/text_decoration_underline_example/text_decoration_underline_example.html +62 -0
  103. data/examples/css/this_is_a_cat/this_is_a_cat.html +219 -0
  104. data/examples/css/three_dots_indicating_page_loading.html +65 -0
  105. data/examples/css/user_select_example/user_select_example.html +24 -0
  106. data/examples/css/walking_cat/walking_cat.html +128 -0
  107. data/examples/css/water_wave_text_animation_effect/water_wave_text_animation_effect.html +86 -0
  108. data/examples/csv/README.md +2 -1
  109. data/examples/flip_card_example/flip_card_example.html +10 -3
  110. data/examples/games/README.md +3 -0
  111. data/examples/games/snake/images/food.png +0 -0
  112. data/examples/games/snake/images/ground.png +0 -0
  113. data/examples/games/snake/snake.html +16 -0
  114. data/examples/games/snake/snake.js +117 -0
  115. data/examples/games/tetris/smaller_tetris_game.html +518 -0
  116. data/examples/games/tetris/tetris.html +461 -0
  117. data/examples/games/tic-tac-toe/index.js +125 -0
  118. data/examples/games/tic-tac-toe/style.css +79 -0
  119. data/examples/games/tic-tac-toe/tic-tac-toe.html +39 -0
  120. data/examples/html/MathML/001_show_a_simple_quadratic_equation.html +22 -0
  121. data/examples/html/MathML/002_simple_equation.html +7 -0
  122. data/examples/html/MathML/003_function_of_example.html +17 -0
  123. data/examples/html/MathML/README.md +2 -0
  124. data/examples/html/abbr_example.html +2 -5
  125. data/examples/html/accordion/README.md +1 -0
  126. data/examples/html/accordion/accordion.html +56 -0
  127. data/examples/html/base64_image_example.html +8 -5
  128. data/examples/html/buttons_example.html +133 -0
  129. data/examples/html/canvas_drawing_example.html +54 -0
  130. data/examples/html/colour_wheel.html +441 -442
  131. data/examples/html/column_width_example.html +2 -2
  132. data/examples/html/custom_cursor.html +8 -5
  133. data/examples/html/cyberweb_logo/README.md +2 -0
  134. data/examples/html/cyberweb_logo/cyberweb_logo.html +11 -0
  135. data/examples/html/draggable_paragraph.html +1 -2
  136. data/examples/html/email_popup_example/email_popup_example.html +175 -0
  137. data/examples/html/fieldset_example.html +3 -1
  138. data/examples/html/font_examples/README.md +1 -0
  139. data/examples/html/font_examples/chancery_text.html +19 -0
  140. data/examples/html/font_examples/fantasy_text.html +19 -0
  141. data/examples/html/font_examples/georgia_text.html +19 -0
  142. data/examples/html/font_size_example/font_size_example.html +85 -0
  143. data/examples/html/glyph_example.html +0 -1
  144. data/examples/html/grayscale_filter_example/grayscale_filter_example.html +15 -0
  145. data/examples/html/html_links_example.html +61 -0
  146. data/examples/html/html_slider/html_slider.html +39 -0
  147. data/examples/html/input_autofocus_example.html +11 -7
  148. data/examples/html/input_placeholder_example.html +15 -0
  149. data/examples/html/larger_image_on_mouse_over_example.html +1 -1
  150. data/examples/html/ordered_and_unordered_bulletsin.html +4 -2
  151. data/examples/html/play_video_example.html +3 -2
  152. data/examples/html/remote_image_example.html +8 -2
  153. data/examples/html/select_everything_on_mouse_click_event.html +38 -0
  154. data/examples/html/selected_text_appears_in_another_colour_example.html +34 -0
  155. data/examples/html/send_email_hyperlink/send_email_hyperlink.html +8 -0
  156. data/examples/html/simple_unordered_list.html +3 -0
  157. data/examples/html/spinner_example/spinner.html +79 -0
  158. data/examples/html/table_with_header_example.html +26 -13
  159. data/examples/html/test_mkv_codec/test_mkv_codec.html +11 -0
  160. data/examples/html/two_columns_flex_example.html +4 -1
  161. data/examples/{javascript → javascript_and_jquery}/README.md +0 -0
  162. data/examples/{javascript → javascript_and_jquery}/arrays/arrays_example_in_javascript.html +0 -0
  163. data/examples/javascript_and_jquery/autocomplete_on_an_input_field/autocomplete_on_an_input_field.html +295 -0
  164. data/examples/javascript_and_jquery/change_the_background_colour_dynamically/change_the_background_colour_dynamically.html +41 -0
  165. data/examples/{javascript → javascript_and_jquery}/delay_example/delay_example.html +0 -0
  166. data/examples/{javascript → javascript_and_jquery}/drag_support/drag_support.html +0 -0
  167. data/examples/javascript_and_jquery/jquery_bubbling_header/bubbling_header.html +109 -0
  168. data/examples/{javascript → javascript_and_jquery}/jquery_drag_and_drop/drag_and_drop_image_example.html +0 -0
  169. data/examples/javascript_and_jquery/jquery_showcase/README.md +6 -0
  170. data/examples/javascript_and_jquery/jquery_showcase/jquery_001.cgi +23 -0
  171. data/examples/javascript_and_jquery/jquery_showcase/jquery_002.cgi +34 -0
  172. data/examples/javascript_and_jquery/jquery_showcase/jquery_003.cgi +24 -0
  173. data/examples/javascript_and_jquery/jquery_showcase/jquery_004.cgi +34 -0
  174. data/examples/javascript_and_jquery/on_change_event/on_change_event.html +29 -0
  175. data/examples/javascript_and_jquery/on_click_colour_change/on_click_colour_change.html +31 -0
  176. data/examples/javascript_and_jquery/on_click_display_random_number/on_click_display_random_number.html +43 -0
  177. data/examples/{javascript → javascript_and_jquery}/on_click_event_hello_world/on_click_event_hello_world.html +0 -0
  178. data/examples/javascript_and_jquery/on_mouse_wheel_event/on_mouse_wheel_event.html +37 -0
  179. data/examples/javascript_and_jquery/read_the_content_of_a_local_file/read_the_content_of_a_local_file.html +35 -0
  180. data/examples/{javascript → javascript_and_jquery}/rgb_to_hex/rgb_to_hex.html +0 -0
  181. data/examples/{javascript → javascript_and_jquery}/screen_resolution/screen_resolution.html +2 -1
  182. data/examples/{javascript → javascript_and_jquery}/select_everything/select_everything.html +1 -1
  183. data/examples/javascript_and_jquery/vue/README.md +1 -0
  184. data/examples/javascript_and_jquery/vue/showcasing_vue.html +80 -0
  185. data/examples/{javascript → javascript_and_jquery}/write_into_a_file/write_into_a_file.html +0 -0
  186. data/examples/rack/example_with_html_template.rb +5 -4
  187. data/examples/rack/example_with_rack_and_cyberweb_showing_how_to_use_images.rb +3 -2
  188. data/examples/rack/hello_world_example_with_rack.rb +3 -2
  189. data/examples/rack/lobster.rb +7 -5
  190. data/examples/rack/rack_env.rb +3 -3
  191. data/examples/{show_greek_letters.rb → show_greek_letters/show_greek_letters.rb} +0 -0
  192. data/examples/simple/input_example_with_coloured_focus.cgi +32 -0
  193. data/examples/simple/input_type_examples.cgi +51 -0
  194. data/examples/simple/on_click_event_hello_world.cgi +5 -5
  195. data/examples/simple/rotate_these_words.cgi +90 -0
  196. data/examples/{example1.rb → simple/show_how_to_set_a_title.rb} +0 -0
  197. data/examples/simple/simple_gradient.cgi +57 -0
  198. data/images/cyberweb_favicon.png +0 -0
  199. data/images/cyberweb_logo.png +0 -0
  200. data/images/cyberweb_theme.png +0 -0
  201. data/lib/cyberweb/REST/README.md +7 -0
  202. data/lib/cyberweb/REST/base/accept_entry.rb +94 -0
  203. data/lib/cyberweb/REST/base/application.rb +37 -0
  204. data/lib/cyberweb/REST/base/bad_request.rb +10 -0
  205. data/lib/cyberweb/REST/base/base.rb +1131 -0
  206. data/lib/cyberweb/REST/base/common_logger.rb +35 -0
  207. data/lib/cyberweb/REST/base/delegator.rb +75 -0
  208. data/lib/cyberweb/REST/base/error.rb +8 -0
  209. data/lib/cyberweb/REST/base/extended_rack.rb +66 -0
  210. data/lib/cyberweb/REST/base/helpers/helpers.rb +473 -0
  211. data/lib/cyberweb/REST/base/helpers/stream.rb +75 -0
  212. data/lib/cyberweb/REST/base/mime_type_entry.rb +67 -0
  213. data/lib/cyberweb/{constants/file_constants.rb → REST/base/not_found.rb} +10 -5
  214. data/lib/cyberweb/REST/base/request.rb +145 -0
  215. data/lib/cyberweb/REST/base/response.rb +94 -0
  216. data/lib/cyberweb/REST/base/templates/templates.rb +208 -0
  217. data/lib/cyberweb/REST/base/wrapper.rb +28 -0
  218. data/lib/cyberweb/{constants/nl.rb → REST/constants.rb} +8 -9
  219. data/lib/cyberweb/REST/main.rb +109 -0
  220. data/lib/cyberweb/REST/show_exceptions.rb +396 -0
  221. data/lib/cyberweb/and_sinatra_base.rb +0 -0
  222. data/lib/cyberweb/autoinclude.rb +0 -0
  223. data/lib/cyberweb/autoinclude_webobject.rb +0 -0
  224. data/lib/cyberweb/base/base.rb +9 -2
  225. data/lib/cyberweb/base/colours.rb +8 -6
  226. data/lib/cyberweb/base/constants.rb +8 -0
  227. data/lib/cyberweb/base/misc.rb +140 -53
  228. data/lib/cyberweb/base/save_file.rb +3 -0
  229. data/lib/cyberweb/base_module/base_module.rb +79 -0
  230. data/lib/cyberweb/cascading_style_sheets/admonition.css +0 -0
  231. data/lib/cyberweb/cascading_style_sheets/balloon.css +0 -0
  232. data/lib/cyberweb/cascading_style_sheets/border.css +107 -41
  233. data/lib/cyberweb/cascading_style_sheets/code.css +0 -0
  234. data/lib/cyberweb/cascading_style_sheets/colours.css +46 -23
  235. data/lib/cyberweb/cascading_style_sheets/css_reset.css +59 -0
  236. data/lib/cyberweb/cascading_style_sheets/cursors.css +14 -0
  237. data/lib/cyberweb/cascading_style_sheets/custom/animated_bike.css +199 -0
  238. data/lib/cyberweb/cascading_style_sheets/default.css +171 -136
  239. data/lib/cyberweb/cascading_style_sheets/div.css +18 -4
  240. data/lib/cyberweb/cascading_style_sheets/drop_shadow.css +154 -0
  241. data/lib/cyberweb/cascading_style_sheets/error_404_css_class.css +26 -0
  242. data/lib/cyberweb/cascading_style_sheets/fonts.css +60 -39
  243. data/lib/cyberweb/cascading_style_sheets/glow_effects.css +69 -0
  244. data/lib/cyberweb/cascading_style_sheets/gradient_effects.css +5 -0
  245. data/lib/cyberweb/cascading_style_sheets/hover.css +4212 -0
  246. data/lib/cyberweb/cascading_style_sheets/links.css +8 -8
  247. data/lib/cyberweb/cascading_style_sheets/margin.css +195 -178
  248. data/lib/cyberweb/cascading_style_sheets/menu.css +0 -0
  249. data/lib/cyberweb/cascading_style_sheets/message_boxes.css +0 -0
  250. data/lib/cyberweb/cascading_style_sheets/misc.css +51 -11
  251. data/lib/cyberweb/cascading_style_sheets/popup.css +0 -0
  252. data/lib/cyberweb/cascading_style_sheets/rpg.css +0 -0
  253. data/lib/cyberweb/cascading_style_sheets/ruby_regexes.css +12 -0
  254. data/lib/cyberweb/cascading_style_sheets/shapes.css +59 -0
  255. data/lib/cyberweb/cascading_style_sheets/template2.css +0 -0
  256. data/lib/cyberweb/cascading_style_sheets/text_shadow.css +21 -0
  257. data/lib/cyberweb/cascading_style_sheets/tooltip.css +0 -0
  258. data/lib/cyberweb/cgi/constants.rb +1 -2
  259. data/lib/cyberweb/cgi/exceptions.rb +1 -1
  260. data/lib/cyberweb/coloured_tags/coloured_tags.rb +1 -1
  261. data/lib/cyberweb/colours/colour_chart.rb +10 -56
  262. data/lib/cyberweb/colours/colours.rb +149 -4
  263. data/lib/cyberweb/commandline/commandline_interface.rb +13 -8
  264. data/lib/cyberweb/configuration/load_the_configuration_file.rb +1 -1
  265. data/lib/cyberweb/constants/constants.rb +592 -2
  266. data/lib/cyberweb/controller/{webobject_controller.rb → controller.rb} +1 -1
  267. data/lib/cyberweb/css_manager/css_manager.rb +237 -0
  268. data/lib/cyberweb/databases/sqlite.rb +56 -0
  269. data/lib/cyberweb/debug/debug.rb +1 -1
  270. data/lib/cyberweb/encoding/encoding.rb +11 -0
  271. data/lib/cyberweb/erb/test.rhtml +0 -0
  272. data/lib/cyberweb/erb/test_template.erb +0 -0
  273. data/lib/cyberweb/evaluate_from_the_same_named_file_then_serve.rb +1 -1
  274. data/lib/cyberweb/favicon/favicon.rb +8 -7
  275. data/lib/cyberweb/forum/README.md +4 -0
  276. data/lib/cyberweb/foto_gallery/foto_gallery.rb +158 -0
  277. data/lib/cyberweb/generator/README.md +2 -2
  278. data/lib/cyberweb/generator/cgi.rb +22 -9
  279. data/lib/cyberweb/generator/static_webpage.rb +22 -12
  280. data/lib/cyberweb/html_tags/README.md +3 -3
  281. data/lib/cyberweb/html_tags/button.rb +10 -2
  282. data/lib/cyberweb/html_tags/h2.rb +6 -4
  283. data/lib/cyberweb/html_tags/html_tags.rb +17 -1
  284. data/lib/cyberweb/html_tags/input.rb +10 -5
  285. data/lib/cyberweb/html_tags/legend.rb +1 -1
  286. data/lib/cyberweb/html_tags/span.rb +10 -2
  287. data/lib/cyberweb/html_tags/table.rb +30 -19
  288. data/lib/cyberweb/html_template/html_template.rb +248 -85
  289. data/lib/cyberweb/images/embed_this_image.rb +3 -1
  290. data/lib/cyberweb/images/images.rb +2 -2
  291. data/lib/cyberweb/images/is_image.rb +2 -1
  292. data/lib/cyberweb/images/path_to_images.rb +2 -1
  293. data/lib/cyberweb/images/remove_this_substring_from_all_images.rb +1 -1
  294. data/lib/cyberweb/images/standalone_drag_and_drop_this_image.rb +3 -3
  295. data/lib/cyberweb/images/string_image.rb +6 -3
  296. data/lib/cyberweb/images_base64_encoded/404_ERROR.png.md +1 -0
  297. data/lib/cyberweb/images_base64_encoded/AUSRUFUNGSZEICHEN.png.md +0 -0
  298. data/lib/cyberweb/images_base64_encoded/BLUEARROW.png.md +0 -0
  299. data/lib/cyberweb/images_base64_encoded/BUBBLE.png.md +0 -0
  300. data/lib/cyberweb/images_base64_encoded/CAT.png.md +0 -0
  301. data/lib/cyberweb/images_base64_encoded/CAUTION.png.md +0 -0
  302. data/lib/cyberweb/images_base64_encoded/CHEERING_PERSON.png.md +0 -0
  303. data/lib/cyberweb/images_base64_encoded/CURSOR.png.md +0 -0
  304. data/lib/cyberweb/images_base64_encoded/DOT_01.png.md +0 -0
  305. data/lib/cyberweb/images_base64_encoded/DUCKY.png.md +0 -0
  306. data/lib/cyberweb/images_base64_encoded/ELEPHANT.png.md +0 -0
  307. data/lib/cyberweb/images_base64_encoded/HALLOWEEN.png.md +0 -0
  308. data/lib/cyberweb/images_base64_encoded/HANGING_MONKEY.png.md +0 -0
  309. data/lib/cyberweb/images_base64_encoded/LENS.png.md +0 -0
  310. data/lib/cyberweb/images_base64_encoded/README.md +0 -0
  311. data/lib/cyberweb/images_base64_encoded/SIX_SIDED_DICE.png.md +1 -0
  312. data/lib/cyberweb/images_base64_encoded/TU_WIEN_LOGO.png.md +0 -0
  313. data/lib/cyberweb/images_base64_encoded/VOGEL.png.md +0 -0
  314. data/lib/cyberweb/javascript/drag_and_drop.rb +17 -14
  315. data/lib/cyberweb/javascript/javascript.rb +79 -34
  316. data/lib/cyberweb/javascript/javascript_clock.rb +50 -14
  317. data/lib/cyberweb/javascript/javascript_helper/javascript_helper.rb +59 -0
  318. data/lib/cyberweb/javascript/jquery.rb +9 -5
  319. data/lib/cyberweb/javascript/on_click_change_opacity.rb +5 -1
  320. data/lib/cyberweb/javascript/on_click_hide.rb +2 -0
  321. data/lib/cyberweb/javascript/popup.rb +5 -2
  322. data/lib/cyberweb/javascript/resize.rb +4 -1
  323. data/lib/cyberweb/javascript_code/README.md +1 -1
  324. data/lib/cyberweb/javascript_code/custom_functions.js +51 -25
  325. data/lib/cyberweb/javascript_code/disable_right_click.js +5 -0
  326. data/lib/cyberweb/javascript_code/games/snake.js +113 -0
  327. data/lib/cyberweb/javascript_code/games/tetris.js +491 -0
  328. data/lib/cyberweb/javascript_code/games/tic-tac-toe.js +125 -0
  329. data/lib/cyberweb/javascript_code/html_colours.js +161 -0
  330. data/lib/cyberweb/javascript_code/jquery/jquery-3.6.1.js +10909 -0
  331. data/lib/cyberweb/javascript_code/select_everything_on_mouse_click_event.js +23 -0
  332. data/lib/cyberweb/javascript_code/simple_calculator.js +3 -3
  333. data/lib/cyberweb/javascript_code/simulate_a_dice.js +20 -0
  334. data/lib/cyberweb/javascript_code/sleep.js +3 -0
  335. data/lib/cyberweb/mouse/mouse.rb +4 -1
  336. data/lib/cyberweb/objectified/html_tags/README.md +13 -0
  337. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/a.rb +17 -35
  338. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/abbr.rb +18 -9
  339. data/lib/cyberweb/objectified/html_tags/base.rb +960 -0
  340. data/lib/cyberweb/objectified/html_tags/blockquote.rb +106 -0
  341. data/lib/cyberweb/{objectified_html_tags/span.rb → objectified/html_tags/body.rb} +25 -20
  342. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/button.rb +26 -34
  343. data/lib/cyberweb/objectified/html_tags/canvas.rb +202 -0
  344. data/lib/cyberweb/objectified/html_tags/cite.rb +103 -0
  345. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/combobox.rb +26 -34
  346. data/lib/cyberweb/objectified/html_tags/div.rb +155 -0
  347. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/embed.rb +18 -33
  348. data/lib/cyberweb/objectified/html_tags/fieldset.rb +107 -0
  349. data/lib/cyberweb/objectified/html_tags/figure.rb +152 -0
  350. data/lib/cyberweb/objectified/html_tags/form.rb +155 -0
  351. data/lib/cyberweb/objectified/html_tags/h1.rb +176 -0
  352. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/h2.rb +32 -40
  353. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/h3.rb +30 -42
  354. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/h4.rb +30 -42
  355. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/h5.rb +31 -40
  356. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/h6.rb +31 -41
  357. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/hbox.rb +12 -10
  358. data/lib/cyberweb/objectified/html_tags/head.rb +126 -0
  359. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/img.rb +47 -32
  360. data/lib/cyberweb/objectified/html_tags/include_objectified_html_tags.rb +49 -0
  361. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/input.rb +50 -51
  362. data/lib/cyberweb/objectified/html_tags/map.rb +107 -0
  363. data/lib/cyberweb/{objectified_html_tags/div.rb → objectified/html_tags/meta.rb} +36 -47
  364. data/lib/cyberweb/{objectified_html_tags/h1.rb → objectified/html_tags/object.rb} +34 -42
  365. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/p.rb +17 -32
  366. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/pre.rb +28 -34
  367. data/lib/cyberweb/{objectified_html_tags/table.rb → objectified/html_tags/progress.rb} +99 -94
  368. data/lib/cyberweb/objectified/html_tags/span.rb +103 -0
  369. data/lib/cyberweb/objectified/html_tags/table.rb +257 -0
  370. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/textarea.rb +25 -36
  371. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/title.rb +11 -17
  372. data/lib/cyberweb/{objectified_html_tags/form.rb → objectified/html_tags/ul.rb} +45 -42
  373. data/lib/cyberweb/{objectified_html_tags → objectified/html_tags}/window.rb +15 -10
  374. data/lib/cyberweb/objectified/mask/README.md +8 -0
  375. data/lib/cyberweb/objectified/mask/compatibility_to_html_tags.rb +40 -0
  376. data/lib/cyberweb/objectified/mask/mask.rb +490 -0
  377. data/lib/cyberweb/objectified/web_object/README.md +4 -0
  378. data/lib/cyberweb/objectified/web_object/web_object.rb +119 -0
  379. data/lib/cyberweb/predefined_and_freeform_methods/frage.rb +4 -2
  380. data/lib/cyberweb/predefined_and_freeform_methods/freeform_methods.rb +30 -19
  381. data/lib/cyberweb/predefined_and_freeform_methods/hash_registered_extra_tags.rb +6 -0
  382. data/lib/cyberweb/predefined_and_freeform_methods/header.rb +2 -0
  383. data/lib/cyberweb/predefined_and_freeform_methods/predefined_methods.rb +10 -175
  384. data/lib/cyberweb/project/project.rb +9 -4
  385. data/lib/cyberweb/rack/request.rb +11 -11
  386. data/lib/cyberweb/raw_images/404.png +0 -0
  387. data/lib/cyberweb/raw_images/500.png +0 -0
  388. data/lib/cyberweb/raw_images/README.md +2 -0
  389. data/lib/cyberweb/raw_images/a_dice.png +0 -0
  390. data/lib/cyberweb/raw_images/food.png +0 -0
  391. data/lib/cyberweb/raw_images/ground.png +0 -0
  392. data/lib/cyberweb/requires/require_generators.rb +1 -1
  393. data/lib/cyberweb/requires/require_html_tags_files.rb +1 -1
  394. data/lib/cyberweb/requires/require_javascript_files.rb +1 -1
  395. data/lib/cyberweb/requires/require_objectified_html_tags_files.rb +29 -3
  396. data/lib/cyberweb/requires/require_the_constants.rb +3 -1
  397. data/lib/cyberweb/requires/require_the_cyberweb_project.rb +12 -31
  398. data/lib/cyberweb/requires/require_the_toplevel_methods_files.rb +1 -1
  399. data/lib/cyberweb/requires/require_web_object_files.rb +1 -1
  400. data/lib/cyberweb/requires/require_yaml.rb +3 -3
  401. data/lib/cyberweb/rest +1 -0
  402. data/lib/cyberweb/route_handler/class_based_test.rb +43 -0
  403. data/lib/cyberweb/route_handler/module/misc.rb +108 -0
  404. data/lib/cyberweb/route_handler/module/route_handler_module.rb +215 -0
  405. data/lib/cyberweb/route_handler/module/verbs.rb +53 -0
  406. data/lib/cyberweb/route_handler/route_handler.rb +56 -0
  407. data/lib/cyberweb/route_handler/test.rb +43 -0
  408. data/lib/cyberweb/{constants/array_predefined_constants.rb → sinatra/base/set_use_this_port.rb} +16 -9
  409. data/lib/cyberweb/sinatra/base/use_this_port.rb +40 -0
  410. data/lib/cyberweb/sinatra/base.rb +51 -36
  411. data/lib/cyberweb/sinatra/custom_extensions.rb +39 -14
  412. data/lib/cyberweb/standalone_classes/all_css_classes.rb +1 -1
  413. data/lib/cyberweb/standalone_classes/calculator.rb +7 -1
  414. data/lib/cyberweb/standalone_classes/correct_image_entries_in_html_file.rb +12 -7
  415. data/lib/cyberweb/standalone_classes/turn_html_into_cyberweb.rb +13 -11
  416. data/lib/cyberweb/svg/standalone/README.md +2 -0
  417. data/lib/cyberweb/svg/standalone/amusement_park.svg +738 -0
  418. data/lib/cyberweb/svg/svg.cgi +2 -3
  419. data/lib/cyberweb/toplevel_methods/a.rb +2 -1
  420. data/lib/cyberweb/toplevel_methods/anmerkung.rb +3 -0
  421. data/lib/cyberweb/toplevel_methods/audio.rb +1 -1
  422. data/lib/cyberweb/toplevel_methods/bold.rb +9 -3
  423. data/lib/cyberweb/toplevel_methods/charsets.rb +17 -13
  424. data/lib/cyberweb/toplevel_methods/consider_serving_the_web_object.rb +3 -3
  425. data/lib/cyberweb/toplevel_methods/css.rb +719 -25
  426. data/lib/cyberweb/{csv → toplevel_methods}/csv.rb +5 -3
  427. data/lib/cyberweb/{constants/roebe.rb → toplevel_methods/custom_error_page.rb} +10 -10
  428. data/lib/cyberweb/toplevel_methods/{date.rb → date_and_time.rb} +23 -10
  429. data/lib/cyberweb/toplevel_methods/disable.rb +7 -3
  430. data/lib/cyberweb/toplevel_methods/dot.rb +2 -2
  431. data/lib/cyberweb/toplevel_methods/download_webpage.rb +41 -3
  432. data/lib/cyberweb/toplevel_methods/edit_configuration_file.rb +1 -1
  433. data/lib/cyberweb/toplevel_methods/fields.rb +2 -0
  434. data/lib/cyberweb/toplevel_methods/filename.rb +3 -1
  435. data/lib/cyberweb/toplevel_methods/frames.rb +0 -2
  436. data/lib/cyberweb/toplevel_methods/google.rb +52 -0
  437. data/lib/cyberweb/{html_codes → toplevel_methods}/greek_letters.rb +22 -1
  438. data/lib/cyberweb/toplevel_methods/hardware_information.rb +2 -1
  439. data/lib/cyberweb/{help → toplevel_methods}/help.rb +3 -2
  440. data/lib/cyberweb/toplevel_methods/html_comment.rb +2 -2
  441. data/lib/cyberweb/toplevel_methods/html_tables.rb +401 -266
  442. data/lib/cyberweb/toplevel_methods/internal_hash.rb +173 -0
  443. data/lib/cyberweb/{io → toplevel_methods}/io.rb +1 -1
  444. data/lib/cyberweb/toplevel_methods/javascript.rb +42 -0
  445. data/lib/cyberweb/toplevel_methods/jquery.rb +8 -0
  446. data/lib/cyberweb/toplevel_methods/last_modified.rb +4 -0
  447. data/lib/cyberweb/toplevel_methods/links.rb +23 -7
  448. data/lib/cyberweb/toplevel_methods/listing.rb +2 -1
  449. data/lib/cyberweb/toplevel_methods/localhost.rb +3 -0
  450. data/lib/cyberweb/toplevel_methods/markdown.rb +3 -2
  451. data/lib/cyberweb/toplevel_methods/mathml.rb +5 -3
  452. data/lib/cyberweb/toplevel_methods/message_boxes.rb +6 -2
  453. data/lib/cyberweb/toplevel_methods/misc.rb +531 -79
  454. data/lib/cyberweb/toplevel_methods/padlem_and_marlem.rb +3 -0
  455. data/lib/cyberweb/toplevel_methods/path.rb +6 -1
  456. data/lib/cyberweb/toplevel_methods/pdf.rb +1 -1
  457. data/lib/cyberweb/toplevel_methods/process_content.rb +4 -7
  458. data/lib/cyberweb/toplevel_methods/progress.rb +6 -2
  459. data/lib/cyberweb/toplevel_methods/quote.rb +7 -1
  460. data/lib/cyberweb/toplevel_methods/random.rb +4 -1
  461. data/lib/cyberweb/toplevel_methods/rds.rb +14 -6
  462. data/lib/cyberweb/toplevel_methods/read_and_display.rb +3 -2
  463. data/lib/cyberweb/toplevel_methods/return_head_start.rb +1 -1
  464. data/lib/cyberweb/toplevel_methods/return_html_fin.rb +6 -3
  465. data/lib/cyberweb/toplevel_methods/return_html_header.rb +8 -3
  466. data/lib/cyberweb/toplevel_methods/return_html_start.rb +7 -2
  467. data/lib/cyberweb/toplevel_methods/return_meta_collection.rb +15 -4
  468. data/lib/cyberweb/toplevel_methods/return_pwd.rb +4 -0
  469. data/lib/cyberweb/toplevel_methods/return_strict_doctype.rb +8 -7
  470. data/lib/cyberweb/toplevel_methods/roebe.rb +6 -0
  471. data/lib/cyberweb/toplevel_methods/s2.rb +3 -1
  472. data/lib/cyberweb/toplevel_methods/sanitize_url.rb +7 -5
  473. data/lib/cyberweb/toplevel_methods/sbr.rb +7 -7
  474. data/lib/cyberweb/toplevel_methods/server_base_directory.rb +7 -3
  475. data/lib/cyberweb/toplevel_methods/show_and_display.rb +15 -15
  476. data/lib/cyberweb/toplevel_methods/show_configuration.rb +2 -2
  477. data/lib/cyberweb/toplevel_methods/spacer.rb +5 -2
  478. data/lib/cyberweb/toplevel_methods/svg.rb +62 -4
  479. data/lib/cyberweb/toplevel_methods/tag.rb +8 -2
  480. data/lib/cyberweb/toplevel_methods/temp_directory.rb +2 -2
  481. data/lib/cyberweb/toplevel_methods/textile.rb +2 -2
  482. data/lib/cyberweb/toplevel_methods/title.rb +14 -2
  483. data/lib/cyberweb/toplevel_methods/video.rb +3 -4
  484. data/lib/cyberweb/toplevel_methods/write_what_into.rb +2 -0
  485. data/lib/cyberweb/utility_scripts/README.md +3 -4
  486. data/lib/cyberweb/utility_scripts/autogenerate_drop_shadow_rules/autogenerate_drop_shadow_rules.rb +71 -0
  487. data/lib/cyberweb/utility_scripts/create_standalone_html_page.rb +223 -0
  488. data/lib/cyberweb/utility_scripts/download_all_images_from_this_website.rb +143 -0
  489. data/lib/cyberweb/utility_scripts/download_balloon_css.rb +1 -1
  490. data/lib/cyberweb/utility_scripts/fix_incorrect_links_to_locally_existing_images_in_this_file.rb +142 -0
  491. data/lib/cyberweb/utility_scripts/html_to_cyberweb_converter.rb +235 -0
  492. data/lib/cyberweb/utility_scripts/images_to_html/images_to_html.rb +878 -0
  493. data/lib/cyberweb/utility_scripts/images_to_html/misc.rb +62 -0
  494. data/lib/cyberweb/utility_scripts/new_tags.rb +105 -0
  495. data/lib/cyberweb/utility_scripts/simple_index/README.md +9 -0
  496. data/lib/cyberweb/utility_scripts/simple_index/simple_index.rb +149 -0
  497. data/lib/cyberweb/version/version.rb +2 -2
  498. data/lib/cyberweb/vue/README.md +2 -0
  499. data/lib/cyberweb/vue/vue.rb +91 -0
  500. data/lib/cyberweb/web_images/array_listing_all_project_images.rb +1 -1
  501. data/lib/cyberweb/web_images/map_symbol_to_image_location.rb +60 -4
  502. data/lib/cyberweb/web_images/web_images.rb +37 -20
  503. data/lib/cyberweb/{constants/array_images.rb → web_object/display_output_and_report.rb} +11 -10
  504. data/lib/cyberweb/web_object/english.rb +55 -0
  505. data/lib/cyberweb/web_object/favicon.rb +103 -22
  506. data/lib/cyberweb/web_object/html_tags.rb +1433 -0
  507. data/lib/cyberweb/web_object/images.rb +428 -398
  508. data/lib/cyberweb/web_object/{javascript.rb → javascript_and_jquery.rb} +174 -276
  509. data/lib/cyberweb/web_object/{links.rb → link.rb} +185 -83
  510. data/lib/cyberweb/web_object/misc.rb +3934 -3928
  511. data/lib/cyberweb/web_object/reset.rb +153 -67
  512. data/lib/cyberweb/web_object/run.rb +1 -1
  513. data/lib/cyberweb/web_object/web_object.rb +3690 -49
  514. data/lib/cyberweb/web_scraper/scrape_this_url.rb +4 -2
  515. data/lib/cyberweb/webmin/biology_server.cgi +14 -15
  516. data/lib/cyberweb/webmin/calculator.cgi +2 -2
  517. data/lib/cyberweb/webmin/colour_chart.cgi +4 -5
  518. data/lib/cyberweb/webmin/comments.cgi +8 -7
  519. data/lib/cyberweb/webmin/comments_data +0 -0
  520. data/lib/cyberweb/webmin/constants.rb +1 -2
  521. data/lib/cyberweb/webmin/dictionary.cgi +3 -4
  522. data/lib/cyberweb/webmin/sys_info.cgi +1 -2
  523. data/lib/cyberweb/webmin/webforum.cgi +1 -2
  524. data/lib/cyberweb/webmin/webmin.cgi +2 -3
  525. data/lib/cyberweb/yaml/autogenerated_system_settings.yml +10 -10
  526. data/lib/cyberweb/yaml/custom_tags.yml +1 -1
  527. data/lib/cyberweb/yaml/html5_global_attributes.yml +5 -1
  528. data/lib/cyberweb/yaml/html_tag_legend.yml +2 -0
  529. data/lib/cyberweb/yaml/http_status_codes.yml +4 -1
  530. data/lib/cyberweb/yaml/load_these_yaml_files_by_default.yml +29 -0
  531. data/lib/cyberweb/yaml/project_configuration.yml +42 -31
  532. data/lib/cyberweb/yaml/video_attributes.yml +2 -0
  533. data/lib/cyberweb/yaml/web_images.yml +1 -1
  534. data/test/REST/simple.rb +7 -0
  535. data/test/complex_tests/simple_sinatra_example_using_cyberweb/simple.rb +1 -1
  536. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.cgi +1 -1
  537. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.rb +4 -4
  538. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.sinatra +1 -2
  539. data/test/complex_tests/testing_frames.cgi +3 -5
  540. data/test/complex_tests/testing_objectified_html_tags/testing_objectified_html_tags.html +28 -0
  541. data/test/complex_tests/testing_objectified_html_tags/testing_objectified_html_tags.rb +175 -0
  542. data/test/complex_tests/testing_style_variants/show_coloured_boxes.cgi +11 -7
  543. data/test/complex_tests/testing_tables.cgi +3 -3
  544. data/test/complex_tests/testing_the_cyberweb_shell.rb +2 -0
  545. data/test/complex_tests/testing_web_object.rb +5 -2
  546. data/test/css/README.md +4 -3
  547. data/test/css/return_the_content_of_these_css_classes.rb +5 -1
  548. data/test/css/test_hover_css/test_hover_css.cgi +59 -0
  549. data/test/css/test_ordered_list/test_ordered_list.cgi +31 -0
  550. data/test/css/testing_css_effects.cgi +3 -4
  551. data/test/css/testing_css_masking.cgi +3 -4
  552. data/test/hello_world/hello_world.cgi +6 -4
  553. data/test/html_template/html_template.rb +15 -0
  554. data/test/javascript/testing_custom_functions.js +24 -0
  555. data/test/javascript/testing_drag_and_drop_support.cgi +1 -1
  556. data/test/javascript/testing_on_click_change_opacity.cgi +4 -5
  557. data/test/javascript/testing_snowflakes.cgi +2 -2
  558. data/test/simple_tests/ad-hoc-test.cgi +5 -2
  559. data/test/simple_tests/cgi/hello_world_with_cyberweb.cgi +14 -0
  560. data/test/simple_tests/commandline_tests.rb +21 -15
  561. data/test/simple_tests/display_this_file.cgi +2 -2
  562. data/test/simple_tests/simple_html_example.cgi +2 -1
  563. data/test/simple_tests/simple_html_test_page/simple_html_test_page.html +20 -0
  564. data/test/simple_tests/simple_status_page.cgi +2 -2
  565. data/test/simple_tests/string_s2_test.rb +5 -0
  566. data/test/simple_tests/test_simple_string_as_input.rb +3 -1
  567. data/test/simple_tests/testing_base64_images.cgi +3 -4
  568. data/test/simple_tests/testing_checkboxes.cgi +22 -0
  569. data/test/simple_tests/testing_dragging_an_image.cgi +5 -6
  570. data/test/simple_tests/testing_editable_text.cgi +2 -3
  571. data/test/simple_tests/testing_email.cgi +6 -7
  572. data/test/simple_tests/testing_embedding_a_pdf_file.cgi +5 -5
  573. data/test/simple_tests/testing_google_charts.cgi +3 -3
  574. data/test/simple_tests/testing_html_forms.cgi +3 -3
  575. data/test/simple_tests/testing_html_template.rb +2 -0
  576. data/test/simple_tests/testing_popup_div.cgi +2 -3
  577. data/test/simple_tests/testing_return_dataset_without_any_comments.rb +3 -1
  578. data/test/simple_tests/testing_the_cap_box.cgi +3 -4
  579. data/test/simple_tests/testing_the_div_tag.cgi +3 -4
  580. data/test/simple_tests/testing_the_headers_tag.cgi +3 -4
  581. data/test/simple_tests/testing_the_html_colours.cgi +2 -3
  582. data/test/simple_tests/testing_the_info_box.cgi +2 -3
  583. data/test/simple_tests/testing_the_li_tag.cgi +2 -1
  584. data/test/simple_tests/testing_the_s2_method.rb +6 -1
  585. data/test/simple_tests/testing_the_select_tag.cgi +16 -8
  586. data/test/simple_tests/testing_the_span_tag.cgi +2 -3
  587. data/test/simple_tests/testing_web_images.rb +4 -2
  588. data/test/testing_html_tags/button_example.cgi +6 -7
  589. metadata +345 -151
  590. data/doc/CONVENTIONS.md +0 -7
  591. data/doc/CYBERWEB_TUTORIAL.cgi +0 -43
  592. data/doc/FUTURE_DESIGN_GOAL_CONSIDERATIONS.md +0 -13
  593. data/doc/todo/TODO_FOR_THE_CYBERWEB_PROJECT.md +0 -1089
  594. data/examples/css/shadow_example_in_CSS.cgi +0 -30
  595. data/lib/cyberweb/charts/README.md +0 -2
  596. data/lib/cyberweb/charts/google_charts.rb +0 -51
  597. data/lib/cyberweb/colours/random_colour.rb +0 -28
  598. data/lib/cyberweb/colours/sanitize_for_colours.rb +0 -95
  599. data/lib/cyberweb/constants/array_local_css_files.rb +0 -35
  600. data/lib/cyberweb/constants/configuration_file.rb +0 -33
  601. data/lib/cyberweb/constants/http_status_codes.rb +0 -42
  602. data/lib/cyberweb/constants/project_constants.rb +0 -99
  603. data/lib/cyberweb/constants/standalone_constants.rb +0 -309
  604. data/lib/cyberweb/csv/README.md +0 -2
  605. data/lib/cyberweb/generator/webpage_for_images.rb +0 -553
  606. data/lib/cyberweb/html_codes/README.md +0 -15
  607. data/lib/cyberweb/images/real/README.md +0 -6
  608. data/lib/cyberweb/io/README.md +0 -1
  609. data/lib/cyberweb/javascript/scroll.rb +0 -17
  610. data/lib/cyberweb/objectified_html_tags/README.md +0 -8
  611. data/lib/cyberweb/objectified_html_tags/base.rb +0 -376
  612. data/lib/cyberweb/predefined_and_freeform_methods/hash_css_class_to_use.rb +0 -55
  613. data/lib/cyberweb/requires/require_charts.rb +0 -20
  614. data/lib/cyberweb/web_object/css.rb +0 -627
  615. data/lib/cyberweb/web_object/evaluate.rb +0 -126
  616. data/lib/cyberweb/web_object/html_related_tags.rb +0 -320
  617. data/lib/cyberweb/web_object/initialize.rb +0 -51
  618. data/lib/cyberweb/web_object/input_related_functionality.rb +0 -414
  619. data/lib/cyberweb/web_object/languages.rb +0 -172
  620. data/lib/cyberweb/web_object/params.rb +0 -289
  621. data/lib/cyberweb/web_object/sinatra_related_functionality.rb +0 -30
  622. data/lib/cyberweb/web_object/sitemap.rb +0 -176
  623. data/lib/cyberweb/web_object/table.rb +0 -378
  624. data/test/complex_tests/testing_objectified_html_tags.rb +0 -82
  625. data/test/javascript/testing_cheerleader_javascript.cgi +0 -0
@@ -0,0 +1,1433 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # This file will also include close-tags. Congregate methods such as
6
+ # input_field() - which is actually input() - are allowed to reside in
7
+ # this file as well.
8
+ # =========================================================================== #
9
+ # require 'cyberweb/web_object/html_tags.rb'
10
+ # =========================================================================== #
11
+ require 'cyberweb/base/base.rb'
12
+
13
+ module Cyberweb
14
+
15
+ class WebObject < ::Cyberweb::Base # === Cyberweb::WebObject
16
+
17
+ # ========================================================================= #
18
+ # === button (button tag)
19
+ #
20
+ # This method will "generate" a HTML button. Since as of October 2022
21
+ # this uses its own HTML element; before that input(:button) was in
22
+ # use.
23
+ #
24
+ # The following example shows how this method could be used:
25
+ #
26
+ # button {{
27
+ # text: 'Hey there!'
28
+ # }}
29
+ #
30
+ # A slightly more advanced example is the following variant:
31
+ #
32
+ # button {{
33
+ # text: 'Hey there - with more css and a Hello World alert-box in javascript when clicked by the user!',
34
+ # css_class: 'bblack1 darkgreen pad8px BOLD',
35
+ # javascript_function: 'msg("Hello world!!!")'
36
+ # }}
37
+ #
38
+ # Here is another variant, by specifically responding to a click-event, to call a specific function:
39
+ #
40
+ # button {{
41
+ # text: 'Click here'
42
+ # css_class: 'bblack1 pad8px'
43
+ # on_click_event: :on_click_event_hello_world
44
+ # }}
45
+ #
46
+ # And another variant, without a block:
47
+ #
48
+ # button text: 'OK!',
49
+ # css_class: 'glow_on_hover'
50
+ #
51
+ # ========================================================================= #
52
+ def button(
53
+ optional_text = '',
54
+ optional_css_class = '',
55
+ &block
56
+ )
57
+ _ = ::HtmlTags.button(
58
+ optional_text,
59
+ optional_css_class,
60
+ &block
61
+ )
62
+ addnl(_)
63
+ end
64
+
65
+ require 'cyberweb/html_tags/input.rb'
66
+ # ========================================================================= #
67
+ # === input (input tag)
68
+ #
69
+ # HTML defines the following input-types:
70
+ #
71
+ # <input type="text"> Displays a single-line text input field
72
+ # <input type="radio"> Displays a radio button (for selecting one of many choices)
73
+ # <input type="checkbox"> Displays a checkbox (for selecting zero or more of many choices)
74
+ # <input type="submit"> Displays a submit button (for submitting the form)
75
+ # <input type="button"> Displays a clickable button
76
+ #
77
+ # A button would look like this:
78
+ #
79
+ # button = input(:button)
80
+ #
81
+ # A form may look like this:
82
+ #
83
+ # input_submit css_class: 'bblack1'
84
+ #
85
+ # ========================================================================= #
86
+ def input(
87
+ type = :submit, # (1) type
88
+ default_value = '', # (2) default value
89
+ css_class = Input.to_s, # (3) css class
90
+ name_to_use = '', # (4) name to use
91
+ css_style = '', # (5) css style
92
+ accesskey = '', # (6) accesskey
93
+ my_javascript = '', # (7) javascript
94
+ id = nil, # (8) id
95
+ hash = {}, # (9) an additional hash
96
+ &block
97
+ )
98
+ case css_class
99
+ # ======================================================================= #
100
+ # === :default
101
+ # ======================================================================= #
102
+ when :default
103
+ css_class = Input.to_s
104
+ end
105
+ _ = ''.dup
106
+ # ======================================================================= #
107
+ # First, let's start to assemble our main string that we will return.
108
+ # This must come before we handle anything else.
109
+ # ======================================================================= #
110
+ _ << '<input'
111
+ # ======================================================================= #
112
+ # === Handle blocks next, if given
113
+ #
114
+ # Check for block-supplied to the method. Note that this must come
115
+ # before the call to return_css_class(), as the blocks passed into
116
+ # this method may also modify the css-class in use.
117
+ # ======================================================================= #
118
+ if block_given?
119
+ yielded = yield # yield the block here.
120
+ case yielded
121
+ # ===================================================================== #
122
+ # === :select_on_click
123
+ # ===================================================================== #
124
+ when :select_on_click
125
+ my_javascript = :select_on_click
126
+ # ===================================================================== #
127
+ # === :is_checked
128
+ #
129
+ # This variant is specifically for HTML checkboxes.
130
+ # ===================================================================== #
131
+ when :is_checked
132
+ _ << ' checked="checked"'
133
+ else
134
+ # =================================================================== #
135
+ # Handle Hashes next
136
+ # =================================================================== #
137
+ if yielded.is_a? Hash
138
+ # ================================================================= #
139
+ # === :css_class
140
+ #
141
+ # Handle situations like the following:
142
+ #
143
+ # input_submit {{ css_class: 'bblack1' }}
144
+ #
145
+ # ================================================================= #
146
+ if yielded.has_key? :css_class
147
+ css_class = yielded.delete(:css_class)
148
+ end
149
+ # ================================================================= #
150
+ # === :javascript_function
151
+ #
152
+ # This variant is for invoking a javascript-function.
153
+ #
154
+ # A simple example for this is the following:
155
+ #
156
+ # javascript_function: 'msg("hello_world")'
157
+ #
158
+ # ================================================================= #
159
+ if yielded.has_key? :javascript_function
160
+ string = yielded.delete(:javascript_function).dup
161
+ if string.include? '(' # Assume something like: msg("hello_world")
162
+ splitted = string.split('(')
163
+ function_to_call = splitted.first.to_s
164
+ argument_to_use = splitted[1 .. -1].join('(').
165
+ delete('()').to_s.delete('"')
166
+ case function_to_call
167
+ when 'msg'
168
+ _ << ' onclick="window.alert(\''+argument_to_use+'\');"'
169
+ end
170
+ end
171
+ # ================================================================= #
172
+ # === :on_click_event
173
+ # ================================================================= #
174
+ elsif yielded.has_key? :on_click_event
175
+ _ << ' onclick="'+yielded.delete(:on_click_event).to_s+'()"'
176
+ end
177
+ # ================================================================= #
178
+ # === :text
179
+ #
180
+ # Handle situations like the following:
181
+ #
182
+ # input_submit {{ text: 'submit' }}
183
+ #
184
+ # ================================================================= #
185
+ if yielded.has_key? :text
186
+ default_value = yielded.delete(:text)
187
+ end
188
+ end
189
+ end
190
+ end
191
+ # ======================================================================= #
192
+ # === Handle Hashes next, for the variable default_value
193
+ #
194
+ # Second, let's check if the second argument is a hash. We have to be
195
+ # careful here: if the Hash contains a key called :text, then this
196
+ # must be evaluated last.
197
+ # ======================================================================= #
198
+ if default_value.is_a? Hash
199
+ # ===================================================================== #
200
+ # === :css_class
201
+ # ===================================================================== #
202
+ if default_value.has_key? :css_class
203
+ css_class = default_value.delete(:css_class)
204
+ end
205
+ # ===================================================================== #
206
+ # === :accesskey
207
+ # ===================================================================== #
208
+ if default_value.has_key? :accesskey
209
+ accesskey = default_value[:accesskey]
210
+ end
211
+ # ===================================================================== #
212
+ # === :id
213
+ #
214
+ # Handle the :id entry. This will become id="" in HTML.
215
+ # ===================================================================== #
216
+ if default_value.has_key? :id
217
+ id = default_value[:id].to_s # Keep it as a String.
218
+ end
219
+ # ===================================================================== #
220
+ # === :name
221
+ # ===================================================================== #
222
+ if default_value.has_key? :name
223
+ name_to_use = default_value.delete(:name)
224
+ end
225
+ # ===================================================================== #
226
+ # === :text
227
+ #
228
+ # This should come last, or at the least very late.
229
+ # ===================================================================== #
230
+ if default_value.has_key? :text
231
+ default_value = default_value.delete(:text)
232
+ end
233
+ if default_value.is_a?(Hash) and default_value.empty?
234
+ default_value = 'Submit'
235
+ end
236
+ end
237
+ case type.to_sym # case tag
238
+ # ======================================================================= #
239
+ # === :radio
240
+ #
241
+ # This variant will display a radio button. A radio button can be used
242
+ # for selecting one of many choices.
243
+ # ======================================================================= #
244
+ when :radio
245
+ _ << ' type="radio"'
246
+ # ======================================================================= #
247
+ # === :checkbox
248
+ # ======================================================================= #
249
+ when :checkbox
250
+ _ << ' type="checkbox"'
251
+ # ======================================================================= #
252
+ # === :datetime
253
+ # ======================================================================= #
254
+ when :datetime
255
+ _ << ' type="datetime-local"'
256
+ # ======================================================================= #
257
+ # === :month
258
+ # ======================================================================= #
259
+ when :month
260
+ _ << ' type="month"'
261
+ # ======================================================================= #
262
+ # === :week
263
+ # ======================================================================= #
264
+ when :week
265
+ _ << ' type="week"'
266
+ # ======================================================================= #
267
+ # === :image
268
+ # ======================================================================= #
269
+ when :image, :img, :i
270
+ _ << ' type="image"'
271
+ # ======================================================================= #
272
+ # === :button
273
+ # ======================================================================= #
274
+ when :button, :b
275
+ _ << ' type="button"'
276
+ # ======================================================================= #
277
+ # === :hidden
278
+ # ======================================================================= #
279
+ when :hidden, :h
280
+ _ << ' type="hidden"'
281
+ # ======================================================================= #
282
+ # === :submit
283
+ # ======================================================================= #
284
+ when :submit, :s
285
+ _ << ' type="submit"'
286
+ # ======================================================================= #
287
+ # === :reset
288
+ # ======================================================================= #
289
+ when :reset, :r
290
+ _ << ' type="reset"'
291
+ # ======================================================================= #
292
+ # === :text
293
+ # ======================================================================= #
294
+ when :text, :field, :default, :t
295
+ _ << ' type="text"'
296
+ # ======================================================================= #
297
+ # === :file
298
+ # ======================================================================= #
299
+ when :file,
300
+ :file_uploads,
301
+ :upload,
302
+ :file_dialogue,
303
+ :f,
304
+ :file_handle # File uploads are handled here.
305
+ _ << ' type="file"'
306
+ id = 'input_file_upload' if id.nil?
307
+ else
308
+ _ = type.to_s+' was not found ...'+NL
309
+ end
310
+ # ======================================================================= #
311
+ # Next, handle Symbol input given to css_class.
312
+ #
313
+ # This can be a Symbol such as:
314
+ #
315
+ # :select_on_click
316
+ #
317
+ # or such as:
318
+ #
319
+ # :focus_with_deepskyblue_background
320
+ #
321
+ # ======================================================================= #
322
+ if css_class.is_a? Symbol
323
+ case css_class # case tag
324
+ when :select_on_click
325
+ css_class = Input.to_s
326
+ if my_javascript.empty? # If it is empty then we can populate it.
327
+ my_javascript = :select_on_click
328
+ end
329
+ else
330
+ # =================================================================== #
331
+ # The next line will handle cases such as:
332
+ # :focus_with_yellow_background
333
+ # =================================================================== #
334
+ if css_class.to_s.start_with? 'focus_with'
335
+ # ================================================================= #
336
+ # Delegate towards class InputFocus next.
337
+ # ================================================================= #
338
+ input_focus = ::Cyberweb::InputFocus.new(css_class)
339
+ add_css_style input_focus.string?
340
+ css_class = input_focus.css_class?.dup
341
+ # ================================================================= #
342
+ # Keep in mind that the user may have set a default value for
343
+ # a css class, via Input.set_css_class(). If this is the case
344
+ # then we have to honour this setting and will simply append it.
345
+ # ================================================================= #
346
+ unless ::Cyberweb::Input.to_s.empty?
347
+ css_class << N+Input.to_s.dup
348
+ end
349
+ end
350
+ end
351
+ end
352
+ _ = _.dup if _.frozen?
353
+ _ << css_class_or_no_class(css_class.to_s)
354
+ _ << css_style_or_no_style(css_style)
355
+
356
+ if name_to_use.is_a? Symbol # This is copy/paste of the above.
357
+ case name_to_use
358
+ when :select_on_click
359
+ name_to_use = ''
360
+ if my_javascript.empty? # If it is empty then we can populate it.
361
+ my_javascript = :select_on_click
362
+ end
363
+ end
364
+ end
365
+ _ << return_the_name(name_to_use) unless name_to_use.to_s.empty?
366
+ _ << return_accesskey(accesskey)
367
+ if id
368
+ if id.is_a? String
369
+ _ << ' id="'+id.to_s+'"'
370
+ end
371
+ end
372
+ my_javascript = sanitize_javascript(my_javascript)
373
+ _ << " #{my_javascript}" unless my_javascript.empty?
374
+ if default_value.is_a? Hash
375
+ if default_value.has_key? :value
376
+ _ << ' value="'+default_value[:value].to_s+'"'
377
+ end
378
+ else
379
+ unless _.include?('value')
380
+ unless default_value.to_s.empty? # then add our default value
381
+ _ << ' value="'+default_value.to_s+'"'
382
+ end
383
+ end
384
+ end
385
+ # ======================================================================= #
386
+ # Next handle a possible hash-argument here.
387
+ # ======================================================================= #
388
+ if hash.is_a? Hash
389
+ _ << ' size="'+hash[:size].to_s+'"' if hash[:size]
390
+ _ << ' maxlength="'+hash[:max_length].to_s+'"' if hash[:max_length]
391
+ end
392
+ _ << ' />'+NL
393
+ addnl(_)
394
+ end
395
+
396
+ # ========================================================================= #
397
+ # === legend
398
+ # ========================================================================= #
399
+ def legend(
400
+ content = '',
401
+ optional_css_class = '',
402
+ optional_the_id = '',
403
+ optional_css_style = '',
404
+ &block
405
+ )
406
+ addn(
407
+ '<legend'+
408
+ css_class_or_no_class(optional_css_class)+
409
+ id_or_no_id(optional_the_id)+
410
+ css_style_or_no_style(optional_css_style)+
411
+ '>'
412
+ )
413
+ addnl(content)
414
+ if block_given?
415
+ yield
416
+ clegend
417
+ end
418
+ end
419
+
420
+ # ========================================================================= #
421
+ # === tr
422
+ #
423
+ # This method will create a <tr> tag.
424
+ # ========================================================================= #
425
+ def tr
426
+ addnl(
427
+ '<tr>'
428
+ )
429
+ if block_given?
430
+ yield
431
+ ctr
432
+ end
433
+ end
434
+
435
+ # ========================================================================= #
436
+ # === return_details
437
+ #
438
+ # This will return a <details> tag.
439
+ # ========================================================================= #
440
+ def return_details(
441
+ i = '',
442
+ optional_css_class = '',
443
+ optional_the_id = '',
444
+ optional_css_style = '',
445
+ optional_javascript = '',
446
+ &block
447
+ )
448
+ result = HtmlTags.details(
449
+ i,
450
+ optional_css_class,
451
+ optional_the_id,
452
+ optional_css_style,
453
+ &block
454
+ )
455
+ return result
456
+ end
457
+
458
+ # ========================================================================= #
459
+ # === details
460
+ #
461
+ # This will return a <details> tag.
462
+ # ========================================================================= #
463
+ def details(
464
+ i = '',
465
+ optional_css_class = '',
466
+ optional_the_id = '',
467
+ optional_css_style = '',
468
+ optional_javascript = '',
469
+ &block
470
+ )
471
+ addnl(
472
+ return_details(
473
+ i,
474
+ optional_css_class,
475
+ optional_the_id,
476
+ optional_css_style,
477
+ optional_javascript,
478
+ &block
479
+ )
480
+ )
481
+ end
482
+
483
+ # ========================================================================= #
484
+ # === h3 (h3 tag)
485
+ # ========================================================================= #
486
+ def h3(
487
+ i = '',
488
+ optional_css_class = '',
489
+ optional_the_id = '',
490
+ optional_css_style = '',
491
+ optional_javascript = '',
492
+ &block
493
+ )
494
+ addn(
495
+ HtmlTags.h3(
496
+ i,
497
+ optional_css_class,
498
+ optional_the_id,
499
+ optional_css_style,
500
+ &block
501
+ )
502
+ )
503
+ end
504
+
505
+ # ========================================================================= #
506
+ # === input_file
507
+ # ========================================================================= #
508
+ def input_file(
509
+ default_value = '', # (2) default value
510
+ css_class = Input.to_s, # (3) css class
511
+ name_to_use = '', # (4) name to use
512
+ css_style = '', # (5) css style
513
+ accesskey = '', # (6) accesskey
514
+ my_javascript = '', # (7) javascript
515
+ id = nil, # (8) id
516
+ hash = {}, # (9) an additional hash
517
+ &block
518
+ )
519
+ input(
520
+ :file,
521
+ default_value,
522
+ css_class,
523
+ name_to_use,
524
+ css_style,
525
+ accesskey,
526
+ my_javascript,
527
+ id,
528
+ hash,
529
+ &block
530
+ )
531
+ end; alias input_type_file input_file # === input_type_file
532
+
533
+ # ========================================================================= #
534
+ # === h2 (h2 tag)
535
+ # ========================================================================= #
536
+ def h2(
537
+ i = '',
538
+ optional_css_class = '',
539
+ optional_the_id = '',
540
+ optional_css_style = '',
541
+ optional_javascript = ''
542
+ )
543
+ addn(
544
+ HtmlTags.h2(
545
+ i,
546
+ optional_css_class,
547
+ optional_the_id,
548
+ optional_css_style
549
+ )
550
+ )
551
+ end
552
+
553
+ # ========================================================================= #
554
+ # === input_field
555
+ #
556
+ # This is essentially a wrapper over <input type="text">.
557
+ #
558
+ # Usage example:
559
+ #
560
+ # input_field('','bblack1 pad8px')
561
+ #
562
+ # ========================================================================= #
563
+ def input_field(
564
+ default_value = '', # (1) default value
565
+ css_class = Input.to_s, # (2) css class
566
+ name_to_use = '', # (3) name to use
567
+ css_style = '', # (4) css style
568
+ accesskey = '', # (5) accesskey
569
+ my_javascript = '', # (6) javascript
570
+ id = nil, # (7) id
571
+ hash = {} # (8) an additional hash
572
+ )
573
+ input(
574
+ :text,
575
+ default_value,
576
+ css_class,
577
+ name_to_use,
578
+ css_style,
579
+ accesskey,
580
+ my_javascript,
581
+ id,
582
+ hash
583
+ )
584
+ end; alias input_entry input_field # === input_entry
585
+
586
+ # ========================================================================= #
587
+ # === p (p tag)
588
+ #
589
+ # This method handles the creation of <p> tags ultimately.
590
+ # ========================================================================= #
591
+ def p(
592
+ optional_css_class = '',
593
+ the_id = '',
594
+ optional_css_style = '',
595
+ &block
596
+ )
597
+ # ======================================================================= #
598
+ # === Handle Hashes next
599
+ # ======================================================================= #
600
+ if optional_css_class.is_a? Hash
601
+ # ===================================================================== #
602
+ # === :id
603
+ # ===================================================================== #
604
+ if optional_css_class.has_key? :id
605
+ the_id = optional_css_class.delete(:id)
606
+ end
607
+ # ===================================================================== #
608
+ # === :css_style
609
+ #
610
+ # Must come before :css_class.
611
+ # ===================================================================== #
612
+ if optional_css_class.has_key? :css_style
613
+ optional_css_style = optional_css_class.delete(:css_style)
614
+ end
615
+ # ===================================================================== #
616
+ # === :css_class
617
+ #
618
+ # Must come after :id.
619
+ # ===================================================================== #
620
+ if optional_css_class.has_key? :css_class
621
+ optional_css_class = optional_css_class.delete(:css_class)
622
+ # ===================================================================== #
623
+ # === :class
624
+ # ===================================================================== #
625
+ elsif optional_css_class.has_key? :class
626
+ optional_css_class = optional_css_class.delete(:class)
627
+ end
628
+ if optional_css_class.is_a?(Hash) and
629
+ optional_css_class.empty?
630
+ optional_css_class = ''
631
+ end
632
+ end
633
+ addn(
634
+ '<p'+
635
+ css_class_or_no_class(optional_css_class)+
636
+ id_or_no_id(the_id.to_s)+
637
+ css_style_or_no_style(optional_css_style)+
638
+ '>'
639
+ )
640
+ if block_given?
641
+ yield
642
+ addn('</p>')
643
+ end
644
+ end
645
+
646
+ # ========================================================================= #
647
+ # === ul (ul tag)
648
+ #
649
+ # ul stands for "unsorted list".
650
+ # ========================================================================= #
651
+ def ul(
652
+ optional_css_class = 'marl1em', # This is the default.
653
+ optional_the_id = '',
654
+ &block
655
+ )
656
+ # ======================================================================= #
657
+ # === First we will handle Hashes
658
+ # ======================================================================= #
659
+ if optional_css_class.is_a? Hash
660
+ # ===================================================================== #
661
+ # === :id
662
+ # ===================================================================== #
663
+ if optional_css_class.has_key? :id
664
+ optional_the_id = optional_css_class.delete(:id)
665
+ optional_css_class = 'marl1em' if optional_css_class.empty?
666
+ end
667
+ end
668
+ addnl(
669
+ '<ul class="'+optional_css_class.to_s+'"'+
670
+ id_or_no_id(optional_the_id)+
671
+ '>'
672
+ )
673
+ if block_given?
674
+ yield
675
+ cul
676
+ end
677
+ end
678
+
679
+ # ========================================================================= #
680
+ # === checked_checkbox
681
+ # ========================================================================= #
682
+ def checked_checkbox(
683
+ # hash = { name: 'valid_ninja' }
684
+ hash = {}
685
+ )
686
+ name_to_use = ''
687
+ if hash.is_a? Hash
688
+ if hash.has_key? :name
689
+ name_to_use = hash[:name]
690
+ end
691
+ end
692
+ input_checkbox('', :default, name_to_use) { :is_checked }
693
+ end
694
+
695
+ # ========================================================================= #
696
+ # === input_checkbox
697
+ # ========================================================================= #
698
+ def input_checkbox(
699
+ default_value = '', # (2) default value
700
+ css_class = Input.to_s, # (3) css class
701
+ name_to_use = '', # (4) name to use
702
+ css_style = '', # (5) css style
703
+ accesskey = '', # (6) accesskey
704
+ my_javascript = '', # (7) javascript
705
+ id = nil, # (8) id
706
+ hash = {}, # (9) an additional hash
707
+ &block
708
+ )
709
+ input(
710
+ :checkbox,
711
+ default_value,
712
+ css_class,
713
+ name_to_use,
714
+ css_style,
715
+ accesskey,
716
+ my_javascript,
717
+ id,
718
+ hash,
719
+ &block
720
+ )
721
+ end
722
+
723
+ # ========================================================================= #
724
+ # === label_and_input_text
725
+ #
726
+ # This method essentially combines <label> and <input type="text">.
727
+ #
728
+ # Usage examples:
729
+ #
730
+ # label_and_input_text :foobar
731
+ # label_and_input_text :foobar, 'Age: '
732
+ # label_and_input_text id: :foobar
733
+ # label_and_input_text id: :foobar, :br
734
+ # label_and_input_text id: :foobar, :linebreak
735
+ # label_and_input_text id: :foobar, :middle_break
736
+ # label_and_input_text {id: :foobar}, :middle_break
737
+ #
738
+ # ========================================================================= #
739
+ def label_and_input_text(
740
+ work_on_this_id = '',
741
+ text_for_the_label = '',
742
+ *remaining_arguments # Store them in an Array.
743
+ )
744
+ use_a_new_line = false # Default.
745
+ # ======================================================================= #
746
+ # === Handle Hashes first
747
+ # ======================================================================= #
748
+ if work_on_this_id.is_a? Hash
749
+ if work_on_this_id.has_key? :id
750
+ work_on_this_id = work_on_this_id.delete(:id)
751
+ end
752
+ end
753
+ work_on_this_id = work_on_this_id.to_s
754
+ case text_for_the_label
755
+ # ======================================================================= #
756
+ # === :middle_break
757
+ # ======================================================================= #
758
+ when :middle_break,
759
+ :linebreak,
760
+ :br
761
+ use_a_new_line = true
762
+ text_for_the_label = ''
763
+ end
764
+ ee '<label for="'+work_on_this_id+'">'+text_for_the_label+'</label>'
765
+ br if use_a_new_line
766
+ ee '<input type="text" id="'+work_on_this_id+'" name="'+work_on_this_id+'">'
767
+ end
768
+
769
+ # ========================================================================= #
770
+ # === input_submit
771
+ #
772
+ # This is essentially a submit-button, in HTML.
773
+ #
774
+ # The first argument is the text that should be used for that button.
775
+ # ========================================================================= #
776
+ def input_submit(
777
+ default_value = '',
778
+ css_class = Input.to_s,
779
+ name_to_use = '',
780
+ css_style = '',
781
+ accesskey = '',
782
+ my_javascript = '',
783
+ id = nil,
784
+ hash = {},
785
+ &block
786
+ )
787
+ input(
788
+ :submit,
789
+ default_value,
790
+ css_class,
791
+ name_to_use,
792
+ css_style,
793
+ accesskey,
794
+ my_javascript,
795
+ id,
796
+ hash,
797
+ &block
798
+ )
799
+ end
800
+
801
+ # ========================================================================= #
802
+ # === input_radio
803
+ # ========================================================================= #
804
+ def input_radio(
805
+ default_value = '', # (2) default value
806
+ css_class = Input.to_s, # (3) css class
807
+ name_to_use = '', # (4) name to use
808
+ css_style = '', # (5) css style
809
+ accesskey = '', # (6) accesskey
810
+ my_javascript = '', # (7) javascript
811
+ id = nil, # (8) id
812
+ hash = {}, # (9) an additional hash
813
+ &block
814
+ )
815
+ input(
816
+ :radio,
817
+ default_value,
818
+ css_class,
819
+ name_to_use,
820
+ css_style,
821
+ accesskey,
822
+ my_javascript,
823
+ id,
824
+ hash,
825
+ &block
826
+ )
827
+ end
828
+
829
+ # ========================================================================= #
830
+ # === form (form tag)
831
+ #
832
+ # Usage example:
833
+ #
834
+ # form 'SELF', :post, 'mars2em'
835
+ #
836
+ # ========================================================================= #
837
+ def form(
838
+ action = 'SELF', # (1) action
839
+ method_form = Form.mode, # (2) method form, such as :get or :post
840
+ css_class = Form.to_s, # (3) css class
841
+ the_id = '', # (4) the id
842
+ css_style = '', # (5) css style
843
+ accept_charset = nil, # (6) charset
844
+ enctype = nil
845
+ )
846
+ if action.is_a? Hash
847
+ if action.has_key? :action
848
+ _ = action[:action]
849
+ case _
850
+ when :self
851
+ action = return_program_name
852
+ end
853
+ end
854
+ end
855
+ case action
856
+ when /SELF/i
857
+ action = return_program_name
858
+ end
859
+ _ = '<form'.dup
860
+ _ << ' action="'+action.to_s+'"'
861
+ _ << ' method="'+method_form.to_s+'"'
862
+ _ << css_class_or_no_class(css_class.to_s).to_s
863
+ _ << id_or_no_id(the_id.to_s).to_s
864
+ _ << css_style_or_no_style(css_style)
865
+ _ << ">\n" # Close the <form> tag here.
866
+ addnl(_)
867
+ if block_given?
868
+ yield
869
+ cform
870
+ end
871
+ end
872
+
873
+ # ========================================================================= #
874
+ # === h1
875
+ # ========================================================================= #
876
+ def h1(
877
+ i = '',
878
+ optional_css_class = '',
879
+ optional_the_id = '',
880
+ optional_css_style = '',
881
+ optional_javascript = ''
882
+ )
883
+ addnl(
884
+ string_h1(
885
+ i, optional_css_class, optional_the_id, optional_css_style
886
+ )
887
+ )
888
+ end
889
+
890
+ # ========================================================================= #
891
+ # === h4
892
+ # ========================================================================= #
893
+ def h4(
894
+ i = '',
895
+ optional_css_class = '',
896
+ optional_the_id = '',
897
+ optional_css_style = '',
898
+ optional_javascript = ''
899
+ )
900
+ addn(
901
+ HtmlTags.h4(i, optional_css_class, optional_the_id, optional_css_style)
902
+ )
903
+ end
904
+
905
+ # ========================================================================= #
906
+ # === h5
907
+ # ========================================================================= #
908
+ def h5(
909
+ i = '',
910
+ optional_css_class = '',
911
+ optional_the_id = '',
912
+ optional_css_style = '',
913
+ optional_javascript = ''
914
+ )
915
+ addn(
916
+ HtmlTags.h5(i, optional_css_class, optional_the_id, optional_css_style)
917
+ )
918
+ end
919
+
920
+ # ========================================================================= #
921
+ # === h6
922
+ # ========================================================================= #
923
+ def h6(
924
+ i = '',
925
+ optional_css_class = '',
926
+ optional_the_id = '',
927
+ optional_css_style = '',
928
+ optional_javascript = ''
929
+ )
930
+ addn(
931
+ HtmlTags.h6(i, optional_css_class, optional_the_id, optional_css_style)
932
+ )
933
+ end
934
+
935
+ # ========================================================================= #
936
+ # === area
937
+ #
938
+ # This does an area on an image. DO NOT FORGET TO USE usemap IN YOUR IMAGE!
939
+ #
940
+ # The coords for rect are:
941
+ #
942
+ # left, top, right, bottom
943
+ #
944
+ # (Die Ecke oben links: x1, y1, und die Ecke unten rechts: x2, y2)
945
+ # for circ they are: centerx,centery,radius
946
+ # for poly they are: x1,y1,x2,y2,..,xn,yn
947
+ #
948
+ # Usage Examples:
949
+ #
950
+ # area :rect, '242'
951
+ #
952
+ # ========================================================================= #
953
+ def area(
954
+ shape = :rect,
955
+ coords = '92,39,104,140',
956
+ href_to_use = ''
957
+ )
958
+ addnl(
959
+ '<area shape="'+shape.to_s+'" coords="'+coords+'" href="'+href_to_use+'"/>'
960
+ )
961
+ end
962
+
963
+ # ========================================================================= #
964
+ # === quote
965
+ # ========================================================================= #
966
+ def quote(
967
+ text,
968
+ css_class = '',
969
+ the_id = '',
970
+ css_style = ''
971
+ )
972
+ addnl(
973
+ ::Cyberweb.quote(text, css_class, the_id, css_style)
974
+ )
975
+ end
976
+
977
+ # ========================================================================= #
978
+ # === td
979
+ #
980
+ # This method will ultimately yield a <td>CONTENT_HERE</td> String.
981
+ #
982
+ # td(content, optional_css_class, optional_the_id)
983
+ #
984
+ # ========================================================================= #
985
+ def td(
986
+ content = '',
987
+ optional_css_class = '',
988
+ optional_the_id = ''
989
+ )
990
+ addnl(
991
+ '<td'+
992
+ css_class_or_no_class(optional_css_class)+
993
+ id_or_no_id(optional_the_id)+
994
+ '>'
995
+ )
996
+ if block_given?
997
+ addnl(yield)
998
+ else
999
+ addnl(content)
1000
+ end
1001
+ ctd
1002
+ end
1003
+
1004
+ # ========================================================================= #
1005
+ # === select (selection tag)
1006
+ #
1007
+ # This method makes a <select> tag.
1008
+ #
1009
+ # In raw HTML, this may look like so:
1010
+ #
1011
+ # <select>
1012
+ # <option value="volvo">Volvo</option>
1013
+ # <option value="saab">Saab</option>
1014
+ # <option value="opel">Opel</option>
1015
+ # <option value="audi">Audi</option>
1016
+ # </select>
1017
+ #
1018
+ # It is recommended to use a name="" label for the <select> tag,
1019
+ # such as in:
1020
+ #
1021
+ # For documentation, see this link:
1022
+ #
1023
+ # https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select
1024
+ #
1025
+ # ========================================================================= #
1026
+ def select(
1027
+ css_class = '',
1028
+ the_id = '',
1029
+ css_style = '',
1030
+ javascript = ''
1031
+ )
1032
+ add_newline
1033
+ the_tag = string_tag(
1034
+ :select,
1035
+ css_class,
1036
+ the_id,
1037
+ css_style,
1038
+ javascript
1039
+ )
1040
+ add_newline
1041
+ string_that_is_to_be_displayed = ''.dup
1042
+ # ======================================================================= #
1043
+ # === Handle blocks next
1044
+ # ======================================================================= #
1045
+ if block_given?
1046
+ yielded = yield
1047
+ # ===================================================================== #
1048
+ # === And now, we will handle Hashes:
1049
+ # ===================================================================== #
1050
+ if yielded.is_a? Hash
1051
+ # =================================================================== #
1052
+ # === :dataset_to_use
1053
+ # =================================================================== #
1054
+ if yielded.has_key? :dataset_to_use
1055
+ yielded[:dataset_to_use].each {|content|
1056
+ # =============================================================== #
1057
+ # Append this onto the content-string next:
1058
+ # =============================================================== #
1059
+ string_that_is_to_be_displayed <<
1060
+ "<option value=\"#{content.downcase}\">#{content}</option>\n"
1061
+ }
1062
+ end
1063
+ # =================================================================== #
1064
+ # === :css_class
1065
+ # =================================================================== #
1066
+ if yielded.has_key? :css_class
1067
+ the_tag[-2,0] = ' class="'+yielded.delete(:css_class)+'"'
1068
+ end
1069
+ # =================================================================== #
1070
+ # === :name
1071
+ # =================================================================== #
1072
+ if yielded.has_key? :name
1073
+ the_tag[-2,0] = ' name="'+yielded.delete(:name)+'"'
1074
+ end
1075
+ end
1076
+ end
1077
+ # ======================================================================= #
1078
+ # Next display our <select> tag:
1079
+ # ======================================================================= #
1080
+ addn the_tag
1081
+ addn string_that_is_to_be_displayed
1082
+ addn sclose(:select)
1083
+ end; alias selection select # === selection
1084
+
1085
+ # ========================================================================= #
1086
+ # === html (html tag)
1087
+ # ========================================================================= #
1088
+ def html(
1089
+ &block
1090
+ )
1091
+ addn(
1092
+ '<html>'
1093
+ )
1094
+ if block_given?
1095
+ yield
1096
+ addn('</html>')
1097
+ end
1098
+ end
1099
+
1100
+ # ========================================================================= #
1101
+ # === th
1102
+ #
1103
+ # This method will yield the <th> tag, ultimately.
1104
+ # ========================================================================= #
1105
+ def th(
1106
+ optional_input = ''
1107
+ )
1108
+ _ = '<th'.dup
1109
+ case optional_input
1110
+ when :left
1111
+ _ << 'align="left"'
1112
+ when :right
1113
+ _ << 'align="right"'
1114
+ end
1115
+ _ << '>'
1116
+ add(_)
1117
+ end
1118
+
1119
+ # ========================================================================= #
1120
+ # === div (div tag)
1121
+ #
1122
+ # Input to this method can be in this format:
1123
+ #
1124
+ # div(id: 'drag_div_sitemap_table', css_style: 'z-index: 1') {
1125
+ #
1126
+ # So the first argument can be a Hash.
1127
+ # ========================================================================= #
1128
+ def div(
1129
+ optional_css_class = '',
1130
+ optional_the_id = '',
1131
+ optional_css_style = '',
1132
+ optional_javascript = '',
1133
+ &block
1134
+ )
1135
+ if optional_css_class.is_a? Hash
1136
+ # ===================================================================== #
1137
+ # === :css_style
1138
+ # ===================================================================== #
1139
+ if optional_css_class.has_key? :css_style
1140
+ optional_css_style = optional_css_class.delete(:css_style)
1141
+ end
1142
+ # ===================================================================== #
1143
+ # === :id
1144
+ # ===================================================================== #
1145
+ if optional_css_class.has_key? :id
1146
+ optional_the_id = optional_css_class.delete(:id)
1147
+ end
1148
+ # ===================================================================== #
1149
+ # === :css_class
1150
+ # ===================================================================== #
1151
+ if optional_css_class.has_key? :css_class
1152
+ optional_css_class = optional_css_class.delete(:css_class)
1153
+ # ===================================================================== #
1154
+ # === :class
1155
+ # ===================================================================== #
1156
+ elsif optional_css_class.has_key? :class
1157
+ optional_css_class = optional_css_class.delete(:class)
1158
+ end
1159
+ if optional_css_class.is_a? Hash
1160
+ optional_css_class = ''
1161
+ end
1162
+ end
1163
+ # ======================================================================= #
1164
+ # We need to delegate to a toplevel method, in order to create
1165
+ # the correct <div> tag.
1166
+ # ======================================================================= #
1167
+ addnl(
1168
+ Cyberweb.string_div(
1169
+ optional_css_class,
1170
+ optional_the_id,
1171
+ optional_css_style,
1172
+ optional_javascript
1173
+ )
1174
+ )
1175
+ # ======================================================================= #
1176
+ # === Handle blocks given to <div> next
1177
+ # ======================================================================= #
1178
+ if block_given?
1179
+ yield
1180
+ cdiv
1181
+ end
1182
+ end
1183
+
1184
+ # ========================================================================= #
1185
+ # === li (li tag)
1186
+ #
1187
+ # This method should ultimately generate a String such as:
1188
+ #
1189
+ # <li>foobar</li>
1190
+ #
1191
+ # ========================================================================= #
1192
+ def li(
1193
+ content = '',
1194
+ optional_css_class = '',
1195
+ optional_the_id = '',
1196
+ optional_css_style = '',
1197
+ optional_javascript = '',
1198
+ &block
1199
+ )
1200
+ # ======================================================================= #
1201
+ # First, always add the <li> tag, whenever li() is called.
1202
+ # ======================================================================= #
1203
+ addnl(
1204
+ '<li'+
1205
+ css_class_or_no_class(optional_css_class.dup)+
1206
+ id_or_no_id(optional_the_id.to_s.dup)+
1207
+ css_style_or_no_style(optional_css_style.dup)+
1208
+ '>'
1209
+ )
1210
+ addnl(content.dup) if content and !content.empty?
1211
+ # ======================================================================= #
1212
+ # === Handle blocks given to this method next
1213
+ # ======================================================================= #
1214
+ if block_given?
1215
+ addnl(yield)
1216
+ cli
1217
+ end
1218
+ end
1219
+
1220
+ # ========================================================================= #
1221
+ # === textarea
1222
+ #
1223
+ # This create a <textarea> tag.
1224
+ #
1225
+ # Example:
1226
+ #
1227
+ # textarea('foobar','bblack1 pad1em','textarea_id')
1228
+ #
1229
+ # ========================================================================= #
1230
+ def textarea(
1231
+ default_content = '', # 1) content
1232
+ css_class = '', # 2) css-class
1233
+ the_id = '', # 3) the id
1234
+ css_style = '', # 4) css_style
1235
+ n_cols = 25, # 5) n columns
1236
+ n_rows = 8, # 6) n rows
1237
+ javascript = '', # 7) javascript
1238
+ name = '', # 8) name
1239
+ &block
1240
+ )
1241
+ addnl(
1242
+ ::Cyberweb.string_textarea(
1243
+ default_content,
1244
+ css_class,
1245
+ the_id,
1246
+ css_style,
1247
+ n_cols,
1248
+ n_rows,
1249
+ javascript,
1250
+ name,
1251
+ &block
1252
+ )
1253
+ )
1254
+ end; alias string_textarea textarea # === string_textarea
1255
+ alias textview textarea # === textview
1256
+ alias add_write_area textarea # === add_write_area
1257
+
1258
+ # ========================================================================= #
1259
+ # === ctextarea
1260
+ # ========================================================================= #
1261
+ def ctextarea
1262
+ close(:textarea)
1263
+ end
1264
+
1265
+ # ========================================================================= #
1266
+ # === cbody
1267
+ # ========================================================================= #
1268
+ def cbody
1269
+ close(:body)
1270
+ end
1271
+
1272
+ # ========================================================================= #
1273
+ # === cframeset
1274
+ # ========================================================================= #
1275
+ def cframeset
1276
+ close(:frameset)
1277
+ end
1278
+
1279
+ # ========================================================================= #
1280
+ # === cul
1281
+ # ========================================================================= #
1282
+ def cul
1283
+ close(:ul)
1284
+ end
1285
+
1286
+ # ========================================================================= #
1287
+ # === cli
1288
+ # ========================================================================= #
1289
+ def cli
1290
+ close(:li)
1291
+ end
1292
+
1293
+ # ========================================================================= #
1294
+ # === blockquote
1295
+ #
1296
+ # For documentation about this HTML tag, have a look at:
1297
+ #
1298
+ # https://www.w3schools.com/tags/tag_blockquote.asp
1299
+ #
1300
+ # ========================================================================= #
1301
+ def blockquote(
1302
+ i = '',
1303
+ optional_css_class = ''
1304
+ )
1305
+ addn(
1306
+ '<blockquote class="'+optional_css_class.to_s+'">'+i+'</blockquote>'
1307
+ )
1308
+ end
1309
+
1310
+ # ========================================================================= #
1311
+ # === fieldset
1312
+ #
1313
+ # This will generate a HTML <fieldset> tag.
1314
+ #
1315
+ # You can pass in a Hash, which allows us to do things like this here:
1316
+ #
1317
+ # fieldset style: 'width: 70%'
1318
+ #
1319
+ # ========================================================================= #
1320
+ def fieldset(
1321
+ optional_css_class = Fieldset.to_s,
1322
+ optional_the_id = '',
1323
+ optional_css_style = '',
1324
+ optional_javascript = ''
1325
+ )
1326
+ if optional_css_class.is_a? Hash
1327
+ if optional_css_class.has_key? :style
1328
+ optional_css_style = optional_css_class[:style]
1329
+ optional_css_class = ''
1330
+ end
1331
+ end
1332
+ ee stag(:fieldset, optional_css_class, optional_the_id, optional_css_style, optional_javascript)
1333
+ yield if block_given?
1334
+ cfieldset
1335
+ end
1336
+
1337
+ # ========================================================================= #
1338
+ # === ctable
1339
+ # ========================================================================= #
1340
+ def ctable
1341
+ close(:table)
1342
+ end
1343
+
1344
+ # ========================================================================= #
1345
+ # === clabel
1346
+ # ========================================================================= #
1347
+ def clabel
1348
+ close(:label)
1349
+ end
1350
+
1351
+ # ========================================================================= #
1352
+ # === cdiv
1353
+ # ========================================================================= #
1354
+ def cdiv
1355
+ close(:div)
1356
+ end
1357
+
1358
+ # ========================================================================= #
1359
+ # === close (close tag)
1360
+ # ========================================================================= #
1361
+ def close(i)
1362
+ addn(
1363
+ sclose(i)
1364
+ )
1365
+ end; alias c close # === c
1366
+
1367
+ # ========================================================================= #
1368
+ # === cp
1369
+ # ========================================================================= #
1370
+ def cp
1371
+ close(:p)
1372
+ end
1373
+
1374
+ # ========================================================================= #
1375
+ # === table
1376
+ # ========================================================================= #
1377
+ def table(
1378
+ optional_css_class = '',
1379
+ optional_the_id = '',
1380
+ optional_css_style = ''
1381
+ )
1382
+ addnl(
1383
+ '<table'+
1384
+ css_class_or_no_class(optional_css_class)+
1385
+ id_or_no_id(optional_the_id)+
1386
+ css_style_or_no_style(optional_css_style)+
1387
+ '>'
1388
+ )
1389
+ end
1390
+
1391
+ # ========================================================================= #
1392
+ # === close_a
1393
+ # ========================================================================= #
1394
+ def close_a
1395
+ addn('</a>')
1396
+ end; alias ca close_a # === ca
1397
+
1398
+ # ========================================================================= #
1399
+ # === cselect
1400
+ # ========================================================================= #
1401
+ def cselect
1402
+ close(:select)
1403
+ end
1404
+
1405
+ # ========================================================================= #
1406
+ # === cpre
1407
+ # ========================================================================= #
1408
+ def cpre
1409
+ close(:pre)
1410
+ end
1411
+
1412
+ # ========================================================================= #
1413
+ # === clegend
1414
+ # ========================================================================= #
1415
+ def clegend
1416
+ close(:legend)
1417
+ end
1418
+
1419
+ # ========================================================================= #
1420
+ # === cobject
1421
+ # ========================================================================= #
1422
+ def cobject
1423
+ close(:object)
1424
+ end
1425
+
1426
+ # ========================================================================= #
1427
+ # === cmap
1428
+ # ========================================================================= #
1429
+ def cmap
1430
+ close(:map)
1431
+ end
1432
+
1433
+ end; end