whirled_peas 0.9.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/CHANGELOG.md +21 -0
- data/README.md +9 -1053
- data/doc/application.md +92 -0
- data/doc/cli.md +115 -0
- data/doc/components.md +51 -0
- data/doc/easing.md +257 -0
- data/doc/elements.md +69 -0
- data/doc/screen_test.md +23 -0
- data/doc/settings.md +466 -0
- data/doc/template_factory.md +53 -0
- data/doc/themes.md +50 -0
- data/examples/components.rb +33 -0
- data/examples/graph.rb +1 -1
- data/examples/scrolling.rb +8 -19
- data/lib/data/themes.yaml +17 -0
- data/lib/whirled_peas.rb +31 -9
- data/lib/whirled_peas/animator/debug_consumer.rb +2 -2
- data/lib/whirled_peas/animator/easing.rb +57 -0
- data/lib/whirled_peas/animator/frameset.rb +13 -8
- data/lib/whirled_peas/animator/producer.rb +7 -8
- data/lib/whirled_peas/animator/renderer_consumer.rb +7 -5
- data/lib/whirled_peas/command/config_command.rb +3 -3
- data/lib/whirled_peas/command/frames.rb +1 -3
- data/lib/whirled_peas/command/play.rb +9 -7
- data/lib/whirled_peas/command/record.rb +1 -3
- data/lib/whirled_peas/command/still.rb +6 -2
- data/lib/whirled_peas/command/themes.rb +78 -0
- data/lib/whirled_peas/command_line.rb +3 -1
- data/lib/whirled_peas/component.rb +35 -0
- data/lib/whirled_peas/component/list_with_active.rb +88 -0
- data/lib/whirled_peas/config.rb +1 -8
- data/lib/whirled_peas/device/null_device.rb +1 -1
- data/lib/whirled_peas/device/output_file.rb +2 -2
- data/lib/whirled_peas/device/rendered_frame.rb +12 -0
- data/lib/whirled_peas/device/screen.rb +12 -8
- data/lib/whirled_peas/graphics/box_painter.rb +4 -4
- data/lib/whirled_peas/graphics/composer.rb +9 -2
- data/lib/whirled_peas/graphics/container_coords.rb +23 -25
- data/lib/whirled_peas/graphics/container_dimensions.rb +24 -0
- data/lib/whirled_peas/graphics/container_painter.rb +27 -139
- data/lib/whirled_peas/graphics/debugger.rb +2 -7
- data/lib/whirled_peas/graphics/graph_painter.rb +31 -22
- data/lib/whirled_peas/graphics/pixel_grid.rb +44 -0
- data/lib/whirled_peas/graphics/renderer.rb +4 -5
- data/lib/whirled_peas/graphics/scrollbar_helper.rb +126 -0
- data/lib/whirled_peas/null_logger.rb +0 -1
- data/lib/whirled_peas/settings/bg_color.rb +5 -1
- data/lib/whirled_peas/settings/border.rb +25 -4
- data/lib/whirled_peas/settings/color.rb +8 -4
- data/lib/whirled_peas/settings/container_settings.rb +14 -7
- data/lib/whirled_peas/settings/debugger.rb +3 -1
- data/lib/whirled_peas/settings/element_settings.rb +18 -6
- data/lib/whirled_peas/settings/graph_settings.rb +1 -1
- data/lib/whirled_peas/settings/position.rb +17 -5
- data/lib/whirled_peas/settings/text_color.rb +5 -0
- data/lib/whirled_peas/settings/text_settings.rb +1 -0
- data/lib/whirled_peas/settings/theme.rb +61 -0
- data/lib/whirled_peas/settings/theme_library.rb +69 -0
- data/lib/whirled_peas/utils/ansi.rb +4 -2
- data/lib/whirled_peas/utils/file_handler.rb +14 -9
- data/lib/whirled_peas/utils/formatted_string.rb +5 -3
- data/lib/whirled_peas/version.rb +1 -1
- data/screen_test/components/list_with_active/l2r_position_end.frame +1 -0
- data/screen_test/components/list_with_active/l2r_position_end.rb +16 -0
- data/screen_test/components/list_with_active/l2r_position_middle.frame +1 -0
- data/screen_test/components/list_with_active/l2r_position_middle.rb +16 -0
- data/screen_test/components/list_with_active/l2r_position_start.frame +1 -0
- data/screen_test/components/list_with_active/l2r_position_start.rb +16 -0
- data/screen_test/components/list_with_active/l2r_separator.frame +1 -0
- data/screen_test/components/list_with_active/l2r_separator.rb +17 -0
- data/screen_test/components/list_with_active/t2b_position_end.frame +1 -0
- data/screen_test/components/list_with_active/t2b_position_end.rb +17 -0
- data/screen_test/components/list_with_active/t2b_position_middle.frame +1 -0
- data/screen_test/components/list_with_active/t2b_position_middle.rb +17 -0
- data/screen_test/components/list_with_active/t2b_position_start.frame +1 -0
- data/screen_test/components/list_with_active/t2b_position_start.rb +17 -0
- data/screen_test/components/list_with_active/t2b_separator.frame +1 -0
- data/screen_test/components/list_with_active/t2b_separator.rb +18 -0
- data/screen_test/elements/box.frame +1 -1
- data/screen_test/elements/box.rb +1 -1
- data/screen_test/elements/graph_asc.frame +1 -0
- data/screen_test/elements/{graph.rb → graph_asc.rb} +1 -1
- data/screen_test/elements/graph_desc.frame +1 -0
- data/screen_test/elements/graph_desc.rb +12 -0
- data/screen_test/elements/graph_horiz.frame +1 -0
- data/screen_test/elements/graph_horiz.rb +12 -0
- data/screen_test/elements/graph_sin.frame +1 -0
- data/screen_test/elements/graph_sin.rb +12 -0
- data/screen_test/elements/grid.frame +1 -1
- data/screen_test/elements/grid.rb +1 -1
- data/screen_test/elements/screen_overflow_x.frame +1 -1
- data/screen_test/elements/screen_overflow_x.rb +1 -1
- data/screen_test/elements/screen_overflow_y.frame +1 -1
- data/screen_test/elements/screen_overflow_y.rb +1 -1
- data/screen_test/elements/text.frame +1 -1
- data/screen_test/elements/text.rb +1 -1
- data/screen_test/elements/text_multiline.frame +1 -1
- data/screen_test/elements/text_multiline.rb +1 -1
- data/screen_test/elements/theme.frame +1 -0
- data/screen_test/elements/theme.rb +26 -0
- data/screen_test/settings/align/box_around.frame +1 -1
- data/screen_test/settings/align/box_around.rb +1 -1
- data/screen_test/settings/align/box_between.frame +1 -1
- data/screen_test/settings/align/box_between.rb +1 -1
- data/screen_test/settings/align/box_center.frame +1 -1
- data/screen_test/settings/align/box_center.rb +1 -1
- data/screen_test/settings/align/box_default.frame +1 -1
- data/screen_test/settings/align/box_default.rb +1 -1
- data/screen_test/settings/align/box_evenly.frame +1 -1
- data/screen_test/settings/align/box_evenly.rb +1 -1
- data/screen_test/settings/align/box_left.frame +1 -1
- data/screen_test/settings/align/box_left.rb +1 -1
- data/screen_test/settings/align/box_right.frame +1 -1
- data/screen_test/settings/align/box_right.rb +1 -1
- data/screen_test/settings/align/children_center.frame +1 -1
- data/screen_test/settings/align/children_center.rb +1 -1
- data/screen_test/settings/align/children_left.frame +1 -1
- data/screen_test/settings/align/children_left.rb +1 -1
- data/screen_test/settings/align/children_right.frame +1 -1
- data/screen_test/settings/align/children_right.rb +1 -1
- data/screen_test/settings/align/grid_center.frame +1 -1
- data/screen_test/settings/align/grid_center.rb +1 -1
- data/screen_test/settings/align/grid_default.frame +1 -1
- data/screen_test/settings/align/grid_default.rb +1 -1
- data/screen_test/settings/align/grid_left.frame +1 -1
- data/screen_test/settings/align/grid_left.rb +1 -1
- data/screen_test/settings/align/grid_right.frame +1 -1
- data/screen_test/settings/align/grid_right.rb +1 -1
- data/screen_test/settings/ansi/bold.frame +1 -1
- data/screen_test/settings/ansi/bold.rb +1 -1
- data/screen_test/settings/ansi/color.frame +1 -1
- data/screen_test/settings/ansi/color.rb +1 -1
- data/screen_test/settings/ansi/underline.frame +1 -1
- data/screen_test/settings/ansi/underline.rb +1 -1
- data/screen_test/settings/border.frame +1 -1
- data/screen_test/settings/border.rb +1 -1
- data/screen_test/settings/content_start/box_bottom.frame +1 -0
- data/screen_test/settings/content_start/box_bottom.rb +17 -0
- data/screen_test/settings/content_start/box_left.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_left.rb +2 -2
- data/screen_test/settings/content_start/box_left_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_left_negative.rb +2 -2
- data/screen_test/settings/content_start/box_right.frame +1 -0
- data/screen_test/settings/content_start/box_right.rb +17 -0
- data/screen_test/settings/content_start/box_top.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_top.rb +2 -2
- data/screen_test/settings/content_start/box_top_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/box_top_negative.rb +2 -2
- data/screen_test/settings/content_start/grid_left.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_left.rb +2 -2
- data/screen_test/settings/content_start/grid_left_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_left_negative.rb +2 -2
- data/screen_test/settings/content_start/grid_top.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_top.rb +2 -2
- data/screen_test/settings/content_start/grid_top_negative.frame +1 -0
- data/screen_test/settings/{position → content_start}/grid_top_negative.rb +2 -2
- data/screen_test/settings/flow/box_b2t.frame +1 -1
- data/screen_test/settings/flow/box_b2t.rb +1 -1
- data/screen_test/settings/flow/box_l2r.frame +1 -1
- data/screen_test/settings/flow/box_l2r.rb +1 -1
- data/screen_test/settings/flow/box_r2l.frame +1 -1
- data/screen_test/settings/flow/box_r2l.rb +1 -1
- data/screen_test/settings/flow/box_t2b.frame +1 -1
- data/screen_test/settings/flow/box_t2b.rb +1 -1
- data/screen_test/settings/flow/grid_b2t.frame +1 -1
- data/screen_test/settings/flow/grid_b2t.rb +1 -1
- data/screen_test/settings/flow/grid_l2r.frame +1 -1
- data/screen_test/settings/flow/grid_l2r.rb +1 -1
- data/screen_test/settings/flow/grid_r2l.frame +1 -1
- data/screen_test/settings/flow/grid_r2l.rb +1 -1
- data/screen_test/settings/flow/grid_t2b.frame +1 -1
- data/screen_test/settings/flow/grid_t2b.rb +1 -1
- data/screen_test/settings/height/box.frame +1 -1
- data/screen_test/settings/height/box.rb +1 -1
- data/screen_test/settings/height/box_border_sizing.frame +1 -1
- data/screen_test/settings/height/box_border_sizing.rb +1 -1
- data/screen_test/settings/height/grid.frame +1 -1
- data/screen_test/settings/height/grid.rb +1 -1
- data/screen_test/settings/height/overflow_box.frame +1 -1
- data/screen_test/settings/height/overflow_box.rb +1 -1
- data/screen_test/settings/height/overflow_box_l2r.frame +1 -1
- data/screen_test/settings/height/overflow_box_l2r.rb +1 -1
- data/screen_test/settings/height/overflow_box_t2b.frame +1 -1
- data/screen_test/settings/height/overflow_box_t2b.rb +1 -1
- data/screen_test/settings/height/overflow_grid.frame +1 -1
- data/screen_test/settings/height/overflow_grid.rb +1 -1
- data/screen_test/settings/margin.frame +1 -1
- data/screen_test/settings/margin.rb +1 -1
- data/screen_test/settings/padding.frame +1 -1
- data/screen_test/settings/padding.rb +1 -1
- data/screen_test/settings/scroll/horiz_box.frame +1 -1
- data/screen_test/settings/scroll/horiz_box.rb +3 -5
- data/screen_test/settings/scroll/horiz_box_align_center.rb +3 -5
- data/screen_test/settings/scroll/horiz_box_align_right.rb +3 -5
- data/screen_test/settings/scroll/vert_box.frame +1 -1
- data/screen_test/settings/scroll/vert_box.rb +6 -8
- data/screen_test/settings/title_font.frame +1 -1
- data/screen_test/settings/title_font.rb +1 -1
- data/screen_test/settings/valign/box_around.frame +1 -1
- data/screen_test/settings/valign/box_around.rb +1 -1
- data/screen_test/settings/valign/box_between.frame +1 -1
- data/screen_test/settings/valign/box_between.rb +1 -1
- data/screen_test/settings/valign/box_bottom.frame +1 -1
- data/screen_test/settings/valign/box_bottom.rb +1 -1
- data/screen_test/settings/valign/box_default.frame +1 -1
- data/screen_test/settings/valign/box_default.rb +1 -1
- data/screen_test/settings/valign/box_evenly.frame +1 -1
- data/screen_test/settings/valign/box_evenly.rb +1 -1
- data/screen_test/settings/valign/box_middle.frame +1 -1
- data/screen_test/settings/valign/box_middle.rb +1 -1
- data/screen_test/settings/valign/box_top.frame +1 -1
- data/screen_test/settings/valign/box_top.rb +1 -1
- data/screen_test/settings/valign/grid_bottom.frame +1 -1
- data/screen_test/settings/valign/grid_bottom.rb +1 -1
- data/screen_test/settings/valign/grid_default.frame +1 -1
- data/screen_test/settings/valign/grid_default.rb +1 -1
- data/screen_test/settings/valign/grid_middle.frame +1 -1
- data/screen_test/settings/valign/grid_middle.rb +1 -1
- data/screen_test/settings/valign/grid_top.frame +1 -1
- data/screen_test/settings/valign/grid_top.rb +1 -1
- data/screen_test/settings/width/box_border_sizing.frame +1 -1
- data/screen_test/settings/width/box_border_sizing.rb +1 -1
- data/screen_test/settings/width/box_content.frame +1 -1
- data/screen_test/settings/width/box_content.rb +1 -1
- data/screen_test/settings/width/box_default.frame +1 -1
- data/screen_test/settings/width/box_default.rb +1 -1
- data/screen_test/settings/width/grid.frame +1 -1
- data/screen_test/settings/width/grid.rb +1 -1
- data/screen_test/settings/width/overflow_align_center.frame +1 -1
- data/screen_test/settings/width/overflow_align_center.rb +1 -1
- data/screen_test/settings/width/overflow_align_right.frame +1 -1
- data/screen_test/settings/width/overflow_align_right.rb +1 -1
- data/screen_test/settings/width/overflow_box.frame +1 -1
- data/screen_test/settings/width/overflow_box.rb +1 -1
- data/screen_test/settings/width/overflow_box_l2r.frame +1 -1
- data/screen_test/settings/width/overflow_box_l2r.rb +1 -1
- data/screen_test/settings/width/overflow_box_t2b.frame +1 -1
- data/screen_test/settings/width/overflow_box_t2b.rb +1 -1
- data/screen_test/settings/width/overflow_grid.frame +1 -1
- data/screen_test/settings/width/overflow_grid.rb +1 -1
- data/tools/whirled_peas/tools/screen_tester.rb +20 -3
- metadata +67 -22
- data/bin/easing +0 -33
- data/lib/whirled_peas/graphics/mock_screen.rb +0 -26
- data/screen_test/elements/graph.frame +0 -1
- data/screen_test/settings/position/box_left.frame +0 -1
- data/screen_test/settings/position/box_left_negative.frame +0 -1
- data/screen_test/settings/position/box_top.frame +0 -1
- data/screen_test/settings/position/box_top_negative.frame +0 -1
- data/screen_test/settings/position/grid_left.frame +0 -1
- data/screen_test/settings/position/grid_left_negative.frame +0 -1
- data/screen_test/settings/position/grid_top.frame +0 -1
- data/screen_test/settings/position/grid_top_negative.frame +0 -1
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'whirled_peas/utils/title_font'
|
2
|
+
|
3
|
+
require_relative 'bg_color'
|
4
|
+
require_relative 'border'
|
5
|
+
require_relative 'text_color'
|
6
|
+
|
7
|
+
module WhirledPeas
|
8
|
+
module Settings
|
9
|
+
class Theme
|
10
|
+
attr_reader :bg_color, :border_style, :color, :title_font
|
11
|
+
|
12
|
+
def axis_color=(value)
|
13
|
+
@axis_color = TextColor.validate!(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def axis_color
|
17
|
+
@axis_color || border_color
|
18
|
+
end
|
19
|
+
|
20
|
+
def bg_color=(value)
|
21
|
+
@bg_color = BgColor.validate!(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def border_color=(value)
|
25
|
+
@border_color = TextColor.validate!(value)
|
26
|
+
end
|
27
|
+
|
28
|
+
def border_color
|
29
|
+
@border_color || color
|
30
|
+
end
|
31
|
+
|
32
|
+
def border_style=(value)
|
33
|
+
@border_style = Border::Styles.validate!(value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def color=(value)
|
37
|
+
@color = TextColor.validate!(value)
|
38
|
+
end
|
39
|
+
|
40
|
+
def highlight_bg_color=(value)
|
41
|
+
@highlight_bg_color = BgColor.validate!(value)
|
42
|
+
end
|
43
|
+
|
44
|
+
def highlight_bg_color
|
45
|
+
@highlight_bg_color || color.as_bg_color
|
46
|
+
end
|
47
|
+
|
48
|
+
def highlight_color=(value)
|
49
|
+
@highlight_color = TextColor.validate!(value)
|
50
|
+
end
|
51
|
+
|
52
|
+
def highlight_color
|
53
|
+
@highlight_color || bg_color.as_text_color
|
54
|
+
end
|
55
|
+
|
56
|
+
def title_font=(value)
|
57
|
+
@title_font = Utils::TitleFont.validate!(value)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
require_relative 'theme'
|
4
|
+
|
5
|
+
module WhirledPeas
|
6
|
+
module Settings
|
7
|
+
module ThemeLibrary
|
8
|
+
CONFIG_FILE = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'data', 'themes.yaml')
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def theme_names
|
12
|
+
themes.keys
|
13
|
+
end
|
14
|
+
|
15
|
+
def add(name, theme)
|
16
|
+
themes[name] = theme
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(name)
|
20
|
+
unless themes.key?(name)
|
21
|
+
expected = themes.keys.map(&:inspect).join(', ')
|
22
|
+
raise ArgumentError, "Unknown theme: #{name.inspect}, expecting one of #{expected}"
|
23
|
+
end
|
24
|
+
themes[name]
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_name
|
28
|
+
themes.keys.first
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def themes
|
34
|
+
return @themes if @themes
|
35
|
+
@themes = {}
|
36
|
+
config = YAML.load_file(CONFIG_FILE)
|
37
|
+
config.each do |name, settings|
|
38
|
+
name = name.to_sym
|
39
|
+
theme = Theme.new
|
40
|
+
settings.each do |key, value|
|
41
|
+
case key
|
42
|
+
when 'axis_color'
|
43
|
+
theme.axis_color = value
|
44
|
+
when 'bg_color'
|
45
|
+
theme.bg_color = value
|
46
|
+
when 'border_color'
|
47
|
+
theme.border_color = value
|
48
|
+
when 'border_style'
|
49
|
+
theme.border_style = value
|
50
|
+
when 'color'
|
51
|
+
theme.color = value
|
52
|
+
when 'highlight_bg_color'
|
53
|
+
theme.highlight_bg_color = value
|
54
|
+
when 'highlight_color'
|
55
|
+
theme.highlight_color = value
|
56
|
+
when 'title_font'
|
57
|
+
theme.title_font = value
|
58
|
+
else
|
59
|
+
raise ArgumentError, "Unexpected theme setting: #{key} in #{CONFIG_FILE}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@themes[name] = theme
|
63
|
+
end
|
64
|
+
@themes
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -33,15 +33,17 @@ module WhirledPeas
|
|
33
33
|
unless width && height
|
34
34
|
width, height = HighLine.new.terminal.terminal_size
|
35
35
|
end
|
36
|
+
output.print cursor_visible(false)
|
37
|
+
output.flush
|
36
38
|
yield width, height
|
37
39
|
ensure
|
38
40
|
output.print clear
|
39
|
-
output.print cursor_pos(top: height - 1)
|
41
|
+
output.print cursor_pos(left: 0, top: height - 1)
|
40
42
|
output.print cursor_visible(true)
|
41
43
|
output.flush
|
42
44
|
end
|
43
45
|
|
44
|
-
def cursor_pos(top:
|
46
|
+
def cursor_pos(left:, top:)
|
45
47
|
"#{ESC}[#{top + 1};#{left + 1}H"
|
46
48
|
end
|
47
49
|
|
@@ -1,16 +1,19 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'zlib'
|
3
3
|
|
4
|
+
require 'whirled_peas/device/rendered_frame'
|
5
|
+
|
4
6
|
module WhirledPeas
|
5
7
|
module Utils
|
6
8
|
module FileHandler
|
7
9
|
module FileWriter
|
8
10
|
VERSION = '1'
|
9
11
|
|
10
|
-
def self.write(fp,
|
11
|
-
fp.puts
|
12
|
-
|
13
|
-
|
12
|
+
def self.write(fp, rendered_frames)
|
13
|
+
fp.puts rendered_frames.count
|
14
|
+
rendered_frames.each do |rendered_frame|
|
15
|
+
fp.puts rendered_frame.duration
|
16
|
+
encoded = Base64.encode64(rendered_frame.strokes)
|
14
17
|
fp.puts encoded.count("\n")
|
15
18
|
fp.puts encoded
|
16
19
|
end
|
@@ -20,10 +23,12 @@ module WhirledPeas
|
|
20
23
|
|
21
24
|
class FileReaderV1
|
22
25
|
def self.read(fp)
|
23
|
-
|
24
|
-
|
26
|
+
num_frames = Integer(fp.readline.chomp, 10)
|
27
|
+
num_frames.times.map do
|
28
|
+
duration = Float(fp.readline.chomp)
|
25
29
|
num_strokes = Integer(fp.readline.chomp, 10)
|
26
|
-
Base64.decode64(num_strokes.times.map { fp.readline }.join)
|
30
|
+
strokes = Base64.decode64(num_strokes.times.map { fp.readline }.join)
|
31
|
+
Device::RenderedFrame.new(strokes, duration)
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
@@ -38,10 +43,10 @@ module WhirledPeas
|
|
38
43
|
}
|
39
44
|
private_constant :READERS
|
40
45
|
|
41
|
-
def self.write(file,
|
46
|
+
def self.write(file, rendered_frames)
|
42
47
|
Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |gz|
|
43
48
|
gz.puts FileWriter::VERSION
|
44
|
-
FileWriter.write(gz,
|
49
|
+
FileWriter.write(gz, rendered_frames)
|
45
50
|
end
|
46
51
|
end
|
47
52
|
|
@@ -7,6 +7,8 @@ module WhirledPeas
|
|
7
7
|
new('')
|
8
8
|
end
|
9
9
|
|
10
|
+
attr_reader :formatting
|
11
|
+
|
10
12
|
def initialize(raw, formatting=nil)
|
11
13
|
@raw = raw
|
12
14
|
@formatting = [*formatting]
|
@@ -16,8 +18,8 @@ module WhirledPeas
|
|
16
18
|
raw.length
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
20
|
-
|
21
|
+
def each_char(&block)
|
22
|
+
raw.chars.each(&block)
|
21
23
|
end
|
22
24
|
|
23
25
|
def blank?
|
@@ -58,7 +60,7 @@ module WhirledPeas
|
|
58
60
|
|
59
61
|
private
|
60
62
|
|
61
|
-
attr_reader :raw
|
63
|
+
attr_reader :raw
|
62
64
|
end
|
63
65
|
end
|
64
66
|
end
|
data/lib/whirled_peas/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━━━━━━━━━┓ [0m[2;1H[97m[40m┃QRSTUVWXY[0m[30m[107mZ[0m[97m[40m┃ [0m[3;1H[97m[40m┃ ▄▄▄▄┃ [0m[4;1H[97m[40m┗━━━━━━━━━━┛ [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = ITEMS.size - 1
|
12
|
+
component.viewport_size = 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━━━━━━━━━┓ [0m[2;1H[97m[40m┃HIJKLM[0m[30m[107mN[0m[97m[40mOPQ┃ [0m[3;1H[97m[40m┃ ▗▄▄▄▖ ┃ [0m[4;1H[97m[40m┗━━━━━━━━━━┛ [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = ITEMS.length / 2
|
12
|
+
component.viewport_size = 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━━━━━━━━━┓ [0m[2;1H[97m[40m┃[0m[30m[107mA[0m[97m[40mBCDEFGHIJ┃ [0m[3;1H[97m[40m┃▄▄▄▄ ┃ [0m[4;1H[97m[40m┗━━━━━━━━━━┛ [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = 0
|
12
|
+
component.viewport_size = 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━━━━━━━━━┓ [0m[2;1H[97m[40m┃L, M, [0m[30m[107mN[0m[97m[40m, O┃ [0m[3;1H[97m[40m┃ ▗▄ ┃ [0m[4;1H[97m[40m┗━━━━━━━━━━┛ [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.items = ITEMS
|
11
|
+
component.active_index = ITEMS.length / 2
|
12
|
+
component.viewport_size = 10
|
13
|
+
component.separator = ', '
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━┓ [0m[2;1H[97m[40m┃Q ┃ [0m[3;1H[97m[40m┃R ┃ [0m[4;1H[97m[40m┃S ┃ [0m[5;1H[97m[40m┃T ┃ [0m[6;1H[97m[40m┃U ┃ [0m[7;1H[97m[40m┃V ┃ [0m[8;1H[97m[40m┃W▐┃ [0m[9;1H[97m[40m┃X▐┃ [0m[10;1H[97m[40m┃Y▐┃ [0m[11;1H[97m[40m┃[0m[30m[107mZ[0m[97m[40m▐┃ [0m[12;1H[97m[40m┗━━┛ [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.flow = :t2b
|
11
|
+
component.items = ITEMS
|
12
|
+
component.active_index = ITEMS.size - 1
|
13
|
+
component.viewport_size = 10
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━┓ [0m[2;1H[97m[40m┃H ┃ [0m[3;1H[97m[40m┃I ┃ [0m[4;1H[97m[40m┃J▗┃ [0m[5;1H[97m[40m┃K▐┃ [0m[6;1H[97m[40m┃L▐┃ [0m[7;1H[97m[40m┃M▐┃ [0m[8;1H[97m[40m┃[0m[30m[107mN[0m[97m[40m▝┃ [0m[9;1H[97m[40m┃O ┃ [0m[10;1H[97m[40m┃P ┃ [0m[11;1H[97m[40m┃Q ┃ [0m[12;1H[97m[40m┗━━┛ [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.flow = :t2b
|
11
|
+
component.items = ITEMS
|
12
|
+
component.active_index = ITEMS.length / 2
|
13
|
+
component.viewport_size = 10
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━┓ [0m[2;1H[97m[40m┃[0m[30m[107mA[0m[97m[40m▐┃ [0m[3;1H[97m[40m┃B▐┃ [0m[4;1H[97m[40m┃C▐┃ [0m[5;1H[97m[40m┃D▐┃ [0m[6;1H[97m[40m┃E ┃ [0m[7;1H[97m[40m┃F ┃ [0m[8;1H[97m[40m┃G ┃ [0m[9;1H[97m[40m┃H ┃ [0m[10;1H[97m[40m┃I ┃ [0m[11;1H[97m[40m┃J ┃ [0m[12;1H[97m[40m┗━━┛ [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.flow = :t2b
|
11
|
+
component.items = ITEMS
|
12
|
+
component.active_index = 0
|
13
|
+
component.viewport_size = 10
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┏━━┓ [0m[2;1H[97m[40m┃K ┃ [0m[3;1H[97m[40m┃- ┃ [0m[4;1H[97m[40m┃L ┃ [0m[5;1H[97m[40m┃- ┃ [0m[6;1H[97m[40m┃M▐┃ [0m[7;1H[97m[40m┃-▐┃ [0m[8;1H[97m[40m┃[0m[30m[107mN[0m[97m[40m ┃ [0m[9;1H[97m[40m┃- ┃ [0m[10;1H[97m[40m┃O ┃ [0m[11;1H[97m[40m┃- ┃ [0m[12;1H[97m[40m┗━━┛ [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
require 'whirled_peas/component/list_with_active'
|
3
|
+
|
4
|
+
class TemplateFactory
|
5
|
+
ITEMS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.chars
|
6
|
+
|
7
|
+
def build(*)
|
8
|
+
WhirledPeas.template(:test) do |composer, settings|
|
9
|
+
WhirledPeas.component(composer, settings, :list_with_active) do |component|
|
10
|
+
component.flow = :t2b
|
11
|
+
component.items = ITEMS
|
12
|
+
component.active_index = ITEMS.length / 2
|
13
|
+
component.viewport_size = 10
|
14
|
+
component.separator = '-'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
[?25l[1;1H[J[
|
1
|
+
[?25l[1;1H[J[97m[40mTOP LEFT TOP RIGHT [0m[2;1H[97m[40mBOTTOM LEFT BOTTOM RIGHT [0m[3;1H[97m[40m [0m[4;1H[97m[40m [0m[5;1H[97m[40m [0m[6;1H[97m[40m [0m[7;1H[97m[40m [0m[8;1H[97m[40m [0m[9;1H[97m[40m [0m[10;1H[97m[40m [0m[11;1H[97m[40m [0m[12;1H[97m[40m [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
data/screen_test/elements/box.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┃ █ [0m[2;1H[97m[40m┃ █ [0m[3;1H[97m[40m┃ █ [0m[4;1H[97m[40m┃ ▄▀ [0m[5;1H[97m[40m┃ █ [0m[6;1H[97m[40m┃ █ [0m[7;1H[97m[40m┃ █ [0m[8;1H[97m[40m┃ █ [0m[9;1H[97m[40m┃ █ [0m[10;1H[97m[40m┃ ▄▀ [0m[11;1H[97m[40m┃▄▄▀ [0m[12;1H[97m[40m┗━━━━━━━━━ [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[97m[40m┃ ▀▄ [0m[2;1H[97m[40m┃ ▀▄ [0m[3;1H[97m[40m┃ █ [0m[4;1H[97m[40m┃ █ [0m[5;1H[97m[40m┃ █ [0m[6;1H[97m[40m┃ █ [0m[7;1H[97m[40m┃ █ [0m[8;1H[97m[40m┃ ▀▄ [0m[9;1H[97m[40m┃ █ [0m[10;1H[97m[40m┃ █ [0m[11;1H[97m[40m┃ █ [0m[12;1H[97m[40m┗━━━━━━━━━ [0m[13;1H[97m[40m [0m[14;1H[97m[40m [0m[15;1H[97m[40m [0m[16;1H[97m[40m [0m[17;1H[97m[40m [0m[18;1H[97m[40m [0m[19;1H[97m[40m [0m[20;1H[97m[40m [0m[21;1H[97m[40m [0m[22;1H[97m[40m [0m[23;1H[97m[40m [0m[24;1H[97m[40m [0m[0m[24;1H[?25h
|