cm-admin 0.3.0 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +25 -24
- data/README.md +5 -3
- data/app/assets/stylesheets/cm_admin/base/auth.scss +0 -12
- data/app/assets/stylesheets/cm_admin/base/common.scss +1 -1
- data/app/assets/stylesheets/cm_admin/base/filters.scss +8 -7
- data/app/assets/stylesheets/cm_admin/base/form.scss +7 -73
- data/app/assets/stylesheets/cm_admin/base/navbar.scss +1 -3
- data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +7 -0
- data/app/assets/stylesheets/cm_admin/base/scaffold.scss +39 -2
- data/app/assets/stylesheets/cm_admin/base/show.scss +24 -2
- data/app/assets/stylesheets/cm_admin/base/table.scss +270 -253
- data/app/assets/stylesheets/cm_admin/cm_admin.css.scss +1 -0
- data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +22 -10
- data/app/assets/stylesheets/cm_admin/components/_range.scss +13 -2
- data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +7 -6
- data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +1 -0
- data/app/assets/stylesheets/cm_admin/scaffold.scss +14 -0
- data/app/controllers/cm_admin/application_controller.rb +5 -0
- data/app/controllers/cm_admin/exports_controller.rb +1 -1
- data/app/controllers/cm_admin/static_controller.rb +12 -0
- data/app/helpers/cm_admin/custom_helper.rb +4 -0
- data/app/javascript/packs/cm_admin/application.js +15 -1
- data/app/javascript/packs/cm_admin/filters.js +331 -16
- data/app/javascript/packs/cm_admin/quick_search.js +67 -0
- data/app/javascript/packs/cm_admin/scaffolds.js +30 -1
- data/app/javascript/stylesheets/cm_admin/application.scss +4 -0
- data/app/views/cm_admin/main/_associated_table.html.slim +60 -0
- data/app/views/cm_admin/main/_cm_pagy_nav.html.slim +6 -6
- data/app/views/cm_admin/main/_filters.html.slim +1 -10
- data/app/views/cm_admin/main/_nested_fields.html.slim +7 -0
- data/app/views/cm_admin/main/_nested_table_form.html.slim +6 -0
- data/app/views/cm_admin/main/_table.html.slim +9 -20
- data/app/views/cm_admin/main/_tabs.html.slim +5 -0
- data/app/views/cm_admin/main/_top_navbar.html.slim +12 -6
- data/app/views/cm_admin/main/associated_index.html.slim +6 -0
- data/app/views/cm_admin/main/associated_show.html.slim +6 -0
- data/app/views/cm_admin/main/edit.html.slim +10 -7
- data/app/views/cm_admin/main/index.html.slim +11 -8
- data/app/views/cm_admin/main/show.html.slim +12 -13
- data/app/views/cm_admin/static/error_401.html.slim +4 -0
- data/app/views/layouts/_flash_message.html.slim +9 -0
- data/app/views/layouts/_left_sidebar_nav.html.slim +7 -3
- data/app/views/layouts/_quick_links.html.slim +25 -0
- data/app/views/layouts/cm_admin.html.slim +25 -1
- data/app/views/layouts/static.html.slim +18 -0
- data/bin/console +0 -1
- data/cm_admin.gemspec +2 -1
- data/config/routes.rb +2 -1
- data/config/webpack/environment.js +3 -2
- data/lib/.DS_Store +0 -0
- data/lib/cm_admin/constants.rb +3 -0
- data/lib/cm_admin/model.rb +66 -167
- data/lib/cm_admin/models/action.rb +18 -2
- data/lib/cm_admin/models/cm_show_section.rb +20 -0
- data/lib/cm_admin/models/column.rb +49 -4
- data/lib/cm_admin/models/controller_method.rb +76 -0
- data/lib/cm_admin/models/custom_action.rb +13 -0
- data/lib/cm_admin/models/dsl_method.rb +122 -0
- data/lib/cm_admin/models/export.rb +16 -5
- data/lib/cm_admin/models/field.rb +2 -1
- data/lib/cm_admin/models/filter.rb +67 -2
- data/lib/cm_admin/models/form_field.rb +21 -0
- data/lib/cm_admin/models/tab.rb +13 -0
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/column_field_helper.rb +29 -0
- data/lib/cm_admin/view_helpers/field_display_helper.rb +71 -0
- data/lib/cm_admin/view_helpers/filter_helper.rb +190 -0
- data/lib/cm_admin/view_helpers/form_field_helper.rb +21 -4
- data/lib/cm_admin/view_helpers/form_helper.rb +22 -12
- data/lib/cm_admin/view_helpers/manage_column_popup_helper.rb +75 -0
- data/lib/cm_admin/view_helpers/navigation_helper.rb +22 -6
- data/lib/cm_admin/view_helpers/page_info_helper.rb +36 -0
- data/lib/cm_admin/view_helpers.rb +3 -1
- data/lib/cm_admin.rb +3 -1
- data/lib/generators/cm_admin/install_generator.rb +20 -8
- data/package.json +7 -1
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -0
- data/yarn.lock +52 -17
- metadata +46 -9
- data/app/controllers/cm_admin/main_controller.rb +0 -8
- data/lib/c.png +0 -0
- data/lib/cm_admin/view_helpers/field_column_helper.rb +0 -23
- data/lib/generators/cm_admin/templates/cm_admin_initializer.rb +0 -4
- data/yarn-error.log +0 -44
@@ -0,0 +1,60 @@
|
|
1
|
+
.admin-table-index
|
2
|
+
.table-top
|
3
|
+
p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model.ar_model.table_name} found"
|
4
|
+
.table-top__column-action
|
5
|
+
button.secondary-btn.column-btn data-target="#columnActionModal" data-toggle="modal" type="button"
|
6
|
+
span
|
7
|
+
i.fa.fa-columns.bolder
|
8
|
+
span
|
9
|
+
i.fa.fa-angle-down
|
10
|
+
|
11
|
+
.new-admin-table.scrollable
|
12
|
+
table.cm-table
|
13
|
+
thead.cm-table__header
|
14
|
+
tr.header-row
|
15
|
+
th.check-box-space
|
16
|
+
span
|
17
|
+
input.cm-checkbox type="checkbox"
|
18
|
+
- @model.available_fields[@action.name.to_sym].each do |column|
|
19
|
+
th = column.header
|
20
|
+
tbody.cm-table__body
|
21
|
+
- @associated_ar_object.data.each do |ar_object|
|
22
|
+
tr.body-row
|
23
|
+
td.check-box-space
|
24
|
+
span
|
25
|
+
input.cm-checkbox type="checkbox"
|
26
|
+
- @model.available_fields[@action.name.to_sym].each do |column|
|
27
|
+
td
|
28
|
+
span class="#{column.cm_css_class} text-ellipsis" = show_field_value(ar_object, column)
|
29
|
+
td.row-action-cell
|
30
|
+
.row-action-tool
|
31
|
+
button.secondary-btn.tool-btn type="button"
|
32
|
+
span
|
33
|
+
i.fa.fa-bars.bolder
|
34
|
+
span
|
35
|
+
i.fa.fa-angle-down
|
36
|
+
.popup-card.table-export-popup.hidden
|
37
|
+
.popup-option
|
38
|
+
a href="#{page_url('edit', ar_object)}"
|
39
|
+
| Edit
|
40
|
+
/ .cm-pagination
|
41
|
+
/ .cm-pagination__lhs Showing 1 to 15 out of 104
|
42
|
+
/ .cm-pagination__rhs
|
43
|
+
/ span.page-move-btn.disabled
|
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
|
56
|
+
|
57
|
+
.cm-pagination
|
58
|
+
.cm-pagination__lhs Showing #{@associated_ar_object.pagy.from} to #{@associated_ar_object.pagy.to} out of #{@associated_ar_object.pagy.count}
|
59
|
+
.cm-pagination__rhs
|
60
|
+
== render partial: 'cm_admin/main/cm_pagy_nav', locals: { pagy: @associated_ar_object.pagy }
|
@@ -3,21 +3,21 @@
|
|
3
3
|
nav.pagy_nav.pagination role="navigation" aria-label="pager"
|
4
4
|
|
5
5
|
- if pagy.prev
|
6
|
-
span
|
6
|
+
span ==> link.call(pagy.prev, '<', 'aria-label="previous" class="page-move-btn"')
|
7
7
|
- else
|
8
|
-
span.page-move-btn
|
8
|
+
span ==> link.call('#', '<', 'class="page-move-btn disabled"')
|
9
9
|
|
10
10
|
- pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
11
11
|
- if item.is_a?(Integer) # page link
|
12
|
-
span
|
12
|
+
span ==> link.call(item, item, 'class="page-num-btn"')
|
13
13
|
|
14
14
|
- elsif item.is_a?(String) # current page
|
15
|
-
span.page-num-btn
|
15
|
+
span ==> link.call(item, item, 'class="page-num-btn active"')
|
16
16
|
|
17
17
|
- elsif item == :gap # page gap
|
18
18
|
span.page.gap ==> pagy_t('pagy.nav.gap')
|
19
19
|
|
20
20
|
- if pagy.next
|
21
|
-
span
|
21
|
+
span == link.call(pagy.next, '>', 'aria-label="next" class="page-move-btn"')
|
22
22
|
- else
|
23
|
-
span.page-move-btn
|
23
|
+
span ==> link.call('#', '>', 'class="page-move-btn disabled"')
|
@@ -1,10 +1 @@
|
|
1
|
-
|
2
|
-
.cm-filters-v2__inner
|
3
|
-
.filter-search
|
4
|
-
.form-field
|
5
|
-
.field-input-wrapper
|
6
|
-
- filters.each do |filter|
|
7
|
-
- if filter.filter_type.eql?(:search)
|
8
|
-
input.search-input value="#{params.dig(:filters, :search)}" placeholder="#{filter.placeholder}"
|
9
|
-
span.search-input-icon
|
10
|
-
i.fa.fa-search
|
1
|
+
= generate_filters(filters)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
.nested-fields
|
2
|
+
- @model.available_fields[action_name.to_sym][assoc_name].each do |field|
|
3
|
+
= f.label field.field_name, class: 'field-label'
|
4
|
+
br
|
5
|
+
= input_field_for_column(f, field)
|
6
|
+
- if @reflections.select {|x| x if x.name == assoc_name}.first.macro == :has_many
|
7
|
+
= link_to_remove_association "remove #{assoc_name}", f
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#tasks
|
2
|
+
= f.fields_for table_name do |record|
|
3
|
+
= render partial: '/cm_admin/main/nested_fields', locals: { f: record, assoc_name: table_name }
|
4
|
+
- if @reflections.select {|x| x if x.name == table_name}.first.macro == :has_many
|
5
|
+
.links
|
6
|
+
= link_to_add_association "add #{table_name}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: table_name }}
|
@@ -2,13 +2,13 @@
|
|
2
2
|
.table-top
|
3
3
|
p.table-top__total-count = "#{@ar_object.pagy.count} #{@model.ar_model.table_name} found"
|
4
4
|
.table-top__column-action
|
5
|
-
button.secondary-btn.column-btn data-target="#columnActionModal" data-toggle="modal"
|
5
|
+
button.secondary-btn.column-btn data-bs-target="#columnActionModal" data-bs-toggle="modal"
|
6
6
|
span
|
7
7
|
i.fa.fa-columns.bolder
|
8
8
|
span
|
9
9
|
i.fa.fa-angle-down
|
10
10
|
|
11
|
-
.new-admin-table
|
11
|
+
.new-admin-table.scrollable
|
12
12
|
table.cm-table
|
13
13
|
thead.cm-table__header
|
14
14
|
tr.header-row
|
@@ -16,7 +16,7 @@
|
|
16
16
|
span
|
17
17
|
input.cm-checkbox type="checkbox"
|
18
18
|
- @model.available_fields[:index].each do |column|
|
19
|
-
th = column.header
|
19
|
+
th = column.header
|
20
20
|
tbody.cm-table__body
|
21
21
|
- @ar_object.data.each do |ar_object|
|
22
22
|
tr.body-row
|
@@ -24,7 +24,8 @@
|
|
24
24
|
span
|
25
25
|
input.cm-checkbox type="checkbox"
|
26
26
|
- @model.available_fields[:index].each do |column|
|
27
|
-
td
|
27
|
+
td.text-ellipsis
|
28
|
+
span class="#{column.cm_css_class}" = show_field_value(ar_object, column)
|
28
29
|
td.row-action-cell
|
29
30
|
.row-action-tool
|
30
31
|
button.secondary-btn.tool-btn type="button"
|
@@ -36,22 +37,10 @@
|
|
36
37
|
.popup-option
|
37
38
|
a href="#{page_url('edit', ar_object)}"
|
38
39
|
| Edit
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
/ i.fa.fa-angle-double-left.bolder.f14
|
44
|
-
/ span.page-move-btn.disabled
|
45
|
-
/ i.fa.fa-chevron-left.bolder
|
46
|
-
/ span.page-num-btn.active 1
|
47
|
-
/ span.page-num-btn 2
|
48
|
-
/ span.page-num-btn 3
|
49
|
-
/ span.page-num-btn 4
|
50
|
-
/ span.page-num-btn 5
|
51
|
-
/ span.page-move-btn
|
52
|
-
/ i.fa.fa-chevron-right.bolder
|
53
|
-
/ span.page-move-btn
|
54
|
-
/ i.fa.fa-angle-double-right.bolder.f14
|
40
|
+
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
41
|
+
- if custom_action.display_if.call(ar_object)
|
42
|
+
.popup-option
|
43
|
+
= link_to custom_action.name, custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb
|
55
44
|
|
56
45
|
.cm-pagination
|
57
46
|
.cm-pagination__lhs Showing #{@ar_object.pagy.from} to #{@ar_object.pagy.to} out of #{@ar_object.pagy.count}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
ul.nav.nav-pills
|
2
|
+
- @model.available_tabs.each do |nav_item|
|
3
|
+
li.nav-item
|
4
|
+
- nav_item_action_name = nav_item.custom_action.present? ? nav_item.custom_action : 'show'
|
5
|
+
= link_to nav_item.nav_item_name.to_s.titleize, "/cm_admin/#{@model.name.underscore.pluralize}/#{@ar_object.id}/#{nav_item.custom_action}", class: "nav-link #{ nav_item_action_name == action_name ? 'active' : ''}"
|
@@ -3,13 +3,13 @@
|
|
3
3
|
.bread-crumb-area
|
4
4
|
= yield :bread_crumb
|
5
5
|
.nav-title-area
|
6
|
-
p.title-text =
|
7
|
-
p.title-sub-text =
|
8
|
-
-
|
9
|
-
.
|
6
|
+
p.title-text = action_title
|
7
|
+
p.title-sub-text = action_description
|
8
|
+
.cm-navbar__rhs
|
9
|
+
- if @model.current_action.name == 'index'
|
10
10
|
.export-container
|
11
11
|
.dropdown
|
12
|
-
button.secondary-btn
|
12
|
+
button.secondary-btn data-bs-toggle='dropdown'
|
13
13
|
span
|
14
14
|
i.fa.fa-arrow-down
|
15
15
|
span
|
@@ -18,8 +18,14 @@
|
|
18
18
|
i.fa.fa-angle-down
|
19
19
|
ul.dropdown-menu.export-popup
|
20
20
|
li
|
21
|
-
.popup-option.pointer data-toggle=
|
21
|
+
.popup-option.pointer data-bs-toggle='modal' data-bs-target='#exportmodal'
|
22
22
|
span Export
|
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
|
+
= link_to custom_action.name, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
|
28
|
+
- elsif @model.current_action.name == 'show'
|
29
|
+
- @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
|
@@ -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
|
@@ -1,9 +1,12 @@
|
|
1
|
-
|
2
|
-
.index-page
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
.cm-index-page
|
2
|
+
.index-page.page-container
|
3
|
+
.sticky-container
|
4
|
+
== render 'cm_admin/main/top_navbar'
|
5
|
+
- if @model.filters.present?
|
6
|
+
.index-page__filters
|
7
|
+
== render partial: 'cm_admin/main/filters', locals: { filters: @model.filters }
|
8
|
+
.index-page__table-container
|
9
|
+
== render 'cm_admin/main/table'
|
8
10
|
|
9
|
-
= column_pop_up(@model)
|
11
|
+
= column_pop_up(@model)
|
12
|
+
= manage_column_pop_up(@model)
|
@@ -1,13 +1,12 @@
|
|
1
|
-
|
2
|
-
.show-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
p = @ar_object.send(field.field_name)
|
1
|
+
.show-page.page-container
|
2
|
+
.show-page__tabs.sticky-container
|
3
|
+
.cm-tabs-bar
|
4
|
+
== render 'cm_admin/main/top_navbar'
|
5
|
+
== render 'cm_admin/main/tabs'
|
6
|
+
.show-page__inner.scrollable
|
7
|
+
- @model.available_fields[:show].each do |section|
|
8
|
+
.info-section
|
9
|
+
p.section-heading = section.section_name
|
10
|
+
.paper
|
11
|
+
- section.available_section_fields.each do |field|
|
12
|
+
= show_field(@ar_object, field)
|
@@ -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'})
|
@@ -5,12 +5,15 @@
|
|
5
5
|
.cm-sidebar__quick-search
|
6
6
|
span
|
7
7
|
i.fa.fa-search
|
8
|
-
input type="text" placeholder="Quick Links"
|
8
|
+
input data-bs-target="#quickSearchModal" data-bs-toggle="modal" type="text" placeholder="Quick Links"
|
9
9
|
|
10
10
|
.cm-sidebar__menu-wrapper
|
11
|
-
=
|
11
|
+
= navigation_links('sidebar')
|
12
12
|
|
13
|
-
|
13
|
+
.sidebar-menu__tabs-wrapper
|
14
|
+
|
15
|
+
|
16
|
+
.sidebar__footer
|
14
17
|
.profile-name
|
15
18
|
span.profile-avatar J
|
16
19
|
| John Doe
|
@@ -28,3 +31,4 @@
|
|
28
31
|
.auth-option
|
29
32
|
= link_to '/sign-out', method: :delete, class: 'auth-link'
|
30
33
|
| Logout
|
34
|
+
= render 'layouts/quick_links'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#quickSearchModal.modal.fade.quick-search-modal aria-hidden="true" aria-labelledby="exampleModalLabel" role="dialog" tabindex="-1"
|
2
|
+
.modal-dialog role="document"
|
3
|
+
.modal-content
|
4
|
+
.modal-body
|
5
|
+
.quick-search-field
|
6
|
+
.form-field
|
7
|
+
.field-input-wrapper
|
8
|
+
input#quick-search-input.search-input placeholder="Search" data-behaviour="quick-input-search" autocomplete="off"
|
9
|
+
span.search-input-icon
|
10
|
+
i.fa.fa-search
|
11
|
+
span.clear-search.hidden
|
12
|
+
i.fa.fa-times
|
13
|
+
.search-results-container.list-area
|
14
|
+
= navigation_links('quick_links')
|
15
|
+
.results-action
|
16
|
+
.select
|
17
|
+
span.move-arrow
|
18
|
+
i.fa.fa-long-arrow-up
|
19
|
+
span.move-arrow
|
20
|
+
i.fa.fa-long-arrow-down
|
21
|
+
span Select
|
22
|
+
button.text-btn.enter-btn
|
23
|
+
| ENTER
|
24
|
+
button.text-btn.open-btn
|
25
|
+
| open
|
@@ -7,7 +7,11 @@ html
|
|
7
7
|
= csrf_meta_tags
|
8
8
|
= csp_meta_tag
|
9
9
|
= stylesheet_link_tag 'cm_admin/cm_admin', media: 'all', 'data-turbolinks-track': 'reload'
|
10
|
+
= stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
|
11
|
+
link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /
|
10
12
|
= javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
|
13
|
+
script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"
|
14
|
+
script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"
|
11
15
|
body
|
12
16
|
- flash.each do |type, msg|
|
13
17
|
.alert class="alert-#{type}"
|
@@ -15,4 +19,24 @@ html
|
|
15
19
|
.cm-admin
|
16
20
|
= render 'layouts/left_sidebar_nav'
|
17
21
|
.panel-area
|
18
|
-
|
22
|
+
- if defined?(@action) && @action&.layout_type.to_s == 'cm_association_show'
|
23
|
+
.show-page.page-container
|
24
|
+
.show-page__tabs.sticky-container
|
25
|
+
.cm-tabs-bar
|
26
|
+
== render 'cm_admin/main/top_navbar'
|
27
|
+
== render 'cm_admin/main/tabs'
|
28
|
+
.show-page__inner.scrollable
|
29
|
+
= yield
|
30
|
+
- elsif defined?(@action) && @action&.layout_type.to_s == 'cm_association_index'
|
31
|
+
.show-page.page-container
|
32
|
+
.show-page__tabs.sticky-container
|
33
|
+
.cm-tabs-bar
|
34
|
+
== render 'cm_admin/main/top_navbar'
|
35
|
+
== render 'cm_admin/main/tabs'
|
36
|
+
- if @associated_model.filters.present?
|
37
|
+
.index-page__filters
|
38
|
+
== render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
|
39
|
+
= yield
|
40
|
+
- else
|
41
|
+
= yield
|
42
|
+
= render 'layouts/flash_message'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
title
|
5
|
+
| Admin
|
6
|
+
meta[name="viewport" content="width=device-width,initial-scale=1"]
|
7
|
+
= csrf_meta_tags
|
8
|
+
= csp_meta_tag
|
9
|
+
= stylesheet_link_tag 'cm_admin/cm_admin', media: 'all', 'data-turbolinks-track': 'reload'
|
10
|
+
= stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
|
11
|
+
= javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
|
12
|
+
body
|
13
|
+
- flash.each do |type, msg|
|
14
|
+
.alert class="alert-#{type}"
|
15
|
+
= msg
|
16
|
+
.cm-admin-static
|
17
|
+
.d-flex.flex-column.h-100
|
18
|
+
= yield
|
data/bin/console
CHANGED
data/cm_admin.gemspec
CHANGED
@@ -26,8 +26,9 @@ 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'
|
33
|
+
spec.add_runtime_dependency 'cocoon', '~> 1.2.15'
|
33
34
|
end
|
data/config/routes.rb
CHANGED
@@ -3,8 +3,9 @@ const { environment } = require('@rails/webpacker')
|
|
3
3
|
const webpack = require('webpack')
|
4
4
|
environment.plugins.prepend('Provide',
|
5
5
|
new webpack.ProvidePlugin({
|
6
|
-
$: 'jquery
|
7
|
-
jQuery: 'jquery
|
6
|
+
$: 'jquery',
|
7
|
+
jQuery: 'jquery',
|
8
|
+
moment: 'moment',
|
8
9
|
Popper: ['popper.js', 'default']
|
9
10
|
})
|
10
11
|
)
|
data/lib/.DS_Store
ADDED
Binary file
|