organism-ui 0.2.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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +35 -0
- data/app/assets/config/ui_manifest.js +1 -0
- data/app/assets/stylesheets/ui/application.css +15 -0
- data/app/controllers/ui/application_controller.rb +7 -0
- data/app/controllers/ui/style_guide_controller.rb +8 -0
- data/app/helpers/ui/application_helper.rb +4 -0
- data/app/javascript/ui/application.js +1 -0
- data/app/jobs/ui/application_job.rb +4 -0
- data/app/mailers/ui/application_mailer.rb +6 -0
- data/app/models/ui/application_record.rb +5 -0
- data/app/views/ui/style_guide/show.html.erb +1035 -0
- data/config/routes.rb +3 -0
- data/lib/tasks/ui_tasks.rake +4 -0
- data/lib/ui.rb +64 -0
- data/lib/ui/actionable.rb +19 -0
- data/lib/ui/breadcrumbs.rb +31 -0
- data/lib/ui/breadcrumbs/breadcrumb.rb +36 -0
- data/lib/ui/breadcrumbs/crumb.rb +15 -0
- data/lib/ui/buttons/base.rb +146 -0
- data/lib/ui/buttons/primary.rb +11 -0
- data/lib/ui/buttons/secondary.rb +11 -0
- data/lib/ui/buttons/tertiary.rb +11 -0
- data/lib/ui/card.rb +36 -0
- data/lib/ui/card/show.erb +16 -0
- data/lib/ui/collapse.rb +24 -0
- data/lib/ui/collapse/panel.rb +37 -0
- data/lib/ui/collapse/panel/show.erb +16 -0
- data/lib/ui/component.rb +23 -0
- data/lib/ui/descriptive_list.rb +50 -0
- data/lib/ui/descriptive_list/item.rb +24 -0
- data/lib/ui/descriptive_list/show.erb +7 -0
- data/lib/ui/dropdown.rb +22 -0
- data/lib/ui/dropdown/show.erb +13 -0
- data/lib/ui/empty.rb +36 -0
- data/lib/ui/empty/show.erb +11 -0
- data/lib/ui/engine.rb +13 -0
- data/lib/ui/list.rb +77 -0
- data/lib/ui/list/item.rb +9 -0
- data/lib/ui/list/show.erb +5 -0
- data/lib/ui/menu.rb +29 -0
- data/lib/ui/menu/callable.rb +11 -0
- data/lib/ui/menu/item.rb +39 -0
- data/lib/ui/menu/show.erb +4 -0
- data/lib/ui/menu/submenu.rb +55 -0
- data/lib/ui/notification.rb +37 -0
- data/lib/ui/notification/show.erb +19 -0
- data/lib/ui/page_header.rb +29 -0
- data/lib/ui/page_header/show.erb +18 -0
- data/lib/ui/pagination.rb +105 -0
- data/lib/ui/pagination/page_link.rb +24 -0
- data/lib/ui/pagination/show.erb +11 -0
- data/lib/ui/pagination/window.rb +85 -0
- data/lib/ui/step.rb +57 -0
- data/lib/ui/step/show.erb +13 -0
- data/lib/ui/steps.rb +67 -0
- data/lib/ui/steps/show.erb +5 -0
- data/lib/ui/stylable.rb +21 -0
- data/lib/ui/table.rb +162 -0
- data/lib/ui/table/header.rb +20 -0
- data/lib/ui/table/row.rb +25 -0
- data/lib/ui/table/select.rb +16 -0
- data/lib/ui/table/select/many.rb +38 -0
- data/lib/ui/table/select/one.rb +38 -0
- data/lib/ui/table/select_all.rb +36 -0
- data/lib/ui/table/show.erb +5 -0
- data/lib/ui/table/sort.rb +19 -0
- data/lib/ui/tooltip.rb +35 -0
- data/lib/ui/tooltip/show.erb +14 -0
- data/lib/ui/types.rb +7 -0
- data/lib/ui/value.rb +4 -0
- data/lib/ui/version.rb +3 -0
- data/lib/ui/wizard.rb +87 -0
- data/lib/ui/wizard/content.rb +20 -0
- data/lib/ui/wizard/show.erb +10 -0
- metadata +265 -0
data/lib/ui/steps.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Ui
|
2
|
+
class Steps < Component
|
3
|
+
include Stylable
|
4
|
+
|
5
|
+
class Step < Value
|
6
|
+
attribute :position, Types::Strict::Integer
|
7
|
+
attribute :title, Types::Strict::String
|
8
|
+
attribute? :icon, Types::Strict::String.default(''.freeze)
|
9
|
+
attribute? :current, Types::Strict::Bool.default(false.freeze)
|
10
|
+
attribute? :last, Types::Strict::Bool.default(false.freeze)
|
11
|
+
attribute? :description, Types::Strict::String.default(''.freeze)
|
12
|
+
attribute? :subtitle, Types::Strict::String.default(''.freeze)
|
13
|
+
attribute? :status, Types::String.default('waiting'.freeze).enum(
|
14
|
+
'finished',
|
15
|
+
'processing',
|
16
|
+
'waiting',
|
17
|
+
'error'
|
18
|
+
)
|
19
|
+
|
20
|
+
def last?
|
21
|
+
last
|
22
|
+
end
|
23
|
+
|
24
|
+
def current?
|
25
|
+
current
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def show
|
30
|
+
render
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def render_steps
|
36
|
+
cell(
|
37
|
+
Ui::Step,
|
38
|
+
collection: steps,
|
39
|
+
current_step: current_step
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def steps
|
44
|
+
model.map.with_index do |step, index|
|
45
|
+
Step.new(step.merge({
|
46
|
+
current: current_step == index + 1,
|
47
|
+
last: model.size == index + 1,
|
48
|
+
position: index + 1
|
49
|
+
}))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def component_style
|
54
|
+
["ui-steps"].tap do |styles|
|
55
|
+
styles << "ui-steps--#{direction}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def current_step
|
60
|
+
options.fetch(:current_step, 1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def direction
|
64
|
+
options.fetch(:direction, 'horizontal')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/ui/stylable.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Ui
|
2
|
+
module Stylable
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def user_defined_style
|
7
|
+
options.fetch(:style, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
def style
|
11
|
+
[
|
12
|
+
user_defined_style,
|
13
|
+
component_style
|
14
|
+
].join(' ')
|
15
|
+
end
|
16
|
+
|
17
|
+
def component_style
|
18
|
+
raise NotImplementedError
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/ui/table.rb
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
require "ui/table/header"
|
2
|
+
require "ui/table/row"
|
3
|
+
|
4
|
+
module Ui
|
5
|
+
class Table < Component
|
6
|
+
include Actionable
|
7
|
+
include Stylable
|
8
|
+
|
9
|
+
def show
|
10
|
+
render
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def table
|
16
|
+
content_tag(:table, data: table_data_attributes) do
|
17
|
+
render_group([
|
18
|
+
content_tag(:thead, table_headers),
|
19
|
+
content_tag(:tbody, table_rows, data: table_body_data_attributes)
|
20
|
+
])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def table_headers
|
25
|
+
content_tag(:tr) do
|
26
|
+
cell(
|
27
|
+
Ui::Table::Header,
|
28
|
+
collection: columns
|
29
|
+
).()
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def table_rows
|
34
|
+
if rows.any?
|
35
|
+
cell(
|
36
|
+
Ui::Table::Row,
|
37
|
+
collection: rows,
|
38
|
+
columns: columns
|
39
|
+
)
|
40
|
+
else
|
41
|
+
render_empty
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def table_data_attributes
|
46
|
+
{
|
47
|
+
controller: table_controllers,
|
48
|
+
"selectable-selected-value": "[]",
|
49
|
+
"selectable-type-value": multi_select? ? 'many' : 'one'
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
def table_body_data_attributes
|
54
|
+
{
|
55
|
+
controller: table_body_controllers,
|
56
|
+
"sortable-update-url-value": sortable_options.fetch(:update_url, '#'),
|
57
|
+
"sortable-input-name-value": sortable_options.fetch(:input_name, "object[position]")
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def table_controllers
|
62
|
+
[].tap do |array|
|
63
|
+
array << "selectable" if selectable?
|
64
|
+
end.join(' ')
|
65
|
+
end
|
66
|
+
|
67
|
+
def table_body_controllers
|
68
|
+
[].tap do |array|
|
69
|
+
array << "sortable" if sortable?
|
70
|
+
end.join(' ')
|
71
|
+
end
|
72
|
+
|
73
|
+
def header
|
74
|
+
content_tag(
|
75
|
+
:header,
|
76
|
+
render_group([
|
77
|
+
options[:header],
|
78
|
+
actions
|
79
|
+
])
|
80
|
+
) if options[:header] || has_actions?
|
81
|
+
end
|
82
|
+
|
83
|
+
def footer
|
84
|
+
content_tag(
|
85
|
+
:footer,
|
86
|
+
options[:footer]
|
87
|
+
) if options[:footer]
|
88
|
+
end
|
89
|
+
|
90
|
+
def component_style
|
91
|
+
"ui-table"
|
92
|
+
end
|
93
|
+
|
94
|
+
def columns
|
95
|
+
@columns ||= options.fetch(:columns, Array.new).tap do |columns|
|
96
|
+
columns.unshift(selectable_column) if selectable?
|
97
|
+
columns.unshift(sortable_column) if sortable?
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def selectable_column
|
102
|
+
[
|
103
|
+
->() { select_all },
|
104
|
+
->(data) { cell(Ui::Table::Select, data, selectable_options) }
|
105
|
+
]
|
106
|
+
end
|
107
|
+
|
108
|
+
def sortable_column
|
109
|
+
[
|
110
|
+
->() { nil },
|
111
|
+
->(data) { cell(Ui::Table::Sort, data, sortable_options) }
|
112
|
+
]
|
113
|
+
end
|
114
|
+
|
115
|
+
def selectable?
|
116
|
+
features.keys.include? :selectable
|
117
|
+
end
|
118
|
+
|
119
|
+
def sortable?
|
120
|
+
features.keys.include? :sortable
|
121
|
+
end
|
122
|
+
|
123
|
+
def select_all
|
124
|
+
cell(Ui::Table::SelectAll, nil) if multi_select?
|
125
|
+
end
|
126
|
+
|
127
|
+
def multi_select?
|
128
|
+
selectable_options.fetch(:multiple, false)
|
129
|
+
end
|
130
|
+
|
131
|
+
def selectable_options
|
132
|
+
features.fetch(:selectable, {})
|
133
|
+
end
|
134
|
+
|
135
|
+
def sortable_options
|
136
|
+
features.fetch(:sortable, {})
|
137
|
+
end
|
138
|
+
|
139
|
+
def features
|
140
|
+
options.fetch(:features, Hash.new)
|
141
|
+
end
|
142
|
+
|
143
|
+
def rows
|
144
|
+
model
|
145
|
+
end
|
146
|
+
|
147
|
+
def render_empty
|
148
|
+
content_tag(:tr, empty)
|
149
|
+
end
|
150
|
+
|
151
|
+
def empty
|
152
|
+
content_tag(
|
153
|
+
:td,
|
154
|
+
cell(
|
155
|
+
Ui::Empty,
|
156
|
+
nil,
|
157
|
+
).(),
|
158
|
+
colspan: columns.size
|
159
|
+
)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Ui
|
2
|
+
class Table < Component
|
3
|
+
class Header < Component
|
4
|
+
def show
|
5
|
+
content_tag(:th, title)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def title
|
11
|
+
case
|
12
|
+
when model[0].is_a?(Proc)
|
13
|
+
model[0].call
|
14
|
+
else
|
15
|
+
model[0]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/ui/table/row.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Ui
|
2
|
+
class Table < Component
|
3
|
+
class Row < Component
|
4
|
+
def show
|
5
|
+
content_tag(:tr, render_group(table_data))
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def table_data
|
11
|
+
columns.map do |column|
|
12
|
+
content_tag(:td, apply(column))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def apply(column)
|
17
|
+
column[1].call(model)
|
18
|
+
end
|
19
|
+
|
20
|
+
def columns
|
21
|
+
options.fetch(:columns, Array.new)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "ui/table/select/one"
|
2
|
+
require "ui/table/select/many"
|
3
|
+
|
4
|
+
module Ui
|
5
|
+
class Table < Component
|
6
|
+
class Select < Component
|
7
|
+
include ::Cell::Builder
|
8
|
+
|
9
|
+
builds do |model, options|
|
10
|
+
options.fetch(:multiple, false) ?
|
11
|
+
Ui::Table::Select::Many :
|
12
|
+
Ui::Table::Select::One
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ui
|
2
|
+
class Table < Component
|
3
|
+
class Select < Component
|
4
|
+
class Many < Component
|
5
|
+
def show
|
6
|
+
check_box_tag(
|
7
|
+
name,
|
8
|
+
value,
|
9
|
+
selected,
|
10
|
+
disabled: disabled,
|
11
|
+
data: {
|
12
|
+
"selectable-target": "input",
|
13
|
+
action: "click->selectable#select"
|
14
|
+
}
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def name
|
21
|
+
"row[selected]"
|
22
|
+
end
|
23
|
+
|
24
|
+
def value
|
25
|
+
model
|
26
|
+
end
|
27
|
+
|
28
|
+
def selected
|
29
|
+
options.fetch(:selected, false)
|
30
|
+
end
|
31
|
+
|
32
|
+
def disabled
|
33
|
+
options.fetch(:disabled, false)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ui
|
2
|
+
class Table < Component
|
3
|
+
class Select < Component
|
4
|
+
class One < Component
|
5
|
+
def show
|
6
|
+
radio_button_tag(
|
7
|
+
name,
|
8
|
+
value,
|
9
|
+
selected,
|
10
|
+
disabled: disabled,
|
11
|
+
data: {
|
12
|
+
"selectable-target": "input",
|
13
|
+
action: "click->selectable#select"
|
14
|
+
}
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def name
|
21
|
+
"row[selected]"
|
22
|
+
end
|
23
|
+
|
24
|
+
def value
|
25
|
+
model
|
26
|
+
end
|
27
|
+
|
28
|
+
def selected
|
29
|
+
options.fetch(:selected, false)
|
30
|
+
end
|
31
|
+
|
32
|
+
def disabled
|
33
|
+
options.fetch(:disabled, false)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Ui
|
2
|
+
class Table < Component
|
3
|
+
class SelectAll < Component
|
4
|
+
def show
|
5
|
+
check_box_tag(
|
6
|
+
name,
|
7
|
+
value,
|
8
|
+
selected,
|
9
|
+
disabled: disabled,
|
10
|
+
data: {
|
11
|
+
"selectable-target": "selectAll",
|
12
|
+
action: "click->selectable#selectAll"
|
13
|
+
}
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def name
|
20
|
+
"row[selected]"
|
21
|
+
end
|
22
|
+
|
23
|
+
def value
|
24
|
+
""
|
25
|
+
end
|
26
|
+
|
27
|
+
def selected
|
28
|
+
options.fetch(:selected, false)
|
29
|
+
end
|
30
|
+
|
31
|
+
def disabled
|
32
|
+
options.fetch(:disabled, false)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|