cm-admin 0.4.3 → 0.5.3
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/app/assets/stylesheets/cm_admin/scaffold.scss +10 -0
- data/app/views/cm_admin/main/_associated_table.html.slim +1 -1
- data/app/views/cm_admin/main/_nested_fields.html.slim +6 -5
- data/app/views/cm_admin/main/_nested_table_form.html.slim +3 -2
- data/app/views/cm_admin/main/_table.html.slim +12 -9
- data/app/views/cm_admin/main/_top_navbar.html.slim +9 -4
- data/app/views/cm_admin/main/associated_index.html.slim +2 -2
- data/app/views/layouts/_custom_action_modals.html.slim +9 -0
- data/app/views/layouts/cm_admin.html.slim +8 -4
- data/cm_admin.gemspec +2 -2
- data/config/routes.rb +2 -2
- data/lib/cm_admin/engine.rb +2 -0
- data/lib/cm_admin/model.rb +15 -7
- data/lib/cm_admin/models/action.rb +6 -2
- data/lib/cm_admin/models/controller_method.rb +1 -1
- data/lib/cm_admin/models/dsl_method.rb +16 -3
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/form_helper.rb +2 -2
- data/lib/cm_admin/view_helpers/page_info_helper.rb +7 -2
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcbb26a08fa072ec95a1363e72c63ebfad6a1c661d303d50af5379f2f5bce0b1
|
4
|
+
data.tar.gz: 2f2526862a9312a48f768eb001ba52f6365182e105556136e2e763e96e21484a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8d834bc6b9716aeef9b5c82137106c9aae52afd435ef384e7543be09fd4f18cb3f593374aebf5d840c9d17f7d0ecb99a9c9066508a1645fdff32d433d9ef983
|
7
|
+
data.tar.gz: c21ae398e2d2542186251a98bc706e203164e70319e841041527122358cd9cf3162620d8b860570b5f288f2ba1734c73a2a3a83da917c8b159120ad28c8febae
|
@@ -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
|
@@ -1,7 +1,8 @@
|
|
1
1
|
.nested-fields
|
2
2
|
- @model.available_fields[action_name.to_sym][assoc_name].each do |field|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
.row
|
4
|
+
.col-sm-10
|
5
|
+
= input_field_for_column(f, field)
|
6
|
+
.col-sm-2
|
7
|
+
- if @reflections.select {|x| x if x.name == assoc_name}.first.macro == :has_many
|
8
|
+
= link_to_remove_association "x", f
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
1
|
+
.nested-field-wrapper
|
2
|
+
label.field-label = table_name.to_s.titleize
|
2
3
|
= f.fields_for table_name do |record|
|
3
4
|
= render partial: '/cm_admin/main/nested_fields', locals: { f: record, assoc_name: table_name }
|
4
5
|
- if @reflections.select {|x| x if x.name == table_name}.first.macro == :has_many
|
5
6
|
.links
|
6
|
-
= link_to_add_association "
|
7
|
+
= link_to_add_association "+ Add #{table_name.to_s.titleize}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: table_name }}
|
@@ -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].
|
25
|
+
- @model.available_fields[:index].each_with_index do |column, index|
|
27
26
|
td.text-ellipsis
|
28
|
-
span class="#{column.cm_css_class}"
|
27
|
+
span class="#{column.cm_css_class}"
|
28
|
+
- if index == 0
|
29
|
+
= link_to ar_object.send(column.field_name), "/cm_admin/#{ar_object.model_name.collection}/#{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"
|
@@ -24,8 +24,13 @@
|
|
24
24
|
a.primary-btn.ml-2 href="#{page_url('new')}"
|
25
25
|
| Add
|
26
26
|
- @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
|
27
|
-
|
28
|
-
|
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' || @action.layout_type == "cm_association_show"
|
29
32
|
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
30
|
-
- if custom_action.display_if.call(@ar_object)
|
31
|
-
= link_to custom_action.name, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
|
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" }
|
@@ -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
|
@@ -10,6 +10,8 @@ html
|
|
10
10
|
= stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
|
11
11
|
link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /
|
12
12
|
= javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
|
13
|
+
= javascript_include_tag 'cm_admin/custom', 'data-turbolinks-track': 'reload'
|
14
|
+
= stylesheet_link_tag 'cm_admin/custom', media: 'all', 'data-turbolinks-track': 'reload'
|
13
15
|
script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"
|
14
16
|
script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"
|
15
17
|
body
|
@@ -19,7 +21,7 @@ html
|
|
19
21
|
.cm-admin
|
20
22
|
= render 'layouts/left_sidebar_nav'
|
21
23
|
.panel-area
|
22
|
-
- if defined?(@action) && @action&.layout_type.to_s == 'cm_association_show'
|
24
|
+
- if defined?(@action) && (@action&.layout_type.to_s == 'cm_association_show' || @action.parent == "show")
|
23
25
|
.show-page.page-container
|
24
26
|
.show-page__tabs.sticky-container
|
25
27
|
.cm-tabs-bar
|
@@ -27,16 +29,18 @@ html
|
|
27
29
|
== render 'cm_admin/main/tabs'
|
28
30
|
.show-page__inner.scrollable
|
29
31
|
= yield
|
30
|
-
- elsif defined?(@action) && @action&.layout_type.to_s == 'cm_association_index'
|
32
|
+
- elsif defined?(@action) && (@action&.layout_type.to_s == 'cm_association_index' || @action.parent == "index")
|
31
33
|
.show-page.page-container
|
32
34
|
.show-page__tabs.sticky-container
|
33
35
|
.cm-tabs-bar
|
34
36
|
== render 'cm_admin/main/top_navbar'
|
35
37
|
== render 'cm_admin/main/tabs'
|
36
|
-
- if @associated_model.filters.present?
|
38
|
+
- if @associated_model && @associated_model.filters.present?
|
37
39
|
.index-page__filters
|
38
40
|
== render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
|
39
41
|
= yield
|
40
42
|
- else
|
41
43
|
= yield
|
42
|
-
= render 'layouts/flash_message'
|
44
|
+
= render 'layouts/flash_message'
|
45
|
+
= render 'layouts/custom_action_modals'
|
46
|
+
|
data/cm_admin.gemspec
CHANGED
@@ -3,8 +3,8 @@ require_relative 'lib/cm_admin/version'
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "cm-admin"
|
5
5
|
spec.version = CmAdmin::VERSION
|
6
|
-
spec.authors = ["sajinmp", "anbublacky", "
|
7
|
-
spec.email = ["sajinprasadkm@gmail.com", "anbublacky@gmail.com"]
|
6
|
+
spec.authors = ["sajinmp", "anbublacky", "AdityaTiwari2102"]
|
7
|
+
spec.email = ["sajinprasadkm@gmail.com", "anbublacky@gmail.com", "taditya.tiwari007@gmail.com"]
|
8
8
|
|
9
9
|
spec.summary = %q{This is an admin panel gem}
|
10
10
|
spec.description = %q{This is an admin panel gem}
|
data/config/routes.rb
CHANGED
@@ -10,9 +10,9 @@ 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
|
-
send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}")
|
15
|
+
send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}", as: "#{model.name.underscore}_#{act.name}")
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/cm_admin/engine.rb
CHANGED
data/lib/cm_admin/model.rb
CHANGED
@@ -92,7 +92,6 @@ module CmAdmin
|
|
92
92
|
# If model is User, controller will be UsersController
|
93
93
|
def define_controller
|
94
94
|
klass = Class.new(CmAdmin::ApplicationController) do
|
95
|
-
|
96
95
|
$available_actions.each do |action|
|
97
96
|
define_method action.name.to_sym do
|
98
97
|
|
@@ -100,8 +99,11 @@ module CmAdmin
|
|
100
99
|
@model = CmAdmin::Model.find_by(name: controller_name.classify)
|
101
100
|
@model.params = params
|
102
101
|
@action = CmAdmin::Models::Action.find_by(@model, name: action_name)
|
102
|
+
@model.current_action = @action
|
103
103
|
@ar_object = @model.try(@action.parent || action_name, params)
|
104
104
|
@ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
|
105
|
+
aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
|
106
|
+
@associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
|
105
107
|
nested_tables = @model.available_fields[:new].except(:fields).keys
|
106
108
|
nested_tables += @model.available_fields[:edit].except(:fields).keys
|
107
109
|
@reflections = @model.ar_model.reflect_on_all_associations
|
@@ -126,13 +128,19 @@ module CmAdmin
|
|
126
128
|
else
|
127
129
|
format.html { render '/cm_admin/main/new' }
|
128
130
|
end
|
129
|
-
elsif action.
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
131
|
+
elsif action.action_type == :custom
|
132
|
+
if action.child_records
|
133
|
+
format.html { render action.layout }
|
134
|
+
elsif action.display_type == :page
|
135
|
+
data = @action.parent == "index" ? @ar_object.data : @ar_object
|
136
|
+
format.html { render action.partial }
|
134
137
|
else
|
135
|
-
|
138
|
+
if @action.code_block.call(@ar_object)
|
139
|
+
redirect_url = @action.redirection_url || request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
|
140
|
+
format.html { redirect_to redirect_url }
|
141
|
+
else
|
142
|
+
format.html { redirect_to request.referrer }
|
143
|
+
end
|
136
144
|
end
|
137
145
|
elsif action.layout.present?
|
138
146
|
if request.xhr? && action.partial.present?
|
@@ -4,7 +4,9 @@ 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, :redirection_url
|
8
10
|
|
9
11
|
def initialize(attributes = {}, &block)
|
10
12
|
if attributes[:layout_type].present? && attributes[:layout].nil? && attributes[:partial].nil?
|
@@ -25,7 +27,9 @@ module CmAdmin
|
|
25
27
|
|
26
28
|
def set_default_values
|
27
29
|
self.is_nested_field = false
|
28
|
-
self.display_if = true
|
30
|
+
self.display_if = lambda { |arg| return true }
|
31
|
+
self.display_type = :button
|
32
|
+
self.action_type = :default
|
29
33
|
end
|
30
34
|
|
31
35
|
class << self
|
@@ -65,7 +65,7 @@ module CmAdmin
|
|
65
65
|
nested_fields = nested_tables.map {|table|
|
66
66
|
Hash[
|
67
67
|
table.to_s + '_attributes',
|
68
|
-
table.to_s.
|
68
|
+
table.to_s.classify.constantize.columns.map(&:name).reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym) + [:id, :_destroy]
|
69
69
|
]
|
70
70
|
}
|
71
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,8 +118,12 @@ 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, display_if: lambda { |arg| return true }, route_type: nil, &block)
|
113
|
-
|
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
|
114
127
|
# self.class.class_eval(&block)
|
115
128
|
end
|
116
129
|
|
data/lib/cm_admin/version.rb
CHANGED
@@ -22,7 +22,7 @@ module CmAdmin
|
|
22
22
|
|
23
23
|
def form_with_all_fields(resource, method)
|
24
24
|
columns = resource.class.columns.dup
|
25
|
-
table_name = resource.
|
25
|
+
table_name = resource.model_name.collection
|
26
26
|
columns.reject! { |i| REJECTABLE.include?(i.name) }
|
27
27
|
url = CmAdmin::Engine.mount_path + "/#{table_name}/#{resource.id}"
|
28
28
|
set_form_for_fields(resource, columns, url, method)
|
@@ -30,7 +30,7 @@ module CmAdmin
|
|
30
30
|
|
31
31
|
def form_with_mentioned_fields(resource, available_fields, method)
|
32
32
|
# columns = resource.class.columns.select { |i| available_fields.map(&:field_name).include?(i.name.to_sym) }
|
33
|
-
table_name = resource.
|
33
|
+
table_name = resource.model_name.collection
|
34
34
|
# columns.reject! { |i| REJECTABLE.include?(i.name) }
|
35
35
|
url = CmAdmin::Engine.mount_path + "/#{table_name}/#{resource.id}"
|
36
36
|
set_form_for_fields(resource, available_fields, url, method)
|
@@ -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
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sajinmp
|
8
8
|
- anbublacky
|
9
|
-
-
|
9
|
+
- AdityaTiwari2102
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-02-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pagy
|
@@ -86,6 +86,7 @@ description: This is an admin panel gem
|
|
86
86
|
email:
|
87
87
|
- sajinprasadkm@gmail.com
|
88
88
|
- anbublacky@gmail.com
|
89
|
+
- taditya.tiwari007@gmail.com
|
89
90
|
executables: []
|
90
91
|
extensions: []
|
91
92
|
extra_rdoc_files: []
|
@@ -152,6 +153,7 @@ files:
|
|
152
153
|
- app/views/cm_admin/main/new.html.slim
|
153
154
|
- app/views/cm_admin/main/show.html.slim
|
154
155
|
- app/views/cm_admin/static/error_401.html.slim
|
156
|
+
- app/views/layouts/_custom_action_modals.html.slim
|
155
157
|
- app/views/layouts/_flash_message.html.slim
|
156
158
|
- app/views/layouts/_left_sidebar_nav.html.slim
|
157
159
|
- app/views/layouts/_quick_links.html.slim
|