cyberweb 0.4.174 → 0.5.225

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 (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
@@ -35,7 +35,7 @@ module Cyberweb
35
35
  require 'coderay'
36
36
  rescue LoadError; end
37
37
 
38
- require 'cyberweb/constants/project_constants.rb'
38
+ require 'cyberweb/constants/constants.rb'
39
39
  # ========================================================================= #
40
40
  # Require the various web_object/toplevel_methods/ components next:
41
41
  # ========================================================================= #
@@ -44,6 +44,7 @@ module Cyberweb
44
44
  require 'cyberweb/toplevel_methods/charsets.rb'
45
45
  require 'cyberweb/toplevel_methods/cgi.rb'
46
46
  require 'cyberweb/toplevel_methods/consider_serving_the_web_object.rb'
47
+ # require 'cyberweb/toplevel_methods/e.rb'
47
48
  require 'cyberweb/toplevel_methods/ee.rb'
48
49
  require 'cyberweb/toplevel_methods/hfin.rb'
49
50
  require 'cyberweb/toplevel_methods/html_mode.rb'
@@ -55,20 +56,422 @@ module Cyberweb
55
56
  require 'cyberweb/toplevel_methods/return_html_to_head_start.rb'
56
57
  require 'cyberweb/toplevel_methods/show_and_display.rb'
57
58
  require 'cyberweb/toplevel_methods/string_body_start.rb'
59
+ require 'cyberweb/toplevel_methods/string_content.rb'
58
60
  require 'cyberweb/toplevel_methods/svg.rb'
59
61
  require 'cyberweb/toplevel_methods/s2.rb'
60
- require 'cyberweb/toplevel_methods/string_content.rb'
61
62
  require 'cyberweb/toplevel_methods/write_what_into.rb'
62
63
  require 'cyberweb/html_tags/option.rb'
63
64
 
65
+ # ========================================================================= #
66
+ # === send_email
67
+ #
68
+ # Use this method to send an email.
69
+ # ========================================================================= #
70
+ def send_email
71
+ w.mail.deliver
72
+ end
73
+
74
+ # ========================================================================= #
75
+ # === Cyberweb.return_html_for_the_submarine_component
76
+ # ========================================================================= #
77
+ def self.return_html_for_the_submarine_component
78
+ '<div class="outer_container_for_the_submarine">
79
+ <div class="submarine__container">
80
+ <div class="light"></div>
81
+ <div class="submarine__periscope"></div>
82
+ <div class="submarine__periscope-glass"></div>
83
+ <div class="submarine__sail">
84
+ <div class="submarine__sail-shadow dark1">
85
+ </div>
86
+ <div class="submarine__sail-shadow light1"></div>
87
+ <div class="submarine__sail-shadow dark2"></div>
88
+ </div>
89
+ <div class="submarine__body">
90
+ <div class="submarine__window one">
91
+ </div>
92
+ <div class="submarine__window two">
93
+ </div>
94
+ <div class="submarine__shadow-dark"></div>
95
+ <div class="submarine__shadow-light"></div>
96
+ <div class="submarine__shadow-arcLight"></div>
97
+ </div>
98
+ <div class="submarine__propeller">
99
+ <div class="propeller__perspective">
100
+ <div class="submarine__propeller-parts darkOne"></div>
101
+ <div class="submarine__propeller-parts lightOne"></div>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ <div class="bubbles__container">
106
+ <span class="bubbles bubble-1"></span>
107
+ <span class="bubbles bubble-2"></span>
108
+ <span class="bubbles bubble-3"></span>
109
+ <span class="bubbles bubble-4"></span>
110
+ </div>
111
+ <div class="ground__container">
112
+ <div class="ground ground1">
113
+ <span class="up-1"></span>
114
+ <span class="up-2"></span>
115
+ <span class="up-3"></span>
116
+ <span class="up-4"></span>
117
+ <span class="up-5"></span>
118
+ <span class="up-6"></span>
119
+ <span class="up-7"></span>
120
+ <span class="up-8"></span>
121
+ <span class="up-9"></span>
122
+ <span class="up-10"></span>
123
+ </div>
124
+ <div class="ground ground2">
125
+ <span class="up-1"></span>
126
+ <span class="up-2"></span>
127
+ <span class="up-3"></span>
128
+ <span class="up-4"></span>
129
+ <span class="up-5"></span>
130
+ <span class="up-6"></span>
131
+ <span class="up-7"></span>
132
+ <span class="up-8"></span>
133
+ <span class="up-9"></span>
134
+ <span class="up-10"></span>
135
+ <span class="up-11"></span>
136
+ <span class="up-12"></span>
137
+ <span class="up-13"></span>
138
+ <span class="up-14"></span>
139
+ <span class="up-15"></span>
140
+ <span class="up-16"></span>
141
+ <span class="up-17"></span>
142
+ <span class="up-18"></span>
143
+ <span class="up-19"></span>
144
+ <span class="up-20"></span>
145
+ </div>
146
+ </div>
147
+ </div>'
148
+ end
149
+
150
+ # ========================================================================= #
151
+ # === Cyberweb.return_title_of_this_remote_webpage
152
+ #
153
+ # This method can fetch the title of a remote webpage. It will make
154
+ # use of nokogiri by default.
155
+ #
156
+ # Usage example:
157
+ #
158
+ # x = Cyberweb.return_title_of_this_remote_webpage(:remote_URL, :simple_regex)
159
+ #
160
+ # ========================================================================= #
161
+ def self.return_title_of_this_remote_webpage(
162
+ remote_url = REMOTE_URL,
163
+ parse_via = :nokogiri
164
+ )
165
+ require 'open-uri'
166
+ case remote_url
167
+ # ======================================================================= #
168
+ # === :remote_URL
169
+ # ======================================================================= #
170
+ when :remote_URL
171
+ remote_url = REMOTE_URL
172
+ end
173
+ case parse_via
174
+ # ======================================================================= #
175
+ # === :nokogiri
176
+ # ======================================================================= #
177
+ when :nokogiri
178
+ require 'nokogiri'
179
+ document = Nokogiri::HTML(URI.open(remote_url))
180
+ title = document.css('html > head > title').first.content
181
+ return title.gsub(
182
+ /[[:space:]]+/,
183
+ ' '
184
+ ).strip
185
+ # ======================================================================= #
186
+ # === :regex
187
+ # ======================================================================= #
188
+ when :regex,
189
+ :simple_regex
190
+ dataset = URI.open(remote_url).read
191
+ regex_to_use = /<title>(.+)<\/title>/ # See: https://rubular.com/r/bUokW9aJb1ncpU
192
+ return dataset.scan(regex_to_use).flatten.first.to_s.strip
193
+ end
194
+ end; self.instance_eval { alias return_title_of_this_webpage return_title_of_this_remote_webpage } # === Cyberweb.return_title_of_this_webpage
195
+
196
+ # ========================================================================= #
197
+ # === Cyberweb.convert_image_to_base64
198
+ #
199
+ # Usage example:
200
+ #
201
+ # Cyberweb.convert_image_to_base64("/home/x/programming/ruby/src/cyberweb/images/cyberweb_logo.png")
202
+ #
203
+ # ========================================================================= #
204
+ def self.convert_image_to_base64(this_image)
205
+ file_type = File.extname(this_image).delete('.').upcase
206
+ return `magick #{this_image} #{file_type}:- | base64`
207
+ end
208
+
209
+ # ========================================================================= #
210
+ # === Cyberweb.sort_this_array_by_time
211
+ #
212
+ # This method can be used to sort an array by time. In particular it
213
+ # was designed to sort an array of image-files that include their
214
+ # "timestamp" as part of the filename.
215
+ # ========================================================================= #
216
+ def self.sort_this_array_by_time(array)
217
+ array.sort_by {|filename|
218
+ filename = File.basename(filename)
219
+ if filename =~ /\d{4}/ # Assume a year such as "1984" here.
220
+ # ================================================================= #
221
+ # Extract from the start to the year-part next.
222
+ #
223
+ # An example for a filename will be:
224
+ #
225
+ # "2013_Marchettigasse_6_Garten_am_Abend.jpg".
226
+ #
227
+ # ================================================================= #
228
+ filename = filename.scan(/^.*\d{4}/).flatten.first
229
+ filename.tr!('_','.')
230
+ filename = filename.delete('^0-9.')
231
+ filename.squeeze!('.') # Some entries may now be "...1986".
232
+ filename.chop! if filename.end_with? '.'
233
+ if filename.start_with?('.')
234
+ if filename.count('.') > 1 # Assume here: ".2.1981"
235
+ filename.prepend('01') if filename.count('.') == 2
236
+ else
237
+ filename.prepend('01.01')
238
+ end
239
+ end
240
+ unless filename.include? '.'
241
+ unless filename.start_with?('.')
242
+ filename.prepend('.')
243
+ end
244
+ filename.prepend('01.01')
245
+ end
246
+ if filename.split('.')[1].to_i > 12
247
+ splitted = filename.split('.')
248
+ splitted[1] = '12'
249
+ filename = splitted.join('.')
250
+ end
251
+ sort_on_this = ::Time.parse(filename)
252
+ else
253
+ sort_on_this = ::Time.parse('01.01.1970') # Simply assume this here.
254
+ end
255
+ sort_on_this
256
+ }
257
+ end; self.instance_eval { alias sort_based_on_time sort_this_array_by_time } # === Cyberweb.sort_based_on_time
258
+
259
+ # ========================================================================= #
260
+ # === Cyberweb.return_all_html_tags_in_this_line
261
+ # ========================================================================= #
262
+ def self.return_all_html_tags_in_this_line(
263
+ i = '<p>This <a> <div><h2>ok </h2>'
264
+ )
265
+ array = []
266
+ if i.include? '<'
267
+ regex = /(<.+?>)/
268
+ array << i.scan(regex)
269
+ end
270
+ return array.flatten
271
+ end
272
+
273
+ # ========================================================================= #
274
+ # === Cyberweb.translate_html_string_into_webobject_string
275
+ # ========================================================================= #
276
+ def self.translate_html_string_into_webobject_string(
277
+ i =
278
+ '<div>
279
+ <h2>Hello world!</h2>
280
+
281
+ <p>This is the first paragraph.</p>
282
+
283
+ <p>This is the second paragraph. It includes a bit of HTML
284
+ and <b>newlines</b>.</p>
285
+
286
+ </div>'
287
+ )
288
+ do_more_parsing = true
289
+ result = ''.dup
290
+ splitted = i.split("\n")
291
+ splitted.each {|this_line|
292
+ if this_line.include?('<') and this_line.include?('>')
293
+ if do_more_parsing
294
+ all_html_tags_in_this_line = return_all_html_tags_in_this_line(this_line)
295
+ first_tag = all_html_tags_in_this_line.first
296
+ result << first_tag.delete('<>')+" {\n"
297
+ result << "ee '"
298
+ else
299
+ result << this_line
300
+ end
301
+ do_more_parsing = false
302
+ end
303
+ }
304
+ result << "'\n}\n"
305
+ return result
306
+ end
307
+
308
+ # ========================================================================= #
309
+ # === Cyberweb.colourize_ruby_code (ruby tag)
310
+ #
311
+ # Use this to colourize ruby code. Be careful when using this though
312
+ # and only use it when you (a) need it and (b) when you have ruby
313
+ # code in question.
314
+ # ========================================================================= #
315
+ def self.colourize_ruby_code(_)
316
+ _ = _.dup
317
+ _.gsub!(/class /,
318
+ '<span class="BG_Black pad1px lightgreen bold">class </span>')
319
+ _.gsub!(/require/,
320
+ '<span class="pad1px red FI bold">require</span>')
321
+ _.gsub!(/end$/,
322
+ '<span class="BG_Black pad1px red bold">end</span>')
323
+ _.gsub!(/else/,
324
+ '<span class="BG_Black pad1px red bold">else</span>')
325
+ _.gsub!(/if /,
326
+ '<span class="BG_Black pad1px red bold">if </span>')
327
+ _.gsub!(/elsif/,
328
+ '<span class="BG_Black pad1px red bold">elsif</span>')
329
+ _.gsub!(/__FILE__/,
330
+ '<span class="BG_Black pad1px pink bold">__FILE__</span>')
331
+ _.gsub!(/\$PROGRAM_NAME/,
332
+ '<span class="BG_Black pad1px lightgreen bold">$PROGRAM_NAME</span>')
333
+ _.gsub!(/class (\w+) </,'<span class="BG_Black pad1px yel bold">class</span> \\1 <')
334
+ _.gsub!(/super\(\)/,'<span class="BG_Black pad1px cyan bold">super()</span>')
335
+ _.gsub!(/#!\/System\/Executables\/ruby -w/,'<span class="BG_Black pad1px green bold">#!/System/Executables/ruby -w</span>')
336
+ _.gsub!(/def (.*)/,
337
+ '<span class="BG_Black pad1px orange bold">def </span><span class="BG_Black BO pad1px lightblue">\1</span>')
338
+ _.gsub!(/do/,
339
+ '<span class="BG_Black pad1px orange bold">do</span>')
340
+ return _
341
+ end
342
+
343
+ # ========================================================================= #
344
+ # === Cyberweb.use_this_local_port_or_a_later_port
345
+ #
346
+ # This method can be used to scan for an open local port.
347
+ #
348
+ # It was necessary because Sinatra may often be already running
349
+ # on a localhost port.
350
+ # ========================================================================= #
351
+ def self.use_this_local_port_or_a_later_port(i = '4567')
352
+ begin
353
+ require 'roebe/toplevel_methods/open_ports.rb'
354
+ if Roebe.is_this_port_open?(i)
355
+ return i
356
+ else
357
+ # else find a fitting open port in the next 50
358
+ # ports.
359
+ upper_range = i.to_i + 50
360
+ i.to_i.upto(upper_range) {|try_this_port|
361
+ if Roebe.is_this_port_open?(try_this_port)
362
+ return try_this_port
363
+ # else # else we must continue.
364
+ # return nil
365
+ end
366
+ }
367
+ end
368
+ rescue LoadError
369
+ end
370
+ end
371
+
372
+ # ========================================================================= #
373
+ # === Cyberweb.try_to_open_this_URL_via_the_browser
374
+ #
375
+ # This method simplifies working with Sinatra. The main use case for
376
+ # this method is to show the localhost-URL, and then open this in
377
+ # the browser directly, via the "open" gem.
378
+ #
379
+ # The second argument specifies which port is to be used.
380
+ #
381
+ # Usage example:
382
+ #
383
+ # Cyberweb.try_to_open_this_URL_via_the_browser(target, USE_THIS_PORT)
384
+ #
385
+ # ========================================================================= #
386
+ def self.try_to_open_this_URL_via_the_browser(
387
+ target,
388
+ use_this_port = '4567'
389
+ )
390
+ begin
391
+ require 'open' # Pull in the gem called "open" here.
392
+ if use_this_port # Avoid nil and false values.
393
+ target = "http://localhost:#{use_this_port}/"
394
+ if block_given? and (yield == :be_quiet)
395
+ else
396
+ puts ::Colours.sfancy(target)
397
+ end
398
+ Thread.new {
399
+ Open.in_browser(target) {{ delay: '1.0 seconds' }}
400
+ }
401
+ end
402
+ rescue LoadError => error
403
+ pp error
404
+ end
405
+ end
406
+
407
+ # ========================================================================= #
408
+ # === Cyberweb.draw_circle
409
+ #
410
+ # This method will draw a circle, via CSS.
411
+ #
412
+ # Usage example:
413
+ #
414
+ # Cyberweb.draw_circle(width: 200, height: 500, background_color: :steelblue, border_radius: '30%')
415
+ #
416
+ # ========================================================================= #
417
+ def self.draw_circle(
418
+ hash = {
419
+ width: 200, # in px
420
+ height: 200, # in px
421
+ background_color: :crimson,
422
+ border_radius: '50%'
423
+ },
424
+ counter = @internal_hash[:counter_for_the_dynamic_circle]
425
+ )
426
+ _ = "\n".dup
427
+ _ << "<style>\n"
428
+ _ << "div.dynamic_circle#{counter} {\n"
429
+ _ << " width: #{hash[:width]}px;\n"
430
+ _ << " height: #{hash[:height]}px;\n"
431
+ _ << " background: #{hash[:background_color]};\n"
432
+ _ << " border-radius: #{hash[:border_radius]};\n"
433
+ _ << "}\n"
434
+ _ << "</style>\n"
435
+ _ << "<div class=\"dynamic_circle#{counter}\"></div>"
436
+ increment_draw_circle_counter
437
+ return _
438
+ end
439
+
440
+ # ========================================================================= #
441
+ # === Cyberweb.increment_draw_circle_counter
442
+ # ========================================================================= #
443
+ def self.increment_draw_circle_counter
444
+ @internal_hash[:counter_for_the_dynamic_circle] += 1
445
+ end
446
+
447
+ # ========================================================================= #
448
+ # === Cyberweb.is_a_video_file?
449
+ #
450
+ # This method can be used to determine whether xyz is a video file or
451
+ # whether it is not.
452
+ #
453
+ # Usage example:
454
+ #
455
+ # Cyberweb.is_a_video_file?('/tmp/foobar.avi')
456
+ #
457
+ # ========================================================================= #
458
+ def self.is_a_video_file?(
459
+ this_file = 'foobar.mp4'
460
+ )
461
+ array = %w( .avi .mp4 .mkv .webm )
462
+ array.include? File.extname(this_file)
463
+ end
464
+
64
465
  # ========================================================================= #
65
466
  # === Cyberweb.show_admin_icons
66
467
  #
67
468
  # Show all admin icons through this method.
68
469
  # ========================================================================= #
69
- def self.show_admin_icons
470
+ def self.show_admin_icons(
471
+ array = ARRAY_LISTING_ALL_PROJECT_IMAGES
472
+ )
70
473
  _ = ''.dup
71
- ARRAY_LISTING_ALL_PROJECT_IMAGES.each { |entry|
474
+ array.each { |entry|
72
475
  use_this_id = File.basename(entry.to_s).to_s.downcase.delete('.')
73
476
  _ << string_s2(entry, '','','s1px marl0_7em black')+
74
477
  sg(
@@ -80,6 +483,13 @@ module Cyberweb
80
483
  return _
81
484
  end
82
485
 
486
+ # ========================================================================= #
487
+ # === Cyberweb.return_pretty_stars
488
+ # ========================================================================= #
489
+ def self.return_pretty_stars
490
+ return '<hr class="hr_stars">'
491
+ end
492
+
83
493
  # ========================================================================= #
84
494
  # === show_ruby_file
85
495
  #
@@ -140,10 +550,10 @@ module Cyberweb
140
550
  # This method will generate a <select><option> listing, a drop-down
141
551
  # interface. The input to this method must be an Array.
142
552
  # ========================================================================= #
143
- def self.dropdown_box(input)
144
- if input.is_a? Array # Ok.
553
+ def self.dropdown_box(i)
554
+ if i.is_a? Array # Ok.
145
555
  _ = '<select>'.dup
146
- input.each {|line|
556
+ i.each {|line|
147
557
  _ << string_option(line)
148
558
  }
149
559
  _ << string_close(:select)
@@ -165,41 +575,6 @@ module Cyberweb
165
575
  return _
166
576
  end
167
577
 
168
- # ========================================================================= #
169
- # === Cyberweb.colourize_ruby_code (ruby tag)
170
- #
171
- # Use this to colourize ruby code. Be careful when using this though
172
- # and only use it when you (a) need it and (b) when you have ruby
173
- # code in question.
174
- # ========================================================================= #
175
- def self.colourize_ruby_code(_)
176
- _ = _.dup
177
- _.gsub!(/class /,
178
- '<span class="BG_Black pad1px lightgreen bold">class </span>')
179
- _.gsub!(/require/,
180
- '<span class="pad1px red FI bold">require</span>')
181
- _.gsub!(/end$/,
182
- '<span class="BG_Black pad1px red bold">end</span>')
183
- _.gsub!(/else/,
184
- '<span class="BG_Black pad1px red bold">else</span>')
185
- _.gsub!(/if /,
186
- '<span class="BG_Black pad1px red bold">if </span>')
187
- _.gsub!(/elsif/,
188
- '<span class="BG_Black pad1px red bold">elsif</span>')
189
- _.gsub!(/__FILE__/,
190
- '<span class="BG_Black pad1px pink bold">__FILE__</span>')
191
- _.gsub!(/\$PROGRAM_NAME/,
192
- '<span class="BG_Black pad1px lightgreen bold">$PROGRAM_NAME</span>')
193
- _.gsub!(/class (\w+) </,'<span class="BG_Black pad1px yel bold">class</span> \\1 <')
194
- _.gsub!(/super\(\)/,'<span class="BG_Black pad1px cyan bold">super()</span>')
195
- _.gsub!(/#!\/System\/Executables\/ruby -w/,'<span class="BG_Black pad1px green bold">#!/System/Executables/ruby -w</span>')
196
- _.gsub!(/def (.*)/,
197
- '<span class="BG_Black pad1px orange bold">def </span><span class="BG_Black BO pad1px lightblue">\1</span>')
198
- _.gsub!(/do/,
199
- '<span class="BG_Black pad1px orange bold">do</span>')
200
- return _
201
- end
202
-
203
578
  # ========================================================================= #
204
579
  # === @css_object
205
580
  #
@@ -389,9 +764,9 @@ module Cyberweb
389
764
  # bl $CYBERWEB/yaml/js_files_to_load.yml
390
765
  #
391
766
  # ========================================================================= #
392
- if File.exist? PROJECT_YAML_DIRECTORY+'js_files_to_load.yml' # MAIN_DIR is defined in web_requires.rb
767
+ if File.exist? ::Cyberweb.project_yaml_directory?+'js_files_to_load.yml' # MAIN_DIR is defined in web_requires.rb
393
768
  ARRAY_DEFAULT_JAVASCRIPT_LIBRARIES = YAML.load_file(
394
- "#{PROJECT_YAML_DIRECTORY}js_files_to_load.yml" # bl $WEB_FOUNDATION/yaml/js_files_to_load.yml
769
+ "#{::Cyberweb.project_yaml_directory?}js_files_to_load.yml" # bl $WEB_FOUNDATION/yaml/js_files_to_load.yml
395
770
  )
396
771
  else
397
772
  ARRAY_DEFAULT_JAVASCRIPT_LIBRARIES = []
@@ -646,6 +1021,46 @@ module Cyberweb
646
1021
  ctdctr
647
1022
  end
648
1023
 
1024
+ # ========================================================================= #
1025
+ # === Cyberweb.insert_target_blank_onto_this
1026
+ #
1027
+ # This is an ad-hoc method - I needed to add the substring
1028
+ # 'target="_blank"' to a HTML href hyperlink, a <a> tag. Note
1029
+ # that input to this ad-hoc method is assumed to be a bit
1030
+ # dirty sometimes, meaning we may find more than just the
1031
+ # <a> tag used.
1032
+ #
1033
+ # Usage example and expected input and output:
1034
+ #
1035
+ # x = '<a href="https://www.youtube.com/watch?v=WxhjElaBRhE" id="our_id" onclick="change_the_colour_to()">'
1036
+ # Cyberweb.insert_target_blank_onto_this(x)
1037
+ # puts x
1038
+ #
1039
+ # ========================================================================= #
1040
+ def self.insert_target_blank_onto_this(i)
1041
+ add_this = ' target="_blank"' # This is the String that we will add.
1042
+ original_input = i.dup # This is our original input as-is.
1043
+ work_on_a_copy = i.dup
1044
+ if original_input.include?('>') # In this case we have dirty input.
1045
+ splitted = original_input.split(/>/, 2)
1046
+ first_element = splitted.first
1047
+ # ===================================================================== #
1048
+ # Find the last position of the ' ' character.
1049
+ # ===================================================================== #
1050
+ last_index = first_element.rindex(' ')
1051
+ first_element[last_index, 0] = add_this
1052
+ work_on_a_copy = splitted.join('>')
1053
+ else
1054
+ # ===================================================================== #
1055
+ # Find the last position of the ' ' character.
1056
+ # ===================================================================== #
1057
+ last_index = original_input.rindex(' ')
1058
+ work_on_a_copy[last_index, 0] = add_this
1059
+ end
1060
+ i.replace(work_on_a_copy)
1061
+ return work_on_a_copy # And return it, just in case.
1062
+ end
1063
+
649
1064
  # ========================================================================= #
650
1065
  # === ibr
651
1066
  #
@@ -938,15 +1353,6 @@ module Cyberweb
938
1353
  end; alias save_what websave_what_to # === save_what
939
1354
  alias save_what_to websave_what_to # === save_what_to
940
1355
 
941
- # ========================================================================= #
942
- # === send_email
943
- #
944
- # Use this method to send an email.
945
- # ========================================================================= #
946
- def send_email
947
- w.mail.deliver
948
- end
949
-
950
1356
  # ========================================================================= #
951
1357
  # === right
952
1358
  # ========================================================================= #
@@ -1330,32 +1736,6 @@ module Cyberweb
1330
1736
  Cyberweb.project_base_directory?+'javascript_code/'
1331
1737
  end
1332
1738
 
1333
- # ========================================================================= #
1334
- # === Cyberweb.try_to_open_this_URL_via_the_browser
1335
- #
1336
- # Usage example:
1337
- #
1338
- # Cyberweb.try_to_open_this_URL_via_the_browser(target, USE_THIS_PORT)
1339
- #
1340
- # ========================================================================= #
1341
- def self.try_to_open_this_URL_via_the_browser(
1342
- target, use_this_port = '4567'
1343
- )
1344
- begin
1345
- require 'open'
1346
- target = "http://localhost:#{use_this_port}/"
1347
- if block_given? and (yield == :be_quiet)
1348
- else
1349
- puts ::Colours.sfancy(target)
1350
- end
1351
- Thread.new {
1352
- Open.in_browser(target) {{ delay: '1.0 seconds' }}
1353
- }
1354
- rescue LoadError => error
1355
- pp error
1356
- end
1357
- end
1358
-
1359
1739
  # ========================================================================= #
1360
1740
  # === Cyberweb.window (window tag)
1361
1741
  #
@@ -1391,6 +1771,78 @@ module Cyberweb
1391
1771
  return result
1392
1772
  end
1393
1773
 
1774
+ # ========================================================================= #
1775
+ # === Cyberweb.is_an_image_file?
1776
+ # ========================================================================= #
1777
+ def self.is_an_image_file?(i)
1778
+ ARRAY_IMAGES.include?(File.extname(i).delete('.'))
1779
+ end; self.instance_eval { alias is_an_image? is_an_image_file? } # === Cyberweb.is_an_image?
1780
+
1781
+ # ========================================================================= #
1782
+ # === Cyberweb.sanitize_this_string_by_adding_a_newline_after_every_closing_HTML_tag
1783
+ #
1784
+ # The following method is an ad-hoc method - I needed to sanitize a remote
1785
+ # String coming from a .html page that removed all newlines. Ideally this
1786
+ # should be a regex, but for now we just chop away on '>'.
1787
+ #
1788
+ # If a file is given as argument then its content will be read.
1789
+ #
1790
+ # Usage example for a local .html file:
1791
+ #
1792
+ # x = Cyberweb.sanitize_this_string_by_adding_a_newline_after_every_closing_HTML_tag('/Depot/j/foobar.html')
1793
+ #
1794
+ # ========================================================================= #
1795
+ def self.sanitize_this_string_by_adding_a_newline_after_every_closing_HTML_tag(
1796
+ i = ARGV
1797
+ )
1798
+ if i.is_a? Array
1799
+ i = i.join(' ').strip
1800
+ end
1801
+ if i and File.file?(i)
1802
+ i = File.read(i) # Add support for existing files here.^
1803
+ end
1804
+ return i.gsub(/>/, ">\n")
1805
+ end; self.instance_eval { alias sanitizer sanitize_this_string_by_adding_a_newline_after_every_closing_HTML_tag } # === Cyberweb.sanitizer
1806
+
1807
+ # ========================================================================= #
1808
+ # === Cyberweb.return_html_code_for_the_javascript_calculator
1809
+ #
1810
+ # This is the method that will return the table that, in turn, shall
1811
+ # simulate a javascript-calculator.
1812
+ # ========================================================================= #
1813
+ def self.return_html_code_for_the_javascript_calculator
1814
+ return '<table id="simple_javascript_calculator" style="border: 1px solid black">
1815
+ <tr>
1816
+ <td align="center">
1817
+ <input type="text" ID="screen_for_the_simple_javascript_calculator" NAME="screen" style="width:95%; font-size: 30px"><br/>
1818
+ </td>
1819
+ </tr>
1820
+ <tr>
1821
+ <td>
1822
+ <input class="input_for_the_calculator" type="button" NAME="7" VALUE=" 7 " onclick="updateTextbox(7)">
1823
+ <input class="input_for_the_calculator" type="button" NAME="8" VALUE=" 8 " onclick="updateTextbox(8)">
1824
+ <input class="input_for_the_calculator" type="button" NAME="9" VALUE=" 9 " onclick="updateTextbox(9)">
1825
+ <input class="input_for_the_calculator" type="button" NAME="+" VALUE=" + " onclick="updateTextbox(\'+\')">
1826
+ <br>
1827
+ <input class="input_for_the_calculator" type="button" NAME="4" VALUE=" 4 " onclick="updateTextbox(4)">
1828
+ <input class="input_for_the_calculator" type="button" NAME="5" VALUE=" 5 " onclick="updateTextbox(5)">
1829
+ <input class="input_for_the_calculator" type="button" NAME="6" VALUE=" 6 " onclick="updateTextbox(6)">
1830
+ <input class="input_for_the_calculator" type="button" NAME="-" VALUE=" - " onclick="updateTextbox(\'-\')">
1831
+ <br>
1832
+ <input class="input_for_the_calculator" type="button" NAME="1" VALUE=" 1 " onclick="updateTextbox(1)">
1833
+ <input class="input_for_the_calculator" type="button" NAME="2" VALUE=" 2 " onclick="updateTextbox(2)">
1834
+ <input class="input_for_the_calculator" type="button" NAME="3" VALUE=" 3 " onclick="updateTextbox(3)">
1835
+ <input class="input_for_the_calculator" type="button" NAME="*" VALUE=" x " onclick="updateTextbox(\'*\')">
1836
+ <br>
1837
+ <input class="input_for_the_calculator" type="button" NAME="c" VALUE=" c " onclick="reset();">
1838
+ <input class="input_for_the_calculator" type="button" NAME="0" VALUE=" 0 " onclick="updateTextbox(0)">
1839
+ <input class="input_for_the_calculator" type="button" NAME="=" VALUE=" = " onclick="result();">
1840
+ <input class="input_for_the_calculator" type="button" NAME="/" VALUE=" / " onclick="updateTextbox(\'/\')">
1841
+ </td>
1842
+ </tr>
1843
+ </table>'
1844
+ end
1845
+
1394
1846
  end
1395
1847
 
1396
1848
  if __FILE__ == $PROGRAM_NAME