cyberweb 0.4.174

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

Potentially problematic release.


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

Files changed (573) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3259 -0
  3. data/bin/cyberweb +27 -0
  4. data/cyberweb.gemspec +119 -0
  5. data/doc/AUTHORS.md +12 -0
  6. data/doc/CONVENTIONS.md +7 -0
  7. data/doc/CYBERWEB_TUTORIAL.cgi +43 -0
  8. data/doc/DOCUMENTATION_FOR_CYBERSPRAWL.md +50 -0
  9. data/doc/FUTURE_DESIGN_GOAL_CONSIDERATIONS.md +13 -0
  10. data/doc/JQUERY.md +122 -0
  11. data/doc/MOUSE.md +80 -0
  12. data/doc/README.gen +3231 -0
  13. data/doc/RENDER_WEB_BASE.md +46 -0
  14. data/doc/USAGE.md +246 -0
  15. data/doc/configuration/configuration.md +23 -0
  16. data/doc/deprecations.md +32 -0
  17. data/doc/html_characters.md +15 -0
  18. data/doc/todo/TODO_FOR_THE_CYBERWEB_PROJECT.md +1089 -0
  19. data/examples/README.md +4 -0
  20. data/examples/advanced/delayed_update_of_the_body_via_javascript.cgi +38 -0
  21. data/examples/advanced/hybrid_experiment.cgi +108 -0
  22. data/examples/advanced/larger_image_on_mouse_over_example.cgi +35 -0
  23. data/examples/advanced/no_right_click.cgi +26 -0
  24. data/examples/advanced/objectified_html_tags.cgi +35 -0
  25. data/examples/advanced/simple_calculator.cgi +42 -0
  26. data/examples/advanced/simple_form_example.cgi +38 -0
  27. data/examples/css/blue_border.html +28 -0
  28. data/examples/css/caret_colour_example.html +22 -0
  29. data/examples/css/css_border_spacing_example.html +69 -0
  30. data/examples/css/css_bubbles.html +43 -0
  31. data/examples/css/css_clock.html +344 -0
  32. data/examples/css/css_drag_and_drop.html +89 -0
  33. data/examples/css/css_neon_glow_effects.html +317 -0
  34. data/examples/css/css_text_decoration_example.html +70 -0
  35. data/examples/css/css_tooltip.html +44 -0
  36. data/examples/css/fade_in_and_fade_out_effect.html +66 -0
  37. data/examples/css/font_size_examples.html +40 -0
  38. data/examples/css/letter_spacing_example.cgi +36 -0
  39. data/examples/css/meter_example.html +31 -0
  40. data/examples/css/on_mouse_button_pressed.html +41 -0
  41. data/examples/css/planets.html +187 -0
  42. data/examples/css/scale_example.html +25 -0
  43. data/examples/css/shadow_example_in_CSS.cgi +30 -0
  44. data/examples/css/sticky_div_example.html +56 -0
  45. data/examples/css/stitched_div.html +36 -0
  46. data/examples/csv/README.md +1 -0
  47. data/examples/csv/sample.csv +10 -0
  48. data/examples/example1.rb +7 -0
  49. data/examples/flip_card_example/flip_card_example.html +72 -0
  50. data/examples/frames/frame_left.html +1 -0
  51. data/examples/frames/frame_right.html +1 -0
  52. data/examples/html/README.md +1 -0
  53. data/examples/html/abbr_example.html +25 -0
  54. data/examples/html/base64_image_example.html +26 -0
  55. data/examples/html/colour_wheel.html +1389 -0
  56. data/examples/html/column_width_example.html +34 -0
  57. data/examples/html/custom_cursor.html +103 -0
  58. data/examples/html/draggable_paragraph.html +12 -0
  59. data/examples/html/fieldset_example.html +25 -0
  60. data/examples/html/frames_example.html +7 -0
  61. data/examples/html/glyph_example.html +43 -0
  62. data/examples/html/hbox_and_vbox_example.html +65 -0
  63. data/examples/html/href_examples.html +27 -0
  64. data/examples/html/input_autofocus_example.html +16 -0
  65. data/examples/html/larger_image_on_mouse_over_example.html +30 -0
  66. data/examples/html/ordered_and_unordered_bulletsin.html +33 -0
  67. data/examples/html/play_video_example.html +13 -0
  68. data/examples/html/readonly_textarea_example.html +23 -0
  69. data/examples/html/remote_image_example.html +10 -0
  70. data/examples/html/simple_unordered_list.html +16 -0
  71. data/examples/html/table_with_header_example.html +27 -0
  72. data/examples/html/two_columns_flex_example.html +39 -0
  73. data/examples/javascript/README.md +2 -0
  74. data/examples/javascript/arrays/arrays_example_in_javascript.html +16 -0
  75. data/examples/javascript/delay_example/delay_example.html +46 -0
  76. data/examples/javascript/drag_support/drag_support.html +37 -0
  77. data/examples/javascript/jquery_drag_and_drop/drag_and_drop_image_example.html +33 -0
  78. data/examples/javascript/on_click_event_hello_world/on_click_event_hello_world.html +21 -0
  79. data/examples/javascript/rgb_to_hex/rgb_to_hex.html +15 -0
  80. data/examples/javascript/screen_resolution/screen_resolution.html +20 -0
  81. data/examples/javascript/select_everything/select_everything.html +14 -0
  82. data/examples/javascript/write_into_a_file/write_into_a_file.html +39 -0
  83. data/examples/rack/README.md +4 -0
  84. data/examples/rack/example_with_html_template.rb +123 -0
  85. data/examples/rack/example_with_rack_and_cyberweb_showing_how_to_use_images.rb +56 -0
  86. data/examples/rack/hello_world_example_with_rack.rb +45 -0
  87. data/examples/rack/lobster.rb +79 -0
  88. data/examples/rack/rack_env.rb +10 -0
  89. data/examples/rack/standalone_example.rb +26 -0
  90. data/examples/show_greek_letters.rb +3 -0
  91. data/examples/simple/on_click_event_hello_world.cgi +34 -0
  92. data/examples/sinatra/001_your_ip_address_is.rb +8 -0
  93. data/examples/sinatra/002_the_request_object.rb +16 -0
  94. data/examples/sinatra/003_hello_world_example.rb +82 -0
  95. data/examples/sinatra/004_splat_example.rb +10 -0
  96. data/examples/sinatra/005_attachment_example.rb +11 -0
  97. data/examples/sinatra/006_outer_self_example.rb +8 -0
  98. data/examples/sinatra/007_mime_type_example.rb +17 -0
  99. data/examples/sinatra/008_post_example.rb +55 -0
  100. data/examples/table_example.rb +37 -0
  101. data/images/cyberweb_favicon.png +0 -0
  102. data/images/cyberweb_logo.png +0 -0
  103. data/images/cyberweb_theme.png +0 -0
  104. data/lib/cyberweb/and_sinatra_base.rb +9 -0
  105. data/lib/cyberweb/autoinclude.rb +20 -0
  106. data/lib/cyberweb/autoinclude_webobject.rb +14 -0
  107. data/lib/cyberweb/base/base.rb +41 -0
  108. data/lib/cyberweb/base/colours.rb +69 -0
  109. data/lib/cyberweb/base/constants.rb +18 -0
  110. data/lib/cyberweb/base/encoding.rb +19 -0
  111. data/lib/cyberweb/base/misc.rb +239 -0
  112. data/lib/cyberweb/base/reset.rb +23 -0
  113. data/lib/cyberweb/base/save_file.rb +22 -0
  114. data/lib/cyberweb/cascading_style_sheets/README.md +4 -0
  115. data/lib/cyberweb/cascading_style_sheets/admonition.css +33 -0
  116. data/lib/cyberweb/cascading_style_sheets/balloon.css +344 -0
  117. data/lib/cyberweb/cascading_style_sheets/border.css +202 -0
  118. data/lib/cyberweb/cascading_style_sheets/code.css +58 -0
  119. data/lib/cyberweb/cascading_style_sheets/colours.css +476 -0
  120. data/lib/cyberweb/cascading_style_sheets/default.css +1836 -0
  121. data/lib/cyberweb/cascading_style_sheets/div.css +26 -0
  122. data/lib/cyberweb/cascading_style_sheets/fonts.css +365 -0
  123. data/lib/cyberweb/cascading_style_sheets/links.css +207 -0
  124. data/lib/cyberweb/cascading_style_sheets/margin.css +677 -0
  125. data/lib/cyberweb/cascading_style_sheets/menu.css +37 -0
  126. data/lib/cyberweb/cascading_style_sheets/message_boxes.css +48 -0
  127. data/lib/cyberweb/cascading_style_sheets/misc.css +162 -0
  128. data/lib/cyberweb/cascading_style_sheets/popup.css +63 -0
  129. data/lib/cyberweb/cascading_style_sheets/rpg.css +51 -0
  130. data/lib/cyberweb/cascading_style_sheets/ruby_regexes.css +33 -0
  131. data/lib/cyberweb/cascading_style_sheets/template2.css +18 -0
  132. data/lib/cyberweb/cascading_style_sheets/text_shadow.css +19 -0
  133. data/lib/cyberweb/cascading_style_sheets/tooltip.css +36 -0
  134. data/lib/cyberweb/cgi/README.md +6 -0
  135. data/lib/cyberweb/cgi/cgi.rb +340 -0
  136. data/lib/cyberweb/cgi/constants.rb +121 -0
  137. data/lib/cyberweb/cgi/cookie.rb +218 -0
  138. data/lib/cyberweb/cgi/core.rb +638 -0
  139. data/lib/cyberweb/cgi/exceptions.rb +223 -0
  140. data/lib/cyberweb/cgi/html.rb +1025 -0
  141. data/lib/cyberweb/cgi/mod_ruby_exception_printer.rb +40 -0
  142. data/lib/cyberweb/cgi/query_extension.rb +431 -0
  143. data/lib/cyberweb/cgi/session/file_store.rb +131 -0
  144. data/lib/cyberweb/cgi/session/memory_store.rb +90 -0
  145. data/lib/cyberweb/cgi/session/pstore.rb +127 -0
  146. data/lib/cyberweb/cgi/session.rb +444 -0
  147. data/lib/cyberweb/cgi/tag_maker.rb +94 -0
  148. data/lib/cyberweb/cgi/util.rb +239 -0
  149. data/lib/cyberweb/charts/README.md +2 -0
  150. data/lib/cyberweb/charts/google_charts.rb +51 -0
  151. data/lib/cyberweb/classes/simple_form.rb +55 -0
  152. data/lib/cyberweb/classes/tooltips.rb +169 -0
  153. data/lib/cyberweb/coloured_tags/coloured_tags.rb +3099 -0
  154. data/lib/cyberweb/colours/colour_chart.rb +117 -0
  155. data/lib/cyberweb/colours/colours.rb +50 -0
  156. data/lib/cyberweb/colours/random_colour.rb +28 -0
  157. data/lib/cyberweb/colours/sanitize_for_colours.rb +95 -0
  158. data/lib/cyberweb/commandline/commandline_interface.rb +49 -0
  159. data/lib/cyberweb/configuration/configuration.rb +66 -0
  160. data/lib/cyberweb/configuration/load_the_configuration_file.rb +73 -0
  161. data/lib/cyberweb/constants/array_images.rb +21 -0
  162. data/lib/cyberweb/constants/array_local_css_files.rb +35 -0
  163. data/lib/cyberweb/constants/array_predefined_constants.rb +23 -0
  164. data/lib/cyberweb/constants/configuration_file.rb +33 -0
  165. data/lib/cyberweb/constants/constants.rb +9 -0
  166. data/lib/cyberweb/constants/file_constants.rb +16 -0
  167. data/lib/cyberweb/constants/http_status_codes.rb +42 -0
  168. data/lib/cyberweb/constants/nl.rb +22 -0
  169. data/lib/cyberweb/constants/project_constants.rb +99 -0
  170. data/lib/cyberweb/constants/roebe.rb +28 -0
  171. data/lib/cyberweb/constants/standalone_constants.rb +309 -0
  172. data/lib/cyberweb/controller/README.md +4 -0
  173. data/lib/cyberweb/controller/webobject_controller.rb +50 -0
  174. data/lib/cyberweb/csv/README.md +2 -0
  175. data/lib/cyberweb/csv/csv.rb +58 -0
  176. data/lib/cyberweb/cybersprawl +1 -0
  177. data/lib/cyberweb/debug/debug.rb +69 -0
  178. data/lib/cyberweb/encoding/encoding.rb +84 -0
  179. data/lib/cyberweb/erb/test.rhtml +81 -0
  180. data/lib/cyberweb/erb/test_template.erb +9 -0
  181. data/lib/cyberweb/evaluate_from_the_same_named_file_then_serve.rb +9 -0
  182. data/lib/cyberweb/favicon/favicon.rb +196 -0
  183. data/lib/cyberweb/generator/README.md +2 -0
  184. data/lib/cyberweb/generator/cgi.rb +201 -0
  185. data/lib/cyberweb/generator/class.rb +25 -0
  186. data/lib/cyberweb/generator/static_webpage.rb +162 -0
  187. data/lib/cyberweb/generator/webpage_for_images.rb +553 -0
  188. data/lib/cyberweb/help/help.rb +29 -0
  189. data/lib/cyberweb/html_codes/README.md +15 -0
  190. data/lib/cyberweb/html_codes/greek_letters.rb +204 -0
  191. data/lib/cyberweb/html_tags/README.md +3 -0
  192. data/lib/cyberweb/html_tags/a.rb +65 -0
  193. data/lib/cyberweb/html_tags/accesskey.rb +25 -0
  194. data/lib/cyberweb/html_tags/blockquote.rb +56 -0
  195. data/lib/cyberweb/html_tags/body.rb +14 -0
  196. data/lib/cyberweb/html_tags/br.rb +19 -0
  197. data/lib/cyberweb/html_tags/button.rb +110 -0
  198. data/lib/cyberweb/html_tags/canvas.rb +59 -0
  199. data/lib/cyberweb/html_tags/chtml.rb +14 -0
  200. data/lib/cyberweb/html_tags/div.rb +163 -0
  201. data/lib/cyberweb/html_tags/fieldset.rb +67 -0
  202. data/lib/cyberweb/html_tags/figure.rb +72 -0
  203. data/lib/cyberweb/html_tags/form.rb +203 -0
  204. data/lib/cyberweb/html_tags/h1.rb +75 -0
  205. data/lib/cyberweb/html_tags/h2.rb +73 -0
  206. data/lib/cyberweb/html_tags/h3.rb +58 -0
  207. data/lib/cyberweb/html_tags/h4.rb +60 -0
  208. data/lib/cyberweb/html_tags/h5.rb +54 -0
  209. data/lib/cyberweb/html_tags/h6.rb +54 -0
  210. data/lib/cyberweb/html_tags/hr.rb +22 -0
  211. data/lib/cyberweb/html_tags/html_tags.rb +240 -0
  212. data/lib/cyberweb/html_tags/i.rb +50 -0
  213. data/lib/cyberweb/html_tags/img.rb +294 -0
  214. data/lib/cyberweb/html_tags/input.rb +345 -0
  215. data/lib/cyberweb/html_tags/label.rb +63 -0
  216. data/lib/cyberweb/html_tags/legend.rb +56 -0
  217. data/lib/cyberweb/html_tags/li.rb +67 -0
  218. data/lib/cyberweb/html_tags/map.rb +31 -0
  219. data/lib/cyberweb/html_tags/nav.rb +63 -0
  220. data/lib/cyberweb/html_tags/object.rb +56 -0
  221. data/lib/cyberweb/html_tags/ol.rb +56 -0
  222. data/lib/cyberweb/html_tags/option.rb +61 -0
  223. data/lib/cyberweb/html_tags/p.rb +90 -0
  224. data/lib/cyberweb/html_tags/pre.rb +164 -0
  225. data/lib/cyberweb/html_tags/section.rb +33 -0
  226. data/lib/cyberweb/html_tags/select.rb +100 -0
  227. data/lib/cyberweb/html_tags/span.rb +338 -0
  228. data/lib/cyberweb/html_tags/strong.rb +39 -0
  229. data/lib/cyberweb/html_tags/table.rb +273 -0
  230. data/lib/cyberweb/html_tags/tbody.rb +24 -0
  231. data/lib/cyberweb/html_tags/td.rb +214 -0
  232. data/lib/cyberweb/html_tags/textarea.rb +138 -0
  233. data/lib/cyberweb/html_tags/th.rb +68 -0
  234. data/lib/cyberweb/html_tags/thead.rb +36 -0
  235. data/lib/cyberweb/html_tags/tr.rb +97 -0
  236. data/lib/cyberweb/html_tags/ul.rb +51 -0
  237. data/lib/cyberweb/html_template/html_template.rb +352 -0
  238. data/lib/cyberweb/images/embed_this_image.rb +37 -0
  239. data/lib/cyberweb/images/images.rb +58 -0
  240. data/lib/cyberweb/images/is_image.rb +22 -0
  241. data/lib/cyberweb/images/path_to_images.rb +60 -0
  242. data/lib/cyberweb/images/real/README.md +6 -0
  243. data/lib/cyberweb/images/remove_this_substring_from_all_images.rb +44 -0
  244. data/lib/cyberweb/images/standalone_drag_and_drop_this_image.rb +64 -0
  245. data/lib/cyberweb/images/string_image.rb +399 -0
  246. data/lib/cyberweb/images_base64_encoded/AUSRUFUNGSZEICHEN.png.md +1 -0
  247. data/lib/cyberweb/images_base64_encoded/BLUEARROW.png.md +1 -0
  248. data/lib/cyberweb/images_base64_encoded/BUBBLE.png.md +1 -0
  249. data/lib/cyberweb/images_base64_encoded/CAT.png.md +1 -0
  250. data/lib/cyberweb/images_base64_encoded/CAUTION.png.md +1 -0
  251. data/lib/cyberweb/images_base64_encoded/CHEERING_PERSON.png.md +1 -0
  252. data/lib/cyberweb/images_base64_encoded/CURSOR.png.md +1 -0
  253. data/lib/cyberweb/images_base64_encoded/DOT_01.png.md +5 -0
  254. data/lib/cyberweb/images_base64_encoded/DUCKY.png.md +1 -0
  255. data/lib/cyberweb/images_base64_encoded/ELEPHANT.png.md +1 -0
  256. data/lib/cyberweb/images_base64_encoded/HALLOWEEN.png.md +1 -0
  257. data/lib/cyberweb/images_base64_encoded/HANGING_MONKEY.png.md +1 -0
  258. data/lib/cyberweb/images_base64_encoded/LENS.png.md +1 -0
  259. data/lib/cyberweb/images_base64_encoded/README.md +2 -0
  260. data/lib/cyberweb/images_base64_encoded/TU_WIEN_LOGO.png.md +1 -0
  261. data/lib/cyberweb/images_base64_encoded/VOGEL.png.md +1 -0
  262. data/lib/cyberweb/io/README.md +1 -0
  263. data/lib/cyberweb/io/io.rb +19 -0
  264. data/lib/cyberweb/javascript/drag_and_drop.rb +105 -0
  265. data/lib/cyberweb/javascript/dragula_collection.rb +54 -0
  266. data/lib/cyberweb/javascript/javascript.rb +211 -0
  267. data/lib/cyberweb/javascript/javascript_bundle.rb +223 -0
  268. data/lib/cyberweb/javascript/javascript_clock.rb +69 -0
  269. data/lib/cyberweb/javascript/javascript_last_modified.rb +27 -0
  270. data/lib/cyberweb/javascript/javascript_magic.rb +150 -0
  271. data/lib/cyberweb/javascript/javascript_selectable.rb +24 -0
  272. data/lib/cyberweb/javascript/jquery.rb +30 -0
  273. data/lib/cyberweb/javascript/on_click_change_opacity.rb +97 -0
  274. data/lib/cyberweb/javascript/on_click_hide.rb +63 -0
  275. data/lib/cyberweb/javascript/popup.rb +80 -0
  276. data/lib/cyberweb/javascript/print_javascript.rb +33 -0
  277. data/lib/cyberweb/javascript/registered_javascript_methods.rb +30 -0
  278. data/lib/cyberweb/javascript/resize.rb +28 -0
  279. data/lib/cyberweb/javascript/return_javascript.rb +48 -0
  280. data/lib/cyberweb/javascript/scroll.rb +17 -0
  281. data/lib/cyberweb/javascript/snoweffect.rb +122 -0
  282. data/lib/cyberweb/javascript_code/README.md +6 -0
  283. data/lib/cyberweb/javascript_code/chmod_displayer.js +74 -0
  284. data/lib/cyberweb/javascript_code/custom_functions.js +267 -0
  285. data/lib/cyberweb/javascript_code/jquery/jquery-3.6.0.js +10881 -0
  286. data/lib/cyberweb/javascript_code/jquery/jquery-ui-1.12.1.js +18706 -0
  287. data/lib/cyberweb/javascript_code/rgb_to_hex.js +14 -0
  288. data/lib/cyberweb/javascript_code/select_even_numbers.js +7 -0
  289. data/lib/cyberweb/javascript_code/select_everything.js +22 -0
  290. data/lib/cyberweb/javascript_code/simple_calculator.js +15 -0
  291. data/lib/cyberweb/javascript_code/sleep.js +3 -0
  292. data/lib/cyberweb/javascript_code/to_celsius.js +8 -0
  293. data/lib/cyberweb/mouse/README.md +3 -0
  294. data/lib/cyberweb/mouse/libxdo.rb +321 -0
  295. data/lib/cyberweb/mouse/mouse.rb +264 -0
  296. data/lib/cyberweb/objectified_html_tags/README.md +8 -0
  297. data/lib/cyberweb/objectified_html_tags/a.rb +129 -0
  298. data/lib/cyberweb/objectified_html_tags/abbr.rb +84 -0
  299. data/lib/cyberweb/objectified_html_tags/base.rb +376 -0
  300. data/lib/cyberweb/objectified_html_tags/button.rb +135 -0
  301. data/lib/cyberweb/objectified_html_tags/combobox.rb +165 -0
  302. data/lib/cyberweb/objectified_html_tags/div.rb +129 -0
  303. data/lib/cyberweb/objectified_html_tags/embed.rb +161 -0
  304. data/lib/cyberweb/objectified_html_tags/form.rb +129 -0
  305. data/lib/cyberweb/objectified_html_tags/h1.rb +129 -0
  306. data/lib/cyberweb/objectified_html_tags/h2.rb +129 -0
  307. data/lib/cyberweb/objectified_html_tags/h3.rb +129 -0
  308. data/lib/cyberweb/objectified_html_tags/h4.rb +129 -0
  309. data/lib/cyberweb/objectified_html_tags/h5.rb +129 -0
  310. data/lib/cyberweb/objectified_html_tags/h6.rb +129 -0
  311. data/lib/cyberweb/objectified_html_tags/hbox.rb +71 -0
  312. data/lib/cyberweb/objectified_html_tags/img.rb +202 -0
  313. data/lib/cyberweb/objectified_html_tags/input.rb +185 -0
  314. data/lib/cyberweb/objectified_html_tags/p.rb +129 -0
  315. data/lib/cyberweb/objectified_html_tags/pre.rb +129 -0
  316. data/lib/cyberweb/objectified_html_tags/span.rb +92 -0
  317. data/lib/cyberweb/objectified_html_tags/table.rb +174 -0
  318. data/lib/cyberweb/objectified_html_tags/textarea.rb +173 -0
  319. data/lib/cyberweb/objectified_html_tags/title.rb +82 -0
  320. data/lib/cyberweb/objectified_html_tags/window.rb +79 -0
  321. data/lib/cyberweb/predefined_and_freeform_methods/README.md +1 -0
  322. data/lib/cyberweb/predefined_and_freeform_methods/frage.rb +45 -0
  323. data/lib/cyberweb/predefined_and_freeform_methods/freeform_methods.rb +93 -0
  324. data/lib/cyberweb/predefined_and_freeform_methods/hash_css_class_to_use.rb +55 -0
  325. data/lib/cyberweb/predefined_and_freeform_methods/hash_registered_extra_tags.rb +29 -0
  326. data/lib/cyberweb/predefined_and_freeform_methods/header.rb +81 -0
  327. data/lib/cyberweb/predefined_and_freeform_methods/predefined_methods.rb +413 -0
  328. data/lib/cyberweb/project/project.rb +85 -0
  329. data/lib/cyberweb/rack/README.md +1 -0
  330. data/lib/cyberweb/rack/request.rb +31 -0
  331. data/lib/cyberweb/requires/README.md +4 -0
  332. data/lib/cyberweb/requires/do_require_web_object_files.rb +9 -0
  333. data/lib/cyberweb/requires/remove_html.rb +9 -0
  334. data/lib/cyberweb/requires/require_cgi.rb +16 -0
  335. data/lib/cyberweb/requires/require_charts.rb +20 -0
  336. data/lib/cyberweb/requires/require_generators.rb +23 -0
  337. data/lib/cyberweb/requires/require_html_tags_files.rb +23 -0
  338. data/lib/cyberweb/requires/require_javascript_files.rb +23 -0
  339. data/lib/cyberweb/requires/require_kimurai.rb +13 -0
  340. data/lib/cyberweb/requires/require_objectified_html_tags_files.rb +23 -0
  341. data/lib/cyberweb/requires/require_sinatra.rb +7 -0
  342. data/lib/cyberweb/requires/require_the_constants.rb +26 -0
  343. data/lib/cyberweb/requires/require_the_cyberweb_project.rb +172 -0
  344. data/lib/cyberweb/requires/require_the_html_template.rb +7 -0
  345. data/lib/cyberweb/requires/require_the_toplevel_methods_files.rb +24 -0
  346. data/lib/cyberweb/requires/require_web_images.rb +7 -0
  347. data/lib/cyberweb/requires/require_web_object_files.rb +25 -0
  348. data/lib/cyberweb/requires/require_yaml.rb +11 -0
  349. data/lib/cyberweb/sinatra/README.md +11 -0
  350. data/lib/cyberweb/sinatra/base.rb +145 -0
  351. data/lib/cyberweb/sinatra/custom_extensions.rb +131 -0
  352. data/lib/cyberweb/standalone_classes/all_css_classes.rb +255 -0
  353. data/lib/cyberweb/standalone_classes/calculator.rb +127 -0
  354. data/lib/cyberweb/standalone_classes/correct_image_entries_in_html_file.rb +207 -0
  355. data/lib/cyberweb/standalone_classes/input_focus.rb +97 -0
  356. data/lib/cyberweb/standalone_classes/tag_prototype.rb +43 -0
  357. data/lib/cyberweb/standalone_classes/turn_html_into_cyberweb.rb +174 -0
  358. data/lib/cyberweb/svg/blue_rect.svg +12 -0
  359. data/lib/cyberweb/svg/butterfly.svg +15 -0
  360. data/lib/cyberweb/svg/chemical_molecule.svg +192 -0
  361. data/lib/cyberweb/svg/circles_on_background.svg +29 -0
  362. data/lib/cyberweb/svg/ellipse.svg +12 -0
  363. data/lib/cyberweb/svg/five_circles.svg +26 -0
  364. data/lib/cyberweb/svg/flag_germany.svg +10 -0
  365. data/lib/cyberweb/svg/gaussian_blur.svg +20 -0
  366. data/lib/cyberweb/svg/gradient_circle.svg +18 -0
  367. data/lib/cyberweb/svg/green_butterfly.svg +18 -0
  368. data/lib/cyberweb/svg/green_tilted_lines.svg +25 -0
  369. data/lib/cyberweb/svg/lion.svg +161 -0
  370. data/lib/cyberweb/svg/one_circle.svg +12 -0
  371. data/lib/cyberweb/svg/pie_chart.svg +130 -0
  372. data/lib/cyberweb/svg/svg.cgi +61 -0
  373. data/lib/cyberweb/svg/tetris.svg +487 -0
  374. data/lib/cyberweb/svg/three_circles.svg +18 -0
  375. data/lib/cyberweb/svg/tiger.svg +732 -0
  376. data/lib/cyberweb/svg/tilted_arcs.svg +74 -0
  377. data/lib/cyberweb/svg/transparent_rect.svg +12 -0
  378. data/lib/cyberweb/svg/yellow_fe_blending.svg +42 -0
  379. data/lib/cyberweb/toplevel_methods/a.rb +131 -0
  380. data/lib/cyberweb/toplevel_methods/anmerkung.rb +67 -0
  381. data/lib/cyberweb/toplevel_methods/audio.rb +59 -0
  382. data/lib/cyberweb/toplevel_methods/bold.rb +65 -0
  383. data/lib/cyberweb/toplevel_methods/cgi.rb +65 -0
  384. data/lib/cyberweb/toplevel_methods/charsets.rb +52 -0
  385. data/lib/cyberweb/toplevel_methods/clear.rb +30 -0
  386. data/lib/cyberweb/toplevel_methods/close.rb +62 -0
  387. data/lib/cyberweb/toplevel_methods/consider_serving_the_web_object.rb +41 -0
  388. data/lib/cyberweb/toplevel_methods/css.rb +732 -0
  389. data/lib/cyberweb/toplevel_methods/date.rb +71 -0
  390. data/lib/cyberweb/toplevel_methods/dictionary.rb +48 -0
  391. data/lib/cyberweb/toplevel_methods/disable.rb +49 -0
  392. data/lib/cyberweb/toplevel_methods/document.rb +56 -0
  393. data/lib/cyberweb/toplevel_methods/dot.rb +182 -0
  394. data/lib/cyberweb/toplevel_methods/download_webpage.rb +18 -0
  395. data/lib/cyberweb/toplevel_methods/edit_configuration_file.rb +26 -0
  396. data/lib/cyberweb/toplevel_methods/ee.rb +44 -0
  397. data/lib/cyberweb/toplevel_methods/env.rb +44 -0
  398. data/lib/cyberweb/toplevel_methods/escape_html.rb +54 -0
  399. data/lib/cyberweb/toplevel_methods/fields.rb +46 -0
  400. data/lib/cyberweb/toplevel_methods/filename.rb +33 -0
  401. data/lib/cyberweb/toplevel_methods/frames.rb +131 -0
  402. data/lib/cyberweb/toplevel_methods/glob.rb +30 -0
  403. data/lib/cyberweb/toplevel_methods/google.rb +35 -0
  404. data/lib/cyberweb/toplevel_methods/hardware_information.rb +90 -0
  405. data/lib/cyberweb/toplevel_methods/hfin.rb +56 -0
  406. data/lib/cyberweb/toplevel_methods/html_comment.rb +48 -0
  407. data/lib/cyberweb/toplevel_methods/html_mode.rb +39 -0
  408. data/lib/cyberweb/toplevel_methods/html_tables.rb +818 -0
  409. data/lib/cyberweb/toplevel_methods/input.rb +54 -0
  410. data/lib/cyberweb/toplevel_methods/jquery.rb +82 -0
  411. data/lib/cyberweb/toplevel_methods/last_modified.rb +39 -0
  412. data/lib/cyberweb/toplevel_methods/links.rb +426 -0
  413. data/lib/cyberweb/toplevel_methods/listing.rb +96 -0
  414. data/lib/cyberweb/toplevel_methods/localhost.rb +18 -0
  415. data/lib/cyberweb/toplevel_methods/log_directory.rb +84 -0
  416. data/lib/cyberweb/toplevel_methods/logging.rb +42 -0
  417. data/lib/cyberweb/toplevel_methods/logo.rb +30 -0
  418. data/lib/cyberweb/toplevel_methods/markdown.rb +112 -0
  419. data/lib/cyberweb/toplevel_methods/mathml.rb +130 -0
  420. data/lib/cyberweb/toplevel_methods/message_boxes.rb +140 -0
  421. data/lib/cyberweb/toplevel_methods/misc.rb +1398 -0
  422. data/lib/cyberweb/toplevel_methods/name_of_img_dir.rb +51 -0
  423. data/lib/cyberweb/toplevel_methods/padlem_and_marlem.rb +107 -0
  424. data/lib/cyberweb/toplevel_methods/params.rb +57 -0
  425. data/lib/cyberweb/toplevel_methods/path.rb +69 -0
  426. data/lib/cyberweb/toplevel_methods/pdf.rb +103 -0
  427. data/lib/cyberweb/toplevel_methods/process_content.rb +102 -0
  428. data/lib/cyberweb/toplevel_methods/progress.rb +42 -0
  429. data/lib/cyberweb/toplevel_methods/quote.rb +44 -0
  430. data/lib/cyberweb/toplevel_methods/random.rb +70 -0
  431. data/lib/cyberweb/toplevel_methods/rds.rb +35 -0
  432. data/lib/cyberweb/toplevel_methods/read_and_display.rb +284 -0
  433. data/lib/cyberweb/toplevel_methods/readlines.rb +31 -0
  434. data/lib/cyberweb/toplevel_methods/redirect.rb +29 -0
  435. data/lib/cyberweb/toplevel_methods/registered_ids.rb +178 -0
  436. data/lib/cyberweb/toplevel_methods/remove_html.rb +32 -0
  437. data/lib/cyberweb/toplevel_methods/remove_newlines.rb +28 -0
  438. data/lib/cyberweb/toplevel_methods/return_head_start.rb +33 -0
  439. data/lib/cyberweb/toplevel_methods/return_html_fin.rb +34 -0
  440. data/lib/cyberweb/toplevel_methods/return_html_header.rb +35 -0
  441. data/lib/cyberweb/toplevel_methods/return_html_start.rb +24 -0
  442. data/lib/cyberweb/toplevel_methods/return_html_to_head_start.rb +42 -0
  443. data/lib/cyberweb/toplevel_methods/return_meta_collection.rb +54 -0
  444. data/lib/cyberweb/toplevel_methods/return_pwd.rb +23 -0
  445. data/lib/cyberweb/toplevel_methods/return_strict_doctype.rb +51 -0
  446. data/lib/cyberweb/toplevel_methods/roebe.rb +43 -0
  447. data/lib/cyberweb/toplevel_methods/s2.rb +30 -0
  448. data/lib/cyberweb/toplevel_methods/sanitize_url.rb +57 -0
  449. data/lib/cyberweb/toplevel_methods/sbr.rb +170 -0
  450. data/lib/cyberweb/toplevel_methods/server_base_directory.rb +148 -0
  451. data/lib/cyberweb/toplevel_methods/show_and_display.rb +215 -0
  452. data/lib/cyberweb/toplevel_methods/show_configuration.rb +83 -0
  453. data/lib/cyberweb/toplevel_methods/sitemap.rb +111 -0
  454. data/lib/cyberweb/toplevel_methods/spacer.rb +119 -0
  455. data/lib/cyberweb/toplevel_methods/string_body_start.rb +65 -0
  456. data/lib/cyberweb/toplevel_methods/string_content.rb +35 -0
  457. data/lib/cyberweb/toplevel_methods/svg.rb +66 -0
  458. data/lib/cyberweb/toplevel_methods/tag.rb +237 -0
  459. data/lib/cyberweb/toplevel_methods/temp_directory.rb +73 -0
  460. data/lib/cyberweb/toplevel_methods/test_css.rb +24 -0
  461. data/lib/cyberweb/toplevel_methods/textile.rb +45 -0
  462. data/lib/cyberweb/toplevel_methods/title.rb +125 -0
  463. data/lib/cyberweb/toplevel_methods/umlaute.rb +90 -0
  464. data/lib/cyberweb/toplevel_methods/video.rb +352 -0
  465. data/lib/cyberweb/toplevel_methods/view_source.rb +50 -0
  466. data/lib/cyberweb/toplevel_methods/web_object.rb +42 -0
  467. data/lib/cyberweb/toplevel_methods/write_what_into.rb +27 -0
  468. data/lib/cyberweb/utility_scripts/README.md +4 -0
  469. data/lib/cyberweb/utility_scripts/create_coloured_tags.rb +172 -0
  470. data/lib/cyberweb/utility_scripts/download_balloon_css.rb +160 -0
  471. data/lib/cyberweb/utility_scripts/hyperlink_all_images_from.rb +148 -0
  472. data/lib/cyberweb/version/version.rb +25 -0
  473. data/lib/cyberweb/web_base/web_base.rb +28 -0
  474. data/lib/cyberweb/web_images/array_listing_all_project_images.rb +52 -0
  475. data/lib/cyberweb/web_images/map_symbol_to_image_location.rb +1661 -0
  476. data/lib/cyberweb/web_images/web_images.rb +270 -0
  477. data/lib/cyberweb/web_object/css.rb +627 -0
  478. data/lib/cyberweb/web_object/evaluate.rb +126 -0
  479. data/lib/cyberweb/web_object/favicon.rb +160 -0
  480. data/lib/cyberweb/web_object/html_related_tags.rb +320 -0
  481. data/lib/cyberweb/web_object/images.rb +693 -0
  482. data/lib/cyberweb/web_object/initialize.rb +51 -0
  483. data/lib/cyberweb/web_object/input_related_functionality.rb +414 -0
  484. data/lib/cyberweb/web_object/javascript.rb +427 -0
  485. data/lib/cyberweb/web_object/languages.rb +172 -0
  486. data/lib/cyberweb/web_object/links.rb +228 -0
  487. data/lib/cyberweb/web_object/misc.rb +5159 -0
  488. data/lib/cyberweb/web_object/params.rb +289 -0
  489. data/lib/cyberweb/web_object/reset.rb +192 -0
  490. data/lib/cyberweb/web_object/run.rb +44 -0
  491. data/lib/cyberweb/web_object/sinatra_related_functionality.rb +30 -0
  492. data/lib/cyberweb/web_object/sitemap.rb +176 -0
  493. data/lib/cyberweb/web_object/table.rb +378 -0
  494. data/lib/cyberweb/web_object/web_object.rb +126 -0
  495. data/lib/cyberweb/web_scraper/README.md +8 -0
  496. data/lib/cyberweb/web_scraper/scrape_this_url.rb +183 -0
  497. data/lib/cyberweb/webmin/biology_server.cgi +256 -0
  498. data/lib/cyberweb/webmin/calculator.cgi +52 -0
  499. data/lib/cyberweb/webmin/colour_chart.cgi +33 -0
  500. data/lib/cyberweb/webmin/comments.cgi +137 -0
  501. data/lib/cyberweb/webmin/comments_data +18 -0
  502. data/lib/cyberweb/webmin/constants.rb +46 -0
  503. data/lib/cyberweb/webmin/dictionary.cgi +39 -0
  504. data/lib/cyberweb/webmin/sys_info.cgi +26 -0
  505. data/lib/cyberweb/webmin/webforum.cgi +58 -0
  506. data/lib/cyberweb/webmin/webmin.cgi +679 -0
  507. data/lib/cyberweb/yaml/autogenerated_system_settings.yml +14 -0
  508. data/lib/cyberweb/yaml/custom_tags.yml +7 -0
  509. data/lib/cyberweb/yaml/debug.yml +1 -0
  510. data/lib/cyberweb/yaml/html5_global_attributes.yml +12 -0
  511. data/lib/cyberweb/yaml/html5_new_elements.yml +108 -0
  512. data/lib/cyberweb/yaml/html_tag_legend.yml +12 -0
  513. data/lib/cyberweb/yaml/http_status_codes.yml +38 -0
  514. data/lib/cyberweb/yaml/js_files_to_load.yml +28 -0
  515. data/lib/cyberweb/yaml/project_configuration.yml +229 -0
  516. data/lib/cyberweb/yaml/video_attributes.yml +35 -0
  517. data/lib/cyberweb/yaml/web_images.yml +306 -0
  518. data/lib/cyberweb.rb +5 -0
  519. data/test/README.md +5 -0
  520. data/test/complex_tests/all_tests_in_one_page.cgi +666 -0
  521. data/test/complex_tests/simple_sinatra_example_using_cyberweb/simple.rb +60 -0
  522. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.cgi +7 -0
  523. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.rb +23 -0
  524. data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.sinatra +65 -0
  525. data/test/complex_tests/testing_frames.cgi +42 -0
  526. data/test/complex_tests/testing_objectified_html_tags.rb +82 -0
  527. data/test/complex_tests/testing_style_variants/README.md +2 -0
  528. data/test/complex_tests/testing_style_variants/show_coloured_boxes.cgi +58 -0
  529. data/test/complex_tests/testing_tables.cgi +67 -0
  530. data/test/complex_tests/testing_the_cyberweb_shell.rb +188 -0
  531. data/test/complex_tests/testing_web_object.rb +94 -0
  532. data/test/css/README.md +5 -0
  533. data/test/css/return_the_content_of_these_css_classes.rb +7 -0
  534. data/test/css/testing_css_effects.cgi +159 -0
  535. data/test/css/testing_css_masking.cgi +36 -0
  536. data/test/dummy.pdf +0 -0
  537. data/test/hello_world/hello_world.cgi +25 -0
  538. data/test/javascript/README.md +2 -0
  539. data/test/javascript/testing_cheerleader_javascript.cgi +0 -0
  540. data/test/javascript/testing_drag_and_drop_support.cgi +33 -0
  541. data/test/javascript/testing_on_click_change_opacity.cgi +26 -0
  542. data/test/javascript/testing_snowflakes.cgi +20 -0
  543. data/test/simple_tests/README.md +3 -0
  544. data/test/simple_tests/ad-hoc-test.cgi +55 -0
  545. data/test/simple_tests/commandline_tests.rb +70 -0
  546. data/test/simple_tests/display_this_file.cgi +11 -0
  547. data/test/simple_tests/simple_html_example.cgi +29 -0
  548. data/test/simple_tests/simple_status_page.cgi +52 -0
  549. data/test/simple_tests/string_s2_test.rb +11 -0
  550. data/test/simple_tests/test_simple_string_as_input.rb +12 -0
  551. data/test/simple_tests/testing_base64_images.cgi +26 -0
  552. data/test/simple_tests/testing_dragging_an_image.cgi +23 -0
  553. data/test/simple_tests/testing_editable_text.cgi +16 -0
  554. data/test/simple_tests/testing_email.cgi +31 -0
  555. data/test/simple_tests/testing_embedding_a_pdf_file.cgi +32 -0
  556. data/test/simple_tests/testing_google_charts.cgi +24 -0
  557. data/test/simple_tests/testing_html_forms.cgi +31 -0
  558. data/test/simple_tests/testing_html_template.rb +13 -0
  559. data/test/simple_tests/testing_popup_div.cgi +22 -0
  560. data/test/simple_tests/testing_return_dataset_without_any_comments.rb +11 -0
  561. data/test/simple_tests/testing_the_cap_box.cgi +20 -0
  562. data/test/simple_tests/testing_the_div_tag.cgi +21 -0
  563. data/test/simple_tests/testing_the_headers_tag.cgi +36 -0
  564. data/test/simple_tests/testing_the_html_colours.cgi +19 -0
  565. data/test/simple_tests/testing_the_info_box.cgi +19 -0
  566. data/test/simple_tests/testing_the_li_tag.cgi +24 -0
  567. data/test/simple_tests/testing_the_s2_method.rb +7 -0
  568. data/test/simple_tests/testing_the_select_tag.cgi +23 -0
  569. data/test/simple_tests/testing_the_span_tag.cgi +36 -0
  570. data/test/simple_tests/testing_web_images.rb +12 -0
  571. data/test/testing_html_tags/README.md +7 -0
  572. data/test/testing_html_tags/button_example.cgi +42 -0
  573. metadata +759 -0
@@ -0,0 +1,14 @@
1
+ function rgb_to_hex(r,g,b) {
2
+ r = r.toString(16);
3
+ g = g.toString(16);
4
+ b = b.toString(16);
5
+
6
+ if (r.length == 1)
7
+ r = "0" + r;
8
+ if (g.length == 1)
9
+ g = "0" + g;
10
+ if (b.length == 1)
11
+ b = "0" + b;
12
+
13
+ return "#" + r + g + b;
14
+ }
@@ -0,0 +1,7 @@
1
+ /*
2
+ * This function will return all even numbers of the
3
+ * given input-Array.
4
+ */
5
+ function select_even_numbers(i) {
6
+ i.filter( x => x % 2 === 0 );
7
+ }
@@ -0,0 +1,22 @@
1
+ /*
2
+ * Use this function when you want to select all. You must pass
3
+ * the id of the element to the function.
4
+ *
5
+ * To use this, try:
6
+ *
7
+ * <textarea rows="3" id="txtarea" onClick="select_everything('txtarea');" style="width:200px" >
8
+ * This text you can select all by clicking here.
9
+ * </textarea>
10
+ *
11
+ * Input TextBox:
12
+ *
13
+ * <input type="text" id="txtfld" onClick="select_everything('txtfld');" style="width:200px" value = "This text you can select all" />
14
+ *
15
+ */
16
+
17
+ function select_everything(id)
18
+ {
19
+ var element = document.getElementById(id);
20
+ element.focus();
21
+ element.select();
22
+ }
@@ -0,0 +1,15 @@
1
+ /*
2
+ * The code in this file can be used for a simple javascript-calculator.
3
+ */
4
+
5
+ function updateTextbox(value){
6
+ document.getElementById("screen").value += value;
7
+ }
8
+
9
+ function result(){
10
+ document.getElementById("screen").value = eval(document.getElementById("screen").value);
11
+ }
12
+
13
+ function reset(){
14
+ document.getElementById("screen").value = '';
15
+ }
@@ -0,0 +1,3 @@
1
+ function sleep(ms) {
2
+ return new Promise(resolve => setTimeout(resolve, ms));
3
+ }
@@ -0,0 +1,8 @@
1
+ /*
2
+ * to_celsius
3
+ *
4
+ * Convert into n Celsius, from the given input (as Fahrenheit).
5
+ */
6
+ function to_celsius(fahrenheit) {
7
+ return (5/9) * (fahrenheit-32);
8
+ }
@@ -0,0 +1,3 @@
1
+ People who visit a website, may have to use the mouse to interact
2
+ with the website. Code that is stored here within mouse/ may be
3
+ used to automate testing via mouse-interfaces.
@@ -0,0 +1,321 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ if false # Disabled for the time being.
6
+
7
+ begin
8
+ require 'ffi' # Note that sometimes ffi can cause problems.
9
+ rescue LoadError; end
10
+
11
+ module Cyberweb
12
+
13
+ module Libxdo # === Cyberweb::Libxdo
14
+
15
+ begin
16
+ extend FFI::Library
17
+ rescue LoadError; end # Must rescue this error because sometimes it may cause problems.
18
+
19
+ # ========================================================================= #
20
+ # === CURRENT_WINDOW
21
+ # ========================================================================= #
22
+ CURRENT_WINDOW = 0
23
+
24
+ ffi_lib 'xdo'
25
+
26
+ # ========================================================================= #
27
+ # xdo_t * xdo_new (char *display)
28
+ # ========================================================================= #
29
+ attach_function 'xdo_new', [ :string ], :pointer
30
+
31
+ # ========================================================================= #
32
+ # xdo_t * xdo_new_with_opened_display (Display *xdpy, const char *display, int close_display_when_freed)
33
+ #
34
+ # URL: http://www.semicomplete.com/files/xdotool/docs/html/xdo_8h.html#a6626d106a5b4a19600f31b8b28b1c51b
35
+ # ========================================================================= #
36
+ attach_function 'xdo_new_with_opened_display', [:pointer, :string, :int], :pointer
37
+
38
+ # ========================================================================= #
39
+ # const char * xdo_version (void)
40
+ # ========================================================================= #
41
+ attach_function 'xdo_version', [], :string
42
+
43
+ # ========================================================================= #
44
+ # void xdo_free (xdo_t *xdo)
45
+ # ========================================================================= #
46
+ attach_function 'xdo_free', [:pointer], :void
47
+
48
+ # ========================================================================= #
49
+ # int xdo_mousemove (const xdo_t *xdo, int x, int y, int screen)
50
+ # ========================================================================= #
51
+ attach_function 'xdo_mousemove', [:pointer, :int, :int, :int], :int
52
+
53
+ # ========================================================================= #
54
+ # int xdo_mousemove_relative_to_window (const xdo_t *xdo, Window window, int x, int y)
55
+ # XXX: Window is not a pointer - find the typedef
56
+ # ========================================================================= #
57
+ attach_function 'xdo_mousemove_relative_to_window', [:pointer, :pointer, :int, :int], :int
58
+
59
+ # ========================================================================= #
60
+ # int xdo_mousemove_relative (const xdo_t *xdo, int x, int y)
61
+ # ========================================================================= #
62
+ attach_function 'xdo_mousemove_relative', [:pointer, :int, :int], :int
63
+
64
+ # ========================================================================= #
65
+ # int xdo_mousedown (const xdo_t *xdo, Window window, int button)
66
+ # ========================================================================= #
67
+ attach_function 'xdo_mousedown', [:pointer, :int, :int], :int
68
+
69
+ # ========================================================================= #
70
+ # int xdo_mouseup (const xdo_t *xdo, Window window, int button)
71
+ # ========================================================================= #
72
+ attach_function 'xdo_mouseup', [:pointer, :int, :int], :int
73
+
74
+ # ========================================================================= #
75
+ # int xdo_mouselocation (const xdo_t *xdo, int *x, int *y, int *screen_num)
76
+ # ========================================================================= #
77
+ attach_function 'xdo_mouselocation', [:pointer, :pointer, :pointer, :pointer], :int
78
+
79
+ # ========================================================================= #
80
+ # int xdo_mouse_wait_for_move_from (const xdo_t *xdo, int origin_x, int origin_y)
81
+ # ========================================================================= #
82
+ attach_function 'xdo_mouse_wait_for_move_from', [:pointer, :int, :int], :int
83
+
84
+ # ========================================================================= #
85
+ # int xdo_mouse_wait_for_move_to (const xdo_t *xdo, int dest_x, int dest_y)
86
+ # ========================================================================= #
87
+ attach_function 'xdo_mouse_wait_for_move_to', [:pointer, :int, :int], :int
88
+
89
+ # ========================================================================= #
90
+ # int xdo_click (const xdo_t *xdo, Window window, int button)
91
+ # ========================================================================= #
92
+ attach_function 'xdo_click', [:pointer, :int, :int], :int
93
+
94
+ # ========================================================================= #
95
+ # int xdo_type (const xdo_t *xdo, Window window, char *string, useconds_t delay)
96
+ # XXX: Map useconds_t
97
+ # ========================================================================= #
98
+ attach_function 'xdo_type', [:pointer, :int, :string, :int], :int
99
+
100
+ # ========================================================================= #
101
+ # int xdo_keysequence (const xdo_t *xdo, Window window, const char *keysequence, useconds_t delay)
102
+ # XXX: Window != pointer
103
+ # XXX: Map useconds_t
104
+ # ========================================================================= #
105
+ attach_function 'xdo_keysequence', [:pointer, :pointer, :string, :int], :int
106
+
107
+ # ========================================================================= #
108
+ # int xdo_keysequence_up (const xdo_t *xdo, Window window, const char *keysequence, useconds_t delay)
109
+ # XXX: Window != pointer
110
+ # XXX: Map useconds_t
111
+ # ========================================================================= #
112
+ attach_function 'xdo_keysequence_up', [:pointer, :pointer, :string, :int], :int
113
+
114
+ # ========================================================================= #
115
+ # int xdo_keysequence_down (const xdo_t *xdo, Window window, const char *keysequence, useconds_t delay)
116
+ # XXX: Window != pointer
117
+ # XXX: Map useconds_t
118
+ # ========================================================================= #
119
+ attach_function 'xdo_keysequence_down', [:pointer, :pointer, :string, :int], :int
120
+
121
+ # ========================================================================= #
122
+ # int xdo_keysequence_list_do (const xdo_t *xdo, Window window, charcodemap_t *keys, int nkeys, int pressed, int *modifier, useconds_t delay)
123
+ # XXX: Window != pointer
124
+ # XXX: What's a charcodemap_t?
125
+ # XXX: Map useconds_t
126
+ # ========================================================================= #
127
+ attach_function 'xdo_keysequence_list_do', [:pointer, :pointer, :pointer, :int, :int, :pointer, :int], :int
128
+
129
+ # ========================================================================= #
130
+ # int xdo_active_keys_to_keycode_list (const xdo_t *xdo, charcodemap_t **keys, int *nkeys)
131
+ # XXX: Map useconds_t
132
+ # XXX: What's a pointer to pointer to charcodemap_t?
133
+ # ========================================================================= #
134
+ attach_function 'xdo_active_keys_to_keycode_list', [:pointer, :pointer, :pointer], :int
135
+
136
+ # ========================================================================= #
137
+ # int xdo_window_wait_for_map_state (const xdo_t *xdo, Window wid, int map_state)
138
+ # XXX: Window != pointer
139
+ # ========================================================================= #
140
+ attach_function 'xdo_window_wait_for_map_state', [:pointer, :pointer, :int], :int
141
+
142
+ # ========================================================================= #
143
+ # int xdo_window_move (const xdo_t *xdo, Window wid, int x, int y)
144
+ # XXX: Window != pointer
145
+ # ========================================================================= #
146
+ attach_function 'xdo_window_move', [:pointer, :pointer, :int, :int], :int
147
+
148
+ # ========================================================================= #
149
+ # int xdo_window_setsize (const xdo_t *xdo, Window wid, int w, int h, int flags)
150
+ # XXX: Window != pointer
151
+ # ========================================================================= #
152
+ attach_function 'xdo_window_setsize', [:pointer, :pointer, :int, :int, :int], :int
153
+
154
+ # ========================================================================= #
155
+ # int xdo_window_setprop (const xdo_t *xdo, Window wid, const char *property, const char *value)
156
+ # XXX: Window != pointer
157
+ # ========================================================================= #
158
+ attach_function 'xdo_window_setprop', [:pointer, :pointer, :string, :string], :int
159
+
160
+ # int xdo_window_setclass (const xdo_t *xdo, Window wid, const char *name, const char *class)
161
+ # XXX: Window != pointer
162
+ attach_function 'xdo_window_setclass', [:pointer, :pointer, :string, :string], :int
163
+
164
+ # int xdo_window_focus (const xdo_t *xdo, Window wid)
165
+ # XXX: Window != pointer
166
+ attach_function 'xdo_window_focus', [:pointer, :pointer], :int
167
+
168
+ # int xdo_window_raise (const xdo_t *xdo, Window wid)
169
+ # XXX: Window != pointer
170
+ attach_function 'xdo_window_raise', [:pointer, :pointer], :int
171
+
172
+ # ========================================================================= #
173
+ # int xdo_window_get_focus (const xdo_t *xdo, Window *window_ret)
174
+ # NOTE: This window is actually a pointer. Watch out
175
+ # ========================================================================= #
176
+ attach_function 'xdo_window_get_focus', [:pointer, :pointer], :int
177
+
178
+ # int xdo_window_wait_for_focus (const xdo_t *xdo, Window window, int want_focus)
179
+ # XXX: Window != pointer
180
+ attach_function 'xdo_window_wait_for_focus', [:pointer, :pointer, :int], :int
181
+
182
+ # int xdo_window_get_pid (const xdo_t *xdo, Window window)
183
+ # XXX: Window != pointer
184
+ attach_function 'xdo_window_get_pid', [:pointer, :pointer], :int
185
+
186
+ # int xdo_window_sane_get_focus (const xdo_t *xdo, Window *window_ret)
187
+ # NOTE: This window is actually a pointer. Watch out
188
+ attach_function 'xdo_window_sane_get_focus', [:pointer, :pointer], :int
189
+
190
+ # int xdo_window_activate (const xdo_t *xdo, Window wid)
191
+ # XXX: Window != pointer
192
+ attach_function 'xdo_window_activate', [:pointer, :pointer], :int
193
+
194
+ # int xdo_window_wait_for_active (const xdo_t *xdo, Window window, int active)
195
+ # XXX: Window != pointer
196
+ attach_function 'xdo_window_wait_for_active', [:pointer, :pointer, :int], :int
197
+
198
+ # int xdo_window_map (const xdo_t *xdo, Window wid)
199
+ # XXX: Window != pointer
200
+ attach_function 'xdo_window_map', [:pointer, :pointer], :int
201
+
202
+ # int xdo_window_unmap (const xdo_t *xdo, Window wid)
203
+ attach_function 'xdo_window_unmap', [:pointer, :pointer], :int
204
+
205
+ # int xdo_get_window_location (const xdo_t *xdo, Window wid, int *x_ret, int *y_ret, Screen **screen_ret)
206
+ # XXX: Window != pointer
207
+ # XXX: What's a screen double pointer
208
+ attach_function 'xdo_get_window_location', [:pointer, :pointer, :pointer, :pointer, :pointer], :int
209
+
210
+ # int xdo_get_window_size (const xdo_t *xdo, Window wid, unsigned int *width_ret, unsigned int *height_ret)
211
+ # XXX: Window != pointer
212
+ attach_function 'xdo_get_window_size', [:pointer, :pointer, :pointer, :pointer], :int
213
+
214
+ # int xdo_window_get_active (const xdo_t *xdo, Window *window_ret)
215
+ # NOTE: This window is actually a pointer. Watch out
216
+ attach_function 'xdo_window_get_active', [:pointer, :pointer], :int
217
+
218
+ # int xdo_set_number_of_desktops (const xdo_t *xdo, long ndesktops)
219
+ attach_function 'xdo_set_number_of_desktops', [:pointer, :long], :int
220
+
221
+ # int xdo_get_number_of_desktops (const xdo_t *xdo, long *ndesktops)
222
+ attach_function 'xdo_get_number_of_desktops', [:pointer, :pointer], :int
223
+
224
+ # int xdo_set_current_desktop (const xdo_t *xdo, long desktop)
225
+ attach_function 'xdo_set_current_desktop', [:pointer, :long], :int
226
+
227
+ # int xdo_get_current_desktop (const xdo_t *xdo, long *desktop)
228
+ attach_function 'xdo_get_current_desktop', [:pointer, :pointer], :int
229
+
230
+ # int xdo_set_desktop_for_window (const xdo_t *xdo, Window wid, long desktop)
231
+ # XXX: Window != pointer
232
+ attach_function 'xdo_set_desktop_for_window', [:pointer, :pointer, :long], :int
233
+
234
+ # int xdo_get_desktop_for_window (const xdo_t *xdo, Window wid, long *desktop)
235
+ # XXX: Window != pointer
236
+ attach_function 'xdo_get_desktop_for_window', [:pointer, :pointer, :pointer], :int
237
+
238
+ # int xdo_window_search (const xdo_t *xdo, const xdo_search_t *search, Window **windowlist_ret, int *nwindows_ret)
239
+ # XXX: xdo_search_t? How do I make that.
240
+ attach_function 'xdo_window_search', [:pointer, :pointer, :pointer, :pointer], :int
241
+
242
+ # unsigned char * xdo_getwinprop (const xdo_t *xdo, Window window, Atom atom, long *nitems, Atom *type, int *size)
243
+ # XXX: Window != pointer
244
+ # XXX: Atom != pointer
245
+ # XXX: Unsigned char * != :string?
246
+ attach_function 'xdo_getwinprop', [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :string
247
+
248
+ # unsigned int xdo_get_input_state (const xdo_t *xdo)
249
+ attach_function 'xdo_get_input_state', [:pointer], :uint
250
+
251
+ # const keysym_charmap_t * xdo_keysym_charmap (void)
252
+ attach_function 'xdo_keysym_charmap', [], :pointer
253
+
254
+ # XXX: char** is an array of strings?
255
+ # const char ** xdo_symbol_map (void)
256
+ attach_function 'xdo_symbol_map', [], :string
257
+
258
+ # xdo_active_mods_t * xdo_get_active_modifiers (const xdo_t *xdo)
259
+ attach_function 'xdo_get_active_modifiers', [:pointer], :pointer
260
+
261
+ # int xdo_clear_active_modifiers (const xdo_t *xdo, Window window, xdo_active_mods_t *active_mods)
262
+ attach_function 'xdo_clear_active_modifiers', [:pointer, :pointer, :pointer], :int
263
+
264
+ # int xdo_set_active_modifiers (const xdo_t *xdo, Window window, const xdo_active_mods_t *active_mods)
265
+ # XXX: Window != pointer
266
+ attach_function 'xdo_set_active_modifiers', [], :int
267
+
268
+ # void xdo_free_active_modifiers (xdo_active_mods_t *active_mods)
269
+ attach_function 'xdo_free_active_modifiers', [:pointer], :void
270
+
271
+ class Xdo < FFI::Struct
272
+ # The Display for Xlib.
273
+ # Display * xdpy
274
+ layout :xdpy, :pointer, # Display * xdpy
275
+ :display_name, :string, # The display name.
276
+ :charcodes, :pointer, # charcodemap_t * charcodes
277
+ :charcodes_len, :int,
278
+ :modmap, :pointer, # XModifierKeymap * modmap
279
+ :keymap, :pointer, # KeySym * keymap
280
+ :keycode_high, :int,
281
+ :keycode_low, :int,
282
+ :keysyms_per_keycode, :int,
283
+ :close_display_when_freed, :int # Should we close the display when calling xdo_free?
284
+ end
285
+
286
+ class KeysymCharmap < FFI::Struct
287
+ layout :keysym ,:string,
288
+ :key ,:char
289
+ end
290
+
291
+ # XXX: Is the native documentation off by a field? Feels like it.
292
+ # class Charcodemap < FFI::Struct
293
+ # # XXX: keycode isn't a type
294
+ # layout :code ,:KeyCode, # the letter for this key, like 'a'
295
+ # :symbol ,:KeySym, # the keycode that this key is on
296
+ # :index ,:int, # the symbol representing this key
297
+ # :modmask ,:int, # the index in the keysym-per-keycode list that is this key
298
+ # :needs_binding ,:int # the modifiers activated by this key
299
+ # end
300
+ class XdoActiveMods < FFI::Struct
301
+ layout :keymods, :pointer, # charcodemap_t * keymods
302
+ :nkeymods, :int, # int nkeymods
303
+ :input_state, :uint # unsigned int input_state
304
+ end
305
+
306
+ # class XdoSearch < FFI::Struct
307
+ # layout :title ,:string, # char * title
308
+ # :winclass ,:string, # char * winclass # pattern to test against a window title
309
+ # :winclassname ,:string, # char * winclassname # pattern to test against a window class
310
+ # :winname ,:string, # char * winname # pattern to test against a window class
311
+ # :pid ,:int, # int pid # window pid (From window atom _NET_WM_PID)
312
+ # :max_depth ,:long, # long max_depth # depth of search.
313
+ # :only_visible ,:int, # only_visible boolean; set true to search only visible windows
314
+ # :screen ,:int, # screen
315
+ # # XXX: Map this enum. Not sure how that works.
316
+ # :xdo_search ,:search_enum, # what screen to search, if any.
317
+ # :searchmask ,:uint # unsigned int searchmask # bitmask of things you are searching for, such as SEARCH_NAME , etc.
318
+ # end
319
+ end; end if Object.const_defined? :FFI
320
+
321
+ end
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'cyberweb/mouse/mouse.rb'
6
+ # =========================================================================== #
7
+ if false # Disabled for the time being.
8
+
9
+ begin
10
+ require 'ffi'
11
+ rescue LoadError; end
12
+
13
+ require 'cyberweb/mouse/libxdo.rb'
14
+
15
+ module Cyberweb
16
+
17
+ class Mouse # === Cyberweb::Mouse
18
+
19
+ # ========================================================================= #
20
+ # === CURRENT_WINDOW
21
+ # ========================================================================= #
22
+ CURRENT_WINDOW = ::Cyberweb::Libxdo::CURRENT_WINDOW
23
+
24
+ # ========================================================================= #
25
+ # === @delay
26
+ # ========================================================================= #
27
+ @delay = 0
28
+
29
+ # ========================================================================= #
30
+ # === Cyberweb::Mouse.delay=
31
+ #
32
+ # This method will set a time (in seconds, pass floats for fractions of
33
+ # a second) to delay after every operation.
34
+ #
35
+ # It is especially useful for situations where the commands are going
36
+ # to a window and you want to give the window a little time to react
37
+ # before sending more commands to it, e. g. by letting the browser
38
+ # fire events.
39
+ #
40
+ # Defaults to 0 (no delay).
41
+ # ========================================================================= #
42
+ def self.delay=(delay = 0)
43
+ @delay = delay
44
+ end
45
+
46
+ # ========================================================================= #
47
+ # === Cyberweb::Mouse.delay?
48
+ #
49
+ # Returns the current delay time.
50
+ # ========================================================================= #
51
+ def self.delay?
52
+ @delay
53
+ end; self.instance_eval { alias delay delay? } # === Cyberweb::Mouse.delay
54
+
55
+ # ========================================================================= #
56
+ # === Cyberweb::Mouse.move (move tag)
57
+ #
58
+ # Move the mouse directly to the specified x/y coordinates.
59
+ #
60
+ # If relative = true the x/y coordinates used are relative from the
61
+ # current position, otherwise they are considered to be absolute.
62
+ #
63
+ # The first argument may also be a Hash.
64
+ #
65
+ # Usage example:
66
+ #
67
+ # Cyberweb::Mouse.move x: 200, y: 300
68
+ #
69
+ # ========================================================================= #
70
+ def self.move(
71
+ x, y = :default, use_relative_coordinates = false
72
+ )
73
+ if x.is_a? Hash
74
+ y = x.delete(:y)
75
+ x = x.delete(:x)
76
+ end
77
+ if y == :default # This clause is just a generic fallback - it won't really be used IMHO.
78
+ y = x
79
+ end
80
+ if use_relative_coordinates
81
+ relative(x, y)
82
+ else
83
+ absolute(x, y) # This here is the default.
84
+ end
85
+ end
86
+
87
+ # ========================================================================= #
88
+ # === Cyberweb::Mouse.drag
89
+ #
90
+ # Perform a drag operation with the given options. A drag is performed
91
+ # by moving the mouse to a starting location, pressing the primary mouse
92
+ # button down, incrementally moving to another location, and then
93
+ # releasing the primary mouse button.
94
+ #
95
+ # Available options are:
96
+ #
97
+ # * :from => [ x, y ] -- The absolute x/y coordinates to start from. If
98
+ # omitted the drag will be started from the current mouse location.
99
+ # * :to => [ x, y ] -- The absolute x/y coordinates to end at. Can use
100
+ # :distance instead for relative movements.
101
+ # * :distance => [ x, y ] -- Can be used instead of :to to provide an
102
+ # end point relative to the starting point.
103
+ # * :increments => i -- The number of increments to include in the drag
104
+ # from the start to the end, defaults to 10. More increments cause a
105
+ # smoother, slower drag. Fewer increments cause a faster "jerkier"
106
+ # drag.
107
+ #
108
+ # Also a block can be passed which will be yielded before the mouse is
109
+ # released. This can be used to drag and hover for a period of time, or
110
+ # chain multiple drags, etc...
111
+ #
112
+ # i.e.
113
+ #
114
+ # drag :to => [ 300, 350 ]
115
+ # drag :from => [ 200, 300 ], :to => [ 400, 800 ]
116
+ # drag :from => [ 200, 300 ], :distance => [ 200, 500 ]
117
+ # drag :from => [ 200, 300 ], :distance => [ 220, 340 ], :increments => 20
118
+ # drag :from => [ 200, 300 ], :to => [ 300, 400 ] do
119
+ # sleep 0.5
120
+ # end
121
+ # drag :distance => [ 20, 0 ] do
122
+ # drag :distance => [ 0, 30 ]
123
+ # end
124
+ #
125
+ # NOTE: that if :increments is not evenly divisble by the total distance
126
+ # the mouse will move in either direction then the distance of each
127
+ # iteration will not be consistent. The iterations are individually
128
+ # rounded to try to provide a smooth movement. For instance, take:
129
+ #
130
+ # drag :from => [ 0, 0 ], :distance => [ 20, 20 ], :increments => 8
131
+ #
132
+ # will still occur in 8 iterations, however each iteration will alternate
133
+ # between 2px and 3px (interpolated movement).
134
+ # ========================================================================= #
135
+ def self.drag(
136
+ options = {}, &block
137
+ )
138
+ raise ArgumentError.new(
139
+ ':to or :distance is required to provide ending location'
140
+ ) unless options.has_key?(:to) || options.has_key?(:distance)
141
+ raise ArgumentError.new(
142
+ ':increments must be > 0'
143
+ ) if options.has_key?(:increments) && options[:increments] <= 0
144
+
145
+ from ||= options[:from] || location
146
+ increments = options[:increments] || 10
147
+ distance = options[:distance] || [ options[:to][0] - from[0], options[:to][1] - from[1] ]
148
+
149
+ move from[0], from[1]
150
+ down
151
+ increments.times { |i|
152
+ x = (from[0] + (distance[0].to_f / increments) * (i + 1)).round
153
+ y = (from[1] + (distance[1].to_f / increments) * (i + 1)).round
154
+ move(x, y)
155
+ }
156
+ yield if block_given?
157
+ ensure
158
+ up
159
+ end
160
+
161
+ # ========================================================================= #
162
+ # === Cyberweb::Mouse.down
163
+ #
164
+ # Press the given mouse button down (default is 1: primary)
165
+ # ========================================================================= #
166
+ def self.down(
167
+ button = 1
168
+ )
169
+ xdo { |entry|
170
+ ::Cyberweb::Libxdo.xdo_mousedown(entry, CURRENT_WINDOW, button)
171
+ }
172
+ end
173
+
174
+ # ========================================================================= #
175
+ # === Cyberweb::Mouse.up
176
+ #
177
+ # Release the given mouse button (default is 1: primary)
178
+ # ========================================================================= #
179
+ def self.up(button = 1)
180
+ xdo { |entry|
181
+ ::Cyberweb::Libxdo.xdo_mouseup(entry, CURRENT_WINDOW, button)
182
+ }
183
+ end
184
+
185
+ # ========================================================================= #
186
+ # === Cyberweb::Mouse.click (click tag)
187
+ #
188
+ # Click the given mouse button (default is 1: primary)
189
+ # ========================================================================= #
190
+ def self.click(button = 1)
191
+ xdo { |entry|
192
+ ::Cyberweb::Libxdo.xdo_click(entry, CURRENT_WINDOW, button)
193
+ }
194
+ end; self.instance_eval { alias do_click click } # === Cyberweb::Mouse.do_click
195
+
196
+ # ========================================================================= #
197
+ # === Cyberweb::Mouse.location
198
+ #
199
+ # Gives the current mouse position.
200
+ # ========================================================================= #
201
+ def self.location
202
+ # ======================================================================= #
203
+ # We obtain the x and y coordinates next.
204
+ # ======================================================================= #
205
+ x = FFI::MemoryPointer.new :pointer
206
+ y = FFI::MemoryPointer.new :pointer
207
+ s = FFI::MemoryPointer.new :pointer
208
+ xdo { |xdo|
209
+ ::Cyberweb::Libxdo.xdo_mouselocation(xdo, x, y, s)
210
+ }
211
+ [ x.read_int, y.read_int ]
212
+ end
213
+
214
+ private # The rest is private.
215
+
216
+ # ========================================================================= #
217
+ # === Cyberweb::Mouse.xdo
218
+ #
219
+ # Returns a new xdo instance.
220
+ # ========================================================================= #
221
+ def self.xdo(&block)
222
+ xdo = ::Cyberweb::Libxdo.xdo_new(nil)
223
+ yield(xdo)
224
+ sleep delay
225
+ ensure
226
+ ::Cyberweb::Libxdo.xdo_free(xdo)
227
+ end
228
+
229
+ # ======================================================================= #
230
+ # === Cyberweb::Mouse.absolute
231
+ #
232
+ # Performs an absolute mouse move
233
+ # ======================================================================= #
234
+ def self.absolute(x, y)
235
+ xdo { |xdo|
236
+ ::Cyberweb::Libxdo.xdo_mousemove(xdo, x, y, 0)
237
+ ::Cyberweb::Libxdo.xdo_mouse_wait_for_move_to(xdo, x, y)
238
+ }
239
+ end
240
+
241
+ # ======================================================================= #
242
+ # === Cyberweb::Mouse.relative
243
+ #
244
+ # Performs a relative mouse move
245
+ # ======================================================================= #
246
+ def self.relative(x, y)
247
+ loc = location
248
+ xdo { |xdo|
249
+ ::Cyberweb::Libxdo.xdo_mousemove_relative(xdo, x, y)
250
+ ::Cyberweb::Libxdo.xdo_mouse_wait_for_move_to(xdo, loc[0] + x, loc[1] + y)
251
+ }
252
+ end
253
+
254
+ end; end if Object.const_defined? :FFI
255
+
256
+ end
257
+
258
+ if __FILE__ == $PROGRAM_NAME
259
+ Cyberweb::Mouse.drag :from => [ 200, 300 ], :distance => [ 30, 60 ], :increments => 10 do
260
+ Cyberweb::Mouse.drag :distance => [ 80, 120 ] do
261
+ sleep 0.25
262
+ end
263
+ end
264
+ end
@@ -0,0 +1,8 @@
1
+ "Objectified HTML Tags" refers to things such as:
2
+
3
+ Span.new('Hey there')
4
+
5
+ We want to operate on the OOP level here.
6
+
7
+ Note that this will also include non-html tags, so this
8
+ is a slight misnomer.