administration-zero 0.0.6 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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 +7 -16
- 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 +2 -2
- 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 +2 -2
- 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: 1262058b2e76e6b4e80b03390f07439cdf2c5734de1eb3ae2e3dcd79d30ded52
|
4
|
+
data.tar.gz: 0c5a2ea1b24df7f367d6b37144370f9df0df0e071de0ae2acf08a6fe6d21270c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58cb7fe33173e0a58f62684b65ff9477526956e366411a5e2427a4093f3b01cf86ec2ec5908c9529c7e5ef0edd1da522bca552f2ab3bc1f731ad902d7d5ffab7
|
7
|
+
data.tar.gz: d3bec811c90c09b6b051a50fefdc09aafbed7290d14d06d739839376c19c1c2f037dfe80298801d929e477cfa5288872bbe2cdcf0ae30f3dc6cb916119f0e548
|
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">
|
@@ -21,22 +21,13 @@
|
|
21
21
|
});
|
22
22
|
</script>
|
23
23
|
|
24
|
-
<!--
|
25
|
-
###########################################################################################################################
|
26
|
-
Old school stimulus example
|
27
|
-
<div data-controller="toasts" data-toats-type="notice" data-toasts-message="User created successfully"></div>
|
28
|
-
###########################################################################################################################
|
29
|
-
-->
|
30
|
-
<!--
|
24
|
+
<!-- flash message -->
|
31
25
|
<script>
|
32
26
|
document.addEventListener("DOMContentLoaded", () => {
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
})
|
40
|
-
})
|
27
|
+
const selector = "[data-controller='flash-message']";
|
28
|
+
|
29
|
+
document.querySelectorAll(selector).forEach((thiz) => {
|
30
|
+
new bootstrap.Toast(thiz).show();
|
31
|
+
});
|
32
|
+
});
|
41
33
|
</script>
|
42
|
-
-->
|
@@ -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_users_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>
|
@@ -6,12 +6,12 @@
|
|
6
6
|
|
7
7
|
<%= render "page_header_actions" do %>
|
8
8
|
<%= link_to "Edit admin user", edit_admin_user_path(@admin_user), class: "btn btn-primary" %>
|
9
|
-
<%= button_to "Delete admin user", @admin_user, method: :delete, data
|
9
|
+
<%= button_to "Delete admin user", @admin_user, method: :delete, "data-confirm": "Are you sure?", form_class: "d-inline", class: "btn btn-light" %>
|
10
10
|
<% end %>
|
11
11
|
<% end %>
|
12
12
|
|
13
13
|
<div class="page-body">
|
14
|
-
<div class="container-
|
14
|
+
<div class="container-xl">
|
15
15
|
<div class="card">
|
16
16
|
<div class="card-header">
|
17
17
|
<h3 class="card-title">Admin user details</h3>
|
@@ -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, "data-confirm": "Are you sure?", form_class: "d-inline", class: "btn btn-light btn-sm" %>
|
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>
|
@@ -6,12 +6,12 @@
|
|
6
6
|
|
7
7
|
<%%= render "page_header_actions" do %>
|
8
8
|
<%%= link_to "Edit <%= human_name.downcase %>", <%= edit_helper(type: :path) %>, class: "btn btn-primary" %>
|
9
|
-
<%%= button_to "Delete <%= human_name.downcase %>", <%= model_resource_name(prefix: "@") %>, method: :delete, form_class: "d-inline", class: "btn btn-light"
|
9
|
+
<%%= button_to "Delete <%= human_name.downcase %>", <%= model_resource_name(prefix: "@") %>, method: :delete, "data-confirm": "Are you sure?", form_class: "d-inline", class: "btn btn-light" %>
|
10
10
|
<%% end %>
|
11
11
|
<%% end %>
|
12
12
|
|
13
13
|
<div class="page-body">
|
14
|
-
<div class="container-
|
14
|
+
<div class="container-xl">
|
15
15
|
<div class="card">
|
16
16
|
<div class="card-header">
|
17
17
|
<h3 class="card-title"><%= human_name %> details</h3>
|
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.9
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|