card-mod-bootstrap 0.11.6 → 0.13.1
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/db/migrate_core_cards/20180423160231_migrate_customized_bootstrap_skin.rb +1 -1
- data/db/migrate_core_cards/20200809112346_add_mod_card.rb +7 -0
- data/db/migrate_core_cards/20201129140917_remove_script_cards.rb +9 -0
- data/file/mod_bootstrap_script_bootstrap_machine_output/file.js +25 -0
- data/file/mod_bootstrap_script_pointer_machine_output/file.js +223 -0
- data/lib/card/bootstrap.rb +17 -0
- data/lib/card/bootstrap/basic_tags.rb +26 -0
- data/lib/card/bootstrap/component.rb +110 -0
- data/lib/card/bootstrap/component/carousel.rb +78 -0
- data/lib/card/bootstrap/component/form.rb +67 -0
- data/lib/card/bootstrap/component/horizontal_form.rb +65 -0
- data/lib/card/bootstrap/component/layout.rb +107 -0
- data/lib/card/bootstrap/component/panel.rb +11 -0
- data/lib/{bootstrap/component/component_class.rb → card/bootstrap/component_klass.rb} +5 -4
- data/lib/card/bootstrap/component_loader.rb +30 -0
- data/lib/card/bootstrap/content.rb +42 -0
- data/lib/card/bootstrap/delegate.rb +18 -0
- data/lib/card/bootstrap/old_component.rb +108 -0
- data/lib/card/bootstrap/tag_method.rb +56 -0
- data/lib/card/bootstrapper.rb +17 -0
- data/lib/card/tab.rb +8 -1
- data/lib/stylesheets/font_awesome.css +6 -6
- data/lib/stylesheets/material_icons.css +4 -4
- data/public/{assets/fonts → fonts}/MaterialIcons-Regular.eot +0 -0
- data/public/{assets/fonts → fonts}/MaterialIcons-Regular.ijmap +0 -0
- data/public/{assets/fonts → fonts}/MaterialIcons-Regular.svg +0 -0
- data/public/{assets/fonts → fonts}/MaterialIcons-Regular.ttf +0 -0
- data/public/{assets/fonts → fonts}/MaterialIcons-Regular.woff +0 -0
- data/public/{assets/fonts → fonts}/MaterialIcons-Regular.woff2 +0 -0
- data/public/{assets/fonts → fonts}/fa-brands-400.eot +0 -0
- data/public/{assets/fonts → fonts}/fa-brands-400.svg +0 -0
- data/public/{assets/fonts → fonts}/fa-brands-400.ttf +0 -0
- data/public/{assets/fonts → fonts}/fa-brands-400.woff +0 -0
- data/public/{assets/fonts → fonts}/fa-brands-400.woff2 +0 -0
- data/public/{assets/fonts → fonts}/fa-regular-400.eot +0 -0
- data/public/{assets/fonts → fonts}/fa-regular-400.svg +0 -0
- data/public/{assets/fonts → fonts}/fa-regular-400.ttf +0 -0
- data/public/{assets/fonts → fonts}/fa-regular-400.woff +0 -0
- data/public/{assets/fonts → fonts}/fa-regular-400.woff2 +0 -0
- data/public/{assets/fonts → fonts}/fa-solid-900.eot +0 -0
- data/public/{assets/fonts → fonts}/fa-solid-900.svg +0 -0
- data/public/{assets/fonts → fonts}/fa-solid-900.ttf +0 -0
- data/public/{assets/fonts → fonts}/fa-solid-900.woff +0 -0
- data/public/{assets/fonts → fonts}/fa-solid-900.woff2 +0 -0
- data/public/{assets/fonts → fonts}/glyphicons-halflings-regular.eot +0 -0
- data/public/{assets/fonts → fonts}/glyphicons-halflings-regular.svg +0 -0
- data/public/{assets/fonts → fonts}/glyphicons-halflings-regular.ttf +0 -0
- data/public/{assets/fonts → fonts}/glyphicons-halflings-regular.woff +0 -0
- data/public/{assets/fonts → fonts}/glyphicons-halflings-regular.woff2 +0 -0
- data/set/abstract/bootswatch_theme.rb +2 -2
- data/set/all/bootstrap/icon.rb +3 -1
- metadata +72 -58
- data/lib/bootstrap.rb +0 -18
- data/lib/bootstrap/basic_tags.rb +0 -26
- data/lib/bootstrap/component.rb +0 -108
- data/lib/bootstrap/component/carousel.rb +0 -76
- data/lib/bootstrap/component/form.rb +0 -65
- data/lib/bootstrap/component/horizontal_form.rb +0 -63
- data/lib/bootstrap/component/layout.rb +0 -105
- data/lib/bootstrap/component/panel.rb +0 -9
- data/lib/bootstrap/component_loader.rb +0 -28
- data/lib/bootstrap/content.rb +0 -40
- data/lib/bootstrap/delegate.rb +0 -16
- data/lib/bootstrap/old_component.rb +0 -103
- data/lib/bootstrap/tag_method.rb +0 -54
- data/lib/bootstrapper.rb +0 -16
- data/lib/javascript/bootstrap_modal_decko.js +0 -27
- data/lib/javascript/script_load_select2.js.coffee +0 -55
- data/set/self/script_bootstrap.rb +0 -12
- data/set/self/script_select2.rb +0 -12
@@ -0,0 +1,78 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
class Component
|
4
|
+
class Carousel < Component
|
5
|
+
def render_content
|
6
|
+
carousel(*@args, &@build_block)
|
7
|
+
end
|
8
|
+
|
9
|
+
def carousel id, active_index, &block
|
10
|
+
@id = id
|
11
|
+
@active_item_index = active_index
|
12
|
+
@items = []
|
13
|
+
instance_exec(&block)
|
14
|
+
|
15
|
+
@html.div class: "carousel slide", id: id, "data-ride" => "carousel" do
|
16
|
+
indicators
|
17
|
+
items
|
18
|
+
control_prev
|
19
|
+
control_next
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def item content=nil, &block
|
24
|
+
@items << (content || block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def items
|
28
|
+
@html.div class: "carousel-inner", role: "listbox" do
|
29
|
+
@items.each_with_index do |item, index|
|
30
|
+
carousel_item item, carousel_item_opts(index)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def carousel_item_opts index
|
36
|
+
{ class: "carousel-item" }.tap do |opts|
|
37
|
+
add_class opts, "active" if index == @active_item_index
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def carousel_item item, html_opts
|
42
|
+
@html.div html_opts do
|
43
|
+
item = item.call if item.respond_to?(:call)
|
44
|
+
@html << item if item.is_a?(String)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def control_prev
|
49
|
+
@html.a class: "carousel-control-prev", href: "##{@id}", role: "button",
|
50
|
+
"data-slide" => "prev" do
|
51
|
+
@html.span class: "carousel-control-prev-icon", "aria-hidden" => "true"
|
52
|
+
@html.span "Previous", class: "sr-only"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def control_next
|
57
|
+
@html.a class: "carousel-control-next", href: "##{@id}", role: "button",
|
58
|
+
"data-slide": "next" do
|
59
|
+
@html.span class: "carousel-control-next-icon", "aria-hidden" => "true"
|
60
|
+
@html.span "Next", class: "sr-only"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def indicators
|
65
|
+
@html.ol class: "carousel-indicators" do
|
66
|
+
@items.size.times { |i| indicator i }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def indicator index
|
71
|
+
html_opts = { "data-slide-to" => index, "data-target": "##{@id}" }
|
72
|
+
add_class html_opts, "active" if index == @active_item_index
|
73
|
+
@html.li html_opts
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
class Component
|
4
|
+
class Form < Component
|
5
|
+
def render_content *args
|
6
|
+
form(*args, &@build_block)
|
7
|
+
end
|
8
|
+
|
9
|
+
#
|
10
|
+
# def_tag_method :form, nil, optional_classes: {
|
11
|
+
# horizontal: "form-horizontal",
|
12
|
+
# inline: "form-inline"
|
13
|
+
# }
|
14
|
+
# def_div_method :group, "form-group"
|
15
|
+
# def_tag_method :label, nil
|
16
|
+
# def_tag_method :input, "form-control" do |opts, extra_args|
|
17
|
+
# type, label = extra_args
|
18
|
+
# prepend { label label, for: opts[:id] } if label
|
19
|
+
# opts[:type] = type
|
20
|
+
# opts
|
21
|
+
# end
|
22
|
+
|
23
|
+
def form opts={}, &block
|
24
|
+
add_class opts, "form-horizontal" if opts.delete(:horizontal)
|
25
|
+
add_class opts, "form-inline" if opts.delete(:inline)
|
26
|
+
@html.form opts do
|
27
|
+
instance_exec(&block)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def group text=nil, &block
|
32
|
+
@html.div text, class: "form-group" do
|
33
|
+
instance_exec(&block)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def label text=nil, &block
|
38
|
+
@html.label text, &block
|
39
|
+
end
|
40
|
+
|
41
|
+
def input type, text: nil, label: nil, id: nil
|
42
|
+
@html.input id: id, class: "form-control", type: type do
|
43
|
+
@html.label label, for: id if label
|
44
|
+
@html << text if text
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
%i[text password datetime datetime-local date month time
|
49
|
+
week number email url search tel color].each do |tag|
|
50
|
+
# def_tag_method tag, "form-control", attributes: { type: tag },
|
51
|
+
# tag: :input do |opts, extra_args|
|
52
|
+
# label, = extra_args
|
53
|
+
# prepend { label label, for: opts[:id] } if label
|
54
|
+
# opts
|
55
|
+
# end
|
56
|
+
|
57
|
+
define_method tag do |id:, label:, text: nil|
|
58
|
+
@html.input id: id, class: "form-control", type: tag do
|
59
|
+
@html.label label, for: id if label
|
60
|
+
@html << text
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
class Component
|
4
|
+
class HorizontalForm < Form
|
5
|
+
def left_col_width
|
6
|
+
@child_args.last && @child_args.last[0] || 2
|
7
|
+
end
|
8
|
+
|
9
|
+
def right_col_width
|
10
|
+
@child_args.last && @child_args.last[1] || 10
|
11
|
+
end
|
12
|
+
|
13
|
+
def_tag_method :form, "form-horizontal"
|
14
|
+
|
15
|
+
def_tag_method :label, "control-label" do |opts, _extra_args|
|
16
|
+
prepend_class opts, "col-sm-#{left_col_width}"
|
17
|
+
opts
|
18
|
+
end
|
19
|
+
|
20
|
+
# def_div_method :input, nil do |opts, extra_args, &block|
|
21
|
+
# type, label = extra_args
|
22
|
+
# prepend { tag(:label, nil, for: opts[:id]) { label } } if label
|
23
|
+
# insert { inner_input opts.merge(type: type) }
|
24
|
+
# { class: "col-sm-#{right_col_width}" }
|
25
|
+
# end
|
26
|
+
|
27
|
+
def label_col label, id:
|
28
|
+
@html.label label, for: id, class: "col-sm-#{left_col_width} control-label"
|
29
|
+
end
|
30
|
+
|
31
|
+
def input type, label:, id:
|
32
|
+
label_col label, id: id
|
33
|
+
@html.div class: "col-sm-#{right_col_width}" do
|
34
|
+
@html.input type: type, id: id, class: "form-control"
|
35
|
+
end
|
36
|
+
# block.call class: "col-sm-#{right_col_width}" do
|
37
|
+
# inner_input opts.merge(type: type)
|
38
|
+
# end
|
39
|
+
end
|
40
|
+
|
41
|
+
def_tag_method :inner_input, "form-control", tag: :input
|
42
|
+
def_div_method :inner_checkbox, "checkbox"
|
43
|
+
|
44
|
+
def_div_method :checkbox, nil do |opts, extra_args|
|
45
|
+
inner_checkbox do
|
46
|
+
label do
|
47
|
+
inner_input "checkbox", extra_args.first, opts
|
48
|
+
end
|
49
|
+
end
|
50
|
+
{ class: "col-sm-offset-#{left_col_width} col-sm-#{right_col_width}" }
|
51
|
+
end
|
52
|
+
|
53
|
+
def checkbox _text, _extra_args
|
54
|
+
@html.div class: "col-sm-offset-#{left_col_width} col-sm-#{right_col_width}" do
|
55
|
+
@html.div class: "checkbox" do
|
56
|
+
label_cllabel do
|
57
|
+
inner_input "checkbox"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
class Component
|
4
|
+
# generate bootstrap column layout
|
5
|
+
# @example
|
6
|
+
# layout container: true, fluid: true, class: "hidden" do
|
7
|
+
# row 6, 6, class: "unicorn" do
|
8
|
+
# column "horn",
|
9
|
+
# column "rainbow", class: "colorful"
|
10
|
+
# end
|
11
|
+
# end
|
12
|
+
# @example
|
13
|
+
# layout do
|
14
|
+
# row 3, 3, 4, 2, class: "unicorn" do
|
15
|
+
# [ "horn", "body", "tail", "rainbow"]
|
16
|
+
# end
|
17
|
+
# add_html "<span> some extra html</span>"
|
18
|
+
# row 6, 6, ["unicorn", "rainbow"], class: "horn"
|
19
|
+
# end
|
20
|
+
class Layout < OldComponent
|
21
|
+
def render
|
22
|
+
@rendered = begin
|
23
|
+
render_content
|
24
|
+
@content[-1]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def render_content
|
29
|
+
content = instance_exec(*@args, &@build_block)
|
30
|
+
add_content content
|
31
|
+
opts = @args.first
|
32
|
+
return unless opts&.delete(:container)
|
33
|
+
|
34
|
+
content = @content.pop
|
35
|
+
@content = ["".html_safe]
|
36
|
+
container content, opts
|
37
|
+
end
|
38
|
+
|
39
|
+
add_div_method :container, nil do |opts, _extra_args|
|
40
|
+
prepend_class opts, opts.delete(:fluid) ? "container-fluid" : "container"
|
41
|
+
opts
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param args column widths, column content and html attributes
|
45
|
+
# @example
|
46
|
+
# row 6, 6, ["col one", "col two"], class: "count", id: "count"
|
47
|
+
# @example
|
48
|
+
# row md: 12, xs: 8, "single column content"
|
49
|
+
# @example
|
50
|
+
# row md: [1, 11], xs: [2, 10] do
|
51
|
+
# col "A"
|
52
|
+
# col "B"
|
53
|
+
# end
|
54
|
+
add_div_method :row, "row", content_processor: :column do |opts, extra_args|
|
55
|
+
cols_content = extra_args.pop if extra_args.last.is_a? Array
|
56
|
+
[opts, col_widths(extra_args, opts), cols_content].compact
|
57
|
+
end
|
58
|
+
|
59
|
+
# default column width type is for medium devices (col-md-)
|
60
|
+
add_div_method :column, nil do |opts, _extra_args|
|
61
|
+
@child_args.last.each do |medium, size|
|
62
|
+
if medium == :xs
|
63
|
+
prepend_class opts, "col-#{size.shift}"
|
64
|
+
else
|
65
|
+
prepend_class opts, "col-#{medium}-#{size.shift}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
opts
|
69
|
+
end
|
70
|
+
|
71
|
+
alias_method :col, :column
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def standardize_row_args args
|
76
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
77
|
+
cols = (args.last.is_a?(Array) || args.last.is_a?(String)) &&
|
78
|
+
Array.wrap(args.pop)
|
79
|
+
[cols, opts, col_widths(args, opts)]
|
80
|
+
end
|
81
|
+
|
82
|
+
def col_widths args, opts
|
83
|
+
opts = args.pop if args.one? && args.last.is_a?(Hash)
|
84
|
+
if args.present?
|
85
|
+
col_widths_from_args args
|
86
|
+
else
|
87
|
+
col_widths_from_opts opts
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def col_widths_from_args args
|
92
|
+
raise Error, "bad argument" unless args.all? { |a| a.is_a? Integer }
|
93
|
+
|
94
|
+
{ md: Array.wrap(args) }
|
95
|
+
end
|
96
|
+
|
97
|
+
def col_widths_from_opts opts
|
98
|
+
%i[lg xs sm md].each_with_object({}) do |k, cols_w|
|
99
|
+
next unless (widths = opts.delete(k))
|
100
|
+
|
101
|
+
cols_w[k] = Array.wrap widths
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
class
|
2
|
-
class
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
3
|
# class methods for Bootstrap::Component
|
4
|
-
module
|
4
|
+
module ComponentKlass
|
5
5
|
def render format, *args, &block
|
6
6
|
new(format, *args, &block).render
|
7
7
|
end
|
@@ -26,7 +26,8 @@ class Bootstrap
|
|
26
26
|
def def_tag_method method_name, html_class, tag_opts={}, &tag_opts_block
|
27
27
|
tag = tag_opts.delete(:tag) || method_name
|
28
28
|
define_method method_name do |*args, &content_block|
|
29
|
-
@html.tag! tag,
|
29
|
+
@html.tag! tag,
|
30
|
+
tag_method_opts(args, html_class, tag_opts, &tag_opts_block) do
|
30
31
|
instance_exec(&content_block)
|
31
32
|
end
|
32
33
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
module ComponentLoader
|
4
|
+
def load_components
|
5
|
+
components.each do |component|
|
6
|
+
require_relative "component/#{component}"
|
7
|
+
include_component component
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def include_component component
|
12
|
+
component_class = to_const component.camelcase
|
13
|
+
define_method component do |*args, &block|
|
14
|
+
component_class.render self, *args, &block
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def components
|
19
|
+
path = File.expand_path "component/*.rb", __dir__
|
20
|
+
Dir.glob(path).map do |file|
|
21
|
+
File.basename file, ".rb"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_const name
|
26
|
+
self.class.const_get "::Card::Bootstrap::Component::#{name.camelcase}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
# shared methods for OldComponent and TagMethod
|
4
|
+
module Content
|
5
|
+
private
|
6
|
+
|
7
|
+
def process_collected_content tag_name, opts
|
8
|
+
collected_content = @content.pop
|
9
|
+
tag_name = opts.delete(:tag) if tag_name == :yield
|
10
|
+
add_content content_tag(tag_name, collected_content, opts, false)
|
11
|
+
end
|
12
|
+
|
13
|
+
def process_content &content_block
|
14
|
+
content, opts = yield
|
15
|
+
wrappers = @wrap.pop
|
16
|
+
if wrappers.present?
|
17
|
+
process_wrappers wrappers, content, &content_block
|
18
|
+
else
|
19
|
+
add_content content
|
20
|
+
end
|
21
|
+
opts
|
22
|
+
end
|
23
|
+
|
24
|
+
def process_append
|
25
|
+
@append.pop.each do |block|
|
26
|
+
add_content instance_exec(&block)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def process_wrappers wrappers, content, &content_block
|
31
|
+
while wrappers.present?
|
32
|
+
wrapper = wrappers.shift
|
33
|
+
if wrapper.is_a? Symbol
|
34
|
+
send wrapper, &content_block
|
35
|
+
else
|
36
|
+
instance_exec content, &wrappers.shift
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Card
|
2
|
+
class Bootstrap
|
3
|
+
module Delegate
|
4
|
+
def method_missing method_name, *args, &block
|
5
|
+
# return super unless @context.respond_to? method_name
|
6
|
+
if block_given?
|
7
|
+
@context.send(method_name, *args, &block)
|
8
|
+
else
|
9
|
+
@context.send(method_name, *args)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def respond_to_missing? method_name, _include_private=false
|
14
|
+
@context.respond_to? method_name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|