swop 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +47 -9
  3. data/app/assets/images/swop/favicon.ico +0 -0
  4. data/app/assets/stylesheets/rails_admin/application.scss.erb +11 -34
  5. data/app/assets/stylesheets/{rails_admin/custom/base/base.scss → swop/swop-base/swop-base.scss} +1 -1
  6. data/app/assets/stylesheets/swop/swop-base/swop-typography.scss +11 -0
  7. data/app/assets/stylesheets/swop/swop-colors/swop-colors.scss +2 -0
  8. data/app/assets/stylesheets/swop/swop-core/swop-bootstrap-variables.scss +172 -0
  9. data/app/assets/stylesheets/{rails_admin/custom/base/mixins.scss → swop/swop-core/swop-mixins.scss} +0 -16
  10. data/app/assets/stylesheets/swop/swop-core/swop-variables.scss +34 -0
  11. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-base/swop-base.scss +3 -0
  12. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-base/swop-main.scss +25 -0
  13. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-base/swop-typography.scss +4 -0
  14. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-colors/swop-amethyst.scss +29 -0
  15. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-colors/swop-dark.scss +29 -0
  16. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-colors/swop-forest.scss +29 -0
  17. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-colors/swop-light.scss +29 -0
  18. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-colors/swop-royal.scss +29 -0
  19. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-alerts.scss +12 -0
  20. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-badges.scss +31 -0
  21. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-buttons.scss +133 -0
  22. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-dropdowns.scss +26 -0
  23. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-filters.scss +57 -0
  24. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-forms.scss +158 -0
  25. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-images.scss +31 -0
  26. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-input-groups.scss +18 -0
  27. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-loading.scss +14 -0
  28. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-navbar.scss +15 -0
  29. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-navs.scss +77 -0
  30. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-offcanvas.scss +64 -0
  31. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-pagination.scss +21 -0
  32. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-progress.scss +3 -0
  33. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-sidebars.scss +49 -0
  34. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-tables.scss +82 -0
  35. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-components/swop-tiles.scss +20 -0
  36. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-core/swop-bootstrap-variables.scss +149 -0
  37. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-core/swop-variables.scss +41 -0
  38. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-layouts/swop-containers.scss +24 -0
  39. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-layouts/swop-header.scss +15 -0
  40. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-amethyst.scss +35 -0
  41. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-base.scss +3 -0
  42. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-components.scss +17 -0
  43. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-dark.scss +35 -0
  44. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-forest.scss +35 -0
  45. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-layouts.scss +2 -0
  46. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-light.scss +35 -0
  47. data/app/assets/stylesheets/swop/swop-themes/swop-simple/swop-simple-royal.scss +35 -0
  48. data/app/assets/stylesheets/swop/swop.scss +8 -0
  49. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +7 -0
  50. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +5 -0
  51. data/app/views/kaminari/ra-twitter-bootstrap/default/_next_page.html.erb +9 -0
  52. data/app/views/kaminari/ra-twitter-bootstrap/default/_prev_page.html.erb +9 -0
  53. data/app/views/kaminari/ra-twitter-bootstrap/swop-simple/_next_page.html.erb +9 -0
  54. data/app/views/kaminari/ra-twitter-bootstrap/swop-simple/_prev_page.html.erb +9 -0
  55. data/app/views/layouts/rails_admin/_head.html.erb +5 -0
  56. data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +5 -1
  57. data/app/views/layouts/rails_admin/application.html.erb +5 -24
  58. data/app/views/layouts/rails_admin/content.html.erb +4 -56
  59. data/app/views/layouts/rails_admin/default/_application.html.erb +27 -0
  60. data/app/views/layouts/rails_admin/default/_content.html.erb +22 -0
  61. data/app/views/layouts/rails_admin/default/_head.html.erb +32 -0
  62. data/app/views/layouts/rails_admin/default/_sidebar_navigation.html.erb +5 -0
  63. data/app/views/layouts/rails_admin/swop-simple/_application.html.erb +17 -0
  64. data/app/views/layouts/rails_admin/swop-simple/_content.html.erb +41 -0
  65. data/app/views/layouts/rails_admin/swop-simple/_head.html.erb +42 -0
  66. data/app/views/layouts/rails_admin/swop-simple/_sidebar_navigation.html.erb +12 -0
  67. data/app/views/rails_admin/main/_delete_notice.html.erb +7 -0
  68. data/app/views/rails_admin/main/default/_delete.html.erb +21 -0
  69. data/app/views/rails_admin/main/default/_delete_notice.html.erb +34 -0
  70. data/app/views/rails_admin/main/default/_edit.html.erb +3 -0
  71. data/app/views/rails_admin/main/default/_export.html.erb +149 -0
  72. data/app/views/rails_admin/main/default/_history.html.erb +80 -0
  73. data/app/views/rails_admin/main/default/_index.html.erb +184 -0
  74. data/app/views/rails_admin/main/default/_new.html.erb +3 -0
  75. data/app/views/rails_admin/main/default/_show.html.erb +30 -0
  76. data/app/views/rails_admin/main/delete.html.erb +5 -19
  77. data/app/views/rails_admin/main/edit.html.erb +5 -5
  78. data/app/views/rails_admin/main/export.html.erb +5 -128
  79. data/app/views/rails_admin/main/history.html.erb +5 -0
  80. data/app/views/rails_admin/main/index.html.erb +4 -169
  81. data/app/views/rails_admin/main/new.html.erb +5 -5
  82. data/app/views/rails_admin/main/show.html.erb +5 -28
  83. data/app/views/rails_admin/main/swop-simple/_delete.html.erb +11 -0
  84. data/app/views/rails_admin/main/swop-simple/_delete_notice.html.erb +23 -0
  85. data/app/views/rails_admin/main/swop-simple/_edit.html.erb +3 -0
  86. data/app/views/rails_admin/main/swop-simple/_export.html.erb +90 -0
  87. data/app/views/rails_admin/main/swop-simple/_history.html.erb +80 -0
  88. data/app/views/rails_admin/main/swop-simple/_index.html.erb +169 -0
  89. data/app/views/rails_admin/main/swop-simple/_new.html.erb +3 -0
  90. data/app/views/rails_admin/main/swop-simple/_show.html.erb +18 -0
  91. data/lib/swop/engine.rb +8 -3
  92. data/lib/swop/railtie.rb +7 -0
  93. data/lib/swop/version.rb +1 -1
  94. data/lib/swop.rb +20 -1
  95. metadata +101 -84
  96. data/CHANGELOG.md +0 -5
  97. data/CODE_OF_CONDUCT.md +0 -132
  98. data/LICENSE +0 -201
  99. data/Rakefile +0 -4
  100. data/app/assets/javascripts/rails_admin/application.js.erb +0 -32
  101. data/app/assets/javascripts/rails_admin/custom/filtering-select.js +0 -304
  102. data/app/assets/javascripts/rails_admin/custom/sidescroll.js +0 -20
  103. data/app/assets/javascripts/rails_admin/custom/ui.js +0 -11
  104. data/app/assets/stylesheets/rails_admin/custom/base/bootstrap-variables.scss +0 -196
  105. data/app/assets/stylesheets/rails_admin/custom/base/typography.scss +0 -16
  106. data/app/assets/stylesheets/rails_admin/custom/base/variables.scss +0 -86
  107. data/app/assets/stylesheets/rails_admin/custom/components/breadcrumbs.scss +0 -18
  108. data/app/assets/stylesheets/rails_admin/custom/components/buttons.scss +0 -55
  109. data/app/assets/stylesheets/rails_admin/custom/components/dropdowns.scss +0 -40
  110. data/app/assets/stylesheets/rails_admin/custom/components/filtering-select.scss +0 -43
  111. data/app/assets/stylesheets/rails_admin/custom/components/forms.scss +0 -25
  112. data/app/assets/stylesheets/rails_admin/custom/components/images.scss +0 -21
  113. data/app/assets/stylesheets/rails_admin/custom/components/navbar.scss +0 -18
  114. data/app/assets/stylesheets/rails_admin/custom/components/navs.scss +0 -28
  115. data/app/assets/stylesheets/rails_admin/custom/components/offcanvas.scss +0 -18
  116. data/app/assets/stylesheets/rails_admin/custom/components/progress.scss +0 -11
  117. data/app/assets/stylesheets/rails_admin/custom/components/sidebar.scss +0 -115
  118. data/app/assets/stylesheets/rails_admin/custom/components/table.scss +0 -59
  119. data/app/assets/stylesheets/rails_admin/custom/components/tiles.scss +0 -20
  120. data/app/assets/stylesheets/rails_admin/custom/layouts/body.scss +0 -10
  121. data/app/assets/stylesheets/rails_admin/custom/layouts/containers.scss +0 -31
  122. data/app/helpers/rails_admin/application_helper.rb +0 -270
  123. data/app/views/layouts/rails_admin/custom/_nav.html.erb +0 -10
  124. data/app/views/rails_admin/main/_submit_buttons.html.erb +0 -25
  125. data/app/views/rails_admin/main/dashboard.html.erb +0 -70
  126. data/sig/swop.rbs +0 -4
@@ -1,57 +1,5 @@
1
- <header class="header mb-4 mb-md-5 mb-lg-6">
2
- <div class="row align-items-center gx-4 gy-0 gx-md-8">
3
- <div class="col text-truncate">
4
- <nav aria-label="breadcrumb">
5
- <%= breadcrumb %>
6
- </nav>
7
- <h1 class="text-truncate mb-0"><%= @page_name %></h1>
8
- </div>
9
- <div class="col-auto">
10
- <div class="dropdown dropdown-admin">
11
- <button class="btn text-start p-0 d-flex align-items-center" type="button" data-bs-toggle="dropdown" aria-expanded="false">
12
- <div class="img-wrapper-avatar flex-shrink-0 shadow">
13
- <%= image_tag(gravatar_url(_current_user.email), alt: "", title: "") %>
14
- </div>
15
- <!-- if md breakpoint -->
16
- <div class="text-truncate ms-md-4 d-none d-md-block">
17
- <div class="text-dark fw-bold lh-sm text-truncate"><%= _current_user.name %></div>
18
- </div>
19
- </button>
20
- <!-- TO-DO: Style dropdowns -->
21
- <% edit_url = rails_admin.url_for(
22
- action: :edit,
23
- model_name: RailsAdmin.config(_current_user.class).abstract_model.to_param,
24
- controller: 'rails_admin/main',
25
- id: _current_user.id
26
- ) %>
27
- <ul class="dropdown-menu dropdown-menu-end">
28
- <li><%= link_to "#{icon "fa-solid", "user", class: "fa-sm fa-fw me-2"}Your account".html_safe, edit_url, class: "dropdown-item" %></li>
29
- <li><%= link_to "#{icon "fa-solid", "right-from-bracket", class: "fa-sm fa-fw me-2"}Log out".html_safe, logout_path, method: logout_method, class: "dropdown-item", data: {turbo: 'false'} %></li>
30
- </ul>
31
- </div>
32
- </div>
33
- <!-- unless lg breakpoint -->
34
- <div class="col-auto d-lg-none">
35
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar" aria-controls="offcanvasNavbar" aria-label="Toggle navigation">
36
- <span class="navbar-toggler-icon"></span>
37
- <span class="navbar-toggler-icon"></span>
38
- <span class="navbar-toggler-icon"></span>
39
- </button>
40
- <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasNavbar" aria-labelledby="offcanvasNavbarLabel">
41
- <div class="offcanvas-body">
42
- <%= render partial: "layouts/rails_admin/custom/nav" %>
43
- </div>
44
- </div>
45
- </div>
46
- </div>
47
- </header>
48
-
49
- <!-- TO-DO: Review this -->
50
- <% flash && flash.each do |key, value| %>
51
- <div class="<%= flash_alert_class(key) %> alert alert-dismissible">
52
- <%= value %>
53
- <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
54
- </div>
1
+ <% if Swop.configuration.style == :simple %>
2
+ <%= render partial: "layouts/rails_admin/swop-simple/content" %>
3
+ <% else %>
4
+ <%= render partial: "layouts/rails_admin/default/content" %>
55
5
  <% end %>
56
-
57
- <%= yield %>
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <%= render "layouts/rails_admin/head" %>
5
+ </head>
6
+ <body class="rails_admin">
7
+ <div data-i18n-options="<%= I18n.t("admin.js").to_json %>" id="admin-js"></div>
8
+ <div class="badge bg-warning" id="loading" style="display:none; position:fixed; right:20px; bottom:20px; z-index:100000">
9
+ <%= t('admin.loading') %>
10
+ </div>
11
+ <nav class="navbar navbar-expand-md fixed-top <%= RailsAdmin::Config.navbar_css_classes.join(' ') %>">
12
+ <%= render "layouts/rails_admin/navigation" %>
13
+ </nav>
14
+ <div class="container-fluid">
15
+ <div class="row">
16
+ <div class="col-sm-3 col-md-2 flex-wrap p-0">
17
+ <%= render "layouts/rails_admin/sidebar_navigation" %>
18
+ </div>
19
+ <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2">
20
+ <div class="container-fluid">
21
+ <%= render template: 'layouts/rails_admin/content' %>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </body>
27
+ </html>
@@ -0,0 +1,22 @@
1
+ <title>
2
+ <%= "#{@abstract_model.try(:pretty_name) || @page_name} | #{[_get_plugin_name[0] || 'Rails', _get_plugin_name[1] || 'Admin'].join(' ')}" %>
3
+ </title>
4
+ <header class="py-2 m-2 border-bottom" data-model="<%= @abstract_model.to_param %>">
5
+ <h1>
6
+ <%= @page_name %>
7
+ </h1>
8
+ </header>
9
+ <% flash && flash.each do |key, value| %>
10
+ <div class="<%= flash_alert_class(key) %> alert alert-dismissible">
11
+ <%= value %>
12
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
13
+ </div>
14
+ <% end %>
15
+ <nav aria-label="breadcrumb">
16
+ <%= breadcrumb %>
17
+ </nav>
18
+ <ul class="nav nav-tabs mb-3">
19
+ <%= menu_for((@abstract_model ? (@object.try(:persisted?) ? :member : :collection) : :root), @abstract_model, @object) %>
20
+ <%= content_for :contextual_tabs %>
21
+ </ul>
22
+ <%= yield %>
@@ -0,0 +1,32 @@
1
+ <meta content="IE=edge" http-equiv="X-UA-Compatible">
2
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
3
+ <meta content="width=device-width, initial-scale=1" name="viewport; charset=utf-8">
4
+ <meta content="NONE,NOARCHIVE" name="robots">
5
+ <meta content="false" name="turbo-prefetch">
6
+ <%= csrf_meta_tag %>
7
+ <% case RailsAdmin::config.asset_source
8
+ when :webpacker %>
9
+ <%= stylesheet_pack_tag "rails_admin", data: {'turbo-track': 'reload'} %>
10
+ <%= javascript_pack_tag "rails_admin", defer: true, data: {'turbo-track': 'reload'} %>
11
+ <% when :sprockets %>
12
+ <% handle_asset_dependency_error do %>
13
+ <%= stylesheet_link_tag "rails_admin/application.css", media: :all, data: {'turbo-track': 'reload'} %>
14
+ <%= javascript_include_tag "rails_admin/application.js", defer: true, data: {'turbo-track': 'reload'} %>
15
+ <% end %>
16
+ <% when :vite %>
17
+ <%= vite_javascript_tag "rails_admin", defer: true, data: {'turbo-track': 'reload'} %>
18
+ <% when :webpack %>
19
+ <%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
20
+ <%= javascript_include_tag "rails_admin.js", defer: true, data: {'turbo-track': 'reload'} %>
21
+ <% when :importmap %>
22
+ <%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
23
+ <%= javascript_inline_importmap_tag(RailsAdmin::Engine.importmap.to_json(resolver: self)) %>
24
+ <%= javascript_importmap_module_preload_tags(RailsAdmin::Engine.importmap) %>
25
+ <%= javascript_importmap_shim_nonce_configuration_tag if respond_to? :javascript_importmap_shim_nonce_configuration_tag %>
26
+ <%= javascript_importmap_shim_tag if respond_to? :javascript_importmap_shim_tag %>
27
+ <%= # Preload jQuery and make it global, unless jQuery UI fails to initialize
28
+ tag.script "import jQuery from 'jquery'; window.jQuery = jQuery;".html_safe, type: "module" %>
29
+ <%= javascript_import_module_tag 'rails_admin' %>
30
+ <% else
31
+ raise "Unknown asset_source: #{RailsAdmin::config.asset_source}"
32
+ end %>
@@ -0,0 +1,5 @@
1
+ <ul class="sidebar col-sm-3 col-md-2 nav btn-toggle-nav flex-column flex-nowrap bg-light">
2
+ <%= main_navigation %>
3
+ <%= root_navigation %>
4
+ <%= static_navigation %>
5
+ </ul>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <%= render "layouts/rails_admin/head" %>
5
+ </head>
6
+ <body class="rails_admin pt-0">
7
+ <div data-i18n-options="<%= I18n.t("admin.js").to_json %>" id="admin-js"></div>
8
+ <div class="loading" id="loading" style="display:none;"><i class="fa-solid fa-spinner fa-spin"></i></div>
9
+ <div class="container-fluid overflow-hidden">
10
+ <%= render "layouts/rails_admin/sidebar_navigation" %>
11
+ <main role="main" class="main flex-grow-1">
12
+ <%= render template: 'layouts/rails_admin/content' %>
13
+ <div class="small text-muted text-center pt-6 pt-md-7 opacity-75 mt-auto"><%= Swop.configuration.style.to_s.titleize %> <%= Swop.configuration.color.to_s.titleize %> Theme by <%= link_to "Swop", "https://www.swopthemes.com", class: "text-reset text-hover-underline fw-semibold", target: "_blank" %></div>
14
+ </main>
15
+ </div>
16
+ </body>
17
+ </html>
@@ -0,0 +1,41 @@
1
+ <title><%= "#{@abstract_model.try(:pretty_name) || @page_name} | #{[_get_plugin_name[0] || 'Rails', _get_plugin_name[1] || 'Admin'].join(' ')}" %></title>
2
+ <header class="header" data-model="<%= @abstract_model.to_param %>">
3
+ <h1 class="me-auto mb-0"><%= @page_name %></h1>
4
+ <% if _current_user %>
5
+ <div class="dropdown">
6
+ <button class="btn btn-current-user" type="button" data-bs-toggle="dropdown" aria-expanded="false">
7
+ <div class="btn-current-user-details text-end text-truncate">
8
+ <span class="btn-current-user-details text-truncate lh-sm" style="margin-top: 2px;">
9
+ <% if _current_user.try(:name).present? %>
10
+ <%= _current_user.name %>
11
+ <% elsif _current_user.try(:email).present? %>
12
+ <%= _current_user.email %>
13
+ <% end %>
14
+ </span>
15
+ </div>
16
+ <div class="tile-avatar flex-shrink-0"><i class="fa-solid fa-user tile-avatar-icon"></i></div>
17
+ </button>
18
+ <ul class="dropdown-menu dropdown-menu-end">
19
+ <li class="dropdown-header"><%= _get_plugin_name[0] || 'Rails' %></li>
20
+ <% if _current_user&.id && RailsAdmin::Config.models.any? { |c| c.abstract_model.model == _current_user.class } %>
21
+ <li><%= link_to "My account", rails_admin.edit_path(model_name: _current_user.class.name.underscore.tr('/', '~'), id: _current_user.id), class: "dropdown-item" %></li>
22
+ <% end %>
23
+ <li><%= link_to "Log out", logout_path, method: logout_method, class: "dropdown-item", data: { turbo: 'false' } %></li>
24
+ </ul>
25
+ </div>
26
+ <% end %>
27
+ <!-- unless xl breakpoint -->
28
+ <button class="navbar-toggler d-xl-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar" aria-controls="offcanvasNavbar" aria-label="Toggle navigation">
29
+ <i class="fa-solid fa-bars"></i>
30
+ </button>
31
+ </header>
32
+ <ul class="nav nav-tabs">
33
+ <%= menu_for((@abstract_model ? (@object.try(:persisted?) ? :member : :collection) : :root), @abstract_model, @object) %>
34
+ <%= content_for :contextual_tabs %>
35
+ </ul>
36
+ <% flash && flash.each do |key, value| %>
37
+ <div class="<%= flash_alert_class(key) %> alert">
38
+ <%= value %>
39
+ </div>
40
+ <% end %>
41
+ <%= yield %>
@@ -0,0 +1,42 @@
1
+ <meta content="IE=edge" http-equiv="X-UA-Compatible">
2
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
3
+ <meta name="viewport" content="width=device-width,initial-scale=1">
4
+ <meta content="NONE,NOARCHIVE" name="robots">
5
+ <meta content="false" name="turbo-prefetch">
6
+ <%= csrf_meta_tag %>
7
+
8
+ <% if RailsAdmin.config.respond_to?(:favicon) && RailsAdmin.config.favicon.present? %>
9
+ <% favicon = RailsAdmin.config.favicon %>
10
+ <% else %>
11
+ <% favicon = "swop/favicon.ico" %>
12
+ <% end %>
13
+
14
+ <%= favicon_link_tag favicon %>
15
+
16
+ <% case RailsAdmin::config.asset_source
17
+ when :webpacker %>
18
+ <%= stylesheet_pack_tag "rails_admin", data: {'turbo-track': 'reload'} %>
19
+ <%= javascript_pack_tag "rails_admin", defer: true, data: {'turbo-track': 'reload'} %>
20
+ <% when :sprockets %>
21
+ <% handle_asset_dependency_error do %>
22
+ <%= stylesheet_link_tag "rails_admin/application.css", media: :all, data: {'turbo-track': 'reload'} %>
23
+ <%= javascript_include_tag "rails_admin/application.js", defer: true, data: {'turbo-track': 'reload'} %>
24
+ <%= stylesheet_link_tag "swop/swop-themes/swop-#{Swop.configuration.style}/swop-#{Swop.configuration.style}-#{Swop.configuration.color}.css", media: :all, data: {'turbo-track': 'reload'} %>
25
+ <% end %>
26
+ <% when :vite %>
27
+ <%= vite_javascript_tag "rails_admin", defer: true, data: {'turbo-track': 'reload'} %>
28
+ <% when :webpack %>
29
+ <%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
30
+ <%= javascript_include_tag "rails_admin.js", defer: true, data: {'turbo-track': 'reload'} %>
31
+ <% when :importmap %>
32
+ <%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
33
+ <%= javascript_inline_importmap_tag(RailsAdmin::Engine.importmap.to_json(resolver: self)) %>
34
+ <%= javascript_importmap_module_preload_tags(RailsAdmin::Engine.importmap) %>
35
+ <%= javascript_importmap_shim_nonce_configuration_tag if respond_to? :javascript_importmap_shim_nonce_configuration_tag %>
36
+ <%= javascript_importmap_shim_tag if respond_to? :javascript_importmap_shim_tag %>
37
+ <%= # Preload jQuery and make it global, unless jQuery UI fails to initialize
38
+ tag.script "import jQuery from 'jquery'; window.jQuery = jQuery;".html_safe, type: "module" %>
39
+ <%= javascript_import_module_tag 'rails_admin' %>
40
+ <% else
41
+ raise "Unknown asset_source: #{RailsAdmin::config.asset_source}"
42
+ end %>
@@ -0,0 +1,12 @@
1
+ <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasNavbar" aria-labelledby="offcanvasNavbarLabel">
2
+ <div class="offcanvas-body">
3
+ <ul class="sidebar nav">
4
+ <li class="nav-item nav-item-dashboard">
5
+ <a class="nav-link <%= 'active' if request.path == rails_admin.dashboard_path %>"href="<%= rails_admin.dashboard_path %>">Dashboard</a>
6
+ </li>
7
+ <%= main_navigation %>
8
+ <%= root_navigation %>
9
+ <%= static_navigation %>
10
+ </ul>
11
+ </div>
12
+ </div>
@@ -0,0 +1,7 @@
1
+ <% object = delete_notice %>
2
+
3
+ <% if Swop.configuration.style == :simple %>
4
+ <%= render partial: "rails_admin/main/swop-simple/delete_notice", locals: { object: object } %>
5
+ <% else %>
6
+ <%= render partial: "rails_admin/main/default/delete_notice", locals: { object: object } %>
7
+ <% end %>
@@ -0,0 +1,21 @@
1
+ <h4>
2
+ <%= t("admin.form.are_you_sure_you_want_to_delete_the_object", model_name: @abstract_model.pretty_name.downcase) %>
3
+ <q><strong><%= @model_config.with(object: @object).object_label %></strong></q>
4
+ <%= t("admin.form.all_of_the_following_related_items_will_be_deleted") %>
5
+ </h4>
6
+ <ul>
7
+ <%= render partial: "delete_notice", object: @object %>
8
+ </ul>
9
+ <%= form_for(@object, url: delete_path(model_name: @abstract_model.to_param, id: @object.id), html: {method: "delete"}) do %>
10
+ <input name="return_to" type="<%= :hidden %>" value="<%= (params[:return_to].presence || request.referer) %>" />
11
+ <div class="form-actions">
12
+ <button class="btn btn-danger" data-disable-with="<%= t("admin.form.confirmation") %>" type="submit">
13
+ <i class="fas fa-check"></i>
14
+ <%= t("admin.form.confirmation") %>
15
+ </button>
16
+ <button class="btn" data-disable-with="<%= t("admin.form.cancel") %>" name="_continue" type="submit">
17
+ <i class="fas fa-times"></i>
18
+ <%= t("admin.form.cancel") %>
19
+ </button>
20
+ </div>
21
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <li style="display:block; margin-top:10px">
2
+ <span class="label label-default">
3
+ <%= @abstract_model.pretty_name %>
4
+ </span>
5
+ <% wording = object.send(@model_config.object_label_method) %>
6
+ <% if show_action = action(:show, @abstract_model, object) %>
7
+ <%= link_to(wording, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: object.id)) %>
8
+ <% else %>
9
+ <%= wording %>
10
+ <% end %>
11
+ <ul>
12
+ <% @abstract_model.each_associated_children(object) do |association, children| %>
13
+ <% humanized_association = @abstract_model.model.human_attribute_name association.name %>
14
+ <% limit = children.count > 12 ? 10 : children.count %>
15
+ <% children.first(limit).each do |child| %>
16
+ <%= content_tag :li, class: dom_class(child) do %>
17
+ <% child_config = RailsAdmin.config(child) %>
18
+ <%= humanized_association.singularize %>
19
+ <% wording = child.send(child_config.object_label_method) %>
20
+ <% if child.id && (show_action = action(:show, child_config.abstract_model, child)) %>
21
+ <%= link_to(wording, url_for(action: show_action.action_name, model_name: child_config.abstract_model.to_param, id: child.id)) %>
22
+ <% else %>
23
+ <%= wording %>
24
+ <% end %>
25
+ <% end %>
26
+ <% end %>
27
+ <% if children.count > limit %>
28
+ <li>
29
+ <%= t('admin.misc.more', count: children.count - limit, models_name: humanized_association) %>
30
+ </li>
31
+ <% end %>
32
+ <% end %>
33
+ </ul>
34
+ </li>
@@ -0,0 +1,3 @@
1
+ <%= rails_admin_form_for @object, url: edit_path(@abstract_model, @object.id), as: @abstract_model.param_key, html: { method: "put", multipart: true, class: "main", data: { title: @page_name } } do |form| %>
2
+ <%= form.generate action: :update %>
3
+ <% end %>
@@ -0,0 +1,149 @@
1
+ <% params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token) %>
2
+ <% visible_fields = @model_config.export.with(view: self, object: @abstract_model.model.new, controller: self.controller).visible_fields %>
3
+ <%= form_tag export_path(params.merge(all: true)), method: 'post', class: "main", data: {turbo: false} do %>
4
+ <input name="send_data" type="hidden" value="true" />
5
+ <fieldset id="fields_to_export" class="mb-3">
6
+ <legend>
7
+ <i class="fas fa-chevron-down"></i>
8
+ <%= t('admin.export.select') %>
9
+ </legend>
10
+ <div class="form-group control-group">
11
+ <div class="col-sm-12">
12
+ <div class="checkbox">
13
+ <label for="check_all">
14
+ <%= check_box_tag 'all', 'all', true, { id: 'check_all' } %>
15
+ <b>
16
+ <%= t('admin.export.select_all_fields') %>
17
+ </b>
18
+ </label>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ <div class="control-group row">
23
+ <div class="col-sm-12">
24
+ <div class="card bg-light my-2 reverse-selection" rel="tooltip" role="button" title="<%= t('admin.export.click_to_reverse_selection') %>">
25
+ <div class="card-body p-2">
26
+ <b><%= t('admin.export.fields_from', name: @model_config.label_plural.downcase) %></b>
27
+ </div>
28
+ </div>
29
+ <div class="controls">
30
+ <div class="row">
31
+ <% visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field| %>
32
+ <% list = field.virtual? ? 'methods' : 'only' %>
33
+ <div class="checkbox col-sm-3 my-1">
34
+ <% if field.association? && field.association.polymorphic? %>
35
+ <label for="schema_<%= list %>_<%= field.method_name %>">
36
+ <%= check_box_tag "schema[#{list}][]", field.method_name, true, { id: "schema_#{list}_#{field.method_name}" } %>
37
+ <%= field.label + " [id]" %>
38
+ </label>
39
+ <% polymorphic_type_column_name = @abstract_model.properties.detect {|p| field.association.foreign_type == p.name }.name %>
40
+ <label for="schema_<%= list %>_<%= polymorphic_type_column_name %>">
41
+ <%= check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { id: "schema_#{list}_#{polymorphic_type_column_name}" } %>
42
+ <%= field.label + " [type]" %>
43
+ </label>
44
+ <% else %>
45
+ <label for="schema_<%= list %>_<%= field.name %>">
46
+ <%= check_box_tag "schema[#{list}][]", field.name, true, { id: "schema_#{list}_#{field.name}" } %>
47
+ <%= field.label %>
48
+ </label>
49
+ <% end %>
50
+ </div>
51
+ <% end %>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ <% visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field| %>
57
+ <% fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? } %>
58
+ <div class="control-group row">
59
+ <div class="col-sm-12">
60
+ <div class="card bg-light my-2 reverse-selection" rel="tooltip" role="button" title="<%= t('admin.export.click_to_reverse_selection') %>">
61
+ <div class="card-body p-2">
62
+ <b><%= t('admin.export.fields_from_associated', name: field.label.downcase) %></b>
63
+ </div>
64
+ </div>
65
+ <div class="controls">
66
+ <div class="row">
67
+ <% fields.each do |associated_model_field| %>
68
+ <% list = associated_model_field.virtual? ? 'methods' : 'only' %>
69
+ <div class="checkbox col-sm-3 my-1">
70
+ <label for="schema_include_<%= field.name %>_<%= list %>_<%= associated_model_field.name %>">
71
+ <%= check_box_tag "schema[include][#{field.name}][#{list}][]", associated_model_field.name, true, { id: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}" } %>
72
+ <%= associated_model_field.label %>
73
+ </label>
74
+ </div>
75
+ <% end %>
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ <% end %>
81
+ </fieldset>
82
+ <fieldset>
83
+ <legend>
84
+ <i class="fas fa-chevron-down"></i>
85
+ <%= t('admin.export.options_for', name: 'csv') %>
86
+ </legend>
87
+ <div class="control-group row">
88
+ <% guessed_encoding = @abstract_model.encoding %>
89
+ <label class="col-sm-2 col-form-label text-md-end" for="csv_options_encoding_to">
90
+ <%= t('admin.export.csv.encoding_to') %>
91
+ </label>
92
+ <div class="col-sm-10 controls">
93
+ <div class="w-50">
94
+ <%= select_tag 'csv_options[encoding_to]', options_for_select(Encoding.name_list.sort), include_blank: true, placeholder: t('admin.misc.search'), :'data-enumeration' => true %>
95
+ </div>
96
+ <p class="form-text">
97
+ <%= t('admin.export.csv.encoding_to_help', name: guessed_encoding) %>
98
+ </p>
99
+ </div>
100
+ </div>
101
+ <div class="control-group row">
102
+ <label class="col-sm-2 col-form-label text-md-end" for="csv_options_skip_header">
103
+ <%= t('admin.export.csv.skip_header') %>
104
+ </label>
105
+ <div class="col-sm-10 controls">
106
+ <div class="col-form-label">
107
+ <label>
108
+ <%= check_box_tag 'csv_options[skip_header]', 'true' %>
109
+ </label>
110
+ </div>
111
+ <p class="form-text">
112
+ <%= t('admin.export.csv.skip_header_help') %>
113
+ </p>
114
+ </div>
115
+ </div>
116
+ <div class="control-group row">
117
+ <label class="col-sm-2 col-form-label text-md-end" for="csv_options_generator_col_sep">
118
+ <%= t('admin.export.csv.col_sep') %>
119
+ </label>
120
+ <div class="col-sm-10 controls">
121
+ <div class="w-50">
122
+ <%= select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), "<comma> ','" => ',', "<semicolon> ';'" => ';', '<tabs>' => "'\t'" }), placeholder: t('admin.misc.search'), :'data-enumeration' => true %>
123
+ </div>
124
+ <p class="form-text">
125
+ <%= t('admin.export.csv.col_sep_help', value: t('admin.export.csv.default_col_sep')) %>
126
+ </p>
127
+ </div>
128
+ </div>
129
+ </fieldset>
130
+ <div class="form-actions row justify-content-end mb-3">
131
+ <div class="col-sm-offset-2 col-sm-10">
132
+ <input name="return_to" type="<%= :hidden %>" value="<%= (params[:return_to].presence || request.referer) %>" />
133
+ <button class="btn btn-primary" name="csv" type="submit">
134
+ <i class="fas fa-check"></i>
135
+ <%= t("admin.export.confirmation", name: 'csv') %>
136
+ </button>
137
+ <button class="btn btn-info" name="json" type="submit">
138
+ <%= t("admin.export.confirmation", name: 'json') %>
139
+ </button>
140
+ <button class="btn btn-info" name="xml" type="submit">
141
+ <%= t("admin.export.confirmation", name: 'xml') %>
142
+ </button>
143
+ <button class="btn btn-light" name="_continue" type="submit">
144
+ <i class="fas fa-times"></i>
145
+ <%= t("admin.form.cancel") %>
146
+ </button>
147
+ </div>
148
+ </div>
149
+ <% end %>
@@ -0,0 +1,80 @@
1
+ <% params = request.params.except(:action, :controller, :model_name) %>
2
+ <% query = params[:query] %>
3
+ <% filter = params[:filter] %>
4
+ <% sort = params[:sort] %>
5
+ <% sort_reverse = params[:sort_reverse] %>
6
+ <% path_method = params[:id] ? "history_show_path" : "history_index_path" %>
7
+ <%= form_tag("", method: "get", class: "search form-inline") do %>
8
+ <div class="card mb-3 p-3 bg-light">
9
+ <div class="row">
10
+ <div class="col-sm-6">
11
+ <div class="input-group">
12
+ <input class="form-control" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>" />
13
+ <button class="btn btn-primary" data-disable-with="<%= '<i class="fas fa-sync"></i> ' + t('admin.misc.refresh') %>" type="submit">
14
+ <i class="fas fa-sync"></i>
15
+ <%= t("admin.misc.refresh") %>
16
+ </button>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <% end %>
22
+ <table class="table table-condensed table-striped table-hover" id="history">
23
+ <thead>
24
+ <tr>
25
+ <% columns = [] %>
26
+ <% columns << { property_name: "created_at", css_class: "created_at",link_text: t('admin.table_headers.created_at') } %>
27
+ <% columns << { property_name: "username", css_class: "username", link_text: t('admin.table_headers.username') } %>
28
+ <% columns << { property_name: "item", css_class: "item", link_text: t('admin.table_headers.item') } if @general %>
29
+ <% columns << { property_name: "message", css_class: "message", link_text: t('admin.table_headers.message') } %>
30
+ <% columns.each do |column| %>
31
+ <% property_name = column[:property_name] %>
32
+ <% selected = (sort == property_name) %>
33
+ <% sort_direction = (sort_reverse ? "headerSortUp" : "headerSortDown" if selected) %>
34
+ <% sort_location = send(path_method, params.except("sort_reverse").merge(model_name: @abstract_model.to_param, sort: property_name).merge(selected && sort_reverse != "true" ? {sort_reverse: "true"} : {})) %>
35
+ <th class="header <%= column[:css_class] %> <%= sort_direction if selected %>" data-href="<%= sort_location %>">
36
+ <%= column[:link_text] %>
37
+ </th>
38
+ <% end %>
39
+ </tr>
40
+ </thead>
41
+ <tbody class="table-group-divider">
42
+ <% @history.each_with_index do |object, index| %>
43
+ <tr>
44
+ <% unless object.created_at.nil? %>
45
+ <td>
46
+ <%= l(object.created_at, format: :long, default: l(object.created_at, format: :long)) %>
47
+ </td>
48
+ <% end %>
49
+ <td>
50
+ <%= object.username %>
51
+ </td>
52
+ <% if @general %>
53
+ <% if o = @abstract_model.get(object.item) %>
54
+ <% label = o.send(@abstract_model.config.object_label_method) %>
55
+ <% if show_action = action(:show, @abstract_model, o) %>
56
+ <td>
57
+ <%= link_to(label, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: o.id)) %>
58
+ </td>
59
+ <% else %>
60
+ <td>
61
+ <%= label %>
62
+ </td>
63
+ <% end %>
64
+ <% else %>
65
+ <td>
66
+ <%= "#{@abstract_model.config.label} ##{object.item}" %>
67
+ </td>
68
+ <% end %>
69
+ <% end %>
70
+ <td>
71
+ <%= object.message.in?(['delete', 'new']) ? t("admin.actions.#{object.message}.done").capitalize : object.message %>
72
+ </td>
73
+ </tr>
74
+ <% end %>
75
+ </tbody>
76
+ </table>
77
+ <% unless params[:all] || !@history.respond_to?(:current_page) %>
78
+ <%= paginate(@history, theme: 'ra-twitter-bootstrap') %>
79
+ <%= link_to(t("admin.misc.show_all"), send(path_method, params.merge(all: true)), class: "show-all btn btn-light") unless (tc = @history.total_count) <= @history.size || tc > 100 %>
80
+ <% end %>