scarpe 0.3.0 → 0.5.0
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.
- checksums.yaml +4 -4
- data/.cursor/rules/commit-style-preferences.mdc +72 -0
- data/.cursor/rules/component_context.mdc +82 -0
- data/.cursor/rules/debug-failed-tests.mdc +100 -0
- data/.cursor/rules/display_service_context.mdc +80 -0
- data/.cursor/rules/event_handling_context.mdc +100 -0
- data/.cursor/rules/git-pager-handling.mdc +64 -0
- data/.cursor/rules/lacci-context.mdc +52 -0
- data/.cursor/rules/scarpe_design_context.mdc +46 -0
- data/.cursor/rules/shoes_compatibility_context.mdc +75 -0
- data/.cursor/rules/timeout_context.mdc +78 -0
- data/.cursor/rules/update_lacci_and_wv.mdc +8 -0
- data/.cursor/rules/what_is_scarpe.mdc +22 -0
- data/.cursor/rules/writing-new-rules.mdc +73 -0
- data/CHANGELOG.md +46 -5
- data/CLAUDE.md +223 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +85 -55
- data/LICENSE.txt +7 -1
- data/README.md +80 -20
- data/Rakefile +73 -14
- data/docs/SCARPE_FEATURES.md +38 -0
- data/docs/_config.yml +13 -0
- data/docs/calzini_components_and_updates.md +78 -0
- data/docs/display_service_separation.md +39 -0
- data/docs/documentation.md +43 -0
- data/docs/event_loops.md +66 -0
- data/docs/image.png +0 -0
- data/docs/index.md +118 -0
- data/docs/lacci.md +121 -0
- data/docs/scarpe_shoes_incompatibilities.md +71 -0
- data/docs/shoes_and_display_events.md +55 -0
- data/docs/shoes_implementations.md +79 -0
- data/docs/static/manual.md +5 -0
- data/docs/static/scarpe-logo.png +0 -0
- data/docs/timeouts_and_handlers.md +66 -0
- data/docs/web_archaeology.md +76 -0
- data/examples/Edit_box_Styles.rb +8 -0
- data/examples/Kerning.rb +7 -0
- data/examples/background_with_image.rb +14 -5
- data/examples/bloopsaphone/working/feepogram.rb +1 -1
- data/examples/bloopsaphone/working/le_dance_des_rubis.rb +135 -0
- data/examples/bloopsaphone/working/pixel_dreams_in_ruby.rb +131 -0
- data/examples/bloopsaphone/working/type_rebellion.rb +157 -0
- data/examples/border.rb +11 -0
- data/examples/check.rb +2 -0
- data/examples/download_and_show_image.rb +3 -0
- data/examples/flags/finland.rb +15 -0
- data/examples/flags/italy.rb +11 -0
- data/examples/flags/mauritius.rb +14 -0
- data/examples/font_family.rb +17 -0
- data/examples/font_shorthand.rb +9 -0
- data/examples/gen.rb +4 -0
- data/examples/internal_link_navigation.rb +19 -0
- data/examples/legacy/not_checked/shoes-manual/append.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/background_change.rb +12 -0
- data/examples/legacy/not_checked/shoes-manual/background_pattern.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/basic_app.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/border.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/FONTS.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_color.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_open_file.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_save_folder.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/confirm.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/debug.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/info.rb +3 -0
- data/examples/legacy/not_checked/shoes-manual/button.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/clear.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/custom_header.rb +13 -0
- data/examples/legacy/not_checked/shoes-manual/displace.rb +14 -0
- data/examples/legacy/not_checked/shoes-manual/edit_box.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/fill_pattern.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/fonts.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/gutter.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/image_web.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/keypress.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/list_box.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/motion.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/mouse.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/move.rb +14 -0
- data/examples/legacy/not_checked/shoes-manual/nested_ovals.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/oval.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/ovals.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/ovals_image.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/prepend.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/progress_bar.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/radio.rb +18 -0
- data/examples/legacy/not_checked/shoes-manual/radio_alternative_1.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/radio_alternative_2.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/rotate_rectangle.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/shape.rb +11 -0
- data/examples/legacy/not_checked/shoes-manual/static/avatar.png +0 -0
- data/examples/legacy/not_checked/shoes-manual/stroke.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/style.rb +3 -0
- data/examples/legacy/not_checked/shoes-manual/style_alternative_1.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/style_alternative_2.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/style_length.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/timer.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/trigger_window.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/window_owner.rb +8 -0
- data/examples/legacy/working/shoes_manual/alert_button.rb +2 -0
- data/examples/legacy/working/shoes_manual/animate.rb +7 -0
- data/examples/legacy/working/shoes_manual/background_para.rb +4 -0
- data/examples/legacy/working/shoes_manual/button_alternative.rb +7 -0
- data/examples/legacy/working/shoes_manual/checkbox.rb +17 -0
- data/examples/legacy/working/shoes_manual/download.rb +12 -0
- data/examples/legacy/working/shoes_manual/edit_box.rb +6 -0
- data/examples/legacy/working/shoes_manual/editline.rb +7 -0
- data/examples/legacy/working/shoes_manual/fixed_height.rb +8 -0
- data/examples/legacy/working/shoes_manual/fixed_width.rb +12 -0
- data/examples/legacy/working/shoes_manual/image.rb +5 -0
- data/examples/legacy/working/shoes_manual/instance_variable_check.rb +10 -0
- data/examples/legacy/working/shoes_manual/message.rb +18 -0
- data/examples/legacy/working/shoes_manual/rectangle.rb +6 -0
- data/examples/legacy/working/shoes_manual/save_download.rb +12 -0
- data/examples/legacy/working/shoes_manual/self_check.rb +10 -0
- data/examples/legacy/working/shoes_manual/stack.rb +7 -0
- data/examples/legacy/working/shoes_manual/style_info.rb +8 -0
- data/examples/legacy/working/shoes_manual/utf8_support.rb +8 -0
- data/examples/legacy/working/shoes_manual/width.rb +4 -0
- data/examples/local_assets/multi_image.rb +5 -0
- data/examples/local_assets/small.png +0 -0
- data/examples/local_fonts.rb +3 -0
- data/examples/margin.rb +13 -0
- data/examples/margin_check.rb +27 -0
- data/examples/oval-with-kwargs.rb +3 -0
- data/examples/oval.rb +26 -0
- data/examples/page_navigation_single_app.rb +42 -0
- data/examples/para_font_styles.rb +17 -0
- data/examples/para_font_variant.rb +6 -0
- data/examples/para_fontweight.rb +13 -0
- data/examples/parse_xl_funnies.rb +3 -0
- data/examples/rect.rb +1 -1
- data/examples/scarpe_ext.rb +3 -0
- data/examples/shapes/star.rb +1 -3
- data/examples/shoes_subclass_app.rb +25 -0
- data/examples/spacing.rb +1 -1
- data/examples/span.rb +4 -2
- data/examples/url_routing_example.rb +67 -0
- data/lacci/Gemfile +0 -2
- data/lacci/Gemfile.lock +4 -32
- data/lacci/lacci.gemspec +3 -3
- data/lacci/lib/lacci/scarpe_cli.rb +0 -1
- data/lacci/lib/lacci/version.rb +1 -1
- data/lacci/lib/scarpe/niente/app.rb +12 -1
- data/lacci/lib/scarpe/niente/display_service.rb +5 -1
- data/lacci/lib/scarpe/niente/drawable.rb +2 -0
- data/lacci/lib/scarpe/niente/shoes_spec.rb +10 -5
- data/lacci/lib/scarpe/niente.rb +15 -2
- data/lacci/lib/shoes/app.rb +204 -105
- data/lacci/lib/shoes/constants.rb +24 -2
- data/lacci/lib/shoes/display_service.rb +43 -4
- data/lacci/lib/shoes/drawable.rb +326 -36
- data/lacci/lib/shoes/drawables/arc.rb +4 -26
- data/lacci/lib/shoes/drawables/arrow.rb +3 -23
- data/lacci/lib/shoes/drawables/border.rb +28 -0
- data/lacci/lib/shoes/drawables/button.rb +5 -21
- data/lacci/lib/shoes/drawables/check.rb +7 -3
- data/lacci/lib/shoes/drawables/document_root.rb +4 -4
- data/lacci/lib/shoes/drawables/edit_box.rb +6 -5
- data/lacci/lib/shoes/drawables/edit_line.rb +5 -4
- data/lacci/lib/shoes/drawables/flow.rb +4 -6
- data/lacci/lib/shoes/drawables/font_helper.rb +62 -0
- data/lacci/lib/shoes/drawables/image.rb +2 -2
- data/lacci/lib/shoes/drawables/line.rb +3 -6
- data/lacci/lib/shoes/drawables/link.rb +16 -9
- data/lacci/lib/shoes/drawables/list_box.rb +8 -5
- data/lacci/lib/shoes/drawables/oval.rb +48 -0
- data/lacci/lib/shoes/drawables/para.rb +106 -18
- data/lacci/lib/shoes/drawables/progress.rb +2 -1
- data/lacci/lib/shoes/drawables/radio.rb +5 -3
- data/lacci/lib/shoes/drawables/rect.rb +7 -6
- data/lacci/lib/shoes/drawables/shape.rb +4 -3
- data/lacci/lib/shoes/drawables/slot.rb +102 -9
- data/lacci/lib/shoes/drawables/stack.rb +7 -12
- data/lacci/lib/shoes/drawables/star.rb +9 -31
- data/lacci/lib/shoes/drawables/text_drawable.rb +93 -34
- data/lacci/lib/shoes/drawables/video.rb +3 -2
- data/lacci/lib/shoes/drawables/widget.rb +9 -4
- data/lacci/lib/shoes/drawables.rb +2 -1
- data/lacci/lib/shoes/errors.rb +13 -3
- data/lacci/lib/shoes/margin_helper.rb +79 -0
- data/lacci/lib/shoes.rb +98 -20
- data/lacci/test/.gitignore +1 -0
- data/lacci/test/test_draw_context.rb +167 -0
- data/lacci/test/test_font_helper.rb +57 -0
- data/lacci/test/test_helper.rb +31 -4
- data/lacci/test/test_lacci.rb +93 -6
- data/lacci/test/test_margin_helper.rb +82 -0
- data/lacci/test/test_niente_test_infra.rb +40 -0
- data/lacci/test/test_oval.rb +82 -0
- data/lacci/test/test_parenting.rb +140 -0
- data/lacci/test/test_shoes_errors.rb +15 -13
- data/lacci/test/test_text_drawables.rb +23 -0
- data/lib/scarpe/assets.rb +19 -0
- data/lib/scarpe/cats_cradle.rb +57 -98
- data/lib/scarpe/shoes_spec.rb +24 -44
- data/lib/scarpe/version.rb +1 -1
- data/lib/scarpe/wv/app.rb +1 -0
- data/lib/scarpe/wv/arc.rb +0 -4
- data/lib/scarpe/wv/border.rb +15 -0
- data/lib/scarpe/wv/control_interface.rb +2 -10
- data/lib/scarpe/wv/document_root.rb +2 -2
- data/lib/scarpe/wv/drawable.rb +6 -40
- data/lib/scarpe/wv/edit_box.rb +4 -1
- data/lib/scarpe/wv/edit_line.rb +4 -1
- data/lib/scarpe/wv/image.rb +2 -5
- data/lib/scarpe/wv/link.rb +4 -2
- data/lib/scarpe/wv/oval.rb +13 -0
- data/lib/scarpe/wv/para.rb +1 -0
- data/lib/scarpe/wv/scarpe_extensions.rb +8 -0
- data/lib/scarpe/wv/shape.rb +10 -5
- data/lib/scarpe/wv/text_drawable.rb +72 -14
- data/lib/scarpe/wv/web_wrangler.rb +33 -11
- data/lib/scarpe/wv/webview_local_display.rb +6 -2
- data/lib/scarpe/wv.rb +16 -2
- data/scarpe-components/Gemfile +4 -3
- data/scarpe-components/Gemfile.lock +6 -37
- data/scarpe-components/README.md +2 -2
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cerulean.css +12229 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cosmo.css +11810 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cyborg.css +12210 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-darkly.css +12153 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-flatly.css +12126 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-icons.min.css +5 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-journal.css +12099 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-litera.css +12211 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-lumen.css +12369 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-lux.css +11928 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-materia.css +13184 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-minty.css +12177 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-morph.css +12750 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-pulse.css +11890 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-quartz.css +12622 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-sandstone.css +12201 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-simplex.css +12186 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-sketchy.css +12451 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-slate.css +12492 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-solar.css +12149 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-spacelab.css +12266 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-superhero.css +12216 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-united.css +12077 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-vapor.css +12549 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-yeti.css +12325 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-zephyr.css +12283 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap.bundle.min.js +7 -0
- data/scarpe-components/lib/scarpe/components/asset_server.rb +219 -0
- data/scarpe-components/lib/scarpe/components/base64.rb +22 -0
- data/scarpe-components/lib/scarpe/components/calzini/{art_widgets.rb → art_drawables.rb} +42 -18
- data/scarpe-components/lib/scarpe/components/calzini/border.rb +38 -0
- data/scarpe-components/lib/scarpe/components/calzini/button.rb +6 -8
- data/scarpe-components/lib/scarpe/components/calzini/misc.rb +14 -16
- data/scarpe-components/lib/scarpe/components/calzini/para.rb +218 -11
- data/scarpe-components/lib/scarpe/components/calzini/slots.rb +16 -60
- data/scarpe-components/lib/scarpe/components/calzini.rb +88 -1
- data/scarpe-components/lib/scarpe/components/errors.rb +4 -0
- data/scarpe-components/lib/scarpe/components/html.rb +4 -1
- data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +11 -3
- data/scarpe-components/lib/scarpe/components/minitest_result.rb +41 -0
- data/scarpe-components/lib/scarpe/components/port_helpers.rb +30 -0
- data/scarpe-components/lib/scarpe/components/print_logger.rb +17 -2
- data/scarpe-components/lib/scarpe/components/process_helpers.rb +37 -0
- data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +1 -1
- data/scarpe-components/lib/scarpe/components/tiranti.rb +42 -100
- data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +3 -1
- data/scarpe-components/lib/scarpe/components/version.rb +1 -1
- data/scarpe-components/scarpe-components.gemspec +1 -1
- data/scarpe-components/test/assets/big-image.png +0 -0
- data/scarpe-components/test/assets/big-stylesheet.css +497 -0
- data/scarpe-components/test/assets/little-image.png +0 -0
- data/scarpe-components/test/assets/little-stylesheet.css +1 -0
- data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +7 -7
- data/scarpe-components/test/calzini/test_calzini_button.rb +7 -5
- data/scarpe-components/test/calzini/test_calzini_misc.rb +9 -9
- data/scarpe-components/test/calzini/test_calzini_para.rb +6 -9
- data/scarpe-components/test/calzini/test_calzini_slots.rb +12 -57
- data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +83 -18
- data/scarpe-components/test/calzini/test_various.rb +133 -0
- data/scarpe-components/test/test_asset_server.rb +72 -0
- data/scarpe-components/test/test_components.rb +31 -2
- data/scarpe-components/test/test_helper.rb +0 -1
- data/scarpe-components/test/test_minitest_result.rb +7 -0
- data/scarpe-components/test/test_port_helpers.rb +12 -0
- data/scarpe-components/test/test_segmented_app_files.rb +2 -0
- data/tasks/check_html_fixtures.rb +140 -0
- data/tasks/regenerate_html_fixtures.rb +104 -0
- data/templates/class_template_with_shapes.erb +0 -11
- metadata +225 -39
- data/.rubocop.yml +0 -88
- data/lacci/lib/scarpe/niente/logger.rb +0 -29
- data/lacci/lib/shoes/drawables/span.rb +0 -27
- data/lacci/lib/shoes/spacing.rb +0 -9
- data/lib/scarpe/evented_assertions.rb +0 -121
- data/lib/scarpe/wv/span.rb +0 -44
- data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +0 -65
- /data/examples/legacy/{not_checked → working}/shoes3-tests/editline/editline.rb +0 -0
data/lib/scarpe/shoes_spec.rb
CHANGED
|
@@ -26,38 +26,26 @@ module Scarpe::Test
|
|
|
26
26
|
class_name ||= ENV["SHOES_MINITEST_CLASS_NAME"] || "TestShoesSpecCode"
|
|
27
27
|
test_name ||= ENV["SHOES_MINITEST_METHOD_NAME"] || "test_shoes_spec"
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# But this will normally run in a subprocess. So we need
|
|
33
|
-
# to run Minitest tests and then export the results.
|
|
34
|
-
|
|
35
|
-
# We create a test object based on CatsCradle, which will
|
|
36
|
-
# run the test as straight-line code, wait for appropriate
|
|
37
|
-
# events and generally make things well-behaved. But the
|
|
38
|
-
# test DSL isn't CatsCradle. It's based on Minitest and
|
|
39
|
-
# ShoesSpecTest (see below).
|
|
40
|
-
#
|
|
41
|
-
# Note that that means that using CatsCradle to "bounce"
|
|
42
|
-
# control back and forth for evented tricks isn't really
|
|
43
|
-
# an option. We may need to revisit all of this later...
|
|
44
|
-
test_obj = Object.new
|
|
45
|
-
class << test_obj
|
|
46
|
-
include Scarpe::Test::CatsCradle
|
|
47
|
-
end
|
|
48
|
-
Scarpe::ShoesSpecTest.test_obj = test_obj
|
|
49
|
-
test_obj.instance_eval do
|
|
29
|
+
Scarpe::CCInstance.include Scarpe::ShoesSpecTest
|
|
30
|
+
|
|
31
|
+
Scarpe::CCInstance.instance.instance_eval do
|
|
50
32
|
event_init
|
|
51
33
|
|
|
52
|
-
|
|
34
|
+
t_timeout = ENV["SCARPE_SSPEC_TIMEOUT"] || "30"
|
|
35
|
+
timeout(t_timeout.to_f) unless t_timeout.downcase == "none"
|
|
36
|
+
|
|
37
|
+
on_event(:next_heartbeat) do
|
|
53
38
|
Minitest.run ARGV
|
|
54
39
|
|
|
55
|
-
|
|
56
|
-
|
|
40
|
+
wait_after = ENV["SCARPE_SSPEC_TIMEOUT_WAIT_AFTER_TEST"]
|
|
41
|
+
if !(wait_after && wait_after.downcase != "n" && wait_after.downcase != "no")
|
|
42
|
+
shut_down_shoes_code
|
|
43
|
+
end
|
|
57
44
|
end
|
|
58
45
|
end
|
|
59
46
|
|
|
60
|
-
test_class = Class.new(
|
|
47
|
+
test_class = Class.new(Minitest::Test)
|
|
48
|
+
test_class.include Scarpe::ShoesSpecTest
|
|
61
49
|
Object.const_set(Scarpe::Components::StringHelpers.camelize(class_name), test_class)
|
|
62
50
|
test_name = "test_" + test_name unless test_name.start_with?("test_")
|
|
63
51
|
test_class.define_method(test_name) do
|
|
@@ -66,7 +54,6 @@ module Scarpe::Test
|
|
|
66
54
|
end
|
|
67
55
|
end
|
|
68
56
|
|
|
69
|
-
# This is based on the CatsCradle proxies initially, but will diverge over time
|
|
70
57
|
class Scarpe::ShoesSpecProxy
|
|
71
58
|
attr_reader :obj
|
|
72
59
|
attr_reader :linkable_id
|
|
@@ -113,17 +100,15 @@ end
|
|
|
113
100
|
|
|
114
101
|
# When running ShoesSpec tests, we create a parent class for all of them
|
|
115
102
|
# with the appropriate convenience methods and accessors.
|
|
116
|
-
|
|
103
|
+
module Scarpe::ShoesSpecTest
|
|
117
104
|
include Scarpe::Test::HTMLAssertions
|
|
118
105
|
|
|
119
|
-
class << self
|
|
120
|
-
attr_accessor :test_obj
|
|
121
|
-
end
|
|
122
106
|
Shoes::Drawable.drawable_classes.each do |drawable_class|
|
|
123
107
|
finder_name = drawable_class.dsl_name
|
|
124
108
|
|
|
125
109
|
define_method(finder_name) do |*args|
|
|
126
|
-
|
|
110
|
+
# Scarpe-Webview only supports a single Shoes::App instance
|
|
111
|
+
app = Shoes.APPS[0]
|
|
127
112
|
|
|
128
113
|
drawables = app.find_drawables_by(drawable_class, *args)
|
|
129
114
|
raise Shoes::Errors::MultipleDrawablesFoundError, "Found more than one #{finder_name} matching #{args.inspect}!" if drawables.size > 1
|
|
@@ -141,7 +126,7 @@ class Scarpe::ShoesSpecTest < Minitest::Test
|
|
|
141
126
|
end
|
|
142
127
|
|
|
143
128
|
def catscradle_dsl(&block)
|
|
144
|
-
Scarpe::
|
|
129
|
+
Scarpe::CCInstance.instance.instance_eval(&block)
|
|
145
130
|
end
|
|
146
131
|
|
|
147
132
|
def dom_html
|
|
@@ -151,30 +136,25 @@ class Scarpe::ShoesSpecTest < Minitest::Test
|
|
|
151
136
|
end
|
|
152
137
|
end
|
|
153
138
|
|
|
154
|
-
#
|
|
155
|
-
#
|
|
156
|
-
|
|
157
|
-
def timeout(t_timeout = 5.0, exit_code: -1)
|
|
139
|
+
# A timeout won't cause an error by itself. If you want an error, make sure
|
|
140
|
+
# to check for a minimum number of assertions or otherwise look for progress.
|
|
141
|
+
def timeout(t_timeout = 5.0)
|
|
158
142
|
catscradle_dsl do
|
|
159
143
|
t0 = Time.now
|
|
160
144
|
on_event(:every_heartbeat) do
|
|
161
145
|
if Time.now - t0 >= t_timeout
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
else
|
|
165
|
-
@log.error "Timed out after #{t_timeout} seconds!"
|
|
166
|
-
end
|
|
167
|
-
exit exit_code
|
|
146
|
+
@log.info "Timed out after #{t_timeout} seconds!"
|
|
147
|
+
shut_down_shoes_code
|
|
168
148
|
end
|
|
169
149
|
end
|
|
170
150
|
end
|
|
171
151
|
end
|
|
172
152
|
|
|
173
|
-
def exit_on_first_heartbeat
|
|
153
|
+
def exit_on_first_heartbeat
|
|
174
154
|
catscradle_dsl do
|
|
175
155
|
on_event(:next_heartbeat) do
|
|
176
156
|
@log.info "Exiting on first heartbeat (exit code #{exit_code})"
|
|
177
|
-
exit
|
|
157
|
+
exit 0
|
|
178
158
|
end
|
|
179
159
|
end
|
|
180
160
|
end
|
data/lib/scarpe/version.rb
CHANGED
data/lib/scarpe/wv/app.rb
CHANGED
data/lib/scarpe/wv/arc.rb
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Scarpe::Webview
|
|
4
|
+
class Border < Drawable
|
|
5
|
+
|
|
6
|
+
def initialize(properties)
|
|
7
|
+
super(properties)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# If the drawable is intended to be overridable, add element and style to Calzini instead
|
|
11
|
+
def element
|
|
12
|
+
render('border')
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# The ControlInterface is used
|
|
4
|
-
# in important events like redraw, init and shutdown
|
|
5
|
-
# Shoes app for testing. Note that no part of the Scarpe framework should
|
|
6
|
-
# ever *depend* on ControlInterface. It's for testing, not normal operation.
|
|
7
|
-
# If no ControlInterface were ever created or called, Scarpe apps should run
|
|
8
|
-
# fine with no modifications.
|
|
9
|
-
#
|
|
10
|
-
# And if you depend on this from the framework, I'll add a check-mode that
|
|
11
|
-
# never dispatches any events to any handlers. Do NOT test me on this.
|
|
12
|
-
|
|
3
|
+
# The ControlInterface is used to coordinate events. It's a way to register interest
|
|
4
|
+
# in important events like redraw, init and shutdown. It's used extensively for testing.
|
|
13
5
|
module Scarpe::Webview
|
|
14
6
|
class ControlInterface
|
|
15
7
|
include Shoes::Log
|
|
@@ -16,12 +16,12 @@ module Scarpe::Webview
|
|
|
16
16
|
when "font"
|
|
17
17
|
@fonts << args[0]
|
|
18
18
|
# Can't just create font_updater and alert_updater on initialize - not everything is set up
|
|
19
|
-
@font_updater ||= Scarpe::Webview::WebWrangler::ElementWrangler.new("root-fonts")
|
|
19
|
+
@font_updater ||= Scarpe::Webview::WebWrangler::ElementWrangler.new(html_id: "root-fonts")
|
|
20
20
|
@font_updater.inner_html = font_contents
|
|
21
21
|
when "alert"
|
|
22
22
|
bind_ok_event
|
|
23
23
|
@alerts << args[0]
|
|
24
|
-
@alert_updater ||= Scarpe::Webview::WebWrangler::ElementWrangler.new("root-alerts")
|
|
24
|
+
@alert_updater ||= Scarpe::Webview::WebWrangler::ElementWrangler.new(html_id: "root-alerts")
|
|
25
25
|
@alert_updater.inner_html = alert_contents
|
|
26
26
|
else
|
|
27
27
|
raise Scarpe::UnknownBuiltinCommandError, "Unexpected builtin command: #{cmd_name.inspect}!"
|
data/lib/scarpe/wv/drawable.rb
CHANGED
|
@@ -42,7 +42,6 @@ module Scarpe::Webview
|
|
|
42
42
|
|
|
43
43
|
@shoes_style_names = properties.keys.map(&:to_s) - ["shoes_linkable_id"]
|
|
44
44
|
|
|
45
|
-
# Call method, which looks up the parent
|
|
46
45
|
@shoes_linkable_id = properties["shoes_linkable_id"] || properties[:shoes_linkable_id]
|
|
47
46
|
unless @shoes_linkable_id
|
|
48
47
|
raise Scarpe::MissingAttributeError, "Could not find property shoes_linkable_id in #{properties.inspect}!"
|
|
@@ -58,6 +57,8 @@ module Scarpe::Webview
|
|
|
58
57
|
# Must call this before bind
|
|
59
58
|
super(linkable_id: @shoes_linkable_id)
|
|
60
59
|
|
|
60
|
+
# This will only be used if moving a drawable from one parent to another.
|
|
61
|
+
# Shoes doesn't normally do that.
|
|
61
62
|
bind_shoes_event(event_name: "parent", target: shoes_linkable_id) do |new_parent_id|
|
|
62
63
|
display_parent = DisplayService.instance.query_display_drawable_for(new_parent_id)
|
|
63
64
|
if @parent != display_parent
|
|
@@ -101,9 +102,9 @@ module Scarpe::Webview
|
|
|
101
102
|
if hidden
|
|
102
103
|
html_element.set_style("display", "none")
|
|
103
104
|
else
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
# With Calzini we can't easily tell what the display property should be.
|
|
106
|
+
# Could be flex or inline, not only block or none. Re-render this drawable.
|
|
107
|
+
needs_update!
|
|
107
108
|
end
|
|
108
109
|
end
|
|
109
110
|
|
|
@@ -143,41 +144,6 @@ module Scarpe::Webview
|
|
|
143
144
|
needs_update!
|
|
144
145
|
end
|
|
145
146
|
|
|
146
|
-
# Convert an [r, g, b, a] array to an HTML hex color code
|
|
147
|
-
# Arrays support alpha. HTML hex does not. So premultiply.
|
|
148
|
-
def rgb_to_hex(color)
|
|
149
|
-
return color if color.nil?
|
|
150
|
-
|
|
151
|
-
r, g, b, a = *color
|
|
152
|
-
if r.is_a?(Float)
|
|
153
|
-
a ||= 1.0
|
|
154
|
-
r_float = r * a
|
|
155
|
-
g_float = g * a
|
|
156
|
-
b_float = b * a
|
|
157
|
-
else
|
|
158
|
-
a ||= 255
|
|
159
|
-
a_float = (a / 255.0)
|
|
160
|
-
r_float = (r.to_f / 255.0) * a_float
|
|
161
|
-
g_float = (g.to_f / 255.0) * a_float
|
|
162
|
-
b_float = (b.to_f / 255.0) * a_float
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
r_int = (r_float * 255.0).to_i.clamp(0, 255)
|
|
166
|
-
g_int = (g_float * 255.0).to_i.clamp(0, 255)
|
|
167
|
-
b_int = (b_float * 255.0).to_i.clamp(0, 255)
|
|
168
|
-
|
|
169
|
-
"#%0.2X%0.2X%0.2X" % [r_int, g_int, b_int]
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# CSS styles
|
|
173
|
-
def style
|
|
174
|
-
styles = {}
|
|
175
|
-
if @hidden
|
|
176
|
-
styles[:display] = "none"
|
|
177
|
-
end
|
|
178
|
-
styles
|
|
179
|
-
end
|
|
180
|
-
|
|
181
147
|
public
|
|
182
148
|
|
|
183
149
|
# This gets an accessor for just this element's HTML ID.
|
|
@@ -187,7 +153,7 @@ module Scarpe::Webview
|
|
|
187
153
|
#
|
|
188
154
|
# @return [Scarpe::WebWrangler::ElementWrangler] a DOM object manager
|
|
189
155
|
def html_element
|
|
190
|
-
@elt_wrangler ||= Scarpe::Webview::WebWrangler::ElementWrangler.new(html_id)
|
|
156
|
+
@elt_wrangler ||= Scarpe::Webview::WebWrangler::ElementWrangler.new(html_id:)
|
|
191
157
|
end
|
|
192
158
|
|
|
193
159
|
# Return a promise that guarantees all currently-requested changes have completed
|
data/lib/scarpe/wv/edit_box.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Scarpe::Webview
|
|
4
4
|
class EditBox < Drawable
|
|
5
|
-
attr_reader :text, :height, :width
|
|
5
|
+
attr_reader :text, :height, :width, :tooltip , :font
|
|
6
6
|
|
|
7
7
|
def initialize(properties)
|
|
8
8
|
super
|
|
@@ -11,6 +11,9 @@ module Scarpe::Webview
|
|
|
11
11
|
bind("change") do |new_text|
|
|
12
12
|
send_self_event(new_text, event_name: "change")
|
|
13
13
|
end
|
|
14
|
+
bind("hover") do
|
|
15
|
+
send_self_event(event_name: "hover")
|
|
16
|
+
end
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
def properties_changed(changes)
|
data/lib/scarpe/wv/edit_line.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Scarpe::Webview
|
|
4
4
|
class EditLine < Drawable
|
|
5
|
-
attr_reader :text, :width
|
|
5
|
+
attr_reader :text, :width, :stroke, :font, :tooltip, :secret
|
|
6
6
|
|
|
7
7
|
def initialize(properties)
|
|
8
8
|
super
|
|
@@ -11,6 +11,9 @@ module Scarpe::Webview
|
|
|
11
11
|
bind("change") do |new_text|
|
|
12
12
|
send_self_event(new_text, event_name: "change")
|
|
13
13
|
end
|
|
14
|
+
bind("hover") do |new_text|
|
|
15
|
+
send_self_event(new_text, event_name: "hover")
|
|
16
|
+
end
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
def properties_changed(changes)
|
data/lib/scarpe/wv/image.rb
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "scarpe/components/base64"
|
|
4
|
-
|
|
5
3
|
module Scarpe::Webview
|
|
6
4
|
class Image < Drawable
|
|
7
|
-
include Scarpe::Components::Base64
|
|
8
|
-
|
|
9
5
|
def initialize(properties)
|
|
10
6
|
super
|
|
11
7
|
|
|
12
8
|
unless valid_url?(@url)
|
|
13
|
-
|
|
9
|
+
# It's assumed to be a file path.
|
|
10
|
+
@url = Scarpe::Webview.asset_server.asset_url(File.expand_path @url)
|
|
14
11
|
end
|
|
15
12
|
end
|
|
16
13
|
|
data/lib/scarpe/wv/link.rb
CHANGED
data/lib/scarpe/wv/para.rb
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This may or may not stay. It's basically an example extension. It can be done
|
|
4
|
+
# better, and there's no reason it should be specific to button.
|
|
5
|
+
Shoes::Button.shoes_style :html_class, feature: :html
|
|
6
|
+
|
|
7
|
+
# We have a number of real Scarpe extensions that need to be properly marked as such
|
|
8
|
+
# and moved in here. Padding is a great example, as is html_attributes.
|
data/lib/scarpe/wv/shape.rb
CHANGED
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
module Scarpe::Webview
|
|
4
4
|
class Shape < Drawable
|
|
5
|
+
# Shape is the only (?) remaining drawable that doesn't use Calzini.
|
|
6
|
+
# It's also kind of broken - it doesn't do what a Shoes Shape is
|
|
7
|
+
# supposed to do yet. This can really use a rework at some point.
|
|
5
8
|
def to_html
|
|
6
9
|
@children ||= []
|
|
7
10
|
child_markup = @children.map(&:to_html).join
|
|
8
11
|
|
|
9
12
|
color = @draw_context["fill"] || "black"
|
|
10
13
|
self_markup = HTML.render do |h|
|
|
11
|
-
h.div(id: html_id, style:
|
|
14
|
+
h.div(id: html_id, style: shape_style) do
|
|
12
15
|
h.svg(width: "400", height: "500") do
|
|
13
16
|
h.path(d: path_from_shape_commands, style: "fill:#{color};stroke-width:2;")
|
|
14
17
|
end
|
|
@@ -22,7 +25,7 @@ module Scarpe::Webview
|
|
|
22
25
|
def element(&block)
|
|
23
26
|
color = @draw_context["fill"] || "black"
|
|
24
27
|
HTML.render do |h|
|
|
25
|
-
h.div(id: html_id, style:
|
|
28
|
+
h.div(id: html_id, style: shape_style) do
|
|
26
29
|
h.svg(width: "400", height: "500") do
|
|
27
30
|
h.path(d: path_from_shape_commands, style: "fill:#{color};stroke-width:2;")
|
|
28
31
|
end
|
|
@@ -55,11 +58,13 @@ module Scarpe::Webview
|
|
|
55
58
|
|
|
56
59
|
protected
|
|
57
60
|
|
|
58
|
-
def
|
|
59
|
-
|
|
61
|
+
def shape_style
|
|
62
|
+
s = {
|
|
60
63
|
width: "400",
|
|
61
64
|
height: "900",
|
|
62
|
-
}
|
|
65
|
+
}
|
|
66
|
+
s[:display] = "none" if @hidden
|
|
67
|
+
s
|
|
63
68
|
end
|
|
64
69
|
end
|
|
65
70
|
end
|
|
@@ -1,32 +1,90 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# There are different ways to implement these tags. You can change the HTML tag (link,
|
|
4
|
+
# code, strong) or set default values (del for strikethrough.) There's no reason the
|
|
5
|
+
# Shoes tag name has to match the HTML tag (del, link). This can be a little
|
|
6
|
+
# complicated since CSS often sets default values (e.g. del for strikethrough) and
|
|
7
|
+
# Scarpe may use those default values or override them. Long term it may be easier
|
|
8
|
+
# for us to set up our own CSS for this somehow that does *not* use the HTML-tag
|
|
9
|
+
# defaults since the browser can mess with those, and there's no guarantee that
|
|
10
|
+
# Webview uses the same default CSS style across all OSes.
|
|
11
|
+
|
|
3
12
|
module Scarpe::Webview
|
|
13
|
+
# This class renders text tags like em, strong, link, etc.
|
|
4
14
|
class TextDrawable < Drawable
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
15
|
+
# Calzini renders based on properties, mostly Shoes styles.
|
|
16
|
+
# To have Calzini render this for us, we convert to the format
|
|
17
|
+
# Calzini expects and then let it render. See Webview::Para
|
|
18
|
+
# for the specific Calzini call.
|
|
19
|
+
def to_calzini_hash
|
|
20
|
+
text_array = items_to_display_children(@text_items).map do |item|
|
|
21
|
+
if item.respond_to?(:to_calzini_hash)
|
|
22
|
+
item.to_calzini_hash
|
|
23
|
+
elsif item.is_a?(String)
|
|
24
|
+
item
|
|
25
|
+
else
|
|
26
|
+
# This should normally be filtered out in Lacci, long before we see it
|
|
27
|
+
raise "Unrecognized item in TextDrawable! #{item.inspect}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
{
|
|
32
|
+
items: text_array,
|
|
33
|
+
html_id: @linkable_id.to_s,
|
|
34
|
+
tag: nil, # have Calzini assign a default unless a subclass overrides this
|
|
35
|
+
props: shoes_styles,
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def element
|
|
40
|
+
render("text_drawable", [to_calzini_hash])
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def items_to_display_children(items)
|
|
44
|
+
return [] if items.nil?
|
|
45
|
+
|
|
46
|
+
items.map do |item|
|
|
47
|
+
if item.is_a?(String)
|
|
48
|
+
item
|
|
49
|
+
else
|
|
50
|
+
Scarpe::Webview::DisplayService.instance.query_display_drawable_for(item)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Usually we query by ID, but for TextDrawable it has to be by class.
|
|
56
|
+
# That's how needs_update!, etc continue to work.
|
|
57
|
+
def html_element
|
|
58
|
+
@elt_wrangler ||= Scarpe::Webview::WebWrangler::ElementWrangler.new(selector: %{document.getElementsByClassName("id_#{html_id}")}, multi: true)
|
|
8
59
|
end
|
|
9
60
|
end
|
|
10
61
|
|
|
11
62
|
class << self
|
|
12
|
-
def
|
|
13
|
-
|
|
63
|
+
def default_wv_text_drawable_with_tag(shoes_tag, html_tag = nil)
|
|
64
|
+
html_tag ||= shoes_tag
|
|
65
|
+
webview_class_name = shoes_tag.capitalize
|
|
14
66
|
webview_drawable_class = Class.new(Scarpe::Webview::TextDrawable) do
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
@html_tag = class_name.delete_prefix("Webview").downcase
|
|
18
|
-
super
|
|
67
|
+
class << self
|
|
68
|
+
attr_accessor :html_tag
|
|
19
69
|
end
|
|
20
70
|
|
|
21
|
-
def
|
|
22
|
-
|
|
71
|
+
def to_calzini_hash
|
|
72
|
+
h = super
|
|
73
|
+
h[:tag] = self.class.html_tag
|
|
74
|
+
h
|
|
23
75
|
end
|
|
24
76
|
end
|
|
25
77
|
Scarpe::Webview.const_set webview_class_name, webview_drawable_class
|
|
78
|
+
webview_drawable_class.html_tag = html_tag
|
|
26
79
|
end
|
|
27
80
|
end
|
|
28
81
|
end
|
|
29
82
|
|
|
30
|
-
Scarpe::Webview.
|
|
31
|
-
Scarpe::Webview.
|
|
32
|
-
Scarpe::Webview.
|
|
83
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:code)
|
|
84
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:del)
|
|
85
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:em)
|
|
86
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:strong)
|
|
87
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:span)
|
|
88
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:sub)
|
|
89
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:sup)
|
|
90
|
+
Scarpe::Webview.default_wv_text_drawable_with_tag(:ins, "span") # Styled in Shoes, not CSS
|
|
@@ -261,6 +261,7 @@ module Scarpe::Webview
|
|
|
261
261
|
@log.debug("Scheduled JS: (#{this_eval_serial})\n#{wrapped_code}")
|
|
262
262
|
else
|
|
263
263
|
# We're mid-shutdown. No more scheduling things.
|
|
264
|
+
@log.warn "Mid-shutdown JS eval. Not scheduling JS!"
|
|
264
265
|
end
|
|
265
266
|
end
|
|
266
267
|
|
|
@@ -746,16 +747,37 @@ class Scarpe::Webview::WebWrangler
|
|
|
746
747
|
class ElementWrangler
|
|
747
748
|
attr_reader :html_id
|
|
748
749
|
|
|
749
|
-
# Create an ElementWrangler for the given HTML ID
|
|
750
|
+
# Create an ElementWrangler for the given HTML ID or selector.
|
|
751
|
+
# The caller should provide exactly one of the html_id or selector.
|
|
750
752
|
#
|
|
751
753
|
# @param html_id [String] the HTML ID for the DOM element
|
|
752
|
-
def initialize(html_id)
|
|
754
|
+
def initialize(html_id: nil, selector: nil, multi: false)
|
|
753
755
|
@webwrangler = ::Scarpe::Webview::DisplayService.instance.wrangler
|
|
754
756
|
raise Scarpe::MissingWranglerError, "Can't get WebWrangler!" unless @webwrangler
|
|
755
757
|
|
|
756
|
-
|
|
758
|
+
if html_id && !selector
|
|
759
|
+
@selector = "document.getElementById('" + html_id + "')"
|
|
760
|
+
elsif selector && !html_id
|
|
761
|
+
@selector = selector
|
|
762
|
+
else
|
|
763
|
+
raise ArgumentError, "Must provide exactly one of html_id or selector!"
|
|
764
|
+
end
|
|
765
|
+
|
|
766
|
+
@multi = multi
|
|
757
767
|
end
|
|
758
768
|
|
|
769
|
+
private
|
|
770
|
+
|
|
771
|
+
def on_each(fragment)
|
|
772
|
+
if @multi
|
|
773
|
+
@webwrangler.dom_change("a = Array.from(#{@selector}); a.forEach((item) => item#{fragment}); true")
|
|
774
|
+
else
|
|
775
|
+
@webwrangler.dom_change(@selector + fragment + ";true")
|
|
776
|
+
end
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
public
|
|
780
|
+
|
|
759
781
|
# Return a promise that will be fulfilled when all changes scheduled via
|
|
760
782
|
# this ElementWrangler are verified complete.
|
|
761
783
|
#
|
|
@@ -769,7 +791,7 @@ class Scarpe::Webview::WebWrangler
|
|
|
769
791
|
# @param new_value [String] the new value
|
|
770
792
|
# @return [Scarpe::Promise] a promise that will be fulfilled when the change is complete
|
|
771
793
|
def value=(new_value)
|
|
772
|
-
|
|
794
|
+
on_each(".value = `" + new_value + "`")
|
|
773
795
|
end
|
|
774
796
|
|
|
775
797
|
# Update the JS DOM element's inner_text. The given Ruby value will be converted to string and assigned in single-quotes.
|
|
@@ -777,7 +799,7 @@ class Scarpe::Webview::WebWrangler
|
|
|
777
799
|
# @param new_text [String] the new inner_text
|
|
778
800
|
# @return [Scarpe::Promise] a promise that will be fulfilled when the change is complete
|
|
779
801
|
def inner_text=(new_text)
|
|
780
|
-
|
|
802
|
+
on_each(".innerText = '" + new_text + "'")
|
|
781
803
|
end
|
|
782
804
|
|
|
783
805
|
# Update the JS DOM element's inner_html. The given Ruby value will be converted to string and assigned in backquotes.
|
|
@@ -785,7 +807,7 @@ class Scarpe::Webview::WebWrangler
|
|
|
785
807
|
# @param new_html [String] the new inner_html
|
|
786
808
|
# @return [Scarpe::Promise] a promise that will be fulfilled when the change is complete
|
|
787
809
|
def inner_html=(new_html)
|
|
788
|
-
|
|
810
|
+
on_each(".innerHTML = `" + new_html + "`")
|
|
789
811
|
end
|
|
790
812
|
|
|
791
813
|
# Update the JS DOM element's outer_html. The given Ruby value will be converted to string and assigned in backquotes.
|
|
@@ -793,7 +815,7 @@ class Scarpe::Webview::WebWrangler
|
|
|
793
815
|
# @param new_html [String] the new outer_html
|
|
794
816
|
# @return [Scarpe::Promise] a promise that will be fulfilled when the change is complete
|
|
795
817
|
def outer_html=(new_html)
|
|
796
|
-
|
|
818
|
+
on_each(".outerHTML = `" + new_html + "`")
|
|
797
819
|
end
|
|
798
820
|
|
|
799
821
|
# Update the JS DOM element's attribute. The given Ruby value will be inspected and assigned.
|
|
@@ -802,7 +824,7 @@ class Scarpe::Webview::WebWrangler
|
|
|
802
824
|
# @param value [String] the new attribute value
|
|
803
825
|
# @return [Scarpe::Promise] a promise that will be fulfilled when the change is complete
|
|
804
826
|
def set_attribute(attribute, value)
|
|
805
|
-
|
|
827
|
+
on_each(".setAttribute(" + attribute.inspect + "," + value.inspect + ")")
|
|
806
828
|
end
|
|
807
829
|
|
|
808
830
|
# Update an attribute of the JS DOM element's style. The given Ruby value will be inspected and assigned.
|
|
@@ -811,19 +833,19 @@ class Scarpe::Webview::WebWrangler
|
|
|
811
833
|
# @param value [String] the new style attribute value
|
|
812
834
|
# @return [Scarpe::Promise] a promise that will be fulfilled when the change is complete
|
|
813
835
|
def set_style(style_attr, value)
|
|
814
|
-
|
|
836
|
+
on_each(".style.#{style_attr} = " + value.inspect + ";")
|
|
815
837
|
end
|
|
816
838
|
|
|
817
839
|
# Remove the specified DOM element
|
|
818
840
|
#
|
|
819
841
|
# @return [Scarpe::Promise] a promise that wil be fulfilled when the element is removed
|
|
820
842
|
def remove
|
|
821
|
-
|
|
843
|
+
on_each(".remove()")
|
|
822
844
|
end
|
|
823
845
|
|
|
824
846
|
def toggle_input_button(mark)
|
|
825
847
|
checked_value = mark ? "true" : "false"
|
|
826
|
-
|
|
848
|
+
on_each(".checked = #{checked_value}")
|
|
827
849
|
end
|
|
828
850
|
end
|
|
829
851
|
end
|