whirled_peas 0.2.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +38 -0
- data/Gemfile +1 -0
- data/README.md +275 -81
- data/Rakefile +38 -3
- data/examples/intro.rb +52 -0
- data/examples/scrolling.rb +53 -0
- data/exe/whirled_peas +7 -0
- data/lib/whirled_peas.rb +12 -42
- data/lib/whirled_peas/command_line.rb +255 -0
- data/lib/whirled_peas/config.rb +21 -0
- data/lib/whirled_peas/errors.rb +7 -0
- data/lib/whirled_peas/frame.rb +0 -8
- data/lib/whirled_peas/frame/consumer.rb +14 -50
- data/lib/whirled_peas/frame/debug_consumer.rb +30 -0
- data/lib/whirled_peas/frame/event_loop.rb +68 -38
- data/lib/whirled_peas/frame/producer.rb +36 -32
- data/lib/whirled_peas/graphics.rb +5 -0
- data/lib/whirled_peas/graphics/box_painter.rb +108 -0
- data/lib/whirled_peas/graphics/canvas.rb +107 -0
- data/lib/whirled_peas/graphics/composer.rb +80 -0
- data/lib/whirled_peas/graphics/container_coords.rb +71 -0
- data/lib/whirled_peas/graphics/container_dimensions.rb +75 -0
- data/lib/whirled_peas/graphics/container_painter.rb +234 -0
- data/lib/whirled_peas/graphics/debugger.rb +52 -0
- data/lib/whirled_peas/graphics/grid_painter.rb +68 -0
- data/lib/whirled_peas/graphics/mock_screen.rb +26 -0
- data/lib/whirled_peas/graphics/painter.rb +19 -0
- data/lib/whirled_peas/graphics/renderer.rb +21 -0
- data/lib/whirled_peas/graphics/screen.rb +70 -0
- data/lib/whirled_peas/graphics/text_dimensions.rb +15 -0
- data/lib/whirled_peas/graphics/text_painter.rb +40 -0
- data/lib/whirled_peas/settings.rb +5 -0
- data/lib/whirled_peas/settings/bg_color.rb +22 -0
- data/lib/whirled_peas/settings/border.rb +101 -0
- data/lib/whirled_peas/settings/box_settings.rb +8 -0
- data/lib/whirled_peas/settings/color.rb +69 -0
- data/lib/whirled_peas/settings/container_settings.rb +139 -0
- data/lib/whirled_peas/settings/debugger.rb +96 -0
- data/lib/whirled_peas/settings/display_flow.rb +25 -0
- data/lib/whirled_peas/settings/element_settings.rb +61 -0
- data/lib/whirled_peas/settings/grid_settings.rb +15 -0
- data/lib/whirled_peas/settings/margin.rb +8 -0
- data/lib/whirled_peas/settings/padding.rb +8 -0
- data/lib/whirled_peas/settings/position.rb +15 -0
- data/lib/whirled_peas/settings/scrollbar.rb +15 -0
- data/lib/whirled_peas/settings/spacing.rb +24 -0
- data/lib/whirled_peas/settings/text_align.rb +19 -0
- data/lib/whirled_peas/settings/text_color.rb +19 -0
- data/lib/whirled_peas/settings/text_settings.rb +15 -0
- data/lib/whirled_peas/utils.rb +5 -0
- data/lib/whirled_peas/utils/ansi.rb +53 -0
- data/lib/whirled_peas/utils/formatted_string.rb +64 -0
- data/lib/whirled_peas/utils/title_font.rb +75 -0
- data/lib/whirled_peas/version.rb +1 -1
- data/screen_test/rendered/elements/box.frame +1 -0
- data/screen_test/rendered/elements/box.rb +20 -0
- data/screen_test/rendered/elements/grid.frame +1 -0
- data/screen_test/rendered/elements/grid.rb +13 -0
- data/screen_test/rendered/elements/screen_overflow.frame +1 -0
- data/screen_test/rendered/elements/screen_overflow.rb +9 -0
- data/screen_test/rendered/elements/text.frame +1 -0
- data/screen_test/rendered/elements/text.rb +9 -0
- data/screen_test/rendered/elements/text_multiline.frame +1 -0
- data/screen_test/rendered/elements/text_multiline.rb +9 -0
- data/screen_test/rendered/settings/align/box.frame +1 -0
- data/screen_test/rendered/settings/align/box.rb +24 -0
- data/screen_test/rendered/settings/align/children_center.frame +1 -0
- data/screen_test/rendered/settings/align/children_center.rb +13 -0
- data/screen_test/rendered/settings/align/children_left.frame +1 -0
- data/screen_test/rendered/settings/align/children_left.rb +13 -0
- data/screen_test/rendered/settings/align/children_right.frame +1 -0
- data/screen_test/rendered/settings/align/children_right.rb +13 -0
- data/screen_test/rendered/settings/align/grid.frame +1 -0
- data/screen_test/rendered/settings/align/grid.rb +20 -0
- data/screen_test/rendered/settings/ansi/bold.frame +1 -0
- data/screen_test/rendered/settings/ansi/bold.rb +15 -0
- data/screen_test/rendered/settings/ansi/color.frame +1 -0
- data/screen_test/rendered/settings/ansi/color.rb +37 -0
- data/screen_test/rendered/settings/ansi/underline.frame +1 -0
- data/screen_test/rendered/settings/ansi/underline.rb +15 -0
- data/screen_test/rendered/settings/border.frame +1 -0
- data/screen_test/rendered/settings/border.rb +13 -0
- data/screen_test/rendered/settings/flow/box_b2t.frame +1 -0
- data/screen_test/rendered/settings/flow/box_b2t.rb +24 -0
- data/screen_test/rendered/settings/flow/box_l2r.frame +1 -0
- data/screen_test/rendered/settings/flow/box_l2r.rb +24 -0
- data/screen_test/rendered/settings/flow/box_r2l.frame +1 -0
- data/screen_test/rendered/settings/flow/box_r2l.rb +24 -0
- data/screen_test/rendered/settings/flow/box_t2b.frame +1 -0
- data/screen_test/rendered/settings/flow/box_t2b.rb +24 -0
- data/screen_test/rendered/settings/flow/grid_b2t.frame +1 -0
- data/screen_test/rendered/settings/flow/grid_b2t.rb +14 -0
- data/screen_test/rendered/settings/flow/grid_l2r.frame +1 -0
- data/screen_test/rendered/settings/flow/grid_l2r.rb +14 -0
- data/screen_test/rendered/settings/flow/grid_r2l.frame +1 -0
- data/screen_test/rendered/settings/flow/grid_r2l.rb +14 -0
- data/screen_test/rendered/settings/flow/grid_t2b.frame +1 -0
- data/screen_test/rendered/settings/flow/grid_t2b.rb +14 -0
- data/screen_test/rendered/settings/height/box.frame +1 -0
- data/screen_test/rendered/settings/height/box.rb +13 -0
- data/screen_test/rendered/settings/height/grid.frame +1 -0
- data/screen_test/rendered/settings/height/grid.rb +14 -0
- data/screen_test/rendered/settings/height/overflow_box.frame +1 -0
- data/screen_test/rendered/settings/height/overflow_box.rb +13 -0
- data/screen_test/rendered/settings/height/overflow_box_l2r.frame +1 -0
- data/screen_test/rendered/settings/height/overflow_box_l2r.rb +15 -0
- data/screen_test/rendered/settings/height/overflow_box_t2b.frame +1 -0
- data/screen_test/rendered/settings/height/overflow_box_t2b.rb +14 -0
- data/screen_test/rendered/settings/height/overflow_grid.frame +1 -0
- data/screen_test/rendered/settings/height/overflow_grid.rb +16 -0
- data/screen_test/rendered/settings/margin.frame +1 -0
- data/screen_test/rendered/settings/margin.rb +14 -0
- data/screen_test/rendered/settings/padding.frame +1 -0
- data/screen_test/rendered/settings/padding.rb +11 -0
- data/screen_test/rendered/settings/position/box_left.frame +1 -0
- data/screen_test/rendered/settings/position/box_left.rb +17 -0
- data/screen_test/rendered/settings/position/box_left_negative.frame +1 -0
- data/screen_test/rendered/settings/position/box_left_negative.rb +17 -0
- data/screen_test/rendered/settings/position/box_top.frame +1 -0
- data/screen_test/rendered/settings/position/box_top.rb +17 -0
- data/screen_test/rendered/settings/position/box_top_negative.frame +1 -0
- data/screen_test/rendered/settings/position/box_top_negative.rb +17 -0
- data/screen_test/rendered/settings/position/grid_left.frame +1 -0
- data/screen_test/rendered/settings/position/grid_left.rb +18 -0
- data/screen_test/rendered/settings/position/grid_left_negative.frame +1 -0
- data/screen_test/rendered/settings/position/grid_left_negative.rb +18 -0
- data/screen_test/rendered/settings/position/grid_top.frame +1 -0
- data/screen_test/rendered/settings/position/grid_top.rb +18 -0
- data/screen_test/rendered/settings/position/grid_top_negative.frame +1 -0
- data/screen_test/rendered/settings/position/grid_top_negative.rb +18 -0
- data/screen_test/rendered/settings/scroll/horiz_box.frame +1 -0
- data/screen_test/rendered/settings/scroll/horiz_box.rb +15 -0
- data/screen_test/rendered/settings/scroll/vert_box.frame +1 -0
- data/screen_test/rendered/settings/scroll/vert_box.rb +18 -0
- data/screen_test/rendered/settings/title_font.frame +1 -0
- data/screen_test/rendered/settings/title_font.rb +12 -0
- data/screen_test/rendered/settings/width/box.frame +1 -0
- data/screen_test/rendered/settings/width/box.rb +13 -0
- data/screen_test/rendered/settings/width/grid.frame +1 -0
- data/screen_test/rendered/settings/width/grid.rb +14 -0
- data/screen_test/rendered/settings/width/overflow_box.frame +1 -0
- data/screen_test/rendered/settings/width/overflow_box.rb +11 -0
- data/screen_test/rendered/settings/width/overflow_box_l2r.frame +1 -0
- data/screen_test/rendered/settings/width/overflow_box_l2r.rb +14 -0
- data/screen_test/rendered/settings/width/overflow_box_t2b.frame +1 -0
- data/screen_test/rendered/settings/width/overflow_box_t2b.rb +15 -0
- data/screen_test/rendered/settings/width/overflow_grid.frame +1 -0
- data/screen_test/rendered/settings/width/overflow_grid.rb +14 -0
- data/screen_test/screen_tester.rb +201 -0
- data/whirled_peas.gemspec +4 -2
- metadata +147 -20
- data/lib/whirled_peas/ui.rb +0 -7
- data/lib/whirled_peas/ui/ansi.rb +0 -154
- data/lib/whirled_peas/ui/canvas.rb +0 -35
- data/lib/whirled_peas/ui/element.rb +0 -225
- data/lib/whirled_peas/ui/painter.rb +0 -283
- data/lib/whirled_peas/ui/screen.rb +0 -62
- data/lib/whirled_peas/ui/settings.rb +0 -521
- data/lib/whirled_peas/ui/stroke.rb +0 -29
- data/sandbox/auto.rb +0 -13
- data/sandbox/box.rb +0 -19
- data/sandbox/grid.rb +0 -13
- data/sandbox/sandbox.rb +0 -17
- data/sandbox/text.rb +0 -33
@@ -0,0 +1,24 @@
|
|
1
|
+
module WhirledPeas
|
2
|
+
module Settings
|
3
|
+
class Spacing
|
4
|
+
attr_writer :left, :top, :right, :bottom
|
5
|
+
|
6
|
+
def left
|
7
|
+
@left || 0
|
8
|
+
end
|
9
|
+
|
10
|
+
def top
|
11
|
+
@top || 0
|
12
|
+
end
|
13
|
+
|
14
|
+
def right
|
15
|
+
@right || 0
|
16
|
+
end
|
17
|
+
|
18
|
+
def bottom
|
19
|
+
@bottom || 0
|
20
|
+
end
|
21
|
+
end
|
22
|
+
private_constant :Spacing
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module WhirledPeas
|
2
|
+
module Settings
|
3
|
+
module TextAlign
|
4
|
+
LEFT = :left
|
5
|
+
CENTER = :center
|
6
|
+
RIGHT = :right
|
7
|
+
|
8
|
+
def self.validate!(align)
|
9
|
+
return unless align
|
10
|
+
if [TextAlign::LEFT, TextAlign::CENTER, TextAlign::RIGHT].include?(align)
|
11
|
+
align
|
12
|
+
else
|
13
|
+
raise ArgumentError, "Unsupported text alignment: #{align}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
private_constant :TextAlign
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'whirled_peas/utils/ansi'
|
2
|
+
|
3
|
+
require_relative 'color'
|
4
|
+
|
5
|
+
module WhirledPeas
|
6
|
+
module Settings
|
7
|
+
class TextColor < Color
|
8
|
+
BLACK = new(Utils::Ansi::BLACK)
|
9
|
+
RED = new(Utils::Ansi::RED)
|
10
|
+
GREEN = new(Utils::Ansi::GREEN)
|
11
|
+
YELLOW = new(Utils::Ansi::YELLOW)
|
12
|
+
BLUE = new(Utils::Ansi::BLUE)
|
13
|
+
MAGENTA = new(Utils::Ansi::MAGENTA)
|
14
|
+
CYAN = new(Utils::Ansi::CYAN)
|
15
|
+
WHITE = new(Utils::Ansi::WHITE)
|
16
|
+
GRAY = BLACK.bright
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'whirled_peas/utils/title_font'
|
2
|
+
|
3
|
+
require_relative 'element_settings'
|
4
|
+
|
5
|
+
module WhirledPeas
|
6
|
+
module Settings
|
7
|
+
class TextSettings < ElementSettings
|
8
|
+
attr_reader :title_font
|
9
|
+
|
10
|
+
def title_font=(font)
|
11
|
+
@title_font = Utils::TitleFont.validate!(font)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module WhirledPeas
|
2
|
+
module Utils
|
3
|
+
# Helper module for working with ANSI escape codes. The most useful ANSI escape codes
|
4
|
+
# relate to text formatting.
|
5
|
+
#
|
6
|
+
# @see https://en.wikipedia.org/wiki/ANSI_escape_code
|
7
|
+
module Ansi
|
8
|
+
ESC = "\033"
|
9
|
+
|
10
|
+
END_FORMATTING = 0
|
11
|
+
private_constant :END_FORMATTING
|
12
|
+
|
13
|
+
# Text formatting constants
|
14
|
+
BOLD = 1
|
15
|
+
UNDERLINE = 4
|
16
|
+
|
17
|
+
# Text and background color constants
|
18
|
+
BLACK = 30
|
19
|
+
RED = 31
|
20
|
+
GREEN = 32
|
21
|
+
YELLOW = 33
|
22
|
+
BLUE = 34
|
23
|
+
MAGENTA = 35
|
24
|
+
CYAN = 36
|
25
|
+
WHITE = 37
|
26
|
+
|
27
|
+
# Bright colors are offset by this much from their standard versions
|
28
|
+
BRIGHT_OFFSET = 60
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def cursor_pos(top: 0, left: 0)
|
32
|
+
"#{ESC}[#{top + 1};#{left + 1}H"
|
33
|
+
end
|
34
|
+
|
35
|
+
def cursor_visible(visible)
|
36
|
+
visible ? "#{ESC}[?25h" : "#{ESC}[?25l"
|
37
|
+
end
|
38
|
+
|
39
|
+
def clear_down
|
40
|
+
"#{ESC}[J"
|
41
|
+
end
|
42
|
+
|
43
|
+
def clear
|
44
|
+
esc_seq(END_FORMATTING)
|
45
|
+
end
|
46
|
+
|
47
|
+
def esc_seq(code)
|
48
|
+
"#{ESC}[#{code}m"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require_relative 'ansi'
|
2
|
+
|
3
|
+
module WhirledPeas
|
4
|
+
module Utils
|
5
|
+
class FormattedString
|
6
|
+
def self.blank
|
7
|
+
new('')
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(raw, formatting=nil)
|
11
|
+
@raw = raw
|
12
|
+
@formatting = [*formatting]
|
13
|
+
end
|
14
|
+
|
15
|
+
def length
|
16
|
+
raw.length
|
17
|
+
end
|
18
|
+
|
19
|
+
def [](index_or_range)
|
20
|
+
self.class.new(raw[index_or_range], foramtting)
|
21
|
+
end
|
22
|
+
|
23
|
+
def blank?
|
24
|
+
raw.empty?
|
25
|
+
end
|
26
|
+
|
27
|
+
def hash
|
28
|
+
[raw, formatting].hash
|
29
|
+
end
|
30
|
+
|
31
|
+
def ==(other)
|
32
|
+
case other
|
33
|
+
when self.class
|
34
|
+
hash == other.hash
|
35
|
+
when String
|
36
|
+
formatting.empty? && raw == other
|
37
|
+
else
|
38
|
+
false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_s
|
43
|
+
if raw.empty? || formatting.length == 0
|
44
|
+
raw
|
45
|
+
else
|
46
|
+
start_formatting = formatting.map { |code| Ansi.esc_seq(code) }.join
|
47
|
+
"#{start_formatting}#{raw}#{Ansi.clear}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def inspect
|
52
|
+
if raw.empty? || formatting.length == 0
|
53
|
+
raw.inspect
|
54
|
+
else
|
55
|
+
"<#{formatting.join(', ')}>#{raw}<0>".inspect
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
attr_reader :raw, :formatting
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module WhirledPeas
|
2
|
+
module Utils
|
3
|
+
module TitleFont
|
4
|
+
PREFERRED_DEFAULT_FONT = :ansishadow
|
5
|
+
FONT_CACHE = File.join(ENV['HOME'] || '.', '.whirled_peas.fonts')
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def validate!(font_key)
|
9
|
+
return unless font_key
|
10
|
+
return font_key if fonts.key?(font_key)
|
11
|
+
allowed = fonts.keys.map(&:inspect).sort
|
12
|
+
message = "Unrecognized font: '#{font_key.inspect}', expecting one of #{allowed.join(', ')}"
|
13
|
+
raise ArgumentError, message
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s(string, font_key)
|
17
|
+
require 'ruby_figlet'
|
18
|
+
RubyFiglet::Figlet.new(string, fonts[font_key]).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def fonts
|
22
|
+
return @fonts if @fonts
|
23
|
+
File.exist?(FONT_CACHE) ? load_fonts_from_cache : load_fonts_from_figlet
|
24
|
+
@fonts
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_fonts_from_cache
|
28
|
+
require 'json'
|
29
|
+
@fonts = {}
|
30
|
+
File.open(FONT_CACHE, 'r') do |fp|
|
31
|
+
JSON.parse(fp.read).each do |key, value|
|
32
|
+
@fonts[key.to_sym] = value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
@fonts
|
36
|
+
end
|
37
|
+
|
38
|
+
def load_fonts_from_figlet
|
39
|
+
require 'ruby_figlet'
|
40
|
+
require 'json'
|
41
|
+
@fonts = {}
|
42
|
+
RubyFiglet::Figlet.available.strip.split("\n").each do |font|
|
43
|
+
# Load the font to be sure it exists on the system
|
44
|
+
next unless available?(font)
|
45
|
+
string_key = font.downcase.gsub(/\W/, '')
|
46
|
+
string_key = "_#{string_key}" if string_key[0] !~ /[a-z]/
|
47
|
+
string_key.gsub!(/\d+$/, '')
|
48
|
+
next if @fonts.key?(string_key)
|
49
|
+
@fonts[string_key.to_sym] = font
|
50
|
+
end
|
51
|
+
@fonts[:default] ||= @fonts[PREFERRED_DEFAULT_FONT] || @fonts.values.first
|
52
|
+
File.open(FONT_CACHE, 'w') { |fp| fp.write(JSON.generate(@fonts)) }
|
53
|
+
@fonts
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def available?(font)
|
59
|
+
# Figlet's font loader prints to STDOUT if the font file is not found.
|
60
|
+
# Temporarily redirect STDOUT to /dev/null while the font file is loaded
|
61
|
+
# then remove the redirect in an ensure block. Also, if a font file is
|
62
|
+
# not available, a SystemExit is raise :/
|
63
|
+
original_stdout = $stdout.clone
|
64
|
+
$stdout.reopen(File.new('/dev/null', 'w'))
|
65
|
+
RubyFiglet::Figlet.new('Text', font)
|
66
|
+
true
|
67
|
+
rescue SystemExit, NoMethodError
|
68
|
+
false
|
69
|
+
ensure
|
70
|
+
$stdout.reopen(original_stdout)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/whirled_peas/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1HTOP LEFT[2;1HBOTTOM LEFT[1;12H TOP RIGHT [2;12H BOTTOM RIGHT[0m[32;1H[?25h
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
|
3
|
+
class TemplateFactory
|
4
|
+
def build(*)
|
5
|
+
WhirledPeas.template do |composer|
|
6
|
+
composer.add_box('Container') do |composer, settings|
|
7
|
+
composer.add_box do |composer, settings|
|
8
|
+
settings.flow = :t2b
|
9
|
+
composer.add_box('TopLeft') { "TOP LEFT" }
|
10
|
+
composer.add_box('BottomLeft') { "BOTTOM LEFT" }
|
11
|
+
end
|
12
|
+
composer.add_box do |composer, settings|
|
13
|
+
settings.flow = :t2b
|
14
|
+
composer.add_box('TopRight') { " TOP RIGHT " }
|
15
|
+
composer.add_box('BottomRight') { " BOTTOM RIGHT" }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[37m┏━━━━━━┳━━━━━━┳━━━━━━┓[0m[2;1H[37m┃ ┃ ┃ ┃[0m[3;1H[37m┣━━━━━━╋━━━━━━╋━━━━━━┫[0m[4;1H[37m┃ ┃ ┃ ┃[0m[5;1H[37m┣━━━━━━╋━━━━━━╋━━━━━━┫[0m[6;1H[37m┃ ┃ ┃ ┃[0m[7;1H[37m┗━━━━━━┻━━━━━━┻━━━━━━┛[0m[2;2HItem 0[2;9HItem 1[2;16HItem 2[4;2HItem 3[4;9HItem 4[4;16HItem 5[6;2HItem 6[0m[32;1H[?25h
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H--------------------------------------------------------------------------------[0m[32;1H[?25h
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1HHello, World![0m[32;1H[?25h
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1HLine 1[2;1HLine 2[3;1HLine 3[0m[32;1H[?25h
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[37m┏━━━━━━━━━━━━━━━━━━━━━━┓[0m[2;1H[37m┃ ┃[0m[3;1H[37m┃ ┃[0m[4;1H[37m┗━━━━━━━━━━━━━━━━━━━━━━┛[0m[2;2HThis is an aligned box[3;2Hdefault[1;25H[37m┏━━━━━━━━━━━━━━━━━━━━━━┓[0m[2;25H[37m┃ ┃[0m[3;25H[37m┃ ┃[0m[4;25H[37m┗━━━━━━━━━━━━━━━━━━━━━━┛[0m[2;26HThis is an aligned box[3;26Hleft[5;1H[37m┏━━━━━━━━━━━━━━━━━━━━━━┓[0m[6;1H[37m┃ ┃[0m[7;1H[37m┃ ┃[0m[8;1H[37m┗━━━━━━━━━━━━━━━━━━━━━━┛[0m[6;2HThis is an aligned box[7;10Hcenter[5;25H[37m┏━━━━━━━━━━━━━━━━━━━━━━┓[0m[6;25H[37m┃ ┃[0m[7;25H[37m┃ ┃[0m[8;25H[37m┗━━━━━━━━━━━━━━━━━━━━━━┛[0m[6;26HThis is an aligned box[7;43Hright[0m[32;1H[?25h
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
|
3
|
+
class TemplateFactory
|
4
|
+
def build(*)
|
5
|
+
WhirledPeas.template do |composer|
|
6
|
+
composer.add_grid do |composer, settings|
|
7
|
+
settings.num_cols = 2
|
8
|
+
|
9
|
+
[nil, :left, :center, :right].each do |align|
|
10
|
+
composer.add_box("Alignment-#{align || :default}") do |composer, settings|
|
11
|
+
settings.flow = :t2b
|
12
|
+
settings.full_border
|
13
|
+
settings.align = align
|
14
|
+
# Keep the title long so grids below will be wide enough to use the
|
15
|
+
# alignment attribute. Don't rely on the `width` attribute to keep
|
16
|
+
# `align` isolated in this test.
|
17
|
+
composer.add_text('Title') { 'This is an aligned box' }
|
18
|
+
composer.add_text('Content') { align || :default }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[37m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓[0m[2;1H[37m┃ ┃[0m[3;1H[37m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛[0m[2;20HThing 1[2;27HThing 2[0m[32;1H[?25h
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
|
3
|
+
class TemplateFactory
|
4
|
+
def build(*)
|
5
|
+
WhirledPeas.template do |composer, settings|
|
6
|
+
settings.align = :center
|
7
|
+
settings.width = 50
|
8
|
+
settings.full_border
|
9
|
+
composer.add_text('Text1') { 'Thing 1' }
|
10
|
+
composer.add_text('Text2') { 'Thing 2' }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[?25l[1;1H[J[1;1H[37m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓[0m[2;1H[37m┃ ┃[0m[3;1H[37m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛[0m[2;2HThing 1[2;9HThing 2[0m[32;1H[?25h
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'whirled_peas'
|
2
|
+
|
3
|
+
class TemplateFactory
|
4
|
+
def build(*)
|
5
|
+
WhirledPeas.template do |composer, settings|
|
6
|
+
settings.align = :left
|
7
|
+
settings.width = 50
|
8
|
+
settings.full_border
|
9
|
+
composer.add_text('Text1') { 'Thing 1' }
|
10
|
+
composer.add_text('Text2') { 'Thing 2' }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|