zutils 3.0.5 → 4.0.0

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.
@@ -6,47 +6,58 @@
6
6
  <% back_link ||= false %>
7
7
  <% card_color ||= 'primary' %>
8
8
  <% show_columns ||= [] %>
9
+
9
10
  <% form_fields ||= (object.class.respond_to?('form_fields') ? object.class.form_fields : {}) %>
10
11
  <% form_ordered_fields ||= (form_fields.empty? ? object.class.column_names : form_fields.keys) %>
12
+
11
13
  <% if show_columns.empty? %>
12
14
  <% show_columns = form_ordered_fields - ['id', 'created_at', 'updated_at', 'deleted_at'] - excluded_columns + additional_columns %>
13
15
  <% end %>
16
+
14
17
  <%= simple_form_for(nested_resource ? [parent_resource, object] : object) do |f| %>
15
- <div class="card card-outline card-<%= card_color %>">
16
- <div class="card-header">
17
- <h3 class="card-title">
18
- <i class="fa-fw <%= object.class.icon %>"></i>
18
+ <div class="card border-0 border-top border-4 border-<%= card_color %> shadow-sm">
19
+ <div class="card-header bg-body-tertiary border-0">
20
+ <h5 class="mb-0 fw-semibold">
21
+ <i class="<%= object.class.icon %> me-2"></i>
19
22
  Dados do <%= object.class.model_name.human %>
20
- </h3>
23
+ </h5>
21
24
  </div>
25
+
22
26
  <div class="card-body">
23
- <%= render 'shared/fields', object: object, f: f,
27
+ <%= render 'shared/fields',
28
+ object: object,
29
+ f: f,
24
30
  excluded_columns: excluded_columns,
25
- additional_columns: additional_columns,
31
+ additional_columns: additional_columns,
26
32
  restricted_columns: restricted_columns,
27
- show_columns: show_columns
28
- %>
33
+ show_columns: show_columns %>
29
34
  </div>
30
- <div class="card-footer text-right">
31
- <% if back_link %>
32
- <%= link_to 'Cancelar', "javascript:history.back()", class: "btn" %>
35
+ </div>
36
+
37
+ <div class="d-flex justify-content-end align-items-center gap-2 mt-3">
38
+ <% if back_link %>
39
+ <%= link_to "javascript:history.back()",
40
+ class: "btn" do %>
41
+ Cancelar
42
+ <% end %>
43
+ <% else %>
44
+ <% if parent_resource %>
45
+ <%= link_to eval_with_rescue("#{parent_resource.class.model_name.to_s.downcase}_#{controller_name}_path(#{parent_resource.id})"),
46
+ class: "btn" do %>
47
+ Cancelar
48
+ <% end %>
33
49
  <% else %>
34
- <% if parent_resource %>
35
- <%= link_to eval_with_rescue("#{parent_resource.class.model_name.to_s.downcase}_#{controller_name}_path(#{parent_resource.id})"), class: "btn" do %>
36
- Cancelar
37
- <i class="fa fa-cancel fa-fw"></i>
38
- <% end %>
39
- <% else %>
40
- <%= link_to eval_with_rescue("#{controller_name}_path"), class: "btn" do %>
41
- Cancelar
42
- <i class="fa fa-cancel fa-fw"></i>
43
- <% end %>
50
+ <%= link_to eval_with_rescue("#{controller_name}_path"),
51
+ class: "btn" do %>
52
+ Cancelar
44
53
  <% end %>
45
54
  <% end %>
46
- <%= button_tag type: :submit, class: "btn btn-#{card_color}" do %>
47
- Salvar
48
- <i class="fa fa-fw fa-save"></i>
49
- <% end %>
50
- </div>
55
+ <% end %>
56
+
57
+ <%= button_tag type: :submit,
58
+ class: "btn btn-#{card_color}" do %>
59
+ <i class="fa fa-save me-1"></i>
60
+ Salvar
61
+ <% end %>
51
62
  </div>
52
63
  <% end %>
@@ -1,61 +1,85 @@
1
1
  <% exceptions ||= ['created_at', 'updated_at', 'deleted_at'] %>
2
2
  <% sort_fields ||= [] %>
3
3
  <% sort_all ||= false %>
4
- <% nested_resource ||= false %>
5
4
  <% excluded_columns ||= [] %>
6
5
  <% show_columns ||= [] %>
7
6
  <% additional_columns ||= [] %>
8
7
  <% additional_actions ||= [] %>
9
- <% card_color ||= 'danger' %>
10
- <% table_class ||= 'bootstrap-table' %>
11
-
8
+ <% card_color ||= 'primary' %>
9
+ <% card_class ||= "card-#{card_color}" %>
10
+ <% card_margin ||= '' %>
11
+ <% table_class ||= 'table table-striped align-middle bootstrap-table' %>
12
12
  <% hide ||= %w[new back delete_right] %>
13
- <% size ||= "xs" %>
13
+ <% size ||= "sm" %>
14
14
  <% controller ||= "bootstrap-table" %>
15
-
16
15
  <% hide_actions ||= false %>
16
+ <% show_new ||= !hide.include?('header_new') %>
17
+ <% pagy ||= @pagy %>
17
18
 
18
- <div class="card card-outline card-<%= card_color %>" data-controller="<%= controller %>">
19
+ <% if show_columns.empty? %>
20
+ <% show_columns = list.klass.column_names - exceptions - excluded_columns + additional_columns %>
21
+ <% end %>
22
+
23
+ <div
24
+ class="card card-outline shadow-sm <%= card_class %> <%= card_margin %>"
25
+ data-controller="<%= controller %>"
26
+ >
19
27
  <% unless hide.include? 'header' %>
20
- <div class="card-header with-border">
21
- <h3 class="card-title">
22
- <strong>
23
- <i class="<%= list.klass.icon %>"></i>
24
- Listagem de
25
- <%= list.klass.model_name.human.pluralize %>
26
- </strong>
27
- <% unless hide.include? "header_new" %>
28
- <%= link_to eval("new_#{list.klass.model_name.singular}_path"), class: "btn btn-xs btn-#{card_color}" do %>
29
- Cadastar <i class="fa fa-plus"></i>
28
+ <div class="card-header border-0 bg-body-tertiary">
29
+ <div class="d-flex justify-content-between align-items-start flex-wrap gap-2">
30
+ <div>
31
+ <h5 class="mb-1">
32
+ <strong>
33
+ <i class="<%= list.klass.icon %>"></i>
34
+ Listagem de <%= list.klass.model_name.human.pluralize %>
35
+ </strong>
36
+ </h5>
37
+
38
+ <div class="text-muted small">
39
+ <% if defined?(Kaminari) %>
40
+ <%= page_entries_info list, entry_name: '' %>
41
+ <% end %>
42
+ <% if pagy && defined?(Pagy) %>
43
+ <%== pagy_info pagy %>
44
+ <% end %>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="d-flex align-items-center gap-2 flex-wrap">
49
+ <% if block_given? %>
50
+ <%= yield %>
51
+ <% end %>
52
+
53
+ <% if show_new && !hide.include?('new') && can?(:new, list.klass) %>
54
+ <%= link_to eval("new_#{list.klass.model_name.singular}_path"),
55
+ class: "btn btn-sm btn-#{card_color}" do %>
56
+ <i class="fa fa-plus"></i>
57
+ <span class="d-none d-md-inline"> Cadastrar </span>
58
+ <% end %>
30
59
  <% end %>
31
- <% end %>
32
- <% if block_given? %>
33
- <%= yield %>
34
- <% end %>
35
- <div class="text-muted text-xs">
36
- <%= page_entries_info list, entry_name: '' %>
37
60
  </div>
38
- </h3>
39
- <div class='card-tools'>
40
- <%= paginate list, window: 1 %>
41
61
  </div>
42
62
  </div>
43
63
  <% end %>
44
- <%= render 'shared/list', list: list, exceptions: exceptions, excluded_columns: excluded_columns,
45
- additional_columns: additional_columns, sort_fields: sort_fields, sort_all: sort_all,
46
- additional_actions: additional_actions, hide_actions: hide_actions, table_class: table_class,
47
- show_columns: show_columns, hide: hide, size: size, card_color: card_color, controller: controller
48
- %>
49
- </div>
50
- <div class="row">
51
- <div class="col" >
52
- <div class="text-muted text-xs">
53
- <%= page_entries_info list, entry_name: '' %>
54
- </div>
55
- </div>
56
- <div class="col">
57
- <div class="float-right">
58
- <%= paginate list, window: 1 %>
59
- </div>
64
+
65
+ <div class="card-body p-1">
66
+ <%= render 'shared/list',
67
+ list: list,
68
+ show_columns: show_columns,
69
+ exceptions: exceptions,
70
+ excluded_columns: excluded_columns,
71
+ additional_columns: additional_columns,
72
+ additional_actions: additional_actions,
73
+ sort_all: sort_all,
74
+ sort_fields: sort_fields,
75
+ hide: hide,
76
+ size: size,
77
+ card_color: card_color,
78
+ table_class: table_class,
79
+ hide_actions: hide_actions %>
60
80
  </div>
61
- </div>
81
+ </div>
82
+
83
+ <div class="my-3">
84
+ <%= render "shared/pagination", list: list, pagy: pagy %>
85
+ </div>
@@ -1,144 +1,164 @@
1
- <% exceptions ||= ['created_at', 'updated_at', 'deleted_at'] %>
2
- <% excluded_columns ||= [] %>
3
- <% additional_columns ||= [] %>
4
- <% additional_actions ||= [] %>
5
- <% sort_fields ||= [] %>
6
- <% sort_all ||= false %>
7
-
8
- <% card_color ||= 'primary' %>
9
- <% table_class ||= 'table table-striped bootstrap-table' %>
10
-
11
- <% show_columns ||= [] %>
12
-
13
- <% hide_actions ||= false %>
14
- <% hide ||= %w[new back delete_right] %>
15
- <% size ||= "xs" %>
16
-
17
- <% if show_columns.empty? %>
18
- <% show_columns = list.klass.column_names - exceptions - excluded_columns + additional_columns %>
19
- <% end %>
20
-
21
- <table class="<%= table_class %>">
22
- <thead>
23
- <tr>
24
- <% show_columns.each do |column| %>
25
-
26
- <% column_method = nil %>
27
- <% column_name = column %>
28
- <% column_align = ''%>
29
- <% if column.class == Hash %>
30
- <% column_name = column[:attribute] %>
31
- <% column_method = column[:method] %>
32
- <% column_align = column[:align] %>
33
- <% column_title = column[:title] %>
34
- <% end %>
35
-
36
- <% next if /_currency$/ =~ column_name %>
37
-
38
- <th data-field="<%= column_method || column_name %>" data-align="<%= column_align %>">
39
- <% if sort_all || sort_fields.include?(column_name) %>
40
- <% if column_name.include?('.') %>
41
- <% mname = column_name.split('.')[-2]&.camelize %>
42
- <% cname = column_name.split('.')[-1] %>
43
- <% model = Kernel.const_get(mname) %>
44
- <%= sort_link(@q, column_name.split('.').join('_'),
45
- column_title || "#{model.model_name.human} (#{model.human_attribute_name(cname)})")
46
- %>
47
- <% elsif /_id$/ =~ column_name %>
48
- <%= sort_link(@q, column_name, column_title || list.klass.human_attribute_name(column_name.split("_id")[0])) %>
49
- <% elsif /_cents$/ =~ column_name %>
50
- <%= sort_link(@q, column_name, column_title || list.klass.human_attribute_name(column_name.split("_cents")[0])) %>
51
- <% elsif /_currency$/ =~ column_name %>
52
- <!-- faz nada -->
53
- <% elsif column_name == 'id' %>
54
- <%= sort_link(@q, column_name, column_title || '#') %>
55
- <% else %>
56
- <%= sort_link(@q, column_name, column_title || list.klass.human_attribute_name(column_name)) %>
57
- <% end %>
58
- <% else %>
59
- <% if column_name.include?('.') %>
60
- <% s_name = column_title || column_method || column_name %>
61
- <%= "#{s_name.split('.')[-2]&.camelize} (#{s_name.split('.')[-1]})" %>
62
- <% elsif /_id$/ =~ column_name %>
63
- <%= column_title || list.klass.human_attribute_name(column_name.split("_id")[0]) %>
64
- <% elsif /_cents$/ =~ column_name %>
65
- <%= column_title || list.klass.human_attribute_name(column_name.split("_cents")[0]) %>
66
- <% elsif /_currency$/ =~ column_name %>
67
- <% elsif column_name == 'id' %>
68
- <%= column_title || "#" %>
69
- <% else %>
70
- <%= column_title || list.klass.human_attribute_name(column_name) %>
71
- <% end %>
72
- <% end %>
73
- </th>
74
- <% end %>
75
- <% unless hide_actions %>
76
- <th data-align="center">Ações</th>
77
- <% end %>
78
- </tr>
79
- </thead>
80
- <tbody>
81
- <% list.each do |object| %>
82
- <tr>
83
- <% show_columns.each do |column| %>
84
-
85
- <% column_method = nil %>
86
- <% column_name = column %>
87
- <% if column.class == Hash %>
88
- <% column_name = column[:attribute] %>
89
- <% column_method = column[:method] %>
90
- <% column_format = column[:format] %>
91
- <% end %>
92
-
93
- <% next if /_currency$/ =~ column_name %>
94
-
95
- <td>
96
- <% if column_name.include?('.') %>
97
- <% if column_method.nil? %>
98
- <% o = object %>
99
- <% column_name.split('.').each{|m| o = o.send(m) if o } %>
100
- <%= o %>
101
- <% else %>
102
- <%= object.send(column_method) %>
103
- <% end %>
104
- <% elsif object.send(column_name).class == Date or
105
- object.send(column_name).class == DateTime or
106
- object.send(column_name).class == ActiveSupport::TimeWithZone or
107
- object.send(column_name).class == Time %>
108
- <% if column_format %>
109
- <%= l(object.send(column_name), format: (column_format.is_a?(Symbol) ? column_format : column_format.to_sym)) %>
110
- <% else %>
111
- <%=l object.send(column_name) %>
112
- <% end %>
113
- <% elsif object.send(column_name).respond_to? 'attached?' %>
114
- <% if object.send(column_name).class == ActiveStorage::Attached::One %>
115
- <% if object.send(column_name).attached? %>
116
- <%= link_to rails_blob_path(object.send(column_name)), class: "btn btn-#{card_color} btn-xs", target: '_blank' do %>
117
- <i class="fa fa-file-o"></i> Arquivo
118
- <% end %>
119
- <% end %>
120
- <% end %>
121
- <% elsif /_id$/ =~ column_name && object.respond_to?(column_name.split('_id')[0]) %>
122
- <%= object.send(column_name.split("_id")[0])&.name %>
123
- <% elsif /_cents$/ =~ column_name %>
124
- <%= number_to_currency object.send(column_name.split("_cents")[0]) %>
125
- <% elsif /_currency$/ =~ column_name %>
126
- <!-- faz nada -->
127
- <% elsif column_name.include?(".") %>
128
- <%= eval("object.#{column_name}") %>
129
- <% elsif column_name == 'id' %>
130
- <%= link_to object.id, object %>
131
- <% else %>
132
- <%= object.send(column_method || column_name) %>
133
- <% end %>
134
- </td>
135
- <% end %>
136
- <% unless hide_actions %>
137
- <td>
138
- <%= render 'shared/btn_action_links', object: object, additional_actions: additional_actions, hide: hide, size: size %>
139
- </td>
140
- <% end %>
141
- </tr>
142
- <% end %>
143
- </tbody>
144
- </table>
1
+ <% exceptions ||= ['created_at', 'updated_at', 'deleted_at'] %>
2
+ <% excluded_columns ||= [] %>
3
+ <% additional_columns ||= [] %>
4
+ <% additional_actions ||= [] %>
5
+ <% sort_fields ||= [] %>
6
+ <% sort_all ||= false %>
7
+ <% card_color ||= 'primary' %>
8
+ <% table_class ||= 'table table-striped align-middle bootstrap-table' %>
9
+ <% show_columns ||= [] %>
10
+ <% hide_actions ||= false %>
11
+ <% hide ||= %i[new back] %>
12
+ <% size ||= "sm" %>
13
+
14
+ <% if show_columns.empty? %>
15
+ <% show_columns = list.klass.column_names - exceptions - excluded_columns + additional_columns %>
16
+ <% end %>
17
+
18
+ <table class="<%= table_class %>">
19
+ <thead>
20
+ <tr>
21
+ <% show_columns.each do |column| %>
22
+ <% column_method = nil %>
23
+ <% column_name = column %>
24
+ <% column_align = '' %>
25
+ <% column_title = nil %>
26
+
27
+ <% if column.class == Hash %>
28
+ <% column_name = column[:attribute] %>
29
+ <% column_method = column[:method] %>
30
+ <% column_align = column[:align] %>
31
+ <% column_title = column[:title] %>
32
+ <% end %>
33
+
34
+ <% next if /_currency$/ =~ column_name %>
35
+
36
+ <th
37
+ data-field="<%= column_method || column_name %>"
38
+ data-align="<%= column_align %>"
39
+ data-width="<%= 20 if column_name == 'id' %>"
40
+ >
41
+ <% if sort_all || sort_fields.include?(column_name) %>
42
+ <% if column_name.include?('.') %>
43
+ <% mname = column_name.split('.')[-2]&.camelize %>
44
+ <% cname = column_name.split('.')[-1] %>
45
+ <% model = Kernel.const_get(mname) %>
46
+ <%= sort_link(@q,
47
+ column_name.split('.').join('_'),
48
+ column_title || "#{model.model_name.human} (#{model.human_attribute_name(cname)})") %>
49
+ <% elsif /_id$/ =~ column_name %>
50
+ <%= sort_link(@q,
51
+ column_name,
52
+ column_title || list.klass.human_attribute_name(column_name.split("_id")[0])) %>
53
+ <% elsif /_cents$/ =~ column_name %>
54
+ <%= sort_link(@q,
55
+ column_name,
56
+ column_title || list.klass.human_attribute_name(column_name.split("_cents")[0])) %>
57
+ <% elsif column_name == 'id' %>
58
+ <div class="text-md-end">
59
+ <%= sort_link(@q, column_name, column_title || '#') %>
60
+ </div>
61
+ <% else %>
62
+ <%= sort_link(@q,
63
+ column_name,
64
+ column_title || list.klass.human_attribute_name(column_name)) %>
65
+ <% end %>
66
+ <% else %>
67
+ <% if column_name.include?('.') %>
68
+ <% s_name = column_title || column_method || column_name %>
69
+ <%= "#{s_name.split('.')[-2]&.camelize} (#{s_name.split('.')[-1]})" %>
70
+ <% elsif /_id$/ =~ column_name %>
71
+ <%= column_title || list.klass.human_attribute_name(column_name.split("_id")[0]) %>
72
+ <% elsif /_cents$/ =~ column_name %>
73
+ <%= column_title || list.klass.human_attribute_name(column_name.split("_cents")[0]) %>
74
+ <% elsif column_name == 'id' %>
75
+ <%= column_title || "#" %>
76
+ <% else %>
77
+ <%= column_title || list.klass.human_attribute_name(column_name) %>
78
+ <% end %>
79
+ <% end %>
80
+ </th>
81
+ <% end %>
82
+
83
+ <% unless hide_actions %>
84
+ <th data-width="100">
85
+ <div class="text-md-center">Ações</div>
86
+ </th>
87
+ <% end %>
88
+ </tr>
89
+ </thead>
90
+
91
+ <tbody>
92
+ <% list.each do |object| %>
93
+ <tr>
94
+ <% show_columns.each do |column| %>
95
+ <% column_method = nil %>
96
+ <% column_name = column %>
97
+ <% column_format = nil %>
98
+
99
+ <% if column.class == Hash %>
100
+ <% column_name = column[:attribute] %>
101
+ <% column_method = column[:method] %>
102
+ <% column_format = column[:format] %>
103
+ <% end %>
104
+
105
+ <% next if /_currency$/ =~ column_name %>
106
+
107
+ <td>
108
+ <% if column_name.include?('.') %>
109
+ <% if column_method.nil? %>
110
+ <% o = object %>
111
+ <% column_name.split('.').each{|m| o = o.send(m) if o } %>
112
+ <%= o %>
113
+ <% else %>
114
+ <%= object.send(column_method) %>
115
+ <% end %>
116
+ <% elsif object.send(column_name).is_a?(Date) ||
117
+ object.send(column_name).is_a?(Time) ||
118
+ object.send(column_name).is_a?(DateTime) ||
119
+ object.send(column_name).is_a?(ActiveSupport::TimeWithZone) %>
120
+ <% if column_format %>
121
+ <%= l(object.send(column_name), format: column_format.to_sym) %>
122
+ <% else %>
123
+ <%= l object.send(column_name) %>
124
+ <% end %>
125
+ <% elsif object.send(column_name).respond_to?('attached?') %>
126
+ <% if object.send(column_name).class == ActiveStorage::Attached::One %>
127
+ <% if object.send(column_name).attached? %>
128
+ <%= link_to rails_blob_path(object.send(column_name)),
129
+ class: "btn btn-outline-#{card_color} btn-sm",
130
+ target: '_blank' do %>
131
+ <i class="fa fa-file"></i>
132
+ <span class="d-none d-md-inline"> Arquivo </span>
133
+ <% end %>
134
+ <% end %>
135
+ <% end %>
136
+ <% elsif /_id$/ =~ column_name && object.respond_to?(column_name.split('_id')[0]) %>
137
+ <%= object.send(column_name.split("_id")[0])&.name %>
138
+ <% elsif /_cents$/ =~ column_name %>
139
+ <%= number_to_currency object.send(column_name.split("_cents")[0]) %>
140
+ <% elsif column_name == 'id' %>
141
+ <div class="text-md-end">
142
+ <%= link_to "##{object.id}", object, class: "fw-bold" %>
143
+ </div>
144
+ <% else %>
145
+ <%= object.send(column_method || column_name) %>
146
+ <% end %>
147
+ </td>
148
+ <% end %>
149
+
150
+ <% unless hide_actions %>
151
+ <td>
152
+ <div class="text-md-center">
153
+ <%= render 'shared/btn_action_links',
154
+ object: object,
155
+ additional_actions: additional_actions,
156
+ hide: hide,
157
+ size: size %>
158
+ </div>
159
+ </td>
160
+ <% end %>
161
+ </tr>
162
+ <% end %>
163
+ </tbody>
164
+ </table>
@@ -1,24 +1,26 @@
1
- <% partial ||= 'shared/fields' %>
2
- <% name ||= object.model_name.singular %>
3
-
4
- <div class="modal fade in <%= name %>-modal" id="modal-default">
5
- <div class="modal-dialog">
6
- <div class="modal-content">
7
- <div class="modal-header">
8
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
9
- <span aria-hidden="true">×</span></button>
10
- <h4 class="modal-title"><%=t "helpers.links.new" %> <%= object.model_name.human %></h4>
11
- </div>
12
- <%= simple_form_for object do |f| %>
13
- <div class="modal-body">
14
- <%= render partial, object: object, f: f %>
15
- </div>
16
- <div class="modal-footer">
17
- <%= f.submit class: "btn btn-primary" %>
18
- </div>
19
- <% end %>
20
- </div>
21
- <!-- /.modal-content -->
22
- </div>
23
- <!-- /.modal-dialog -->
24
- </div>
1
+ <% modal_id ||= 'modal-task' %>
2
+ <% modal_title ||= '' %>
3
+ <% modal_size ||= 'lg' %>
4
+
5
+ <div id="<%= modal_id %>" class="modal fade" role="dialog" aria-hidden="true">
6
+ <div class="modal-dialog modal-dialog-centered modal-<%= modal_size %>">
7
+ <div class="modal-content">
8
+ <div class="modal-header">
9
+ <h5 class="modal-title"><%= modal_title %></h5>
10
+
11
+ <button
12
+ type="button"
13
+ class="btn-close"
14
+ data-bs-dismiss="modal"
15
+ aria-label="Close"
16
+ ></button>
17
+ </div>
18
+
19
+ <div class="modal-body">
20
+ <% if block_given? %>
21
+ <%= yield %>
22
+ <% end %>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>