cm-admin 0.4.1 → 0.5.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +8 -10
- data/README.md +2 -23
- data/app/assets/stylesheets/cm_admin/base/common.scss +1 -1
- data/app/assets/stylesheets/cm_admin/base/form.scss +0 -1
- data/app/assets/stylesheets/cm_admin/base/scaffold.scss +2 -0
- data/app/assets/stylesheets/cm_admin/cm_admin.css.scss +1 -0
- data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +5 -5
- data/app/assets/stylesheets/cm_admin/scaffold.scss +14 -0
- data/app/javascript/packs/cm_admin/application.js +1 -0
- data/app/javascript/stylesheets/cm_admin/application.scss +2 -1
- data/app/views/cm_admin/main/_associated_table.html.slim +2 -2
- data/app/views/cm_admin/main/_table.html.slim +17 -26
- data/app/views/cm_admin/main/_top_navbar.html.slim +13 -2
- data/app/views/cm_admin/main/associated_index.html.slim +2 -2
- data/app/views/cm_admin/main/edit.html.slim +10 -7
- data/app/views/layouts/_custom_action_modals.html.slim +9 -0
- data/app/views/layouts/_flash_message.html.slim +9 -0
- data/app/views/layouts/cm_admin.html.slim +6 -3
- data/cm_admin.gemspec +1 -1
- data/config/routes.rb +1 -1
- data/lib/cm_admin/constants.rb +3 -0
- data/lib/cm_admin/model.rb +18 -2
- data/lib/cm_admin/models/action.rb +8 -2
- data/lib/cm_admin/models/controller_method.rb +3 -2
- data/lib/cm_admin/models/custom_action.rb +13 -0
- data/lib/cm_admin/models/dsl_method.rb +17 -4
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/field_display_helper.rb +7 -1
- data/lib/cm_admin/view_helpers/page_info_helper.rb +7 -2
- data/package.json +1 -0
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
- data/yarn.lock +17 -12
- metadata +8 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2047ac958ebd117645f7089227af0177f495f1cf640791c3e2f9fb2920fc1f04
|
|
4
|
+
data.tar.gz: 3f81a0d55a072ec52cb51b54e04cfd77edc87e562275539045ec39ca98e5b6ca
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b7f8ac87cb03febd769e5f11a8e4819eff5cb978727c1bc55d73680970147b1e28c15293d1d819dbec11c290fc090126a32bdc3db1f30d7202013bbf4a43c25b
|
|
7
|
+
data.tar.gz: 370da992ee711a9e2d15d665e4ee2e595ab4767e3761c58d603ad3a6abef95b1f09412e8d92e7ea0dea3763f1ce1332a735f42a9d5b27e7e35f05800fcc6d863
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
cm-admin (0.
|
|
4
|
+
cm-admin (0.4.2)
|
|
5
5
|
axlsx_rails (~> 0.6.1)
|
|
6
6
|
cocoon (~> 1.2.15)
|
|
7
|
-
pagy (~>
|
|
7
|
+
pagy (~> 4.11.0)
|
|
8
8
|
slim (~> 4.1.0)
|
|
9
9
|
webpacker (~> 5.2.1)
|
|
10
10
|
|
|
@@ -34,7 +34,7 @@ GEM
|
|
|
34
34
|
actionpack (>= 3.1)
|
|
35
35
|
caxlsx (>= 3.0)
|
|
36
36
|
builder (3.2.4)
|
|
37
|
-
caxlsx (3.1.
|
|
37
|
+
caxlsx (3.1.1)
|
|
38
38
|
htmlentities (~> 4.3, >= 4.3.4)
|
|
39
39
|
marcel (~> 1.0)
|
|
40
40
|
nokogiri (~> 1.10, >= 1.10.4)
|
|
@@ -50,14 +50,12 @@ GEM
|
|
|
50
50
|
loofah (2.12.0)
|
|
51
51
|
crass (~> 1.0.2)
|
|
52
52
|
nokogiri (>= 1.5.9)
|
|
53
|
-
marcel (1.0.
|
|
53
|
+
marcel (1.0.2)
|
|
54
54
|
method_source (1.0.0)
|
|
55
|
-
mini_portile2 (2.6.1)
|
|
56
55
|
minitest (5.14.4)
|
|
57
|
-
nokogiri (1.12.
|
|
58
|
-
mini_portile2 (~> 2.6.1)
|
|
56
|
+
nokogiri (1.12.5-x86_64-darwin)
|
|
59
57
|
racc (~> 1.4)
|
|
60
|
-
pagy (
|
|
58
|
+
pagy (4.11.0)
|
|
61
59
|
racc (1.5.2)
|
|
62
60
|
rack (2.2.3)
|
|
63
61
|
rack-proxy (0.7.0)
|
|
@@ -112,10 +110,10 @@ PLATFORMS
|
|
|
112
110
|
DEPENDENCIES
|
|
113
111
|
cm-admin!
|
|
114
112
|
cocoon
|
|
115
|
-
pagy
|
|
113
|
+
pagy (~> 4.11.0)
|
|
116
114
|
rake (~> 12.0)
|
|
117
115
|
rspec (~> 3.0)
|
|
118
116
|
slim
|
|
119
117
|
|
|
120
118
|
BUNDLED WITH
|
|
121
|
-
2.2
|
|
119
|
+
2.0.2
|
data/README.md
CHANGED
|
@@ -7,7 +7,7 @@ New CmAdmin gem
|
|
|
7
7
|
Add this line to your application's Gemfile:
|
|
8
8
|
|
|
9
9
|
```ruby
|
|
10
|
-
gem '
|
|
10
|
+
gem 'cm-admin'
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
And then execute:
|
|
@@ -16,7 +16,7 @@ And then execute:
|
|
|
16
16
|
|
|
17
17
|
Or install it yourself as:
|
|
18
18
|
|
|
19
|
-
$ gem install
|
|
19
|
+
$ gem install cm-admin
|
|
20
20
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
@@ -24,27 +24,6 @@ Install the gem
|
|
|
24
24
|
|
|
25
25
|
$ rails g cm_admin:install
|
|
26
26
|
|
|
27
|
-
For generating the index page views
|
|
28
|
-
|
|
29
|
-
$ rails g cm_admin:view products index title description
|
|
30
|
-
|
|
31
|
-
For generating the show page views
|
|
32
|
-
|
|
33
|
-
$ rails g cm_admin:view products show title description
|
|
34
|
-
|
|
35
|
-
For generating the form page views
|
|
36
|
-
$ rails g cm_admin:view products form column_name:field_type
|
|
37
|
-
$ rails g cm_admin:view products form title:string description:string
|
|
38
|
-
|
|
39
|
-
Following field types are acceted
|
|
40
|
-
|
|
41
|
-
* input-integer
|
|
42
|
-
* input-string
|
|
43
|
-
* single-select
|
|
44
|
-
* multi-select
|
|
45
|
-
* checkbox
|
|
46
|
-
* radio
|
|
47
|
-
|
|
48
27
|
## Usage
|
|
49
28
|
|
|
50
29
|
For demo check [here](http://cm-admin.labs.commutatus.com/admin/users/)
|
|
@@ -4,23 +4,23 @@
|
|
|
4
4
|
font-size: $t4-text;
|
|
5
5
|
line-height: 22px;
|
|
6
6
|
padding: 4px;
|
|
7
|
-
&.default-
|
|
7
|
+
&.default-0 {
|
|
8
8
|
color: $primary-text-clr;
|
|
9
9
|
background: $grey-lighter-clr;
|
|
10
10
|
}
|
|
11
|
-
&.
|
|
11
|
+
&.default-1 {
|
|
12
12
|
color: $green-regular-clr;
|
|
13
13
|
background: $green-lightest-clr;
|
|
14
14
|
}
|
|
15
|
-
&.
|
|
15
|
+
&.default-2 {
|
|
16
16
|
color: $yellow-regular-clr;
|
|
17
17
|
background: $yellow-lightest-clr;
|
|
18
18
|
}
|
|
19
|
-
&.
|
|
19
|
+
&.default-3 {
|
|
20
20
|
color: $red-regular-clr;
|
|
21
21
|
background: $red-lightest-clr;
|
|
22
22
|
}
|
|
23
|
-
&.
|
|
23
|
+
&.default-4 {
|
|
24
24
|
color: $blue-regular-clr;
|
|
25
25
|
background: $blue-lightest-clr;
|
|
26
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.admin-table-index
|
|
2
2
|
.table-top
|
|
3
|
-
p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model
|
|
3
|
+
p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model&.ar_model&.table_name} found"
|
|
4
4
|
.table-top__column-action
|
|
5
5
|
button.secondary-btn.column-btn data-target="#columnActionModal" data-toggle="modal" type="button"
|
|
6
6
|
span
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
input.cm-checkbox type="checkbox"
|
|
26
26
|
- @model.available_fields[@action.name.to_sym].each do |column|
|
|
27
27
|
td
|
|
28
|
-
span class="#{column.cm_css_class}" = show_field_value(ar_object, column)
|
|
28
|
+
span class="#{column.cm_css_class} text-ellipsis" = show_field_value(ar_object, column)
|
|
29
29
|
td.row-action-cell
|
|
30
30
|
.row-action-tool
|
|
31
31
|
button.secondary-btn.tool-btn type="button"
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
.admin-table-index
|
|
2
2
|
.table-top
|
|
3
3
|
p.table-top__total-count = "#{@ar_object.pagy.count} #{@model.ar_model.table_name} found"
|
|
4
|
-
.table-top__column-action
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
// .table-top__column-action
|
|
5
|
+
// button.secondary-btn.column-btn data-bs-target="#columnActionModal" data-bs-toggle="modal"
|
|
6
|
+
// span
|
|
7
|
+
// i.fa.fa-columns.bolder
|
|
8
|
+
// span
|
|
9
|
+
// i.fa.fa-angle-down
|
|
11
10
|
.new-admin-table.scrollable
|
|
12
11
|
table.cm-table
|
|
13
12
|
thead.cm-table__header
|
|
@@ -23,9 +22,13 @@
|
|
|
23
22
|
td.check-box-space
|
|
24
23
|
span
|
|
25
24
|
input.cm-checkbox type="checkbox"
|
|
26
|
-
- @model.available_fields[:index].
|
|
27
|
-
td
|
|
28
|
-
span class="#{column.cm_css_class}"
|
|
25
|
+
- @model.available_fields[:index].each_with_index do |column, index|
|
|
26
|
+
td.text-ellipsis
|
|
27
|
+
span class="#{column.cm_css_class}"
|
|
28
|
+
- if index == 0
|
|
29
|
+
= link_to ar_object.send(column.field_name), "/cm_admin/#{@model.ar_model.table_name}/#{ar_object.id}"
|
|
30
|
+
- else
|
|
31
|
+
= show_field_value(ar_object, column)
|
|
29
32
|
td.row-action-cell
|
|
30
33
|
.row-action-tool
|
|
31
34
|
button.secondary-btn.tool-btn type="button"
|
|
@@ -37,22 +40,10 @@
|
|
|
37
40
|
.popup-option
|
|
38
41
|
a href="#{page_url('edit', ar_object)}"
|
|
39
42
|
| Edit
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
/ i.fa.fa-angle-double-left.bolder.f14
|
|
45
|
-
/ span.page-move-btn.disabled
|
|
46
|
-
/ i.fa.fa-chevron-left.bolder
|
|
47
|
-
/ span.page-num-btn.active 1
|
|
48
|
-
/ span.page-num-btn 2
|
|
49
|
-
/ span.page-num-btn 3
|
|
50
|
-
/ span.page-num-btn 4
|
|
51
|
-
/ span.page-num-btn 5
|
|
52
|
-
/ span.page-move-btn
|
|
53
|
-
/ i.fa.fa-chevron-right.bolder
|
|
54
|
-
/ span.page-move-btn
|
|
55
|
-
/ i.fa.fa-angle-double-right.bolder.f14
|
|
43
|
+
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
|
44
|
+
- if custom_action.display_if.call(ar_object)
|
|
45
|
+
.popup-option
|
|
46
|
+
= link_to custom_action.name, custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb
|
|
56
47
|
|
|
57
48
|
.cm-pagination
|
|
58
49
|
.cm-pagination__lhs Showing #{@ar_object.pagy.from} to #{@ar_object.pagy.to} out of #{@ar_object.pagy.count}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
.nav-title-area
|
|
6
6
|
p.title-text = action_title
|
|
7
7
|
p.title-sub-text = action_description
|
|
8
|
-
-
|
|
9
|
-
.
|
|
8
|
+
.cm-navbar__rhs
|
|
9
|
+
- if @model.current_action.name == 'index'
|
|
10
10
|
.export-container
|
|
11
11
|
.dropdown
|
|
12
12
|
button.secondary-btn data-bs-toggle='dropdown'
|
|
@@ -23,3 +23,14 @@
|
|
|
23
23
|
|
|
24
24
|
a.primary-btn.ml-2 href="#{page_url('new')}"
|
|
25
25
|
| Add
|
|
26
|
+
- @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
|
|
27
|
+
- if custom_action.display_type == :button
|
|
28
|
+
= link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
|
|
29
|
+
- elsif custom_action.display_type == :modal
|
|
30
|
+
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
|
31
|
+
- elsif @model.current_action.name == 'show'
|
|
32
|
+
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
|
33
|
+
- if custom_action.display_type == :button && custom_action.display_if.call(@ar_object)
|
|
34
|
+
= link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
|
|
35
|
+
- elsif custom_action.display_type == :modal && custom_action.display_if.call(@ar_object)
|
|
36
|
+
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
|
@@ -2,16 +2,19 @@
|
|
|
2
2
|
.form-page
|
|
3
3
|
.form-page__inner
|
|
4
4
|
.form-wrapper
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
- if @ar_object.errors.present?
|
|
6
|
+
.flag-alert.mb-4
|
|
7
|
+
p.alert-header
|
|
7
8
|
span
|
|
8
9
|
i.fa.fa-exclamation-triangle
|
|
9
10
|
| Attention
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
.alert-body
|
|
12
|
+
p.body-title
|
|
13
|
+
| Error heading
|
|
14
|
+
p.body-info
|
|
15
|
+
ul
|
|
16
|
+
- @ar_object.errors.full_messages.each do |error_message|
|
|
17
|
+
li = error_message
|
|
15
18
|
.form-container
|
|
16
19
|
p.form-title
|
|
17
20
|
| Section heading
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
- @model.available_actions.select{|act| act if act.route_type == 'collection' && act.display_type == :modal}.each do |custom_action|
|
|
2
|
+
.modal.fade id="#{custom_action.name.classify}Modal" aria-hidden="true" aria-labelledby="exampleModalLabel" tabindex="1"
|
|
3
|
+
.modal-dialog
|
|
4
|
+
.modal-content
|
|
5
|
+
.modal-header
|
|
6
|
+
h5#exampleModalLabel.modal-title = custom_action.name.classify
|
|
7
|
+
button.btn-close aria-label="Close" data-bs-dismiss="modal" type="button"
|
|
8
|
+
.modal-body
|
|
9
|
+
= render partial: custom_action.partial
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
- if flash[:notice].present?
|
|
2
|
+
javascript:
|
|
3
|
+
$.jGrowl("#{flash[:notice]}", {theme: 'notice'})
|
|
4
|
+
- elsif flash[:success].present?
|
|
5
|
+
javascript:
|
|
6
|
+
$.jGrowl("#{flash[:success]}", {theme: 'success'})
|
|
7
|
+
- elsif flash[:alert].present?
|
|
8
|
+
javascript:
|
|
9
|
+
$.jGrowl("#{flash[:alert]}", {theme: 'error'})
|
|
@@ -19,7 +19,7 @@ html
|
|
|
19
19
|
.cm-admin
|
|
20
20
|
= render 'layouts/left_sidebar_nav'
|
|
21
21
|
.panel-area
|
|
22
|
-
- if defined?(@action) && @action&.layout_type.to_s == 'cm_association_show'
|
|
22
|
+
- if defined?(@action) && (@action&.layout_type.to_s == 'cm_association_show' || @action.parent == "show")
|
|
23
23
|
.show-page.page-container
|
|
24
24
|
.show-page__tabs.sticky-container
|
|
25
25
|
.cm-tabs-bar
|
|
@@ -27,15 +27,18 @@ html
|
|
|
27
27
|
== render 'cm_admin/main/tabs'
|
|
28
28
|
.show-page__inner.scrollable
|
|
29
29
|
= yield
|
|
30
|
-
- elsif defined?(@action) && @action&.layout_type.to_s == 'cm_association_index'
|
|
30
|
+
- elsif defined?(@action) && (@action&.layout_type.to_s == 'cm_association_index' || @action.parent == "index")
|
|
31
31
|
.show-page.page-container
|
|
32
32
|
.show-page__tabs.sticky-container
|
|
33
33
|
.cm-tabs-bar
|
|
34
34
|
== render 'cm_admin/main/top_navbar'
|
|
35
35
|
== render 'cm_admin/main/tabs'
|
|
36
|
-
- if @associated_model.filters.present?
|
|
36
|
+
- if @associated_model && @associated_model.filters.present?
|
|
37
37
|
.index-page__filters
|
|
38
38
|
== render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
|
|
39
39
|
= yield
|
|
40
40
|
- else
|
|
41
41
|
= yield
|
|
42
|
+
= render 'layouts/flash_message'
|
|
43
|
+
= render 'layouts/custom_action_modals'
|
|
44
|
+
|
data/cm_admin.gemspec
CHANGED
|
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.bindir = "exe"
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
28
28
|
spec.require_paths = ["lib"]
|
|
29
|
-
spec.add_runtime_dependency 'pagy', '~>
|
|
29
|
+
spec.add_runtime_dependency 'pagy', '~> 4.11.0'
|
|
30
30
|
spec.add_runtime_dependency 'slim', '~> 4.1.0'
|
|
31
31
|
spec.add_runtime_dependency 'webpacker', '~> 5.2.1'
|
|
32
32
|
spec.add_runtime_dependency 'axlsx_rails', '~> 0.6.1'
|
data/config/routes.rb
CHANGED
|
@@ -10,7 +10,7 @@ CmAdmin::Engine.routes.draw do
|
|
|
10
10
|
|
|
11
11
|
# Defining action routes for each model
|
|
12
12
|
CmAdmin.cm_admin_models.each do |model|
|
|
13
|
-
model.available_actions.each do |act|
|
|
13
|
+
model.available_actions.sort_by {|act| act.class}.each do |act|
|
|
14
14
|
scope model.name.tableize do
|
|
15
15
|
send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}")
|
|
16
16
|
end
|
data/lib/cm_admin/constants.rb
CHANGED
data/lib/cm_admin/model.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require_relative 'constants'
|
|
2
2
|
require_relative 'models/action'
|
|
3
|
+
require_relative 'models/custom_action'
|
|
3
4
|
require_relative 'models/field'
|
|
4
5
|
require_relative 'models/form_field'
|
|
5
6
|
require_relative 'models/blocks'
|
|
@@ -91,7 +92,6 @@ module CmAdmin
|
|
|
91
92
|
# If model is User, controller will be UsersController
|
|
92
93
|
def define_controller
|
|
93
94
|
klass = Class.new(CmAdmin::ApplicationController) do
|
|
94
|
-
|
|
95
95
|
$available_actions.each do |action|
|
|
96
96
|
define_method action.name.to_sym do
|
|
97
97
|
|
|
@@ -99,8 +99,10 @@ module CmAdmin
|
|
|
99
99
|
@model = CmAdmin::Model.find_by(name: controller_name.classify)
|
|
100
100
|
@model.params = params
|
|
101
101
|
@action = CmAdmin::Models::Action.find_by(@model, name: action_name)
|
|
102
|
-
@ar_object = @model.try(action_name, params)
|
|
102
|
+
@ar_object = @model.try(@action.parent || action_name, params)
|
|
103
103
|
@ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
|
|
104
|
+
aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
|
|
105
|
+
@associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
|
|
104
106
|
nested_tables = @model.available_fields[:new].except(:fields).keys
|
|
105
107
|
nested_tables += @model.available_fields[:edit].except(:fields).keys
|
|
106
108
|
@reflections = @model.ar_model.reflect_on_all_associations
|
|
@@ -125,6 +127,20 @@ module CmAdmin
|
|
|
125
127
|
else
|
|
126
128
|
format.html { render '/cm_admin/main/new' }
|
|
127
129
|
end
|
|
130
|
+
elsif action.action_type == :custom
|
|
131
|
+
if action.child_records
|
|
132
|
+
format.html { render action.layout }
|
|
133
|
+
elsif action.display_type == :page
|
|
134
|
+
data = @action.parent == "index" ? @ar_object.data : @ar_object
|
|
135
|
+
format.html { render action.partial }
|
|
136
|
+
else
|
|
137
|
+
redirect_url = request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
|
|
138
|
+
if @action.code_block.call(@ar_object)
|
|
139
|
+
format.html { redirect_to redirect_url }
|
|
140
|
+
else
|
|
141
|
+
format.html { redirect_to redirect_url }
|
|
142
|
+
end
|
|
143
|
+
end
|
|
128
144
|
elsif action.layout.present?
|
|
129
145
|
if request.xhr? && action.partial.present?
|
|
130
146
|
format.html { render partial: action.partial }
|
|
@@ -4,9 +4,11 @@ module CmAdmin
|
|
|
4
4
|
module Models
|
|
5
5
|
class Action
|
|
6
6
|
include Actions::Blocks
|
|
7
|
-
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
|
7
|
+
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
|
8
|
+
:child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
|
|
9
|
+
:display_type, :action_type
|
|
8
10
|
|
|
9
|
-
def initialize(attributes = {})
|
|
11
|
+
def initialize(attributes = {}, &block)
|
|
10
12
|
if attributes[:layout_type].present? && attributes[:layout].nil? && attributes[:partial].nil?
|
|
11
13
|
case attributes[:layout_type]
|
|
12
14
|
when 'cm_association_index'
|
|
@@ -20,10 +22,14 @@ module CmAdmin
|
|
|
20
22
|
attributes.each do |key, value|
|
|
21
23
|
self.send("#{key.to_s}=", value)
|
|
22
24
|
end
|
|
25
|
+
self.send("code_block=", block) if block_given?
|
|
23
26
|
end
|
|
24
27
|
|
|
25
28
|
def set_default_values
|
|
26
29
|
self.is_nested_field = false
|
|
30
|
+
self.display_if = lambda { |arg| return true }
|
|
31
|
+
self.display_type = :button
|
|
32
|
+
self.action_type = :default
|
|
27
33
|
end
|
|
28
34
|
|
|
29
35
|
class << self
|
|
@@ -29,7 +29,8 @@ module CmAdmin
|
|
|
29
29
|
@ar_object.assign_attributes(resource_params(params))
|
|
30
30
|
@ar_object
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
|
|
33
|
+
|
|
33
34
|
def create(params)
|
|
34
35
|
@ar_object = @ar_model.new(resource_params(params))
|
|
35
36
|
end
|
|
@@ -64,7 +65,7 @@ module CmAdmin
|
|
|
64
65
|
nested_fields = nested_tables.map {|table|
|
|
65
66
|
Hash[
|
|
66
67
|
table.to_s + '_attributes',
|
|
67
|
-
table.to_s.
|
|
68
|
+
table.to_s.classify.constantize.columns.map(&:name).reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym) + [:id, :_destroy]
|
|
68
69
|
]
|
|
69
70
|
}
|
|
70
71
|
permittable_fields += nested_fields
|
|
@@ -3,6 +3,13 @@ module CmAdmin
|
|
|
3
3
|
module DslMethod
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
|
+
def cm_page(name: nil, partial: nil, path: nil, route_type: nil, page_title: nil, display_type: :button, &block)
|
|
7
|
+
action = CmAdmin::Models::CustomAction.new(name: name, verb: :get, partial: partial, path: path, route_type: route_type, display_type: display_type, &block)
|
|
8
|
+
@available_actions << action
|
|
9
|
+
# @available_actions << CmAdmin::Models::CustomAction.new(name: name, verb: 'get', layout: 'cm_admin', partial: partial, path: path, parent: self.current_action.name, route_type: route_type, page_title: page_title, display_type: display_type, &block)
|
|
10
|
+
# @current_action = CmAdmin::Models::CustomAction.find_by(self, name: name)
|
|
11
|
+
end
|
|
12
|
+
|
|
6
13
|
def cm_index(page_title: nil ,page_description: nil, &block)
|
|
7
14
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'index')
|
|
8
15
|
@current_action.page_title = page_title
|
|
@@ -49,7 +56,9 @@ module CmAdmin
|
|
|
49
56
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
|
50
57
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
|
|
51
58
|
else
|
|
52
|
-
action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
|
|
59
|
+
action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
|
|
60
|
+
layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
|
|
61
|
+
action_type: :custom, display_type: :page)
|
|
53
62
|
@available_actions << action
|
|
54
63
|
@current_action = action
|
|
55
64
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
|
|
@@ -109,9 +118,13 @@ module CmAdmin
|
|
|
109
118
|
# end
|
|
110
119
|
# end
|
|
111
120
|
# end
|
|
112
|
-
def custom_action(name: nil, verb: nil, layout: nil, partial: nil, path: nil, &block)
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
|
|
122
|
+
action = CmAdmin::Models::CustomAction.new(
|
|
123
|
+
name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
|
124
|
+
parent: self.current_action.name, display_type: display_type, display_if: display_if,
|
|
125
|
+
action_type: :custom, route_type: route_type, &block)
|
|
126
|
+
@available_actions << action
|
|
127
|
+
# self.class.class_eval(&block)
|
|
115
128
|
end
|
|
116
129
|
|
|
117
130
|
def filter(db_column_name, filter_type, options={})
|
data/lib/cm_admin/version.rb
CHANGED
|
@@ -38,7 +38,13 @@ module CmAdmin
|
|
|
38
38
|
end
|
|
39
39
|
content_tag :a, href: link do
|
|
40
40
|
ar_object.send(field.field_name).to_s
|
|
41
|
-
end
|
|
41
|
+
end
|
|
42
|
+
when :enum
|
|
43
|
+
ar_object.send(field.field_name).to_s.titleize
|
|
44
|
+
when :tag
|
|
45
|
+
content_tag :span, class: "status-tag default-#{ar_object.send(field.field_name.to_s + '_before_type_cast')}" do
|
|
46
|
+
ar_object.send(field.field_name).to_s.titleize
|
|
47
|
+
end
|
|
42
48
|
when :attachment
|
|
43
49
|
concat show_attachment_value(ar_object, field)
|
|
44
50
|
end
|
|
@@ -6,8 +6,10 @@ module CmAdmin
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def action_title
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
show_action = CmAdmin::Models::Action.find_by(@model, name: 'show')
|
|
10
|
+
title = @model.current_action.page_title || show_action.page_title
|
|
11
|
+
if title
|
|
12
|
+
title = (title.class == Symbol) ? @ar_object.send(title) : title
|
|
11
13
|
else
|
|
12
14
|
title = "#{@model.name}"
|
|
13
15
|
case action_name
|
|
@@ -24,8 +26,11 @@ module CmAdmin
|
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
def action_description
|
|
29
|
+
show_action = CmAdmin::Models::Action.find_by(@model, name: 'show')
|
|
27
30
|
if @model.current_action.page_description
|
|
28
31
|
title = @model.current_action.page_description
|
|
32
|
+
elsif show_action.page_description
|
|
33
|
+
title = show_action.page_description
|
|
29
34
|
else
|
|
30
35
|
title = "#{@model.name}"
|
|
31
36
|
case action_name
|
data/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b50f217278de15248bddb0b6f2e6be58edbffa7c
|
data/yarn.lock
CHANGED
|
@@ -3763,6 +3763,11 @@ jest-worker@^26.5.0:
|
|
|
3763
3763
|
merge-stream "^2.0.0"
|
|
3764
3764
|
supports-color "^7.0.0"
|
|
3765
3765
|
|
|
3766
|
+
jgrowl@^1.4.8:
|
|
3767
|
+
version "1.4.8"
|
|
3768
|
+
resolved "https://registry.yarnpkg.com/jgrowl/-/jgrowl-1.4.8.tgz#4ba40ffb93757a7e1d9b262d916be299d03df3a4"
|
|
3769
|
+
integrity sha512-JFi609DhWhD4wbnt1/NvYqt702SncgBk2SFssUi6GEUfnxM5TQ9YAKHP/kODwch7Q6QVhOWYvk1QCxLtujwRog==
|
|
3770
|
+
|
|
3766
3771
|
jquery@>=1.10, jquery@^3.3.1, jquery@^3.6.0:
|
|
3767
3772
|
version "3.6.0"
|
|
3768
3773
|
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
|
|
@@ -5384,9 +5389,9 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
|
|
|
5384
5389
|
uniq "^1.0.1"
|
|
5385
5390
|
|
|
5386
5391
|
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6:
|
|
5387
|
-
version "7.0.
|
|
5388
|
-
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.
|
|
5389
|
-
integrity sha512-
|
|
5392
|
+
version "7.0.36"
|
|
5393
|
+
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
|
|
5394
|
+
integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
|
|
5390
5395
|
dependencies:
|
|
5391
5396
|
chalk "^2.4.2"
|
|
5392
5397
|
source-map "^0.6.1"
|
|
@@ -6322,9 +6327,9 @@ tapable@^1.0.0, tapable@^1.1.3:
|
|
|
6322
6327
|
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
|
6323
6328
|
|
|
6324
6329
|
tar@^6.0.2:
|
|
6325
|
-
version "6.1.
|
|
6326
|
-
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.
|
|
6327
|
-
integrity sha512-
|
|
6330
|
+
version "6.1.11"
|
|
6331
|
+
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
|
|
6332
|
+
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
|
|
6328
6333
|
dependencies:
|
|
6329
6334
|
chownr "^2.0.0"
|
|
6330
6335
|
fs-minipass "^2.0.0"
|
|
@@ -6584,9 +6589,9 @@ urix@^0.1.0:
|
|
|
6584
6589
|
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
|
6585
6590
|
|
|
6586
6591
|
url-parse@^1.4.3, url-parse@^1.5.1:
|
|
6587
|
-
version "1.5.
|
|
6588
|
-
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.
|
|
6589
|
-
integrity sha512-
|
|
6592
|
+
version "1.5.3"
|
|
6593
|
+
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862"
|
|
6594
|
+
integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==
|
|
6590
6595
|
dependencies:
|
|
6591
6596
|
querystringify "^2.1.1"
|
|
6592
6597
|
requires-port "^1.0.0"
|
|
@@ -6872,9 +6877,9 @@ wrappy@1:
|
|
|
6872
6877
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
|
6873
6878
|
|
|
6874
6879
|
ws@^6.2.1:
|
|
6875
|
-
version "6.2.
|
|
6876
|
-
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.
|
|
6877
|
-
integrity sha512-
|
|
6880
|
+
version "6.2.2"
|
|
6881
|
+
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
|
|
6882
|
+
integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
|
|
6878
6883
|
dependencies:
|
|
6879
6884
|
async-limiter "~1.0.0"
|
|
6880
6885
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cm-admin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- sajinmp
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: exe
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2022-01-20 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: pagy
|
|
@@ -18,14 +18,14 @@ dependencies:
|
|
|
18
18
|
requirements:
|
|
19
19
|
- - "~>"
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version:
|
|
21
|
+
version: 4.11.0
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
25
|
requirements:
|
|
26
26
|
- - "~>"
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
|
-
version:
|
|
28
|
+
version: 4.11.0
|
|
29
29
|
- !ruby/object:Gem::Dependency
|
|
30
30
|
name: slim
|
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -125,6 +125,7 @@ files:
|
|
|
125
125
|
- app/assets/stylesheets/cm_admin/helpers/_mixins.scss
|
|
126
126
|
- app/assets/stylesheets/cm_admin/helpers/_variable.scss
|
|
127
127
|
- app/assets/stylesheets/cm_admin/helpers/index.scss
|
|
128
|
+
- app/assets/stylesheets/cm_admin/scaffold.scss
|
|
128
129
|
- app/controllers/cm_admin/application_controller.rb
|
|
129
130
|
- app/controllers/cm_admin/exports_controller.rb
|
|
130
131
|
- app/controllers/cm_admin/static_controller.rb
|
|
@@ -151,6 +152,8 @@ files:
|
|
|
151
152
|
- app/views/cm_admin/main/new.html.slim
|
|
152
153
|
- app/views/cm_admin/main/show.html.slim
|
|
153
154
|
- app/views/cm_admin/static/error_401.html.slim
|
|
155
|
+
- app/views/layouts/_custom_action_modals.html.slim
|
|
156
|
+
- app/views/layouts/_flash_message.html.slim
|
|
154
157
|
- app/views/layouts/_left_sidebar_nav.html.slim
|
|
155
158
|
- app/views/layouts/_quick_links.html.slim
|
|
156
159
|
- app/views/layouts/cm_admin.html.slim
|
|
@@ -179,6 +182,7 @@ files:
|
|
|
179
182
|
- lib/cm_admin/models/cm_show_section.rb
|
|
180
183
|
- lib/cm_admin/models/column.rb
|
|
181
184
|
- lib/cm_admin/models/controller_method.rb
|
|
185
|
+
- lib/cm_admin/models/custom_action.rb
|
|
182
186
|
- lib/cm_admin/models/dsl_method.rb
|
|
183
187
|
- lib/cm_admin/models/export.rb
|
|
184
188
|
- lib/cm_admin/models/field.rb
|