cyberweb 0.4.174
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cyberweb might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +3259 -0
- data/bin/cyberweb +27 -0
- data/cyberweb.gemspec +119 -0
- data/doc/AUTHORS.md +12 -0
- data/doc/CONVENTIONS.md +7 -0
- data/doc/CYBERWEB_TUTORIAL.cgi +43 -0
- data/doc/DOCUMENTATION_FOR_CYBERSPRAWL.md +50 -0
- data/doc/FUTURE_DESIGN_GOAL_CONSIDERATIONS.md +13 -0
- data/doc/JQUERY.md +122 -0
- data/doc/MOUSE.md +80 -0
- data/doc/README.gen +3231 -0
- data/doc/RENDER_WEB_BASE.md +46 -0
- data/doc/USAGE.md +246 -0
- data/doc/configuration/configuration.md +23 -0
- data/doc/deprecations.md +32 -0
- data/doc/html_characters.md +15 -0
- data/doc/todo/TODO_FOR_THE_CYBERWEB_PROJECT.md +1089 -0
- data/examples/README.md +4 -0
- data/examples/advanced/delayed_update_of_the_body_via_javascript.cgi +38 -0
- data/examples/advanced/hybrid_experiment.cgi +108 -0
- data/examples/advanced/larger_image_on_mouse_over_example.cgi +35 -0
- data/examples/advanced/no_right_click.cgi +26 -0
- data/examples/advanced/objectified_html_tags.cgi +35 -0
- data/examples/advanced/simple_calculator.cgi +42 -0
- data/examples/advanced/simple_form_example.cgi +38 -0
- data/examples/css/blue_border.html +28 -0
- data/examples/css/caret_colour_example.html +22 -0
- data/examples/css/css_border_spacing_example.html +69 -0
- data/examples/css/css_bubbles.html +43 -0
- data/examples/css/css_clock.html +344 -0
- data/examples/css/css_drag_and_drop.html +89 -0
- data/examples/css/css_neon_glow_effects.html +317 -0
- data/examples/css/css_text_decoration_example.html +70 -0
- data/examples/css/css_tooltip.html +44 -0
- data/examples/css/fade_in_and_fade_out_effect.html +66 -0
- data/examples/css/font_size_examples.html +40 -0
- data/examples/css/letter_spacing_example.cgi +36 -0
- data/examples/css/meter_example.html +31 -0
- data/examples/css/on_mouse_button_pressed.html +41 -0
- data/examples/css/planets.html +187 -0
- data/examples/css/scale_example.html +25 -0
- data/examples/css/shadow_example_in_CSS.cgi +30 -0
- data/examples/css/sticky_div_example.html +56 -0
- data/examples/css/stitched_div.html +36 -0
- data/examples/csv/README.md +1 -0
- data/examples/csv/sample.csv +10 -0
- data/examples/example1.rb +7 -0
- data/examples/flip_card_example/flip_card_example.html +72 -0
- data/examples/frames/frame_left.html +1 -0
- data/examples/frames/frame_right.html +1 -0
- data/examples/html/README.md +1 -0
- data/examples/html/abbr_example.html +25 -0
- data/examples/html/base64_image_example.html +26 -0
- data/examples/html/colour_wheel.html +1389 -0
- data/examples/html/column_width_example.html +34 -0
- data/examples/html/custom_cursor.html +103 -0
- data/examples/html/draggable_paragraph.html +12 -0
- data/examples/html/fieldset_example.html +25 -0
- data/examples/html/frames_example.html +7 -0
- data/examples/html/glyph_example.html +43 -0
- data/examples/html/hbox_and_vbox_example.html +65 -0
- data/examples/html/href_examples.html +27 -0
- data/examples/html/input_autofocus_example.html +16 -0
- data/examples/html/larger_image_on_mouse_over_example.html +30 -0
- data/examples/html/ordered_and_unordered_bulletsin.html +33 -0
- data/examples/html/play_video_example.html +13 -0
- data/examples/html/readonly_textarea_example.html +23 -0
- data/examples/html/remote_image_example.html +10 -0
- data/examples/html/simple_unordered_list.html +16 -0
- data/examples/html/table_with_header_example.html +27 -0
- data/examples/html/two_columns_flex_example.html +39 -0
- data/examples/javascript/README.md +2 -0
- data/examples/javascript/arrays/arrays_example_in_javascript.html +16 -0
- data/examples/javascript/delay_example/delay_example.html +46 -0
- data/examples/javascript/drag_support/drag_support.html +37 -0
- data/examples/javascript/jquery_drag_and_drop/drag_and_drop_image_example.html +33 -0
- data/examples/javascript/on_click_event_hello_world/on_click_event_hello_world.html +21 -0
- data/examples/javascript/rgb_to_hex/rgb_to_hex.html +15 -0
- data/examples/javascript/screen_resolution/screen_resolution.html +20 -0
- data/examples/javascript/select_everything/select_everything.html +14 -0
- data/examples/javascript/write_into_a_file/write_into_a_file.html +39 -0
- data/examples/rack/README.md +4 -0
- data/examples/rack/example_with_html_template.rb +123 -0
- data/examples/rack/example_with_rack_and_cyberweb_showing_how_to_use_images.rb +56 -0
- data/examples/rack/hello_world_example_with_rack.rb +45 -0
- data/examples/rack/lobster.rb +79 -0
- data/examples/rack/rack_env.rb +10 -0
- data/examples/rack/standalone_example.rb +26 -0
- data/examples/show_greek_letters.rb +3 -0
- data/examples/simple/on_click_event_hello_world.cgi +34 -0
- data/examples/sinatra/001_your_ip_address_is.rb +8 -0
- data/examples/sinatra/002_the_request_object.rb +16 -0
- data/examples/sinatra/003_hello_world_example.rb +82 -0
- data/examples/sinatra/004_splat_example.rb +10 -0
- data/examples/sinatra/005_attachment_example.rb +11 -0
- data/examples/sinatra/006_outer_self_example.rb +8 -0
- data/examples/sinatra/007_mime_type_example.rb +17 -0
- data/examples/sinatra/008_post_example.rb +55 -0
- data/examples/table_example.rb +37 -0
- data/images/cyberweb_favicon.png +0 -0
- data/images/cyberweb_logo.png +0 -0
- data/images/cyberweb_theme.png +0 -0
- data/lib/cyberweb/and_sinatra_base.rb +9 -0
- data/lib/cyberweb/autoinclude.rb +20 -0
- data/lib/cyberweb/autoinclude_webobject.rb +14 -0
- data/lib/cyberweb/base/base.rb +41 -0
- data/lib/cyberweb/base/colours.rb +69 -0
- data/lib/cyberweb/base/constants.rb +18 -0
- data/lib/cyberweb/base/encoding.rb +19 -0
- data/lib/cyberweb/base/misc.rb +239 -0
- data/lib/cyberweb/base/reset.rb +23 -0
- data/lib/cyberweb/base/save_file.rb +22 -0
- data/lib/cyberweb/cascading_style_sheets/README.md +4 -0
- data/lib/cyberweb/cascading_style_sheets/admonition.css +33 -0
- data/lib/cyberweb/cascading_style_sheets/balloon.css +344 -0
- data/lib/cyberweb/cascading_style_sheets/border.css +202 -0
- data/lib/cyberweb/cascading_style_sheets/code.css +58 -0
- data/lib/cyberweb/cascading_style_sheets/colours.css +476 -0
- data/lib/cyberweb/cascading_style_sheets/default.css +1836 -0
- data/lib/cyberweb/cascading_style_sheets/div.css +26 -0
- data/lib/cyberweb/cascading_style_sheets/fonts.css +365 -0
- data/lib/cyberweb/cascading_style_sheets/links.css +207 -0
- data/lib/cyberweb/cascading_style_sheets/margin.css +677 -0
- data/lib/cyberweb/cascading_style_sheets/menu.css +37 -0
- data/lib/cyberweb/cascading_style_sheets/message_boxes.css +48 -0
- data/lib/cyberweb/cascading_style_sheets/misc.css +162 -0
- data/lib/cyberweb/cascading_style_sheets/popup.css +63 -0
- data/lib/cyberweb/cascading_style_sheets/rpg.css +51 -0
- data/lib/cyberweb/cascading_style_sheets/ruby_regexes.css +33 -0
- data/lib/cyberweb/cascading_style_sheets/template2.css +18 -0
- data/lib/cyberweb/cascading_style_sheets/text_shadow.css +19 -0
- data/lib/cyberweb/cascading_style_sheets/tooltip.css +36 -0
- data/lib/cyberweb/cgi/README.md +6 -0
- data/lib/cyberweb/cgi/cgi.rb +340 -0
- data/lib/cyberweb/cgi/constants.rb +121 -0
- data/lib/cyberweb/cgi/cookie.rb +218 -0
- data/lib/cyberweb/cgi/core.rb +638 -0
- data/lib/cyberweb/cgi/exceptions.rb +223 -0
- data/lib/cyberweb/cgi/html.rb +1025 -0
- data/lib/cyberweb/cgi/mod_ruby_exception_printer.rb +40 -0
- data/lib/cyberweb/cgi/query_extension.rb +431 -0
- data/lib/cyberweb/cgi/session/file_store.rb +131 -0
- data/lib/cyberweb/cgi/session/memory_store.rb +90 -0
- data/lib/cyberweb/cgi/session/pstore.rb +127 -0
- data/lib/cyberweb/cgi/session.rb +444 -0
- data/lib/cyberweb/cgi/tag_maker.rb +94 -0
- data/lib/cyberweb/cgi/util.rb +239 -0
- data/lib/cyberweb/charts/README.md +2 -0
- data/lib/cyberweb/charts/google_charts.rb +51 -0
- data/lib/cyberweb/classes/simple_form.rb +55 -0
- data/lib/cyberweb/classes/tooltips.rb +169 -0
- data/lib/cyberweb/coloured_tags/coloured_tags.rb +3099 -0
- data/lib/cyberweb/colours/colour_chart.rb +117 -0
- data/lib/cyberweb/colours/colours.rb +50 -0
- data/lib/cyberweb/colours/random_colour.rb +28 -0
- data/lib/cyberweb/colours/sanitize_for_colours.rb +95 -0
- data/lib/cyberweb/commandline/commandline_interface.rb +49 -0
- data/lib/cyberweb/configuration/configuration.rb +66 -0
- data/lib/cyberweb/configuration/load_the_configuration_file.rb +73 -0
- data/lib/cyberweb/constants/array_images.rb +21 -0
- data/lib/cyberweb/constants/array_local_css_files.rb +35 -0
- data/lib/cyberweb/constants/array_predefined_constants.rb +23 -0
- data/lib/cyberweb/constants/configuration_file.rb +33 -0
- data/lib/cyberweb/constants/constants.rb +9 -0
- data/lib/cyberweb/constants/file_constants.rb +16 -0
- data/lib/cyberweb/constants/http_status_codes.rb +42 -0
- data/lib/cyberweb/constants/nl.rb +22 -0
- data/lib/cyberweb/constants/project_constants.rb +99 -0
- data/lib/cyberweb/constants/roebe.rb +28 -0
- data/lib/cyberweb/constants/standalone_constants.rb +309 -0
- data/lib/cyberweb/controller/README.md +4 -0
- data/lib/cyberweb/controller/webobject_controller.rb +50 -0
- data/lib/cyberweb/csv/README.md +2 -0
- data/lib/cyberweb/csv/csv.rb +58 -0
- data/lib/cyberweb/cybersprawl +1 -0
- data/lib/cyberweb/debug/debug.rb +69 -0
- data/lib/cyberweb/encoding/encoding.rb +84 -0
- data/lib/cyberweb/erb/test.rhtml +81 -0
- data/lib/cyberweb/erb/test_template.erb +9 -0
- data/lib/cyberweb/evaluate_from_the_same_named_file_then_serve.rb +9 -0
- data/lib/cyberweb/favicon/favicon.rb +196 -0
- data/lib/cyberweb/generator/README.md +2 -0
- data/lib/cyberweb/generator/cgi.rb +201 -0
- data/lib/cyberweb/generator/class.rb +25 -0
- data/lib/cyberweb/generator/static_webpage.rb +162 -0
- data/lib/cyberweb/generator/webpage_for_images.rb +553 -0
- data/lib/cyberweb/help/help.rb +29 -0
- data/lib/cyberweb/html_codes/README.md +15 -0
- data/lib/cyberweb/html_codes/greek_letters.rb +204 -0
- data/lib/cyberweb/html_tags/README.md +3 -0
- data/lib/cyberweb/html_tags/a.rb +65 -0
- data/lib/cyberweb/html_tags/accesskey.rb +25 -0
- data/lib/cyberweb/html_tags/blockquote.rb +56 -0
- data/lib/cyberweb/html_tags/body.rb +14 -0
- data/lib/cyberweb/html_tags/br.rb +19 -0
- data/lib/cyberweb/html_tags/button.rb +110 -0
- data/lib/cyberweb/html_tags/canvas.rb +59 -0
- data/lib/cyberweb/html_tags/chtml.rb +14 -0
- data/lib/cyberweb/html_tags/div.rb +163 -0
- data/lib/cyberweb/html_tags/fieldset.rb +67 -0
- data/lib/cyberweb/html_tags/figure.rb +72 -0
- data/lib/cyberweb/html_tags/form.rb +203 -0
- data/lib/cyberweb/html_tags/h1.rb +75 -0
- data/lib/cyberweb/html_tags/h2.rb +73 -0
- data/lib/cyberweb/html_tags/h3.rb +58 -0
- data/lib/cyberweb/html_tags/h4.rb +60 -0
- data/lib/cyberweb/html_tags/h5.rb +54 -0
- data/lib/cyberweb/html_tags/h6.rb +54 -0
- data/lib/cyberweb/html_tags/hr.rb +22 -0
- data/lib/cyberweb/html_tags/html_tags.rb +240 -0
- data/lib/cyberweb/html_tags/i.rb +50 -0
- data/lib/cyberweb/html_tags/img.rb +294 -0
- data/lib/cyberweb/html_tags/input.rb +345 -0
- data/lib/cyberweb/html_tags/label.rb +63 -0
- data/lib/cyberweb/html_tags/legend.rb +56 -0
- data/lib/cyberweb/html_tags/li.rb +67 -0
- data/lib/cyberweb/html_tags/map.rb +31 -0
- data/lib/cyberweb/html_tags/nav.rb +63 -0
- data/lib/cyberweb/html_tags/object.rb +56 -0
- data/lib/cyberweb/html_tags/ol.rb +56 -0
- data/lib/cyberweb/html_tags/option.rb +61 -0
- data/lib/cyberweb/html_tags/p.rb +90 -0
- data/lib/cyberweb/html_tags/pre.rb +164 -0
- data/lib/cyberweb/html_tags/section.rb +33 -0
- data/lib/cyberweb/html_tags/select.rb +100 -0
- data/lib/cyberweb/html_tags/span.rb +338 -0
- data/lib/cyberweb/html_tags/strong.rb +39 -0
- data/lib/cyberweb/html_tags/table.rb +273 -0
- data/lib/cyberweb/html_tags/tbody.rb +24 -0
- data/lib/cyberweb/html_tags/td.rb +214 -0
- data/lib/cyberweb/html_tags/textarea.rb +138 -0
- data/lib/cyberweb/html_tags/th.rb +68 -0
- data/lib/cyberweb/html_tags/thead.rb +36 -0
- data/lib/cyberweb/html_tags/tr.rb +97 -0
- data/lib/cyberweb/html_tags/ul.rb +51 -0
- data/lib/cyberweb/html_template/html_template.rb +352 -0
- data/lib/cyberweb/images/embed_this_image.rb +37 -0
- data/lib/cyberweb/images/images.rb +58 -0
- data/lib/cyberweb/images/is_image.rb +22 -0
- data/lib/cyberweb/images/path_to_images.rb +60 -0
- data/lib/cyberweb/images/real/README.md +6 -0
- data/lib/cyberweb/images/remove_this_substring_from_all_images.rb +44 -0
- data/lib/cyberweb/images/standalone_drag_and_drop_this_image.rb +64 -0
- data/lib/cyberweb/images/string_image.rb +399 -0
- data/lib/cyberweb/images_base64_encoded/AUSRUFUNGSZEICHEN.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/BLUEARROW.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/BUBBLE.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/CAT.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/CAUTION.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/CHEERING_PERSON.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/CURSOR.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/DOT_01.png.md +5 -0
- data/lib/cyberweb/images_base64_encoded/DUCKY.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/ELEPHANT.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/HALLOWEEN.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/HANGING_MONKEY.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/LENS.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/README.md +2 -0
- data/lib/cyberweb/images_base64_encoded/TU_WIEN_LOGO.png.md +1 -0
- data/lib/cyberweb/images_base64_encoded/VOGEL.png.md +1 -0
- data/lib/cyberweb/io/README.md +1 -0
- data/lib/cyberweb/io/io.rb +19 -0
- data/lib/cyberweb/javascript/drag_and_drop.rb +105 -0
- data/lib/cyberweb/javascript/dragula_collection.rb +54 -0
- data/lib/cyberweb/javascript/javascript.rb +211 -0
- data/lib/cyberweb/javascript/javascript_bundle.rb +223 -0
- data/lib/cyberweb/javascript/javascript_clock.rb +69 -0
- data/lib/cyberweb/javascript/javascript_last_modified.rb +27 -0
- data/lib/cyberweb/javascript/javascript_magic.rb +150 -0
- data/lib/cyberweb/javascript/javascript_selectable.rb +24 -0
- data/lib/cyberweb/javascript/jquery.rb +30 -0
- data/lib/cyberweb/javascript/on_click_change_opacity.rb +97 -0
- data/lib/cyberweb/javascript/on_click_hide.rb +63 -0
- data/lib/cyberweb/javascript/popup.rb +80 -0
- data/lib/cyberweb/javascript/print_javascript.rb +33 -0
- data/lib/cyberweb/javascript/registered_javascript_methods.rb +30 -0
- data/lib/cyberweb/javascript/resize.rb +28 -0
- data/lib/cyberweb/javascript/return_javascript.rb +48 -0
- data/lib/cyberweb/javascript/scroll.rb +17 -0
- data/lib/cyberweb/javascript/snoweffect.rb +122 -0
- data/lib/cyberweb/javascript_code/README.md +6 -0
- data/lib/cyberweb/javascript_code/chmod_displayer.js +74 -0
- data/lib/cyberweb/javascript_code/custom_functions.js +267 -0
- data/lib/cyberweb/javascript_code/jquery/jquery-3.6.0.js +10881 -0
- data/lib/cyberweb/javascript_code/jquery/jquery-ui-1.12.1.js +18706 -0
- data/lib/cyberweb/javascript_code/rgb_to_hex.js +14 -0
- data/lib/cyberweb/javascript_code/select_even_numbers.js +7 -0
- data/lib/cyberweb/javascript_code/select_everything.js +22 -0
- data/lib/cyberweb/javascript_code/simple_calculator.js +15 -0
- data/lib/cyberweb/javascript_code/sleep.js +3 -0
- data/lib/cyberweb/javascript_code/to_celsius.js +8 -0
- data/lib/cyberweb/mouse/README.md +3 -0
- data/lib/cyberweb/mouse/libxdo.rb +321 -0
- data/lib/cyberweb/mouse/mouse.rb +264 -0
- data/lib/cyberweb/objectified_html_tags/README.md +8 -0
- data/lib/cyberweb/objectified_html_tags/a.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/abbr.rb +84 -0
- data/lib/cyberweb/objectified_html_tags/base.rb +376 -0
- data/lib/cyberweb/objectified_html_tags/button.rb +135 -0
- data/lib/cyberweb/objectified_html_tags/combobox.rb +165 -0
- data/lib/cyberweb/objectified_html_tags/div.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/embed.rb +161 -0
- data/lib/cyberweb/objectified_html_tags/form.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/h1.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/h2.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/h3.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/h4.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/h5.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/h6.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/hbox.rb +71 -0
- data/lib/cyberweb/objectified_html_tags/img.rb +202 -0
- data/lib/cyberweb/objectified_html_tags/input.rb +185 -0
- data/lib/cyberweb/objectified_html_tags/p.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/pre.rb +129 -0
- data/lib/cyberweb/objectified_html_tags/span.rb +92 -0
- data/lib/cyberweb/objectified_html_tags/table.rb +174 -0
- data/lib/cyberweb/objectified_html_tags/textarea.rb +173 -0
- data/lib/cyberweb/objectified_html_tags/title.rb +82 -0
- data/lib/cyberweb/objectified_html_tags/window.rb +79 -0
- data/lib/cyberweb/predefined_and_freeform_methods/README.md +1 -0
- data/lib/cyberweb/predefined_and_freeform_methods/frage.rb +45 -0
- data/lib/cyberweb/predefined_and_freeform_methods/freeform_methods.rb +93 -0
- data/lib/cyberweb/predefined_and_freeform_methods/hash_css_class_to_use.rb +55 -0
- data/lib/cyberweb/predefined_and_freeform_methods/hash_registered_extra_tags.rb +29 -0
- data/lib/cyberweb/predefined_and_freeform_methods/header.rb +81 -0
- data/lib/cyberweb/predefined_and_freeform_methods/predefined_methods.rb +413 -0
- data/lib/cyberweb/project/project.rb +85 -0
- data/lib/cyberweb/rack/README.md +1 -0
- data/lib/cyberweb/rack/request.rb +31 -0
- data/lib/cyberweb/requires/README.md +4 -0
- data/lib/cyberweb/requires/do_require_web_object_files.rb +9 -0
- data/lib/cyberweb/requires/remove_html.rb +9 -0
- data/lib/cyberweb/requires/require_cgi.rb +16 -0
- data/lib/cyberweb/requires/require_charts.rb +20 -0
- data/lib/cyberweb/requires/require_generators.rb +23 -0
- data/lib/cyberweb/requires/require_html_tags_files.rb +23 -0
- data/lib/cyberweb/requires/require_javascript_files.rb +23 -0
- data/lib/cyberweb/requires/require_kimurai.rb +13 -0
- data/lib/cyberweb/requires/require_objectified_html_tags_files.rb +23 -0
- data/lib/cyberweb/requires/require_sinatra.rb +7 -0
- data/lib/cyberweb/requires/require_the_constants.rb +26 -0
- data/lib/cyberweb/requires/require_the_cyberweb_project.rb +172 -0
- data/lib/cyberweb/requires/require_the_html_template.rb +7 -0
- data/lib/cyberweb/requires/require_the_toplevel_methods_files.rb +24 -0
- data/lib/cyberweb/requires/require_web_images.rb +7 -0
- data/lib/cyberweb/requires/require_web_object_files.rb +25 -0
- data/lib/cyberweb/requires/require_yaml.rb +11 -0
- data/lib/cyberweb/sinatra/README.md +11 -0
- data/lib/cyberweb/sinatra/base.rb +145 -0
- data/lib/cyberweb/sinatra/custom_extensions.rb +131 -0
- data/lib/cyberweb/standalone_classes/all_css_classes.rb +255 -0
- data/lib/cyberweb/standalone_classes/calculator.rb +127 -0
- data/lib/cyberweb/standalone_classes/correct_image_entries_in_html_file.rb +207 -0
- data/lib/cyberweb/standalone_classes/input_focus.rb +97 -0
- data/lib/cyberweb/standalone_classes/tag_prototype.rb +43 -0
- data/lib/cyberweb/standalone_classes/turn_html_into_cyberweb.rb +174 -0
- data/lib/cyberweb/svg/blue_rect.svg +12 -0
- data/lib/cyberweb/svg/butterfly.svg +15 -0
- data/lib/cyberweb/svg/chemical_molecule.svg +192 -0
- data/lib/cyberweb/svg/circles_on_background.svg +29 -0
- data/lib/cyberweb/svg/ellipse.svg +12 -0
- data/lib/cyberweb/svg/five_circles.svg +26 -0
- data/lib/cyberweb/svg/flag_germany.svg +10 -0
- data/lib/cyberweb/svg/gaussian_blur.svg +20 -0
- data/lib/cyberweb/svg/gradient_circle.svg +18 -0
- data/lib/cyberweb/svg/green_butterfly.svg +18 -0
- data/lib/cyberweb/svg/green_tilted_lines.svg +25 -0
- data/lib/cyberweb/svg/lion.svg +161 -0
- data/lib/cyberweb/svg/one_circle.svg +12 -0
- data/lib/cyberweb/svg/pie_chart.svg +130 -0
- data/lib/cyberweb/svg/svg.cgi +61 -0
- data/lib/cyberweb/svg/tetris.svg +487 -0
- data/lib/cyberweb/svg/three_circles.svg +18 -0
- data/lib/cyberweb/svg/tiger.svg +732 -0
- data/lib/cyberweb/svg/tilted_arcs.svg +74 -0
- data/lib/cyberweb/svg/transparent_rect.svg +12 -0
- data/lib/cyberweb/svg/yellow_fe_blending.svg +42 -0
- data/lib/cyberweb/toplevel_methods/a.rb +131 -0
- data/lib/cyberweb/toplevel_methods/anmerkung.rb +67 -0
- data/lib/cyberweb/toplevel_methods/audio.rb +59 -0
- data/lib/cyberweb/toplevel_methods/bold.rb +65 -0
- data/lib/cyberweb/toplevel_methods/cgi.rb +65 -0
- data/lib/cyberweb/toplevel_methods/charsets.rb +52 -0
- data/lib/cyberweb/toplevel_methods/clear.rb +30 -0
- data/lib/cyberweb/toplevel_methods/close.rb +62 -0
- data/lib/cyberweb/toplevel_methods/consider_serving_the_web_object.rb +41 -0
- data/lib/cyberweb/toplevel_methods/css.rb +732 -0
- data/lib/cyberweb/toplevel_methods/date.rb +71 -0
- data/lib/cyberweb/toplevel_methods/dictionary.rb +48 -0
- data/lib/cyberweb/toplevel_methods/disable.rb +49 -0
- data/lib/cyberweb/toplevel_methods/document.rb +56 -0
- data/lib/cyberweb/toplevel_methods/dot.rb +182 -0
- data/lib/cyberweb/toplevel_methods/download_webpage.rb +18 -0
- data/lib/cyberweb/toplevel_methods/edit_configuration_file.rb +26 -0
- data/lib/cyberweb/toplevel_methods/ee.rb +44 -0
- data/lib/cyberweb/toplevel_methods/env.rb +44 -0
- data/lib/cyberweb/toplevel_methods/escape_html.rb +54 -0
- data/lib/cyberweb/toplevel_methods/fields.rb +46 -0
- data/lib/cyberweb/toplevel_methods/filename.rb +33 -0
- data/lib/cyberweb/toplevel_methods/frames.rb +131 -0
- data/lib/cyberweb/toplevel_methods/glob.rb +30 -0
- data/lib/cyberweb/toplevel_methods/google.rb +35 -0
- data/lib/cyberweb/toplevel_methods/hardware_information.rb +90 -0
- data/lib/cyberweb/toplevel_methods/hfin.rb +56 -0
- data/lib/cyberweb/toplevel_methods/html_comment.rb +48 -0
- data/lib/cyberweb/toplevel_methods/html_mode.rb +39 -0
- data/lib/cyberweb/toplevel_methods/html_tables.rb +818 -0
- data/lib/cyberweb/toplevel_methods/input.rb +54 -0
- data/lib/cyberweb/toplevel_methods/jquery.rb +82 -0
- data/lib/cyberweb/toplevel_methods/last_modified.rb +39 -0
- data/lib/cyberweb/toplevel_methods/links.rb +426 -0
- data/lib/cyberweb/toplevel_methods/listing.rb +96 -0
- data/lib/cyberweb/toplevel_methods/localhost.rb +18 -0
- data/lib/cyberweb/toplevel_methods/log_directory.rb +84 -0
- data/lib/cyberweb/toplevel_methods/logging.rb +42 -0
- data/lib/cyberweb/toplevel_methods/logo.rb +30 -0
- data/lib/cyberweb/toplevel_methods/markdown.rb +112 -0
- data/lib/cyberweb/toplevel_methods/mathml.rb +130 -0
- data/lib/cyberweb/toplevel_methods/message_boxes.rb +140 -0
- data/lib/cyberweb/toplevel_methods/misc.rb +1398 -0
- data/lib/cyberweb/toplevel_methods/name_of_img_dir.rb +51 -0
- data/lib/cyberweb/toplevel_methods/padlem_and_marlem.rb +107 -0
- data/lib/cyberweb/toplevel_methods/params.rb +57 -0
- data/lib/cyberweb/toplevel_methods/path.rb +69 -0
- data/lib/cyberweb/toplevel_methods/pdf.rb +103 -0
- data/lib/cyberweb/toplevel_methods/process_content.rb +102 -0
- data/lib/cyberweb/toplevel_methods/progress.rb +42 -0
- data/lib/cyberweb/toplevel_methods/quote.rb +44 -0
- data/lib/cyberweb/toplevel_methods/random.rb +70 -0
- data/lib/cyberweb/toplevel_methods/rds.rb +35 -0
- data/lib/cyberweb/toplevel_methods/read_and_display.rb +284 -0
- data/lib/cyberweb/toplevel_methods/readlines.rb +31 -0
- data/lib/cyberweb/toplevel_methods/redirect.rb +29 -0
- data/lib/cyberweb/toplevel_methods/registered_ids.rb +178 -0
- data/lib/cyberweb/toplevel_methods/remove_html.rb +32 -0
- data/lib/cyberweb/toplevel_methods/remove_newlines.rb +28 -0
- data/lib/cyberweb/toplevel_methods/return_head_start.rb +33 -0
- data/lib/cyberweb/toplevel_methods/return_html_fin.rb +34 -0
- data/lib/cyberweb/toplevel_methods/return_html_header.rb +35 -0
- data/lib/cyberweb/toplevel_methods/return_html_start.rb +24 -0
- data/lib/cyberweb/toplevel_methods/return_html_to_head_start.rb +42 -0
- data/lib/cyberweb/toplevel_methods/return_meta_collection.rb +54 -0
- data/lib/cyberweb/toplevel_methods/return_pwd.rb +23 -0
- data/lib/cyberweb/toplevel_methods/return_strict_doctype.rb +51 -0
- data/lib/cyberweb/toplevel_methods/roebe.rb +43 -0
- data/lib/cyberweb/toplevel_methods/s2.rb +30 -0
- data/lib/cyberweb/toplevel_methods/sanitize_url.rb +57 -0
- data/lib/cyberweb/toplevel_methods/sbr.rb +170 -0
- data/lib/cyberweb/toplevel_methods/server_base_directory.rb +148 -0
- data/lib/cyberweb/toplevel_methods/show_and_display.rb +215 -0
- data/lib/cyberweb/toplevel_methods/show_configuration.rb +83 -0
- data/lib/cyberweb/toplevel_methods/sitemap.rb +111 -0
- data/lib/cyberweb/toplevel_methods/spacer.rb +119 -0
- data/lib/cyberweb/toplevel_methods/string_body_start.rb +65 -0
- data/lib/cyberweb/toplevel_methods/string_content.rb +35 -0
- data/lib/cyberweb/toplevel_methods/svg.rb +66 -0
- data/lib/cyberweb/toplevel_methods/tag.rb +237 -0
- data/lib/cyberweb/toplevel_methods/temp_directory.rb +73 -0
- data/lib/cyberweb/toplevel_methods/test_css.rb +24 -0
- data/lib/cyberweb/toplevel_methods/textile.rb +45 -0
- data/lib/cyberweb/toplevel_methods/title.rb +125 -0
- data/lib/cyberweb/toplevel_methods/umlaute.rb +90 -0
- data/lib/cyberweb/toplevel_methods/video.rb +352 -0
- data/lib/cyberweb/toplevel_methods/view_source.rb +50 -0
- data/lib/cyberweb/toplevel_methods/web_object.rb +42 -0
- data/lib/cyberweb/toplevel_methods/write_what_into.rb +27 -0
- data/lib/cyberweb/utility_scripts/README.md +4 -0
- data/lib/cyberweb/utility_scripts/create_coloured_tags.rb +172 -0
- data/lib/cyberweb/utility_scripts/download_balloon_css.rb +160 -0
- data/lib/cyberweb/utility_scripts/hyperlink_all_images_from.rb +148 -0
- data/lib/cyberweb/version/version.rb +25 -0
- data/lib/cyberweb/web_base/web_base.rb +28 -0
- data/lib/cyberweb/web_images/array_listing_all_project_images.rb +52 -0
- data/lib/cyberweb/web_images/map_symbol_to_image_location.rb +1661 -0
- data/lib/cyberweb/web_images/web_images.rb +270 -0
- data/lib/cyberweb/web_object/css.rb +627 -0
- data/lib/cyberweb/web_object/evaluate.rb +126 -0
- data/lib/cyberweb/web_object/favicon.rb +160 -0
- data/lib/cyberweb/web_object/html_related_tags.rb +320 -0
- data/lib/cyberweb/web_object/images.rb +693 -0
- data/lib/cyberweb/web_object/initialize.rb +51 -0
- data/lib/cyberweb/web_object/input_related_functionality.rb +414 -0
- data/lib/cyberweb/web_object/javascript.rb +427 -0
- data/lib/cyberweb/web_object/languages.rb +172 -0
- data/lib/cyberweb/web_object/links.rb +228 -0
- data/lib/cyberweb/web_object/misc.rb +5159 -0
- data/lib/cyberweb/web_object/params.rb +289 -0
- data/lib/cyberweb/web_object/reset.rb +192 -0
- data/lib/cyberweb/web_object/run.rb +44 -0
- data/lib/cyberweb/web_object/sinatra_related_functionality.rb +30 -0
- data/lib/cyberweb/web_object/sitemap.rb +176 -0
- data/lib/cyberweb/web_object/table.rb +378 -0
- data/lib/cyberweb/web_object/web_object.rb +126 -0
- data/lib/cyberweb/web_scraper/README.md +8 -0
- data/lib/cyberweb/web_scraper/scrape_this_url.rb +183 -0
- data/lib/cyberweb/webmin/biology_server.cgi +256 -0
- data/lib/cyberweb/webmin/calculator.cgi +52 -0
- data/lib/cyberweb/webmin/colour_chart.cgi +33 -0
- data/lib/cyberweb/webmin/comments.cgi +137 -0
- data/lib/cyberweb/webmin/comments_data +18 -0
- data/lib/cyberweb/webmin/constants.rb +46 -0
- data/lib/cyberweb/webmin/dictionary.cgi +39 -0
- data/lib/cyberweb/webmin/sys_info.cgi +26 -0
- data/lib/cyberweb/webmin/webforum.cgi +58 -0
- data/lib/cyberweb/webmin/webmin.cgi +679 -0
- data/lib/cyberweb/yaml/autogenerated_system_settings.yml +14 -0
- data/lib/cyberweb/yaml/custom_tags.yml +7 -0
- data/lib/cyberweb/yaml/debug.yml +1 -0
- data/lib/cyberweb/yaml/html5_global_attributes.yml +12 -0
- data/lib/cyberweb/yaml/html5_new_elements.yml +108 -0
- data/lib/cyberweb/yaml/html_tag_legend.yml +12 -0
- data/lib/cyberweb/yaml/http_status_codes.yml +38 -0
- data/lib/cyberweb/yaml/js_files_to_load.yml +28 -0
- data/lib/cyberweb/yaml/project_configuration.yml +229 -0
- data/lib/cyberweb/yaml/video_attributes.yml +35 -0
- data/lib/cyberweb/yaml/web_images.yml +306 -0
- data/lib/cyberweb.rb +5 -0
- data/test/README.md +5 -0
- data/test/complex_tests/all_tests_in_one_page.cgi +666 -0
- data/test/complex_tests/simple_sinatra_example_using_cyberweb/simple.rb +60 -0
- data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.cgi +7 -0
- data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.rb +23 -0
- data/test/complex_tests/sinatra_or_cyberweb/sinatra_or_cyberweb.sinatra +65 -0
- data/test/complex_tests/testing_frames.cgi +42 -0
- data/test/complex_tests/testing_objectified_html_tags.rb +82 -0
- data/test/complex_tests/testing_style_variants/README.md +2 -0
- data/test/complex_tests/testing_style_variants/show_coloured_boxes.cgi +58 -0
- data/test/complex_tests/testing_tables.cgi +67 -0
- data/test/complex_tests/testing_the_cyberweb_shell.rb +188 -0
- data/test/complex_tests/testing_web_object.rb +94 -0
- data/test/css/README.md +5 -0
- data/test/css/return_the_content_of_these_css_classes.rb +7 -0
- data/test/css/testing_css_effects.cgi +159 -0
- data/test/css/testing_css_masking.cgi +36 -0
- data/test/dummy.pdf +0 -0
- data/test/hello_world/hello_world.cgi +25 -0
- data/test/javascript/README.md +2 -0
- data/test/javascript/testing_cheerleader_javascript.cgi +0 -0
- data/test/javascript/testing_drag_and_drop_support.cgi +33 -0
- data/test/javascript/testing_on_click_change_opacity.cgi +26 -0
- data/test/javascript/testing_snowflakes.cgi +20 -0
- data/test/simple_tests/README.md +3 -0
- data/test/simple_tests/ad-hoc-test.cgi +55 -0
- data/test/simple_tests/commandline_tests.rb +70 -0
- data/test/simple_tests/display_this_file.cgi +11 -0
- data/test/simple_tests/simple_html_example.cgi +29 -0
- data/test/simple_tests/simple_status_page.cgi +52 -0
- data/test/simple_tests/string_s2_test.rb +11 -0
- data/test/simple_tests/test_simple_string_as_input.rb +12 -0
- data/test/simple_tests/testing_base64_images.cgi +26 -0
- data/test/simple_tests/testing_dragging_an_image.cgi +23 -0
- data/test/simple_tests/testing_editable_text.cgi +16 -0
- data/test/simple_tests/testing_email.cgi +31 -0
- data/test/simple_tests/testing_embedding_a_pdf_file.cgi +32 -0
- data/test/simple_tests/testing_google_charts.cgi +24 -0
- data/test/simple_tests/testing_html_forms.cgi +31 -0
- data/test/simple_tests/testing_html_template.rb +13 -0
- data/test/simple_tests/testing_popup_div.cgi +22 -0
- data/test/simple_tests/testing_return_dataset_without_any_comments.rb +11 -0
- data/test/simple_tests/testing_the_cap_box.cgi +20 -0
- data/test/simple_tests/testing_the_div_tag.cgi +21 -0
- data/test/simple_tests/testing_the_headers_tag.cgi +36 -0
- data/test/simple_tests/testing_the_html_colours.cgi +19 -0
- data/test/simple_tests/testing_the_info_box.cgi +19 -0
- data/test/simple_tests/testing_the_li_tag.cgi +24 -0
- data/test/simple_tests/testing_the_s2_method.rb +7 -0
- data/test/simple_tests/testing_the_select_tag.cgi +23 -0
- data/test/simple_tests/testing_the_span_tag.cgi +36 -0
- data/test/simple_tests/testing_web_images.rb +12 -0
- data/test/testing_html_tags/README.md +7 -0
- data/test/testing_html_tags/button_example.cgi +42 -0
- metadata +759 -0
@@ -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,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
|