scarpe 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/.yardopts +12 -0
- data/CHANGELOG.md +16 -2
- data/Gemfile +3 -0
- data/Gemfile.lock +116 -0
- data/README.md +53 -30
- data/Rakefile +13 -1
- data/docs/yard/catscradle.md +44 -0
- data/docs/yard/template/default/fulldoc/html/setup.rb +13 -0
- data/docs/yard/template/default/layout/html/setup.rb +9 -0
- data/examples/animate.rb +20 -0
- data/examples/arrow.rb +10 -0
- data/examples/background_with_image.rb +16 -0
- data/examples/bloopsaphone/working/bronx_army_knife.rb +66 -0
- data/examples/bloopsaphone/working/morning_serenity.rb +21 -0
- data/examples/bloopsaphone/working/simpsons_theme_song_by_why.rb +6 -4
- data/examples/btn_tooltip.rb +7 -0
- data/examples/button_go_away.rb +1 -1
- data/examples/button_style_changed.rb +7 -0
- data/examples/button_styles_default.rb +6 -0
- data/examples/check.rb +18 -0
- data/examples/clear_and_append.rb +24 -0
- data/examples/download_and_show_image.rb +28 -0
- data/examples/edit_box.rb +3 -5
- data/examples/fonts.rb +2 -2
- data/examples/gen.rb +8 -8
- data/examples/get_headers.rb +10 -0
- data/examples/highlander.rb +4 -2
- data/examples/legacy/README.md +6 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/shoes-notes.rb +1 -1
- data/examples/legacy/not_checked/simple/anim-shapes.rb +1 -1
- data/examples/legacy/not_checked/speedometer_app.rb +55 -0
- data/examples/legacy/working/simple/image-icon.rb +3 -0
- data/examples/legacy/{not_checked → working}/simple/image.rb +1 -1
- data/examples/link.rb +2 -2
- data/examples/list_box_choose.rb +17 -0
- data/examples/local_assets/local_file_server.rb +82 -0
- data/examples/local_assets/sample.gif +0 -0
- data/examples/local_assets/sample.mp4 +0 -0
- data/examples/local_fonts.rb +4 -0
- data/examples/local_images.rb +3 -0
- data/examples/motion_events.rb +20 -0
- data/examples/para/para_text.rb +14 -0
- data/examples/parse_xl_funnies.rb +58 -0
- data/examples/progress.rb +31 -0
- data/examples/radio/radio.rb +16 -0
- data/examples/radio/radio_groups.rb +18 -0
- data/examples/radio/radio_same_slot.rb +6 -0
- data/examples/rect.rb +4 -0
- data/examples/rotate_shapes.rb +17 -0
- data/examples/ruby_racer.rb +13 -15
- data/examples/selfitude.rb +18 -0
- data/examples/shapes/shapes_fill.rb +4 -3
- data/examples/shoes_school.rb +2 -4
- data/examples/show_hide.rb +6 -0
- data/examples/simpler-menu.rb +21 -0
- data/examples/skip_ci/change_my_audio_source.rb +21 -0
- data/examples/skip_ci/guitar_fretboard.rb +137 -0
- data/examples/video.rb +10 -0
- data/exe/scarpe +43 -66
- data/fonts/Pacifico.ttf +0 -0
- data/lacci/Gemfile +24 -0
- data/lacci/Gemfile.lock +79 -0
- data/lacci/Rakefile +12 -0
- data/lacci/lacci.gemspec +37 -0
- data/lacci/lib/lacci/scarpe_cli.rb +71 -0
- data/lacci/lib/lacci/scarpe_core.rb +22 -0
- data/lacci/lib/lacci/version.rb +13 -0
- data/lacci/lib/scarpe/niente/app.rb +23 -0
- data/lacci/lib/scarpe/niente/display_service.rb +62 -0
- data/lacci/lib/scarpe/niente/drawable.rb +57 -0
- data/lacci/lib/scarpe/niente/logger.rb +29 -0
- data/lacci/lib/scarpe/niente/shoes_spec.rb +87 -0
- data/lacci/lib/scarpe/niente.rb +20 -0
- data/lacci/lib/shoes/app.rb +309 -0
- data/{lib/scarpe → lacci/lib/shoes}/background.rb +2 -2
- data/{lib/scarpe → lacci/lib/shoes}/border.rb +2 -2
- data/lacci/lib/shoes/builtins.rb +63 -0
- data/lacci/lib/shoes/changelog.rb +52 -0
- data/{lib/scarpe → lacci/lib/shoes}/colors.rb +3 -1
- data/lacci/lib/shoes/constants.rb +47 -0
- data/{lib/scarpe → lacci/lib/shoes}/display_service.rb +71 -53
- data/lacci/lib/shoes/download.rb +123 -0
- data/lacci/lib/shoes/drawable.rb +380 -0
- data/lacci/lib/shoes/drawables/arc.rb +49 -0
- data/lacci/lib/shoes/drawables/arrow.rb +41 -0
- data/lacci/lib/shoes/drawables/button.rb +73 -0
- data/lacci/lib/shoes/drawables/check.rb +29 -0
- data/lacci/lib/shoes/drawables/document_root.rb +20 -0
- data/lacci/lib/shoes/drawables/edit_box.rb +29 -0
- data/{lib/scarpe → lacci/lib/shoes/drawables}/edit_line.rb +6 -6
- data/lacci/lib/shoes/drawables/flow.rb +22 -0
- data/{lib/scarpe → lacci/lib/shoes/drawables}/image.rb +7 -11
- data/lacci/lib/shoes/drawables/line.rb +20 -0
- data/lacci/lib/shoes/drawables/link.rb +34 -0
- data/lacci/lib/shoes/drawables/list_box.rb +56 -0
- data/lacci/lib/shoes/drawables/para.rb +118 -0
- data/lacci/lib/shoes/drawables/progress.rb +14 -0
- data/lacci/lib/shoes/drawables/radio.rb +33 -0
- data/lacci/lib/shoes/drawables/rect.rb +17 -0
- data/lacci/lib/shoes/drawables/shape.rb +36 -0
- data/lacci/lib/shoes/drawables/slot.rb +87 -0
- data/{lib/scarpe → lacci/lib/shoes/drawables}/span.rb +8 -7
- data/lacci/lib/shoes/drawables/stack.rb +26 -0
- data/lacci/lib/shoes/drawables/star.rb +50 -0
- data/lacci/lib/shoes/drawables/subscription_item.rb +93 -0
- data/lacci/lib/shoes/drawables/text_drawable.rb +63 -0
- data/lacci/lib/shoes/drawables/video.rb +16 -0
- data/lacci/lib/shoes/drawables/widget.rb +69 -0
- data/lacci/lib/shoes/drawables.rb +31 -0
- data/lacci/lib/shoes/errors.rb +28 -0
- data/lacci/lib/shoes/log.rb +71 -0
- data/lacci/lib/shoes/ruby_extensions.rb +15 -0
- data/lacci/lib/shoes/spacing.rb +9 -0
- data/lacci/lib/shoes-spec.rb +93 -0
- data/lacci/lib/shoes.rb +147 -0
- data/lacci/test/test_colors.rb +39 -0
- data/lacci/test/test_helper.rb +63 -0
- data/lacci/test/test_lacci.rb +18 -0
- data/lacci/test/test_shoes_errors.rb +49 -0
- data/lib/scarpe/cats_cradle.rb +271 -0
- data/lib/scarpe/errors.rb +77 -0
- data/lib/scarpe/evented_assertions.rb +121 -0
- data/lib/scarpe/shoes_spec.rb +181 -0
- data/lib/scarpe/version.rb +2 -2
- data/lib/scarpe/wv/app.rb +45 -23
- data/lib/scarpe/wv/arc.rb +4 -48
- data/lib/scarpe/wv/arrow.rb +9 -0
- data/lib/scarpe/wv/button.rb +7 -33
- data/lib/scarpe/wv/check.rb +27 -0
- data/lib/scarpe/wv/control_interface.rb +32 -40
- data/lib/scarpe/wv/document_root.rb +66 -31
- data/lib/scarpe/wv/drawable.rb +273 -0
- data/lib/scarpe/wv/edit_box.rb +4 -19
- data/lib/scarpe/wv/edit_line.rb +4 -18
- data/lib/scarpe/wv/flow.rb +2 -28
- data/lib/scarpe/wv/image.rb +10 -25
- data/lib/scarpe/wv/line.rb +3 -28
- data/lib/scarpe/wv/link.rb +3 -15
- data/lib/scarpe/wv/list_box.rb +6 -29
- data/lib/scarpe/wv/para.rb +11 -28
- data/lib/scarpe/wv/progress.rb +19 -0
- data/lib/scarpe/wv/radio.rb +33 -0
- data/lib/scarpe/wv/rect.rb +13 -0
- data/lib/scarpe/wv/shape.rb +41 -10
- data/lib/scarpe/wv/slot.rb +64 -0
- data/lib/scarpe/wv/span.rb +3 -25
- data/lib/scarpe/wv/stack.rb +2 -38
- data/lib/scarpe/wv/star.rb +3 -54
- data/lib/scarpe/wv/subscription_item.rb +84 -0
- data/lib/scarpe/wv/text_drawable.rb +32 -0
- data/lib/scarpe/wv/video.rb +34 -0
- data/lib/scarpe/wv/web_wrangler.rb +449 -299
- data/lib/scarpe/wv/webview_local_display.rb +63 -26
- data/lib/scarpe/wv/webview_relay_display.rb +24 -125
- data/lib/scarpe/wv/webview_relay_util.rb +140 -0
- data/lib/scarpe/wv/wv_display_worker.rb +19 -6
- data/lib/scarpe/wv.rb +76 -14
- data/lib/scarpe/wv_local.rb +1 -1
- data/lib/scarpe/wv_relay.rb +1 -1
- data/lib/scarpe.rb +4 -32
- data/logger/debug_web_wrangler.json +1 -1
- data/logger/scarpe_wv_test.json +1 -1
- data/scarpe-components/.gitignore +1 -0
- data/scarpe-components/Gemfile +22 -0
- data/scarpe-components/Gemfile.lock +86 -0
- data/scarpe-components/README.md +35 -0
- data/scarpe-components/Rakefile +12 -0
- data/scarpe-components/lib/scarpe/components/base64.rb +25 -0
- data/scarpe-components/lib/scarpe/components/calzini/alert.rb +49 -0
- data/scarpe-components/lib/scarpe/components/calzini/art_widgets.rb +203 -0
- data/scarpe-components/lib/scarpe/components/calzini/button.rb +39 -0
- data/scarpe-components/lib/scarpe/components/calzini/misc.rb +146 -0
- data/scarpe-components/lib/scarpe/components/calzini/para.rb +35 -0
- data/scarpe-components/lib/scarpe/components/calzini/slots.rb +155 -0
- data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +65 -0
- data/scarpe-components/lib/scarpe/components/calzini.rb +149 -0
- data/scarpe-components/lib/scarpe/components/errors.rb +20 -0
- data/scarpe-components/lib/scarpe/components/file_helpers.rb +66 -0
- data/scarpe-components/lib/scarpe/components/html.rb +131 -0
- data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +75 -0
- data/scarpe-components/lib/scarpe/components/minitest_import_runnable.rb +98 -0
- data/scarpe-components/lib/scarpe/components/minitest_result.rb +86 -0
- data/scarpe-components/lib/scarpe/components/modular_logger.rb +113 -0
- data/scarpe-components/lib/scarpe/components/print_logger.rb +47 -0
- data/{lib/scarpe → scarpe-components/lib/scarpe/components}/promises.rb +115 -48
- data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +189 -0
- data/scarpe-components/lib/scarpe/components/string_helpers.rb +10 -0
- data/scarpe-components/lib/scarpe/components/tiranti.rb +225 -0
- data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +257 -0
- data/scarpe-components/lib/scarpe/components/version.rb +7 -0
- data/scarpe-components/scarpe-components.gemspec +38 -0
- data/scarpe-components/test/calzini/test_calzini_alert.rb +30 -0
- data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +105 -0
- data/scarpe-components/test/calzini/test_calzini_button.rb +52 -0
- data/scarpe-components/test/calzini/test_calzini_misc.rb +115 -0
- data/scarpe-components/test/calzini/test_calzini_para.rb +37 -0
- data/scarpe-components/test/calzini/test_calzini_slots.rb +130 -0
- data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +41 -0
- data/scarpe-components/test/mtr_data/exception.json +1 -0
- data/scarpe-components/test/mtr_data/fail_with_message.json +1 -0
- data/scarpe-components/test/mtr_data/skipped_no_message.json +1 -0
- data/scarpe-components/test/mtr_data/skipped_w_msg.json +1 -0
- data/scarpe-components/test/mtr_data/succeed_2_asserts.json +1 -0
- data/scarpe-components/test/test_components.rb +9 -0
- data/scarpe-components/test/test_dimensions.rb +26 -0
- data/scarpe-components/test/test_helper.rb +43 -0
- data/scarpe-components/test/test_html.rb +65 -0
- data/scarpe-components/test/test_minitest_result.rb +61 -0
- data/scarpe-components/test/test_promises.rb +261 -0
- data/scarpe-components/test/test_segmented_app_files.rb +184 -0
- data/scarpegen.rb +14 -14
- data/sig/scarpe.rbs +1 -1
- data/{lib/scarpe → spikes}/glibui/widget.rb +2 -2
- data/{lib/scarpe → spikes}/glibui.rb +1 -1
- data/templates/basic_class_template.erb +13 -14
- data/templates/class_template_with_event_bind.erb +4 -4
- data/templates/class_template_with_shapes.erb +8 -17
- data/templates/example_template.erb +1 -1
- data/templates/module_template.erb +4 -4
- data/templates/webview_template.erb +3 -5
- metadata +236 -145
- data/examples/fill.rb +0 -25
- data/examples/legacy/not_checked/shoes-contrib/basic/class-book.yaml +0 -387
- data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +0 -3
- data/examples/legacy/not_checked/shoes-contrib/good/good-clock.rb +0 -51
- data/examples/legacy/not_checked/shoes-contrib/good/good-follow.rb +0 -26
- data/examples/legacy/not_checked/shoes-contrib/good/good-reminder.rb +0 -174
- data/examples/legacy/not_checked/shoes-contrib/good/good-vjot.rb +0 -56
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-timer.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/good-clock.rb +0 -51
- data/examples/legacy/not_checked/shoes-dep-samples/good-follow.rb +0 -26
- data/examples/legacy/not_checked/shoes-dep-samples/good-reminder.rb +0 -174
- data/examples/legacy/not_checked/shoes-dep-samples/good-vjot.rb +0 -56
- data/examples/legacy/not_checked/shoes-dep-samples/simple-accordion.rb +0 -75
- data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-shapes.rb +0 -17
- data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-text.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-arc.rb +0 -23
- data/examples/legacy/not_checked/shoes-dep-samples/simple-bounce.rb +0 -24
- data/examples/legacy/not_checked/shoes-dep-samples/simple-calc.rb +0 -70
- data/examples/legacy/not_checked/shoes-dep-samples/simple-chipmunk.rb +0 -26
- data/examples/legacy/not_checked/shoes-dep-samples/simple-control-sizes.rb +0 -24
- data/examples/legacy/not_checked/shoes-dep-samples/simple-curve.rb +0 -26
- data/examples/legacy/not_checked/shoes-dep-samples/simple-dialogs.rb +0 -29
- data/examples/legacy/not_checked/shoes-dep-samples/simple-draw.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-editor.rb +0 -28
- data/examples/legacy/not_checked/shoes-dep-samples/simple-form.rb +0 -28
- data/examples/legacy/not_checked/shoes-dep-samples/simple-form.shy +0 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-mask.rb +0 -21
- data/examples/legacy/not_checked/shoes-dep-samples/simple-menu.rb +0 -31
- data/examples/legacy/not_checked/shoes-dep-samples/simple-menu1.rb +0 -35
- data/examples/legacy/not_checked/shoes-dep-samples/simple-rubygems.rb +0 -29
- data/examples/legacy/not_checked/shoes-dep-samples/simple-slide.rb +0 -45
- data/examples/legacy/not_checked/shoes-dep-samples/simple-sphere.rb +0 -28
- data/examples/legacy/not_checked/shoes-dep-samples/simple-sqlite3.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-timer.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-video.rb +0 -13
- data/examples/legacy/not_checked/simple/anim-text.rb +0 -13
- data/examples/legacy/not_checked/simple/arc.rb +0 -23
- data/examples/legacy/not_checked/simple/bounce.rb +0 -24
- data/examples/legacy/not_checked/simple/chipmunk.rb +0 -26
- data/examples/legacy/not_checked/simple/curve.rb +0 -26
- data/examples/legacy/not_checked/simple/dialogs.rb +0 -29
- data/examples/legacy/not_checked/simple/downloader.rb +0 -40
- data/examples/legacy/not_checked/simple/draw.rb +0 -13
- data/examples/legacy/not_checked/simple/mask.rb +0 -21
- data/examples/legacy/not_checked/simple/slide.rb +0 -45
- data/examples/legacy/not_checked/simple/sphere.rb +0 -28
- data/lib/constants.rb +0 -5
- data/lib/scarpe/alert.rb +0 -19
- data/lib/scarpe/app.rb +0 -78
- data/lib/scarpe/arc.rb +0 -49
- data/lib/scarpe/button.rb +0 -35
- data/lib/scarpe/document_root.rb +0 -20
- data/lib/scarpe/edit_box.rb +0 -24
- data/lib/scarpe/fill.rb +0 -23
- data/lib/scarpe/flow.rb +0 -19
- data/lib/scarpe/line.rb +0 -25
- data/lib/scarpe/link.rb +0 -25
- data/lib/scarpe/list_box.rb +0 -25
- data/lib/scarpe/logger.rb +0 -155
- data/lib/scarpe/para.rb +0 -90
- data/lib/scarpe/shape.rb +0 -19
- data/lib/scarpe/spacing.rb +0 -9
- data/lib/scarpe/stack.rb +0 -70
- data/lib/scarpe/star.rb +0 -47
- data/lib/scarpe/text_widget.rb +0 -42
- data/lib/scarpe/unit_test_helpers.rb +0 -163
- data/lib/scarpe/widget.rb +0 -198
- data/lib/scarpe/widgets.rb +0 -30
- data/lib/scarpe/wv/alert.rb +0 -65
- data/lib/scarpe/wv/background.rb +0 -18
- data/lib/scarpe/wv/border.rb +0 -22
- data/lib/scarpe/wv/control_interface_test.rb +0 -253
- data/lib/scarpe/wv/dimensions.rb +0 -22
- data/lib/scarpe/wv/fill.rb +0 -30
- data/lib/scarpe/wv/html.rb +0 -107
- data/lib/scarpe/wv/shape_helper.rb +0 -44
- data/lib/scarpe/wv/spacing.rb +0 -41
- data/lib/scarpe/wv/text_widget.rb +0 -30
- data/lib/scarpe/wv/widget.rb +0 -181
- data/scarpe-0.2.0.gem +0 -0
- /data/examples/legacy/not_checked/{expert → shoes-contrib/basic}/definr.rb +0 -0
- /data/examples/legacy/not_checked/{expert → shoes-contrib/basic}/funnies.rb +0 -0
- /data/examples/legacy/not_checked/shoes-contrib/{elements → basic}/list_box-select-class.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/basic-edit-box.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/basic-fps.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/border-cat.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/check-mate.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/manipulation → working/simple}/clear-slot.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/clock.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/gradient-shoes.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/list_box-shape-report.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/list_box.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/phat-button.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib → working}/simple/simple-calc.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/position → working/simple}/stack-width.rb +0 -0
- /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/width-introspec.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/README.md +0 -0
- /data/{lib/scarpe → spikes}/glibui/alert.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/app.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/background.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/border.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/button.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/dimensions.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/document_root.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/edit_box.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/edit_line.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/flow.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/html.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/image.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/link.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/local_display.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/para.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/spacing.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/stack.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/text_widget.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/alert.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/button.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/colors.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/core.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/flow.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/libui.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/notepad.md +0 -0
- /data/{lib/scarpe → spikes}/libui/para.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/stack.rb +0 -0
data/examples/check.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Shoes.app do
|
2
|
+
stack do
|
3
|
+
para "Among these films, which do you prefer?"
|
4
|
+
flow { check; para "The Taste of Tea by Katsuhito Ishii" }
|
5
|
+
flow { check; para "Kin-Dza-Dza by Georgi Danelia" }
|
6
|
+
flow { check; para "Children of Heaven by Majid Majidi" }
|
7
|
+
@btn = check; para "The White Balloon by Jafar Panahi"
|
8
|
+
flow do
|
9
|
+
button "Mark me" do
|
10
|
+
@btn.checked = true
|
11
|
+
|
12
|
+
end
|
13
|
+
button "unmark me" do
|
14
|
+
@btn.checked = false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Shoes.app do
|
2
|
+
stack do
|
3
|
+
button("More Stuff!") do
|
4
|
+
@slot.append do
|
5
|
+
ins "I'm enthused."
|
6
|
+
title "Enthused!"
|
7
|
+
banner "ENTHUSED!"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
button("No Stuff!") do
|
12
|
+
@slot.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
button("Different Stuff!") do
|
16
|
+
@slot.clear do
|
17
|
+
para "I'm so different!"
|
18
|
+
title "I'm like a totally different but emo person! Or possibly chicken."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
@slot = stack(width: "100%") { para 'Good Morning' }
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Shoes.app do
|
2
|
+
stack do
|
3
|
+
title "Downloading Google image", size: 16
|
4
|
+
@status = para "Enter URL and press Enter:"
|
5
|
+
|
6
|
+
url_edit = edit_line
|
7
|
+
caption "here is a cute cat url: https://img.freepik.com/premium-photo/funny-smart-cat-professor-with-glasses-illustration-generative-ai_845977-709.jpg?w=700&h=300"
|
8
|
+
|
9
|
+
button 'Download Image!', color: "#3d5a80", padding_bottom: "8", padding_top: "8", text_color: "white", font_size: "16" do
|
10
|
+
download(url_edit.text, save: "downloaded_image.png") do
|
11
|
+
@status.replace "Download completed. Click to display the image."
|
12
|
+
@download_completed = true
|
13
|
+
button 'Display Image', color: "#3d5a80", padding_bottom: "8", padding_top: "8", text_color: "white", font_size: "16" do
|
14
|
+
if @download_completed
|
15
|
+
@status.replace "Showing you the image..."
|
16
|
+
display_image("downloaded_image.png")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def display_image(image_path)
|
26
|
+
image(image_path)
|
27
|
+
end
|
28
|
+
end
|
data/examples/edit_box.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
Shoes.app do
|
2
2
|
para "Manuscript:"
|
3
|
-
|
4
|
-
|
3
|
+
lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim."
|
4
|
+
@manuscript = edit_box(lorem, width: "100%") do |box|
|
5
|
+
@char_count.replace("#{box.text.length} characters")
|
5
6
|
end
|
6
7
|
@char_count = para "#{@manuscript.text.length} characters"
|
7
|
-
@manuscript.change { |text|
|
8
|
-
@char_count.replace("#{text.length} characters")
|
9
|
-
}
|
10
8
|
end
|
data/examples/fonts.rb
CHANGED
data/examples/gen.rb
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
require 'erb'
|
3
3
|
|
4
4
|
class ScarpeGenerator
|
5
|
-
def initialize(filename,
|
5
|
+
def initialize(filename, shoes_styles)
|
6
6
|
@filename = filename
|
7
|
-
@
|
7
|
+
@shoes_styles = shoes_styles
|
8
8
|
end
|
9
9
|
|
10
10
|
def generate_files(choice, class_template_choice)
|
@@ -96,7 +96,7 @@ class ScarpeGenerator
|
|
96
96
|
capitalized_argument = @filename.capitalize
|
97
97
|
binding.dup.tap do |b|
|
98
98
|
b.local_variable_set(:argument, capitalized_argument)
|
99
|
-
b.local_variable_set(:
|
99
|
+
b.local_variable_set(:shoes_styles, @shoes_styles)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
@@ -109,7 +109,7 @@ Shoes.app(title: 'Templates') do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
stack width: 400 do
|
112
|
-
para 'Enter
|
112
|
+
para 'Enter Shoes styles (like :height,:text) '
|
113
113
|
$properties_input = edit_line
|
114
114
|
end
|
115
115
|
|
@@ -125,13 +125,13 @@ Shoes.app(title: 'Templates') do
|
|
125
125
|
|
126
126
|
button 'Generate Files!',color:"#FF7116",padding_bottom:"8",padding_top:"8",text_color:"white",font_size:"16" do
|
127
127
|
filename = $filename_input.text
|
128
|
-
|
129
|
-
choice = $choice_input.
|
128
|
+
shoes_styles = $properties_input.text
|
129
|
+
choice = $choice_input.text
|
130
130
|
|
131
|
-
generator = ScarpeGenerator.new(filename,
|
131
|
+
generator = ScarpeGenerator.new(filename, shoes_styles)
|
132
132
|
|
133
133
|
if choice == 'Class'
|
134
|
-
generator.generate_files(choice, $class_template_choice_input.
|
134
|
+
generator.generate_files(choice, $class_template_choice_input.text)
|
135
135
|
else
|
136
136
|
generator.generate_files(choice, nil)
|
137
137
|
end
|
data/examples/highlander.rb
CHANGED
@@ -35,7 +35,7 @@ def update_dup_list
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def highlander_the_selected_item
|
38
|
-
selected = $dup_list.
|
38
|
+
selected = $dup_list.text
|
39
39
|
if !selected || selected == "" || !selected.include?(DIVIDER)
|
40
40
|
$bottom_display.replace("Select an item first!")
|
41
41
|
return
|
@@ -58,6 +58,8 @@ def highlander_the_selected_item
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
$dup_list.choose nil
|
62
|
+
$bottom_display.replace BOTTOM_DISPLAY_INSTRUCTIONS
|
61
63
|
update_dup_list
|
62
64
|
end
|
63
65
|
|
@@ -65,7 +67,7 @@ Shoes.app(title: "Highlander") do
|
|
65
67
|
stack :margin => 40 do
|
66
68
|
$top_text = para "Loading..."
|
67
69
|
$dup_list = list_box(:items => []).change do
|
68
|
-
$bottom_display.replace "Selected duplicates: #{$dup_list.
|
70
|
+
$bottom_display.replace "Selected duplicates: #{$dup_list.text.inspect}"
|
69
71
|
end
|
70
72
|
|
71
73
|
update_dup_list
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# Legacy Projects
|
2
|
+
|
3
|
+
These are Shoes examples, taken from a wide variety of sources. In general, we try not to modify them.
|
4
|
+
|
5
|
+
It's possible that some of them run but we haven't realised it yet, which is why the "not_checked" directory is nameed that, rather than something like "won't work". Also, they aren't checked by CI, while the ones marked working have to at least boot up.
|
6
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Source: https://www.hanselman.com/blog/the-weekly-source-code-29-ruby-and-shoes-and-the-first-ruby-virus
|
2
|
+
|
3
|
+
class Speedometer < Shoes::Widget
|
4
|
+
attr_accessor :range, :tick, :position
|
5
|
+
def initialize opts = {}
|
6
|
+
@range = opts[:range] || 200
|
7
|
+
@tick = opts[:tick] || 10
|
8
|
+
@position = opts[:position] || 0
|
9
|
+
@cx, @cy = self.left + 110, self.top + 100
|
10
|
+
|
11
|
+
nostroke
|
12
|
+
rect :top => self.top, :left => self.left,
|
13
|
+
:width => 220, :height => 200
|
14
|
+
nofill
|
15
|
+
stroke white
|
16
|
+
oval :left => @cx - 50, :top => @cy - 50, :radius => 100
|
17
|
+
(ticks + 1).times do |i|
|
18
|
+
radial_line 225 + ((270.0 / ticks) * i), 70..80
|
19
|
+
radial_line 225 + ((270.0 / ticks) * i), 45..49
|
20
|
+
end
|
21
|
+
strokewidth 2
|
22
|
+
oval :left => @cx - 70, :top => @cy - 70, :radius => 140
|
23
|
+
stroke lightgreen
|
24
|
+
oval :left => @cx - 5, :top => @cy - 5, :radius => 10
|
25
|
+
@needle = radial_line 225 + ((270.0 / @range) * @position), 0..90
|
26
|
+
end
|
27
|
+
def ticks; @range / @tick end
|
28
|
+
def radial_line deg, r
|
29
|
+
pos = ((deg / 360.0) * (2.0 * Math::PI)) - (Math::PI / 2.0)
|
30
|
+
line (Math.cos(pos) * r.begin) + @cx, (Math.sin(pos) * r.begin) + @cy,
|
31
|
+
(Math.cos(pos) * r.end) + @cx, (Math.sin(pos) * r.end) + @cy
|
32
|
+
end
|
33
|
+
def position= pos
|
34
|
+
@position = pos
|
35
|
+
@needle.remove
|
36
|
+
append do
|
37
|
+
@needle = radial_line 225 + ((270.0 / @range) * @position), 0..90
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Shoes.app do
|
43
|
+
stack do
|
44
|
+
para "Enter a number between 0 and 100"
|
45
|
+
flow do
|
46
|
+
@p = edit_line
|
47
|
+
button "OK" do
|
48
|
+
@s.position = @p.text.to_i
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@s = speedometer :range => 100, :ticks => 10
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Shoes.app do
|
2
2
|
background "#eee"
|
3
3
|
@list = stack do
|
4
|
-
@img = image
|
4
|
+
@img = image "#{DIR}/docs/static/man-builds.png"
|
5
5
|
para "Enter a image URL to download:", :margin => [10, 8, 10, 0]
|
6
6
|
flow :margin => 10 do
|
7
7
|
@url = edit_line :width => -120
|
data/examples/link.rb
CHANGED
@@ -2,7 +2,7 @@ Shoes.app do
|
|
2
2
|
def collapsed
|
3
3
|
@para = para(
|
4
4
|
"'Scarpe' means shoes in Italian. 'Scarpe' also means Shoes in...",
|
5
|
-
link("(show more)") { @para.
|
5
|
+
link("(show more)") { @para.destroy; @para = expanded }
|
6
6
|
)
|
7
7
|
end
|
8
8
|
|
@@ -12,7 +12,7 @@ Shoes.app do
|
|
12
12
|
"Scarpe isn't feature complete with any version of Shoes (yet?). We're initially targeting Shoes Classic. ",
|
13
13
|
link("Learn more", click: "http://github.com/schwad/scarpe"),
|
14
14
|
" ",
|
15
|
-
link("(show less)") { @para.
|
15
|
+
link("(show less)") { @para.destroy; @para = collapsed }
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Shoes.app(title: "Guessing secret word", width: 500, height: 450) do
|
2
|
+
secret_word = "apple"
|
3
|
+
guess_label = para "Guess the secret word:"
|
4
|
+
guess_input = list_box items: ["apple", "banana", "orange"], choose: "orange"
|
5
|
+
|
6
|
+
button "Guess" do
|
7
|
+
guess = guess_input.text
|
8
|
+
|
9
|
+
if guess == secret_word
|
10
|
+
alert("Yayyy! that's right.")
|
11
|
+
else
|
12
|
+
alert("No, better luck next time😕")
|
13
|
+
end
|
14
|
+
|
15
|
+
guess_input.choose "orange"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# Require the WEBrick library
|
2
|
+
require 'webrick'
|
3
|
+
|
4
|
+
# Configuration for the server
|
5
|
+
configuration = {
|
6
|
+
Port: 4567,
|
7
|
+
DocumentRoot: File.join(File.dirname(__FILE__), '..', '..', 'examples', 'local_assets')
|
8
|
+
}
|
9
|
+
|
10
|
+
# Create a new instance of WEBrick::HTTPServer with the configuration
|
11
|
+
server = WEBrick::HTTPServer.new(configuration)
|
12
|
+
|
13
|
+
# Define a custom servlet to handle file requests
|
14
|
+
class FileServlet < WEBrick::HTTPServlet::AbstractServlet
|
15
|
+
def do_GET(request, response)
|
16
|
+
relative_path = request.path
|
17
|
+
path = File.join(@config[:DocumentRoot], relative_path)
|
18
|
+
|
19
|
+
if File.exist?(path) && !File.directory?(path)
|
20
|
+
begin
|
21
|
+
file_content = File.read(path)
|
22
|
+
|
23
|
+
response.status = 200
|
24
|
+
response['Content-Type'] = WEBrick::HTTPUtils.mime_type(path, WEBrick::HTTPUtils::DefaultMimeTypes)
|
25
|
+
response['Content-Disposition'] = "inline; filename=#{File.basename(path)}"
|
26
|
+
response.body = file_content
|
27
|
+
rescue StandardError => e
|
28
|
+
response.status = 500
|
29
|
+
response.body = 'Internal Server Error'
|
30
|
+
end
|
31
|
+
else
|
32
|
+
response.status = 404
|
33
|
+
response.body = 'File not found'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Mount the custom servlet at the root URL
|
39
|
+
server.mount('/', FileServlet)
|
40
|
+
|
41
|
+
# Set up a signal trap to gracefully shut down the server on interrupt (e.g., Ctrl+C)
|
42
|
+
trap('INT') do
|
43
|
+
server.shutdown
|
44
|
+
end
|
45
|
+
|
46
|
+
# Start the server in a separate thread
|
47
|
+
server_thread = Thread.new { server.start }
|
48
|
+
|
49
|
+
# Shoes application to display the file from the local server
|
50
|
+
Shoes.app do
|
51
|
+
stack do
|
52
|
+
flow do
|
53
|
+
para "Enter the file path: (e.g., sample.gif, sample.mp4)"
|
54
|
+
@file_path = edit_line
|
55
|
+
end
|
56
|
+
|
57
|
+
button "Display File" do
|
58
|
+
file_path = @file_path.text
|
59
|
+
|
60
|
+
begin
|
61
|
+
file_extension = File.extname(file_path).downcase
|
62
|
+
|
63
|
+
case file_extension
|
64
|
+
when '.png', '.jpg', '.jpeg', '.gif'
|
65
|
+
image "http://localhost:4567/#{file_path}"
|
66
|
+
when '.mp4', '.mov'
|
67
|
+
video "http://localhost:4567/#{file_path}"
|
68
|
+
else
|
69
|
+
para "Unsupported file type"
|
70
|
+
end
|
71
|
+
rescue StandardError => e
|
72
|
+
para "Error: #{e.message}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Ensure the Shoes application is closed before stopping the server
|
78
|
+
at_exit do
|
79
|
+
server_thread.join if server_thread.alive?
|
80
|
+
server.shutdown
|
81
|
+
end
|
82
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Shoes.app width: 600, height: 600 do
|
2
|
+
stack do
|
3
|
+
para "Events and Menus"
|
4
|
+
flow do
|
5
|
+
@btn1 = button "button 1", width: 75 do
|
6
|
+
@eb.append "button 1 clicked\n"
|
7
|
+
end
|
8
|
+
click do
|
9
|
+
@eb.append "flow click\n"
|
10
|
+
end
|
11
|
+
hover do
|
12
|
+
@eb.append "flow hover\n"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
@eb = edit_box width: 500, height: 350
|
16
|
+
end
|
17
|
+
motion do |x, y, mods|
|
18
|
+
@eb.append "motion #{x},#{y} #{mods} "
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Shoes.app do
|
2
|
+
stack do
|
3
|
+
@note = para " your note will appear here"
|
4
|
+
|
5
|
+
@edit_box = edit_box ""
|
6
|
+
@save_button = button "Save"
|
7
|
+
|
8
|
+
@save_button.click do
|
9
|
+
new_text = @edit_box.text
|
10
|
+
@note.text = new_text
|
11
|
+
alert("Note saved successfully!")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
class Comic
|
6
|
+
attr_reader :rss, :title
|
7
|
+
|
8
|
+
def initialize(file_path)
|
9
|
+
@rss = Nokogiri::XML(File.open(file_path))
|
10
|
+
@title = @rss.at("//channel/title").text
|
11
|
+
end
|
12
|
+
|
13
|
+
def items
|
14
|
+
@rss.search("//channel/item")
|
15
|
+
end
|
16
|
+
|
17
|
+
def latest_image
|
18
|
+
item = @rss.at("//channel/item[1]")
|
19
|
+
description = item.at("description").text
|
20
|
+
image_url = description.match(/src="([^"]+\.\w+)"/)[1]
|
21
|
+
title = item.at("title").text
|
22
|
+
[title, image_url]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Shoes.app width: 800, height: 600 do
|
27
|
+
background "#555"
|
28
|
+
@title = "Web Funnies"
|
29
|
+
|
30
|
+
stack margin: 10 do
|
31
|
+
title strong(@title), align: "center", stroke: "#DFA", margin: 0
|
32
|
+
para "(loaded from RSS feeds)", align: "center", stroke: "#DFA", margin: 0
|
33
|
+
|
34
|
+
url = "https://xkcd.com/rss.xml"
|
35
|
+
rss_string = URI.open(url).read
|
36
|
+
|
37
|
+
file = Tempfile.new('download')
|
38
|
+
file.write(rss_string)
|
39
|
+
file.close
|
40
|
+
file_path = file.path
|
41
|
+
|
42
|
+
c = Comic.new(file_path)
|
43
|
+
|
44
|
+
stack width: "100%", margin: 10, border: 1 do
|
45
|
+
stack do
|
46
|
+
background "#333", curve: 4
|
47
|
+
caption c.title, stroke: "#CD9", margin: 4
|
48
|
+
end
|
49
|
+
|
50
|
+
title, image_url = c.latest_image
|
51
|
+
|
52
|
+
flow do
|
53
|
+
image image_url
|
54
|
+
para strong(title), margin: 8, stroke: white
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Shoes.app(width: 400, height: 300) do
|
2
|
+
flow do
|
3
|
+
stack(width: 0.5) do
|
4
|
+
para "this is initally at 30%"
|
5
|
+
@progress1 = progress fraction: 0.3
|
6
|
+
|
7
|
+
para "this is initally at 60%"
|
8
|
+
@progress2 = progress fraction: 0.6
|
9
|
+
|
10
|
+
para "this is initally at 80%"
|
11
|
+
@progress3 = progress fraction: 0.8
|
12
|
+
|
13
|
+
para "this is a normal progress bar with no initial value"
|
14
|
+
@progress4 = progress
|
15
|
+
end
|
16
|
+
|
17
|
+
stack(width: 0.5) do
|
18
|
+
@start = button "Start"
|
19
|
+
@start.click { start_progress }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def start_progress
|
24
|
+
animate do
|
25
|
+
@progress1.fraction += 0.01
|
26
|
+
@progress2.fraction += 0.015
|
27
|
+
@progress3.fraction += 0.02
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Shoes.app do
|
2
|
+
stack do
|
3
|
+
para "Among these films, which do you prefer?"
|
4
|
+
flow { radio; para "The Taste of Tea by Katsuhito Ishii" }
|
5
|
+
flow { radio "a"; para "Kin-Dza-Dza by Georgi Danelia" }
|
6
|
+
flow { radio; para "Children of Heaven by Majid Majidi" }
|
7
|
+
@btn = radio; para "The White Balloon by Jafar Panahi"
|
8
|
+
button "Mark me" do
|
9
|
+
@btn.checked = true
|
10
|
+
|
11
|
+
end
|
12
|
+
button "unmark me" do
|
13
|
+
@btn.checked = false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Shoes.app do
|
2
|
+
stack do
|
3
|
+
para "Among these films, which do you prefer?"
|
4
|
+
flow do
|
5
|
+
radio :films
|
6
|
+
para "The Taste of Tea by Katsuhito Ishii"
|
7
|
+
end
|
8
|
+
flow do
|
9
|
+
radio :films
|
10
|
+
para "Kin-Dza-Dza by Georgi Danelia"
|
11
|
+
end
|
12
|
+
flow do
|
13
|
+
radio :films
|
14
|
+
para "Children of Heaven by Majid Majidi"
|
15
|
+
end
|
16
|
+
para "Is radio button checked? #{radio(:films).checked?}"
|
17
|
+
end
|
18
|
+
end
|
data/examples/rect.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Shoes.app(height:600) do
|
2
|
+
rotate 90
|
3
|
+
rect 10, 10, 75, 50, 5
|
4
|
+
rotate 180
|
5
|
+
arrow 100, 100, 30
|
6
|
+
rotate 60
|
7
|
+
arrow 150, 120,40
|
8
|
+
rotate 120
|
9
|
+
arrow 30 ,60 ,40
|
10
|
+
rotate 75
|
11
|
+
arc 50, 50, 120, 100, 60, 225
|
12
|
+
rotate 45
|
13
|
+
arrow :left => 50, :top => 80,
|
14
|
+
:width => 40
|
15
|
+
rotate 180
|
16
|
+
line 100, 100, 200, 200
|
17
|
+
end
|
data/examples/ruby_racer.rb
CHANGED
@@ -1,30 +1,28 @@
|
|
1
1
|
require "benchmark"
|
2
2
|
require "stringio"
|
3
3
|
|
4
|
-
Shoes.app(title: "Ruby Racer"
|
4
|
+
Shoes.app(title: "Ruby Racer") do
|
5
5
|
racer1 = nil
|
6
6
|
racer2 = nil
|
7
7
|
|
8
8
|
flow do
|
9
9
|
stack width: 0.45, margin: 5 do
|
10
10
|
para "Racer 1", size: :caption
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
11
|
+
code1 = <<~RUBY
|
12
|
+
for i in 1..10
|
13
|
+
a = "1"
|
14
|
+
end
|
15
|
+
RUBY
|
16
|
+
racer1 = edit_box(code1, width: "100%", height: 100)
|
18
17
|
end
|
19
18
|
stack width: 0.45, margin: 5 do
|
20
19
|
para "Racer 2", size: :caption
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
20
|
+
code2 = <<~RUBY
|
21
|
+
10.times do
|
22
|
+
a = "1"
|
23
|
+
end
|
24
|
+
RUBY
|
25
|
+
racer2 = edit_box(code2, width: "100%", height: 100)
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|