cm-admin 0.3.0 → 0.4.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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +74 -0
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +25 -24
  5. data/README.md +5 -3
  6. data/app/assets/stylesheets/cm_admin/base/auth.scss +0 -12
  7. data/app/assets/stylesheets/cm_admin/base/common.scss +1 -1
  8. data/app/assets/stylesheets/cm_admin/base/filters.scss +8 -7
  9. data/app/assets/stylesheets/cm_admin/base/form.scss +7 -73
  10. data/app/assets/stylesheets/cm_admin/base/navbar.scss +1 -3
  11. data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +7 -0
  12. data/app/assets/stylesheets/cm_admin/base/scaffold.scss +39 -2
  13. data/app/assets/stylesheets/cm_admin/base/show.scss +24 -2
  14. data/app/assets/stylesheets/cm_admin/base/table.scss +270 -253
  15. data/app/assets/stylesheets/cm_admin/cm_admin.css.scss +1 -0
  16. data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +22 -10
  17. data/app/assets/stylesheets/cm_admin/components/_range.scss +13 -2
  18. data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +7 -6
  19. data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +1 -0
  20. data/app/assets/stylesheets/cm_admin/scaffold.scss +14 -0
  21. data/app/controllers/cm_admin/application_controller.rb +5 -0
  22. data/app/controllers/cm_admin/exports_controller.rb +1 -1
  23. data/app/controllers/cm_admin/static_controller.rb +12 -0
  24. data/app/helpers/cm_admin/custom_helper.rb +4 -0
  25. data/app/javascript/packs/cm_admin/application.js +15 -1
  26. data/app/javascript/packs/cm_admin/filters.js +331 -16
  27. data/app/javascript/packs/cm_admin/quick_search.js +67 -0
  28. data/app/javascript/packs/cm_admin/scaffolds.js +30 -1
  29. data/app/javascript/stylesheets/cm_admin/application.scss +4 -0
  30. data/app/views/cm_admin/main/_associated_table.html.slim +60 -0
  31. data/app/views/cm_admin/main/_cm_pagy_nav.html.slim +6 -6
  32. data/app/views/cm_admin/main/_filters.html.slim +1 -10
  33. data/app/views/cm_admin/main/_nested_fields.html.slim +7 -0
  34. data/app/views/cm_admin/main/_nested_table_form.html.slim +6 -0
  35. data/app/views/cm_admin/main/_table.html.slim +9 -20
  36. data/app/views/cm_admin/main/_tabs.html.slim +5 -0
  37. data/app/views/cm_admin/main/_top_navbar.html.slim +12 -6
  38. data/app/views/cm_admin/main/associated_index.html.slim +6 -0
  39. data/app/views/cm_admin/main/associated_show.html.slim +6 -0
  40. data/app/views/cm_admin/main/edit.html.slim +10 -7
  41. data/app/views/cm_admin/main/index.html.slim +11 -8
  42. data/app/views/cm_admin/main/show.html.slim +12 -13
  43. data/app/views/cm_admin/static/error_401.html.slim +4 -0
  44. data/app/views/layouts/_flash_message.html.slim +9 -0
  45. data/app/views/layouts/_left_sidebar_nav.html.slim +7 -3
  46. data/app/views/layouts/_quick_links.html.slim +25 -0
  47. data/app/views/layouts/cm_admin.html.slim +25 -1
  48. data/app/views/layouts/static.html.slim +18 -0
  49. data/bin/console +0 -1
  50. data/cm_admin.gemspec +2 -1
  51. data/config/routes.rb +2 -1
  52. data/config/webpack/environment.js +3 -2
  53. data/lib/.DS_Store +0 -0
  54. data/lib/cm_admin/constants.rb +3 -0
  55. data/lib/cm_admin/model.rb +66 -167
  56. data/lib/cm_admin/models/action.rb +18 -2
  57. data/lib/cm_admin/models/cm_show_section.rb +20 -0
  58. data/lib/cm_admin/models/column.rb +49 -4
  59. data/lib/cm_admin/models/controller_method.rb +76 -0
  60. data/lib/cm_admin/models/custom_action.rb +13 -0
  61. data/lib/cm_admin/models/dsl_method.rb +122 -0
  62. data/lib/cm_admin/models/export.rb +16 -5
  63. data/lib/cm_admin/models/field.rb +2 -1
  64. data/lib/cm_admin/models/filter.rb +67 -2
  65. data/lib/cm_admin/models/form_field.rb +21 -0
  66. data/lib/cm_admin/models/tab.rb +13 -0
  67. data/lib/cm_admin/version.rb +1 -1
  68. data/lib/cm_admin/view_helpers/column_field_helper.rb +29 -0
  69. data/lib/cm_admin/view_helpers/field_display_helper.rb +71 -0
  70. data/lib/cm_admin/view_helpers/filter_helper.rb +190 -0
  71. data/lib/cm_admin/view_helpers/form_field_helper.rb +21 -4
  72. data/lib/cm_admin/view_helpers/form_helper.rb +22 -12
  73. data/lib/cm_admin/view_helpers/manage_column_popup_helper.rb +75 -0
  74. data/lib/cm_admin/view_helpers/navigation_helper.rb +22 -6
  75. data/lib/cm_admin/view_helpers/page_info_helper.rb +36 -0
  76. data/lib/cm_admin/view_helpers.rb +3 -1
  77. data/lib/cm_admin.rb +3 -1
  78. data/lib/generators/cm_admin/install_generator.rb +20 -8
  79. data/package.json +7 -1
  80. data/tmp/cache/webpacker/last-compilation-digest-development +1 -0
  81. data/yarn.lock +52 -17
  82. metadata +46 -9
  83. data/app/controllers/cm_admin/main_controller.rb +0 -8
  84. data/lib/c.png +0 -0
  85. data/lib/cm_admin/view_helpers/field_column_helper.rb +0 -23
  86. data/lib/generators/cm_admin/templates/cm_admin_initializer.rb +0 -4
  87. 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.page-move-btn ==> link.call(pagy.prev, '<', 'aria-label="previous"')
6
+ span ==> link.call(pagy.prev, '<', 'aria-label="previous" class="page-move-btn"')
7
7
  - else
8
- span.page-move-btn.disabled ==> '<'
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.page-num-btn ==> link.call(item)
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.active ==> item
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.page-move-btn == link.call(pagy.next, '>', 'aria-label="next"')
21
+ span == link.call(pagy.next, '>', 'aria-label="next" class="page-move-btn"')
22
22
  - else
23
- span.page-move-btn.disabled == '>'
23
+ span ==> link.call('#', '>', 'class="page-move-btn disabled"')
@@ -1,10 +1 @@
1
- .cm-filters-v2
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" type="button"
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.present? ? column.header.to_s.titleize : column.db_column_name.to_s.titleize
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 = column_for_field_helper(ar_object, column)
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
- / .cm-pagination
40
- / .cm-pagination__lhs Showing 1 to 15 out of 104
41
- / .cm-pagination__rhs
42
- / span.page-move-btn.disabled
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 = @model.current_action.page_title
7
- p.title-sub-text = @model.current_action.page_description
8
- - if @model.current_action.name == 'index'
9
- .cm-navbar__rhs
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 type="button" data-toggle="dropdown"
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="modal" data-target="#exportmodal"
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
@@ -0,0 +1,6 @@
1
+ .cm-index-page
2
+ .index-page
3
+ .index-page__table-container.pt-0
4
+ == render 'cm_admin/main/associated_table'
5
+
6
+ = column_pop_up(@associated_model)
@@ -0,0 +1,6 @@
1
+ - @model.available_fields[@action.name.to_sym].each do |section|
2
+ .info-section
3
+ p.section-heading = section.section_name
4
+ .paper
5
+ - section.available_section_fields.each do |field|
6
+ = show_field(@associated_ar_object, field)
@@ -2,16 +2,19 @@
2
2
  .form-page
3
3
  .form-page__inner
4
4
  .form-wrapper
5
- .flag-alert.mb-4
6
- p.alert-header
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
- .alert-body
11
- p.body-title
12
- | Error heading
13
- p.body-info
14
- | The details of the error would be explained in this line. It could also be listed out as points on below the other if there are multiple reasons.
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
- == render 'cm_admin/main/top_navbar'
2
- .index-page
3
- - if @model.filters.present?
4
- .index-page__filters
5
- == render partial: 'cm_admin/main/filters', locals: { filters: @model.filters }
6
- .index-page__table-container
7
- == render 'cm_admin/main/table'
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
- == render 'cm_admin/main/top_navbar'
2
- .show-page
3
- .show-page__inner
4
- .info-section
5
- p.section-heading
6
- | Section heading
7
- .paper
8
- - @model.available_fields[:show].each do |field|
9
- .info-split
10
- .info-split__lhs
11
- p = field.label.present? ? field.label.to_s : field.field_name.to_s.titleize
12
- .info-split__rhs
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,4 @@
1
+ main.flex-shrink-0
2
+ .container
3
+ h1.mt-5 401
4
+ p.lead You do not authorized to access this page.
@@ -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
- = sidebar_navigation
11
+ = navigation_links('sidebar')
12
12
 
13
- .cm-sidebar__footer
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
- = yield
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
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "cm_admin"
5
4
 
6
5
  # You can add fixtures and/or initialization code here to make experimenting
7
6
  # with your gem easier. You can also use a different console, if you like.
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', '~> 3.13'
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
@@ -1,6 +1,7 @@
1
1
  CmAdmin::Engine.routes.draw do
2
- controller 'main' do
2
+ controller 'static' do
3
3
  get '/', action: 'dashboard'
4
+ get '/access-denied', action: 'error_403'
4
5
  end
5
6
 
6
7
  controller 'exports' do
@@ -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/src/jquery',
7
- jQuery: 'jquery/src/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
@@ -27,6 +27,9 @@ module CmAdmin
27
27
  destroy: {
28
28
  verb: :delete,
29
29
  path: ':id'
30
+ },
31
+ custom_action: {
32
+ verb: :post
30
33
  }
31
34
  }
32
35
  REJECTABLE_FIELDS = %w(id created_at updated_at)