scarpe 0.2.2 → 0.3.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/.yardopts +1 -0
- data/CHANGELOG.md +16 -2
- data/Gemfile.lock +7 -3
- data/README.md +24 -8
- data/Rakefile +1 -1
- data/examples/animate.rb +20 -0
- data/examples/arrow.rb +10 -0
- data/examples/btn_tooltip.rb +7 -0
- data/examples/button_style_changed.rb +7 -0
- data/examples/button_styles_default.rb +6 -0
- data/examples/gen.rb +8 -8
- data/examples/highlander.rb +3 -3
- 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/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 +2 -2
- data/examples/local_images.rb +2 -3
- data/examples/para/para_text.rb +14 -0
- data/examples/progress.rb +31 -0
- data/examples/radio/radio_groups.rb +2 -2
- data/examples/rect.rb +4 -0
- data/examples/rotate_shapes.rb +17 -0
- data/examples/simpler-menu.rb +21 -0
- data/exe/scarpe +2 -1
- data/lacci/Gemfile +2 -0
- data/lacci/Gemfile.lock +8 -1
- data/lacci/lacci.gemspec +1 -1
- data/lacci/lib/lacci/scarpe_cli.rb +2 -1
- data/lacci/lib/lacci/scarpe_core.rb +2 -1
- data/lacci/lib/lacci/version.rb +1 -1
- 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 +88 -43
- data/lacci/lib/shoes/background.rb +2 -2
- data/lacci/lib/shoes/border.rb +2 -2
- data/lacci/lib/shoes/builtins.rb +63 -0
- data/lacci/lib/shoes/changelog.rb +52 -0
- data/lacci/lib/shoes/colors.rb +3 -1
- data/lacci/lib/shoes/constants.rb +19 -1
- data/lacci/lib/shoes/display_service.rb +39 -16
- data/lacci/lib/shoes/download.rb +2 -2
- 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/{widgets → drawables}/check.rb +5 -4
- data/lacci/lib/shoes/{widgets → drawables}/document_root.rb +3 -3
- data/lacci/lib/shoes/{widgets → drawables}/edit_box.rb +6 -6
- data/lacci/lib/shoes/{widgets → drawables}/edit_line.rb +6 -6
- data/lacci/lib/shoes/{widgets → drawables}/flow.rb +6 -6
- data/lacci/lib/shoes/{widgets → drawables}/image.rb +6 -6
- data/lacci/lib/shoes/{widgets → drawables}/line.rb +7 -5
- 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/{widgets → drawables}/shape.rb +6 -7
- data/lacci/lib/shoes/{widgets → drawables}/slot.rb +32 -20
- data/lacci/lib/shoes/{widgets → drawables}/span.rb +8 -7
- data/lacci/lib/shoes/{widgets → drawables}/stack.rb +6 -4
- 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 +2 -2
- data/lacci/lib/shoes/ruby_extensions.rb +15 -0
- data/lacci/lib/shoes/spacing.rb +2 -2
- data/lacci/lib/shoes-spec.rb +93 -0
- data/lacci/lib/shoes.rb +27 -7
- data/lacci/test/test_helper.rb +54 -0
- data/lacci/test/test_lacci.rb +12 -3
- data/lacci/test/test_shoes_errors.rb +49 -0
- data/lib/scarpe/cats_cradle.rb +81 -59
- data/lib/scarpe/errors.rb +77 -0
- data/lib/scarpe/evented_assertions.rb +50 -17
- data/lib/scarpe/shoes_spec.rb +181 -0
- data/lib/scarpe/version.rb +2 -2
- data/lib/scarpe/wv/app.rb +20 -20
- data/lib/scarpe/wv/arc.rb +4 -47
- data/lib/scarpe/wv/arrow.rb +9 -0
- data/lib/scarpe/wv/button.rb +7 -35
- data/lib/scarpe/wv/check.rb +3 -5
- data/lib/scarpe/wv/control_interface.rb +18 -20
- data/lib/scarpe/wv/document_root.rb +81 -4
- data/lib/scarpe/wv/{widget.rb → drawable.rb} +66 -43
- data/lib/scarpe/wv/edit_box.rb +4 -17
- data/lib/scarpe/wv/edit_line.rb +4 -18
- data/lib/scarpe/wv/flow.rb +2 -18
- data/lib/scarpe/wv/image.rb +8 -28
- data/lib/scarpe/wv/line.rb +3 -25
- data/lib/scarpe/wv/link.rb +3 -16
- data/lib/scarpe/wv/list_box.rb +6 -29
- data/lib/scarpe/wv/para.rb +11 -30
- data/lib/scarpe/wv/progress.rb +19 -0
- data/lib/scarpe/wv/radio.rb +9 -10
- data/lib/scarpe/wv/rect.rb +13 -0
- data/lib/scarpe/wv/shape.rb +3 -8
- data/lib/scarpe/wv/slot.rb +8 -25
- data/lib/scarpe/wv/span.rb +3 -27
- data/lib/scarpe/wv/stack.rb +2 -18
- data/lib/scarpe/wv/star.rb +3 -53
- data/lib/scarpe/wv/subscription_item.rb +38 -4
- data/lib/scarpe/wv/text_drawable.rb +32 -0
- data/lib/scarpe/wv/video.rb +15 -15
- data/lib/scarpe/wv/web_wrangler.rb +299 -329
- data/lib/scarpe/wv/webview_local_display.rb +48 -33
- data/lib/scarpe/wv/webview_relay_display.rb +12 -12
- data/lib/scarpe/wv/webview_relay_util.rb +7 -10
- data/lib/scarpe/wv/wv_display_worker.rb +2 -2
- data/lib/scarpe/wv.rb +45 -12
- data/lib/scarpe/wv_local.rb +1 -1
- data/lib/scarpe/wv_relay.rb +1 -1
- data/lib/scarpe.rb +1 -0
- data/logger/debug_web_wrangler.json +1 -1
- data/logger/scarpe_wv_test.json +1 -1
- data/scarpe-components/Gemfile.lock +86 -0
- data/scarpe-components/lib/scarpe/components/base64.rb +3 -7
- 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 +1 -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 +5 -5
- data/scarpe-components/lib/scarpe/components/print_logger.rb +9 -5
- data/scarpe-components/lib/scarpe/components/promises.rb +14 -14
- data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +36 -17
- 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 +45 -5
- data/scarpe-components/lib/scarpe/components/version.rb +2 -2
- 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_dimensions.rb +26 -0
- data/scarpe-components/test/test_helper.rb +20 -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 +5 -4
- data/scarpe-components/test/test_segmented_app_files.rb +8 -6
- data/scarpegen.rb +14 -14
- data/sig/scarpe.rbs +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 -2
- metadata +113 -55
- data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +0 -3
- data/lacci/lib/shoes/widget.rb +0 -218
- data/lacci/lib/shoes/widgets/alert.rb +0 -19
- data/lacci/lib/shoes/widgets/arc.rb +0 -51
- data/lacci/lib/shoes/widgets/button.rb +0 -35
- data/lacci/lib/shoes/widgets/font.rb +0 -14
- data/lacci/lib/shoes/widgets/link.rb +0 -25
- data/lacci/lib/shoes/widgets/list_box.rb +0 -25
- data/lacci/lib/shoes/widgets/para.rb +0 -68
- data/lacci/lib/shoes/widgets/radio.rb +0 -35
- data/lacci/lib/shoes/widgets/star.rb +0 -44
- data/lacci/lib/shoes/widgets/subscription_item.rb +0 -60
- data/lacci/lib/shoes/widgets/text_widget.rb +0 -51
- data/lacci/lib/shoes/widgets/video.rb +0 -15
- data/lacci/lib/shoes/widgets.rb +0 -29
- data/lib/scarpe/wv/alert.rb +0 -66
- data/lib/scarpe/wv/background.rb +0 -27
- data/lib/scarpe/wv/border.rb +0 -24
- data/lib/scarpe/wv/control_interface_test.rb +0 -238
- data/lib/scarpe/wv/dimensions.rb +0 -22
- data/lib/scarpe/wv/font.rb +0 -36
- data/lib/scarpe/wv/html.rb +0 -108
- data/lib/scarpe/wv/spacing.rb +0 -41
- data/lib/scarpe/wv/text_widget.rb +0 -30
- /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
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Shoes
|
|
4
|
-
class Button < Shoes::Widget
|
|
5
|
-
include Shoes::Log
|
|
6
|
-
display_properties :text, :width, :height, :top, :left, :color, :padding_top, :padding_bottom, :text_color, :size, :font_size
|
|
7
|
-
|
|
8
|
-
def initialize(text, width: nil, height: nil, top: nil, left: nil, color: nil, padding_top: nil, padding_bottom: nil, size: 12, text_color: nil,
|
|
9
|
-
font_size: nil, & block)
|
|
10
|
-
|
|
11
|
-
log_init("Button")
|
|
12
|
-
|
|
13
|
-
# Properties passed as positional args, not keywords, don't get auto-set
|
|
14
|
-
@text = text
|
|
15
|
-
@color = color
|
|
16
|
-
|
|
17
|
-
@block = block
|
|
18
|
-
|
|
19
|
-
super
|
|
20
|
-
|
|
21
|
-
# Bind to a handler named "click"
|
|
22
|
-
bind_self_event("click") do
|
|
23
|
-
@log.debug("Button clicked, calling handler") if @block
|
|
24
|
-
@block&.call
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
create_display_widget
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Set the click handler
|
|
31
|
-
def click(&block)
|
|
32
|
-
@block = block
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Shoes
|
|
4
|
-
class Link < Shoes::TextWidget
|
|
5
|
-
display_properties :text, :click, :has_block
|
|
6
|
-
|
|
7
|
-
def initialize(text, click: nil, &block)
|
|
8
|
-
@text = text
|
|
9
|
-
@block = block
|
|
10
|
-
# We can't send a block to the display widget, but we can send a boolean
|
|
11
|
-
@has_block = !block.nil?
|
|
12
|
-
|
|
13
|
-
super
|
|
14
|
-
|
|
15
|
-
# The click property should be changed before it gets sent to the display widget
|
|
16
|
-
@click ||= "#"
|
|
17
|
-
|
|
18
|
-
bind_self_event("click") do
|
|
19
|
-
@block&.call
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
create_display_widget
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Shoes
|
|
4
|
-
class ListBox < Shoes::Widget
|
|
5
|
-
display_properties :selected_item, :items, :height, :width
|
|
6
|
-
|
|
7
|
-
def initialize(args = {}, &block)
|
|
8
|
-
@items = args[:items] || []
|
|
9
|
-
@selected_item = args[:selected_item]
|
|
10
|
-
super()
|
|
11
|
-
|
|
12
|
-
bind_self_event("change") do |new_item|
|
|
13
|
-
self.selected_item = new_item
|
|
14
|
-
@callback&.call(new_item)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
create_display_widget
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def change(&block)
|
|
21
|
-
@callback = block
|
|
22
|
-
self # Allow chaining calls
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Shoes
|
|
4
|
-
class Para < Shoes::Widget
|
|
5
|
-
display_properties :text_items, :stroke, :size, :font, :html_attributes, :hidden
|
|
6
|
-
|
|
7
|
-
def initialize(*args, stroke: nil, size: :para, font: nil, hidden: false, **html_attributes)
|
|
8
|
-
@text_children = args || []
|
|
9
|
-
if hidden
|
|
10
|
-
@hidden_text_items = text_children_to_items(@text_children)
|
|
11
|
-
@text_items = []
|
|
12
|
-
else
|
|
13
|
-
# Text_children alternates strings and TextWidgets, so we can't just pass
|
|
14
|
-
# it as a display property. It won't serialize.
|
|
15
|
-
@text_items = text_children_to_items(@text_children)
|
|
16
|
-
@hidden_text_items = []
|
|
17
|
-
end
|
|
18
|
-
stroke = to_rgb(stroke)
|
|
19
|
-
|
|
20
|
-
@html_attributes = html_attributes || {}
|
|
21
|
-
|
|
22
|
-
super
|
|
23
|
-
|
|
24
|
-
create_display_widget
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def text_children_to_items(text_children)
|
|
28
|
-
text_children.map { |arg| arg.is_a?(String) ? arg : arg.linkable_id }
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def replace(*children)
|
|
32
|
-
@text_children = children
|
|
33
|
-
|
|
34
|
-
# This should signal the display widget to change
|
|
35
|
-
self.text_items = text_children_to_items(@text_children)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
module Shoes
|
|
41
|
-
class Widget
|
|
42
|
-
def banner(*args, **kwargs)
|
|
43
|
-
para(*args, **{ size: :banner }.merge(kwargs))
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def title(*args, **kwargs)
|
|
47
|
-
para(*args, **{ size: :title }.merge(kwargs))
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def subtitle(*args, **kwargs)
|
|
51
|
-
para(*args, **{ size: :subtitle }.merge(kwargs))
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def tagline(*args, **kwargs)
|
|
55
|
-
para(*args, **{ size: :tagline }.merge(kwargs))
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def caption(*args, **kwargs)
|
|
59
|
-
para(*args, **{ size: :caption }.merge(kwargs))
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def inscription(*args, **kwargs)
|
|
63
|
-
para(*args, **{ size: :inscription }.merge(kwargs))
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
alias_method :ins, :inscription
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Shoes
|
|
4
|
-
class Radio < Shoes::Widget
|
|
5
|
-
display_properties :group, :checked
|
|
6
|
-
|
|
7
|
-
def initialize(group = nil, checked = nil, &block)
|
|
8
|
-
@group = group
|
|
9
|
-
@block = block
|
|
10
|
-
super
|
|
11
|
-
|
|
12
|
-
bind_self_event("click") { click }
|
|
13
|
-
create_display_widget
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def click(&block)
|
|
17
|
-
@block = block
|
|
18
|
-
self.checked = !checked?
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def checked?
|
|
22
|
-
@checked ? true : false
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def checked(value)
|
|
26
|
-
self.checked = value
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def group_name
|
|
32
|
-
@group || @parent
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Shoes
|
|
4
|
-
class Star < Shoes::Widget
|
|
5
|
-
display_properties :left, :top, :points, :outer, :inner, :draw_context
|
|
6
|
-
|
|
7
|
-
def initialize(left, top, points = 10, outer = 100, inner = 50)
|
|
8
|
-
@points = convert_to_integer(points, "points", 10)
|
|
9
|
-
@outer = convert_to_float(outer, "outer", 100.0)
|
|
10
|
-
@inner = convert_to_float(inner, "inner", 50.0)
|
|
11
|
-
|
|
12
|
-
@draw_context = Shoes::App.instance.current_draw_context
|
|
13
|
-
|
|
14
|
-
super
|
|
15
|
-
create_display_widget
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def convert_to_integer(value, attribute_name, default = 0)
|
|
21
|
-
begin
|
|
22
|
-
value = Integer(value)
|
|
23
|
-
raise InvalidAttributeValueError, "Negative num '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
|
|
24
|
-
|
|
25
|
-
value
|
|
26
|
-
rescue ArgumentError
|
|
27
|
-
error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
|
|
28
|
-
raise InvalidAttributeValueError, error_message
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def convert_to_float(value, attribute_name, default = 0.0)
|
|
33
|
-
begin
|
|
34
|
-
value = Float(value)
|
|
35
|
-
raise InvalidAttributeValueError, "Negative num '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
|
|
36
|
-
|
|
37
|
-
value
|
|
38
|
-
rescue ArgumentError
|
|
39
|
-
error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
|
|
40
|
-
raise InvalidAttributeValueError, error_message
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Certain Shoes calls like motion and keydown are basically an
|
|
4
|
-
# event subscription, with no other visible presence. However,
|
|
5
|
-
# they have a place in the widget tree and can be deleted.
|
|
6
|
-
#
|
|
7
|
-
# Depending on the display library they may not have any
|
|
8
|
-
# direct visual (or similar) presence there either.
|
|
9
|
-
#
|
|
10
|
-
# Inheriting from Widget gives these a parent slot and a
|
|
11
|
-
# linkable_id automatically.
|
|
12
|
-
class Shoes::SubscriptionItem < Shoes::Widget
|
|
13
|
-
display_property :shoes_api_name
|
|
14
|
-
|
|
15
|
-
def initialize(shoes_api_name:, &block)
|
|
16
|
-
super
|
|
17
|
-
|
|
18
|
-
@callback = block
|
|
19
|
-
|
|
20
|
-
case shoes_api_name
|
|
21
|
-
when "hover"
|
|
22
|
-
# Hover passes the Shoes widget as the block param
|
|
23
|
-
@unsub_id = bind_self_event("hover") do
|
|
24
|
-
@callback&.call(self)
|
|
25
|
-
end
|
|
26
|
-
when "motion"
|
|
27
|
-
# Shoes sends back x, y, mods as the args.
|
|
28
|
-
# Shoes3 uses the strings "control" "shift" and
|
|
29
|
-
# "control_shift" as the mods arg.
|
|
30
|
-
@unsub_id = bind_self_event("motion") do |x, y, ctrl_key, shift_key, **_kwargs|
|
|
31
|
-
mods = [ctrl_key ? "control" : nil, shift_key ? "shift" : nil].compact.join("_")
|
|
32
|
-
@callback&.call(x, y, mods)
|
|
33
|
-
end
|
|
34
|
-
when "click"
|
|
35
|
-
# Click has block params button, left, top
|
|
36
|
-
# button is the button number, left and top are coords
|
|
37
|
-
@unsub_id = bind_self_event("click") do |button, x, y, **_kwargs|
|
|
38
|
-
@callback&.call(button, x, y)
|
|
39
|
-
end
|
|
40
|
-
else
|
|
41
|
-
raise "Unknown Shoes API call #{shoes_api_name.inspect} passed to SubscriptionItem!"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
@unsub_id = bind_self_event(shoes_api_name) do |*args|
|
|
45
|
-
@callback&.call(*args)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# This won't create a visible display widget, but will turn into
|
|
49
|
-
# an invisible widget and a stream of events.
|
|
50
|
-
create_display_widget
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def destroy
|
|
54
|
-
# TODO: we need a better way to do this automatically. See https://github.com/scarpe-team/scarpe/issues/291
|
|
55
|
-
unsub_shoes_event(@unsub_id) if @unsub_id
|
|
56
|
-
@unsub_id = nil
|
|
57
|
-
|
|
58
|
-
super
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Shoes::TextWidget
|
|
4
|
-
|
|
5
|
-
module Shoes
|
|
6
|
-
class TextWidget < Shoes::Widget
|
|
7
|
-
class << self
|
|
8
|
-
# rubocop:disable Lint/MissingSuper
|
|
9
|
-
def inherited(subclass)
|
|
10
|
-
Shoes::Widget.widget_classes ||= []
|
|
11
|
-
Shoes::Widget.widget_classes << subclass
|
|
12
|
-
end
|
|
13
|
-
# rubocop:enable Lint/MissingSuper
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class << self
|
|
18
|
-
def default_text_widget_with(element)
|
|
19
|
-
class_name = element.capitalize
|
|
20
|
-
|
|
21
|
-
widget_class = Class.new(Shoes::TextWidget) do
|
|
22
|
-
# Can we just change content to text to match the Shoes API?
|
|
23
|
-
display_property :content
|
|
24
|
-
|
|
25
|
-
def initialize(content)
|
|
26
|
-
@content = content
|
|
27
|
-
|
|
28
|
-
super
|
|
29
|
-
|
|
30
|
-
create_display_widget
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def text
|
|
34
|
-
self.content
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def text=(new_text)
|
|
38
|
-
self.content = new_text
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
Shoes.const_set class_name, widget_class
|
|
42
|
-
widget_class.class_eval do
|
|
43
|
-
display_property :content
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
Shoes.default_text_widget_with(:code)
|
|
50
|
-
Shoes.default_text_widget_with(:em)
|
|
51
|
-
Shoes.default_text_widget_with(:strong)
|
data/lacci/lib/shoes/widgets.rb
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "shoes/widgets/slot"
|
|
4
|
-
require "shoes/widgets/stack"
|
|
5
|
-
require "shoes/widgets/flow"
|
|
6
|
-
require "shoes/widgets/document_root"
|
|
7
|
-
|
|
8
|
-
require "shoes/widgets/text_widget"
|
|
9
|
-
|
|
10
|
-
require "shoes/widgets/font"
|
|
11
|
-
require "shoes/widgets/subscription_item"
|
|
12
|
-
|
|
13
|
-
require "shoes/widgets/arc"
|
|
14
|
-
require "shoes/widgets/line"
|
|
15
|
-
require "shoes/widgets/shape"
|
|
16
|
-
require "shoes/widgets/star"
|
|
17
|
-
|
|
18
|
-
require "shoes/widgets/alert"
|
|
19
|
-
require "shoes/widgets/button"
|
|
20
|
-
require "shoes/widgets/check"
|
|
21
|
-
require "shoes/widgets/edit_box"
|
|
22
|
-
require "shoes/widgets/edit_line"
|
|
23
|
-
require "shoes/widgets/image"
|
|
24
|
-
require "shoes/widgets/link"
|
|
25
|
-
require "shoes/widgets/list_box"
|
|
26
|
-
require "shoes/widgets/para"
|
|
27
|
-
require "shoes/widgets/radio"
|
|
28
|
-
require "shoes/widgets/span"
|
|
29
|
-
require "shoes/widgets/video"
|
data/lib/scarpe/wv/alert.rb
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Scarpe
|
|
4
|
-
class WebviewAlert < WebviewWidget
|
|
5
|
-
def initialize(properties)
|
|
6
|
-
super
|
|
7
|
-
|
|
8
|
-
bind("click") do
|
|
9
|
-
send_self_event(event_name: "click")
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def element
|
|
14
|
-
onclick = handler_js_code("click")
|
|
15
|
-
|
|
16
|
-
HTML.render do |h|
|
|
17
|
-
h.div(id: html_id, style: overlay_style) do
|
|
18
|
-
h.div(style: modal_style) do
|
|
19
|
-
h.div(style: text_style) { @text }
|
|
20
|
-
h.button(style: button_style, onclick: onclick) { "OK" }
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
protected
|
|
27
|
-
|
|
28
|
-
# If the whole widget is hidden, the parent style adds display:none
|
|
29
|
-
def overlay_style
|
|
30
|
-
{
|
|
31
|
-
position: "fixed",
|
|
32
|
-
top: "0",
|
|
33
|
-
left: "0",
|
|
34
|
-
width: "100%",
|
|
35
|
-
height: "100%",
|
|
36
|
-
overflow: "auto",
|
|
37
|
-
"z-index": "1",
|
|
38
|
-
background: "rgba(0,0,0,0.4)",
|
|
39
|
-
display: "flex",
|
|
40
|
-
"align-items": "center",
|
|
41
|
-
"justify-content": "center",
|
|
42
|
-
}.merge(style)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def modal_style
|
|
46
|
-
{
|
|
47
|
-
"min-width": "200px",
|
|
48
|
-
"min-height": "50px",
|
|
49
|
-
padding: "10px",
|
|
50
|
-
display: "flex",
|
|
51
|
-
background: "#fefefe",
|
|
52
|
-
"flex-direction": "column",
|
|
53
|
-
"justify-content": "space-between",
|
|
54
|
-
"border-radius": "9px",
|
|
55
|
-
}
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def text_style
|
|
59
|
-
{}
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def button_style
|
|
63
|
-
{}
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
data/lib/scarpe/wv/background.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "scarpe/components/base64"
|
|
4
|
-
|
|
5
|
-
class Scarpe
|
|
6
|
-
module WebviewBackground
|
|
7
|
-
include Components::Base64
|
|
8
|
-
|
|
9
|
-
def style
|
|
10
|
-
styles = (super if defined?(super)) || {}
|
|
11
|
-
return styles unless @background_color
|
|
12
|
-
|
|
13
|
-
color = case @background_color
|
|
14
|
-
when Array
|
|
15
|
-
"rgba(#{@background_color.join(", ")})"
|
|
16
|
-
when Range
|
|
17
|
-
"linear-gradient(45deg, #{@background_color.first}, #{@background_color.last})"
|
|
18
|
-
when ->(value) { File.exist?(value) }
|
|
19
|
-
"url(data:image/png;base64,#{encode_file_to_base64(@background_color)})"
|
|
20
|
-
else
|
|
21
|
-
@background_color
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
styles.merge(background: color)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
data/lib/scarpe/wv/border.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Scarpe
|
|
4
|
-
module WebviewBorder
|
|
5
|
-
def style
|
|
6
|
-
styles = (super if defined?(super)) || {}
|
|
7
|
-
return styles unless @border_color
|
|
8
|
-
|
|
9
|
-
border_color = case @border_color
|
|
10
|
-
when Range
|
|
11
|
-
{ "border-image": "linear-gradient(45deg, #{@border_color.first}, #{@border_color.last})" }
|
|
12
|
-
when Array
|
|
13
|
-
{ "border-color": "rgba(#{@border_color.join(", ")})" }
|
|
14
|
-
else
|
|
15
|
-
{ "border-color": @border_color }
|
|
16
|
-
end
|
|
17
|
-
styles.merge(
|
|
18
|
-
"border-style": "solid",
|
|
19
|
-
"border-width": "#{@options[:strokewidth] || 1}px",
|
|
20
|
-
"border-radius": "#{@options[:curve] || 0}px",
|
|
21
|
-
).merge(border_color)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|