administration-zero 0.0.5 → 0.0.8
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/.documentation/screenshot.png +0 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -2
- data/lib/administration_zero/version.rb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/application/_flash_messages.html.erb +10 -10
- data/lib/generators/admin/install/templates/erb/admin/application/_footer.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/application/_javascript_tags.html.erb +14 -4
- data/lib/generators/admin/install/templates/erb/admin/application/_page_header.html.erb +1 -2
- data/lib/generators/admin/install/templates/erb/admin/application/_primary_navbar.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/application/_secondary_navbar.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/home/index.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/users/edit.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/users/index.html.erb +55 -58
- data/lib/generators/admin/install/templates/erb/admin/users/new.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/admin/users/show.html.erb +1 -1
- data/lib/generators/admin/install/templates/erb/layouts/admin/application.html.erb +1 -0
- data/lib/generators/admin/install/templates/erb/layouts/admin/authentication.html.erb +1 -3
- data/lib/generators/admin/scaffold/templates/erb/edit.html.erb.tt +1 -1
- data/lib/generators/admin/scaffold/templates/erb/index.html.erb.tt +50 -53
- data/lib/generators/admin/scaffold/templates/erb/new.html.erb.tt +1 -1
- data/lib/generators/admin/scaffold/templates/erb/show.html.erb.tt +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c9bc430475641b273d9dc02e7e8883e74ee96c0987ce740486d26fb40812383
|
4
|
+
data.tar.gz: 9b6c6828929533f9265bcf3efc9ea7c82c7533713a7d5fc645f75464e77169c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b38673e793e5aebce3a1e379ab90e5870f26a1003f54299b283040341900b264e5c1448e645281795397a0c51c6e153f03a56f1cc61299e613d0588e2a47e5d6
|
7
|
+
data.tar.gz: 10f3e5d7d1cd05de057f6957da986ffffb00c506d6d0a6b493dece7fde760387a368010dadeeba9ac1c25e5d519b6480edfc129a9baaab4b6a7aab6c537d4d7b
|
Binary file
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
The purpose of administration zero is to generate a pre-built administration panel into a rails application.
|
4
4
|
|
5
|
-
<img src=".documentation/screenshot.png" alt="
|
5
|
+
<img src=".documentation/screenshot.png" alt="screenshot" style="max-width: 100%;">
|
6
6
|
|
7
7
|
## Features
|
8
8
|
|
@@ -10,6 +10,7 @@ The purpose of administration zero is to generate a pre-built administration pan
|
|
10
10
|
- [Paginated results](https://github.com/ddnexus/pagy)
|
11
11
|
- [Sortable and filterable](https://github.com/activerecord-hackery/ransack)
|
12
12
|
- [Exportable data](https://github.com/westonganger/spreadsheet_architect)
|
13
|
+
- [Toastr for flash messages](https://getbootstrap.com/docs/5.1/components/toasts)
|
13
14
|
- Easy authentication system
|
14
15
|
- Admin scaffolds
|
15
16
|
|
@@ -37,7 +38,7 @@ $ rails generate admin:install
|
|
37
38
|
|
38
39
|
Then run `bundle install` again
|
39
40
|
|
40
|
-
Then run `rails db:seed`, you can access the admin panel in `/admin`, using `email: "admin@example.com", password: "Password9957"`
|
41
|
+
Then run `rails db:migrate db:seed`, you can access the admin panel in `/admin`, using `email: "admin@example.com", password: "Password9957"`
|
41
42
|
|
42
43
|
|
43
44
|
Now you're ready to generate your admin scaffolds.
|
@@ -1,11 +1,11 @@
|
|
1
|
-
<%
|
2
|
-
|
3
|
-
<div class="
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
<% flash.each do |type, message| %>
|
2
|
+
<% if ["notice", "alert"].include?(type) %>
|
3
|
+
<div class="position-fixed start-50 translate-middle-x" style="z-index: 1030; top: 8rem;">
|
4
|
+
<div class="toast hide text-center text-white bg-dark border-0" data-controller="flash-message">
|
5
|
+
<div class="toast-body">
|
6
|
+
<%= message %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
11
|
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<footer class="footer footer-transparent d-print-none">
|
2
|
-
<div class="container-
|
2
|
+
<div class="container-xl">
|
3
3
|
<div class="row text-center align-items-center flex-row-reverse">
|
4
4
|
<div class="col-lg-auto ms-lg-auto">
|
5
5
|
<ul class="list-inline list-inline-dots mb-0">
|
@@ -13,11 +13,21 @@
|
|
13
13
|
<script>
|
14
14
|
document.addEventListener("DOMContentLoaded", () => {
|
15
15
|
document.querySelectorAll(".field_with_errors").forEach((element) => {
|
16
|
-
|
17
|
-
field.classList.add("is-invalid");
|
16
|
+
element.firstChild.classList.add("is-invalid");
|
18
17
|
|
19
|
-
element.parentNode.insertBefore(
|
18
|
+
element.parentNode.insertBefore(element.firstChild, element);
|
20
19
|
element.parentNode.removeChild(element);
|
21
|
-
})
|
20
|
+
});
|
21
|
+
});
|
22
|
+
</script>
|
23
|
+
|
24
|
+
<!-- flash message -->
|
25
|
+
<script>
|
26
|
+
document.addEventListener("DOMContentLoaded", () => {
|
27
|
+
const selector = "[data-controller='flash-message']";
|
28
|
+
|
29
|
+
document.querySelectorAll(selector).forEach((thiz) => {
|
30
|
+
new bootstrap.Toast(thiz).show();
|
31
|
+
});
|
22
32
|
});
|
23
33
|
</script>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<header class="navbar navbar-expand-md navbar-light d-print-none">
|
2
|
-
<div class="container-
|
2
|
+
<div class="container-xl">
|
3
3
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-menu">
|
4
4
|
<span class="navbar-toggler-icon"></span>
|
5
5
|
</button>
|
data/lib/generators/admin/install/templates/erb/admin/application/_secondary_navbar.html.erb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="navbar-expand-md">
|
2
2
|
<div class="collapse navbar-collapse" id="navbar-menu">
|
3
3
|
<div class="navbar navbar-light">
|
4
|
-
<div class="container-
|
4
|
+
<div class="container-xl">
|
5
5
|
<ul class="navbar-nav">
|
6
6
|
<li class="nav-item <%= active_nav_item 'admin/home' %>">
|
7
7
|
<%= link_to admin_path, class: "nav-link" do %>
|
@@ -4,72 +4,69 @@
|
|
4
4
|
<% end %>
|
5
5
|
|
6
6
|
<%= render "page_header_actions" do %>
|
7
|
+
<%= link_to "Filters", "#offcanvas_filters", "data-bs-toggle": "offcanvas", class: "btn btn-light" %>
|
7
8
|
<%= link_to "New admin user", new_admin_user_path, class: "btn btn-primary" %>
|
8
9
|
<% end %>
|
9
10
|
<% end %>
|
10
11
|
|
11
12
|
<div class="page-body">
|
12
|
-
<div class="container-
|
13
|
-
<div class="
|
14
|
-
<div class="
|
15
|
-
<
|
16
|
-
<
|
17
|
-
<
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
13
|
+
<div class="container-xl">
|
14
|
+
<div class="card">
|
15
|
+
<div class="table-responsive">
|
16
|
+
<table class="table table-vcenter table-nowrap card-table table-striped">
|
17
|
+
<thead>
|
18
|
+
<tr>
|
19
|
+
<th><%= sort_link @search, :id %></th>
|
20
|
+
<th><%= sort_link @search, :email %></th>
|
21
|
+
<th><%= sort_link @search, :created_at %></th>
|
22
|
+
<th class="w-1"></th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
<tbody>
|
26
|
+
<% @admin_users.each do |admin_user| %>
|
27
|
+
<tr>
|
28
|
+
<td><%= link_to admin_user.id, admin_user %></td>
|
29
|
+
<td><%= admin_user.email %></td>
|
30
|
+
<td><%= l(admin_user.created_at, format: :long) %></td>
|
31
|
+
<td>
|
32
|
+
<%= link_to "View", admin_user, class: "btn btn-light btn-sm" %>
|
33
|
+
<%= link_to "Edit", edit_admin_user_path(admin_user), class: "btn btn-light btn-sm" %>
|
34
|
+
<%= button_to "Delete", admin_user, method: :delete, data: { confirm: "Are you sure ?" }, form_class: "d-inline", class: "btn btn-light btn-sm" %>
|
35
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
<% end %>
|
38
|
+
</tbody>
|
39
|
+
</table>
|
33
40
|
</div>
|
34
|
-
<div class="
|
35
|
-
<div class="
|
36
|
-
<div
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
<th><%= sort_link @search, :email %></th>
|
42
|
-
<th><%= sort_link @search, :created_at %></th>
|
43
|
-
<th></th>
|
44
|
-
</tr>
|
45
|
-
</thead>
|
46
|
-
<tbody>
|
47
|
-
<% @admin_users.each do |admin_user| %>
|
48
|
-
<tr>
|
49
|
-
<td><%= link_to admin_user.id, admin_user %></td>
|
50
|
-
<td><%= admin_user.email %></td>
|
51
|
-
<td><%= l(admin_user.created_at, format: :long) %></td>
|
52
|
-
<td>
|
53
|
-
<%= link_to "View", admin_user, class: "btn btn-light btn-sm" %>
|
54
|
-
<%= link_to "Edit", edit_admin_user_path(admin_user), class: "btn btn-light btn-sm" %>
|
55
|
-
<%= button_to "Delete", admin_user, method: :delete, data: { confirm: "Are you sure ?" }, form_class: "d-inline", class: "btn btn-light btn-sm" %>
|
56
|
-
</td>
|
57
|
-
</tr>
|
58
|
-
<% end %>
|
59
|
-
</tbody>
|
60
|
-
</table>
|
61
|
-
</div>
|
62
|
-
<div class="card-footer d-flex align-items-center fs-5">
|
63
|
-
<div>
|
64
|
-
Download: <%= link_to "CSV", admin_users_path(format: :csv, q: request.params[:q]) %>
|
65
|
-
</div>
|
66
|
-
<div class="ms-auto d-flex align-items-center gap-2">
|
67
|
-
<%== pagy_info @pagy %>
|
68
|
-
<%= render "pagination", pagy: @pagy %>
|
69
|
-
</div>
|
70
|
-
</div>
|
41
|
+
<div class="card-footer d-flex align-items-center fs-5">
|
42
|
+
<div class="d-none d-md-block">
|
43
|
+
<div>Download: <%= link_to "CSV", admin_posts_path(format: :csv, q: request.params[:q]) %></div>
|
44
|
+
<%== pagy_info @pagy %>
|
45
|
+
</div>
|
46
|
+
<div class="ms-auto">
|
47
|
+
<%= render "pagination", pagy: @pagy %>
|
71
48
|
</div>
|
72
49
|
</div>
|
73
50
|
</div>
|
74
51
|
</div>
|
75
52
|
</div>
|
53
|
+
|
54
|
+
<div id="offcanvas_filters" tabindex="-1" class="offcanvas offcanvas-end">
|
55
|
+
<div class="offcanvas-header">
|
56
|
+
<h2 class="offcanvas-title">Filters</h2>
|
57
|
+
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas"></button>
|
58
|
+
</div>
|
59
|
+
<%= search_form_for @search, class: "offcanvas-body" do |f| %>
|
60
|
+
<%= f.label :email_cont, class: "form-label" %>
|
61
|
+
<%= f.text_field :email_cont, class: "form-control mb-3" %>
|
62
|
+
|
63
|
+
<%= f.label :created_at, class: "form-label" %>
|
64
|
+
<div class="d-flex gap-1 mb-3">
|
65
|
+
<%= f.date_field :created_at_gteq, class: "form-control" %>
|
66
|
+
<%= f.date_field :created_at_lteq, class: "form-control" %>
|
67
|
+
</div>
|
68
|
+
|
69
|
+
<%= f.submit "Filter", class: "btn btn-primary" %>
|
70
|
+
<%= link_to "Clear Filter", admin_users_path, class: "btn btn-light" %>
|
71
|
+
<% end %>
|
72
|
+
</div>
|
@@ -21,14 +21,12 @@
|
|
21
21
|
<%= image_tag "admin/logo.svg", height: 36 %>
|
22
22
|
<% end %>
|
23
23
|
</div>
|
24
|
-
<div class="text-center mb-2">
|
25
|
-
<%= render "flash_messages" %>
|
26
|
-
</div>
|
27
24
|
<%= yield %>
|
28
25
|
</div>
|
29
26
|
</div>
|
30
27
|
</div>
|
31
28
|
|
29
|
+
<%= render "flash_messages" %>
|
32
30
|
<%= render "javascript_tags" %>
|
33
31
|
</body>
|
34
32
|
</html>
|
@@ -4,74 +4,71 @@
|
|
4
4
|
<%% end %>
|
5
5
|
|
6
6
|
<%%= render "page_header_actions" do %>
|
7
|
+
<%%= link_to "Filters", "#offcanvas_filters", "data-bs-toggle": "offcanvas", class: "btn btn-light" %>
|
7
8
|
<%%= link_to "New <%= human_name.downcase %>", <%= new_helper(type: :path) %>, class: "btn btn-primary" %>
|
8
9
|
<%% end %>
|
9
10
|
<%% end %>
|
10
11
|
|
11
12
|
<div class="page-body">
|
12
|
-
<div class="container-
|
13
|
-
<div class="
|
14
|
-
<div class="
|
15
|
-
<
|
16
|
-
<
|
17
|
-
<
|
18
|
-
</div>
|
19
|
-
<%%= search_form_for [:admin, @search], class: "card-body" do |f| %>
|
20
|
-
<%%# f.label :name_cont, class: "form-label" %>
|
21
|
-
<%%# f.text_field :name_cont, class: "form-control mb-3" %>
|
22
|
-
|
23
|
-
<%%= f.submit "Filter", class: "btn btn-primary" %>
|
24
|
-
<%%= link_to "Clear Filter", <%= index_helper(type: :path) %>, class: "btn btn-light" %>
|
25
|
-
<%% end %>
|
26
|
-
</div>
|
27
|
-
</div>
|
28
|
-
<div class="col-md-8 col-lg-9 order-md-first">
|
29
|
-
<div class="card">
|
30
|
-
<div class="table-responsive">
|
31
|
-
<table class="table table-vcenter card-table table-striped">
|
32
|
-
<thead>
|
33
|
-
<tr>
|
13
|
+
<div class="container-xl">
|
14
|
+
<div class="card">
|
15
|
+
<div class="table-responsive">
|
16
|
+
<table class="table table-vcenter table-nowrap card-table table-striped">
|
17
|
+
<thead>
|
18
|
+
<tr>
|
34
19
|
<% attributes.each do |attribute| -%>
|
35
|
-
|
20
|
+
<th><%%= sort_link @search, :<%= attribute.column_name %> %></th>
|
36
21
|
<% end -%>
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
22
|
+
<th class="w-1"></th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
<tbody>
|
26
|
+
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
|
27
|
+
<tr>
|
43
28
|
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
44
29
|
<% if attribute.attachment? -%>
|
45
|
-
|
30
|
+
<td><%%= link_to <%= singular_name %>.<%= attribute.column_name %>.filename, <%= singular_name %>.<%= attribute.column_name %> if <%= singular_name %>.<%= attribute.column_name %>.attached? %></td>
|
46
31
|
<% elsif attribute.attachments? -%>
|
47
|
-
|
48
|
-
|
49
|
-
|
32
|
+
<%% <%= singular_name %>.<%= attribute.column_name %>.each do |<%= attribute.singular_name %>| %>
|
33
|
+
<td><%%= link_to <%= attribute.singular_name %>.filename, <%= attribute.singular_name %> %></td>
|
34
|
+
<%% end %>
|
50
35
|
<% else -%>
|
51
|
-
|
36
|
+
<td><%%= <%= singular_name %>.<%= attribute.column_name %> %></td>
|
52
37
|
<% end -%>
|
53
38
|
<% end -%>
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
</div>
|
72
|
-
</div>
|
39
|
+
<td>
|
40
|
+
<%%= link_to "View", <%= model_resource_name %>, class: "btn btn-light btn-sm" %>
|
41
|
+
<%%= link_to "Edit", <%= edit_helper(singular_table_name, type: :path) %>, class: "btn btn-light btn-sm" %>
|
42
|
+
<%%= button_to "Delete", <%= model_resource_name %>, method: :delete, form_class: "d-inline", class: "btn btn-light btn-sm", data: { confirm: "Are you sure ?" } %>
|
43
|
+
</td>
|
44
|
+
</tr>
|
45
|
+
<%% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
48
|
+
</div>
|
49
|
+
<div class="card-footer d-flex align-items-center fs-5">
|
50
|
+
<div class="d-none d-md-block">
|
51
|
+
<div>Download: <%%= link_to "CSV", <%= index_helper(type: :path) %>(format: :csv, q: request.params[:q]) %></div>
|
52
|
+
<%%== pagy_info @pagy %>
|
53
|
+
</div>
|
54
|
+
<div class="ms-auto">
|
55
|
+
<%%= render "pagination", pagy: @pagy %>
|
73
56
|
</div>
|
74
57
|
</div>
|
75
58
|
</div>
|
76
59
|
</div>
|
77
60
|
</div>
|
61
|
+
|
62
|
+
<div id="offcanvas_filters" tabindex="-1" class="offcanvas offcanvas-end">
|
63
|
+
<div class="offcanvas-header">
|
64
|
+
<h2 class="offcanvas-title">Filters</h2>
|
65
|
+
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas"></button>
|
66
|
+
</div>
|
67
|
+
<%%= search_form_for [:admin, @search], class: "offcanvas-body" do |f| %>
|
68
|
+
<%%# f.label :name_cont, class: "form-label" %>
|
69
|
+
<%%# f.text_field :name_cont, class: "form-control mb-3" %>
|
70
|
+
|
71
|
+
<%%= f.submit "Filter", class: "btn btn-primary" %>
|
72
|
+
<%%= link_to "Clear Filter", <%= index_helper(type: :path) %>, class: "btn btn-light" %>
|
73
|
+
<%% end %>
|
74
|
+
</div>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: administration-zero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nixon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|