scarpe 0.2.2 → 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/.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
|