madmin 1.2.5 → 1.2.7
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/README.md +17 -0
- data/app/controllers/madmin/dashboard_controller.rb +1 -1
- data/app/helpers/madmin/application_helper.rb +1 -1
- data/app/helpers/madmin/sort_helper.rb +1 -1
- data/app/views/layouts/madmin/application.html.erb +1 -3
- data/app/views/madmin/application/_javascript.html.erb +33 -16
- data/app/views/madmin/application/index.html.erb +1 -1
- data/app/views/madmin/application/show.html.erb +1 -1
- data/app/views/madmin/fields/attachment/_index.html.erb +1 -1
- data/app/views/madmin/fields/attachment/_show.html.erb +4 -4
- data/app/views/madmin/fields/attachments/_show.html.erb +3 -3
- data/app/views/madmin/fields/text/_index.html.erb +1 -1
- data/app/views/madmin/pagy/_nav.html.erb +20 -0
- data/lib/generators/madmin/field/templates/_form.html.erb +3 -1
- data/lib/madmin/engine.rb +4 -2
- data/lib/madmin/fields/nested_has_many.rb +1 -1
- data/lib/madmin/resource.rb +3 -2
- data/lib/madmin/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8cd4e0b3d14780dd13db0a21a57a63e750a750298ea78cc93ec5eb327b1714e7
|
|
4
|
+
data.tar.gz: 92f273ea140b603a887660b36802de9e6c0021a56cbeeb49cef5318696ae7bf6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 677c4da0f37a96e2515584a02e6d0c941d59fae91b43a15e19386a723d1bdeb6a4e47db8bdc987c59e59c1b75ae2f507d055603a8a996dc5c45b3731d95aac13
|
|
7
|
+
data.tar.gz: b06f7fa04b747a761f956fccaa81e9f4535757db2276427e0cbda7a63d901295c9e275faf22a9753459290d530808f6b118806813e7858aeada501b3cb220cbf
|
data/README.md
CHANGED
|
@@ -73,6 +73,23 @@ rails g madmin:views:index
|
|
|
73
73
|
# -> app/views/madmin/application/index.html.erb
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
+
You might want to make some of your model's attributes visible in some views but invisible in others.
|
|
77
|
+
The `attribute` method in model_resource.rb gives you that flexibility.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# -> app/madmin/resources/book_resource.rb
|
|
81
|
+
```
|
|
82
|
+
```ruby
|
|
83
|
+
class UserResource < Madmin::Resource
|
|
84
|
+
attribute :id, form: false
|
|
85
|
+
attribute :tile
|
|
86
|
+
attribute :subtitle, index: false
|
|
87
|
+
attribute :author
|
|
88
|
+
attribute :genre
|
|
89
|
+
attribute :pages, show: false
|
|
90
|
+
end
|
|
91
|
+
```
|
|
92
|
+
|
|
76
93
|
You can also scope the copied view(s) to a specific Resource/Model:
|
|
77
94
|
```bash
|
|
78
95
|
rails generate madmin:views:index Book
|
|
@@ -4,7 +4,7 @@ module Madmin
|
|
|
4
4
|
matching_column = (column.to_s == sort_column)
|
|
5
5
|
direction = sort_direction == "asc" ? "desc" : "asc"
|
|
6
6
|
|
|
7
|
-
link_to
|
|
7
|
+
link_to resource.index_path(sort: column, direction: direction), options do
|
|
8
8
|
concat title
|
|
9
9
|
if matching_column
|
|
10
10
|
concat " "
|
|
@@ -7,9 +7,7 @@
|
|
|
7
7
|
<title>
|
|
8
8
|
Madmin: <%= Rails.application.class %>
|
|
9
9
|
</title>
|
|
10
|
-
|
|
11
|
-
<link href="https://unpkg.com/tailwindcss@^2.0/dist/tailwind.min.css" rel="stylesheet" />
|
|
12
|
-
<link href="https://unpkg.com/@tailwindcss/typography/dist/typography.min.css" rel="stylesheet" />
|
|
10
|
+
|
|
13
11
|
<%= csrf_meta_tags %>
|
|
14
12
|
|
|
15
13
|
<%= render "javascript" %>
|
|
@@ -1,28 +1,44 @@
|
|
|
1
|
+
<script src="https://cdn.tailwindcss.com?plugins=forms,typography,aspect-ratio,line-clamp"></script>
|
|
1
2
|
<%= stylesheet_link_tag "https://unpkg.com/flatpickr/dist/flatpickr.min.css", "data-turbo-track": "reload" %>
|
|
2
3
|
<%= stylesheet_link_tag "https://unpkg.com/trix/dist/trix.css", "data-turbo-track": "reload" %>
|
|
3
4
|
<%= stylesheet_link_tag "https://unpkg.com/tom-select/dist/css/tom-select.min.css", "data-turbo-track": "reload" %>
|
|
4
5
|
|
|
5
|
-
<script type="
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
<script type="importmap" data-turbo-track="reload">
|
|
7
|
+
{
|
|
8
|
+
"imports": {
|
|
9
|
+
"@hotwired/stimulus": "https://unpkg.com/@hotwired/stimulus/dist/stimulus.js",
|
|
10
|
+
"@hotwired/turbo": "https://unpkg.com/@hotwired/turbo",
|
|
11
|
+
"@hotwired/turbo-rails": "https://unpkg.com/@hotwired/turbo-rails",
|
|
12
|
+
"@rails/actiontext": "https://unpkg.com/@rails/actiontext@<%= npm_rails_version %>/app/assets/javascripts/actiontext.js",
|
|
13
|
+
"@rails/activestorage": "https://unpkg.com/@rails/activestorage@<%= npm_rails_version %>/app/assets/javascripts/activestorage.esm.js",
|
|
14
|
+
"flatpickr": "https://unpkg.com/flatpickr/dist/esm/index.js",
|
|
15
|
+
"stimulus-flatpickr": "https://unpkg.com/stimulus-flatpickr@3.0.0-0/dist/index.m.js",
|
|
16
|
+
"tailwindcss-stimulus-components": "https://unpkg.com/tailwindcss-stimulus-components/dist/tailwindcss-stimulus-components.modern.js",
|
|
17
|
+
"tom-select": "https://unpkg.com/tom-select/dist/esm/tom-select.complete.js",
|
|
18
|
+
"trix": "https://unpkg.com/trix"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
</script>
|
|
22
|
+
<script async src="https://unpkg.com/es-module-shims/dist/es-module-shims.js"></script>
|
|
8
23
|
|
|
9
|
-
|
|
10
|
-
|
|
24
|
+
<script type="module">
|
|
25
|
+
import * as Turbo from "@hotwired/turbo-rails"
|
|
11
26
|
|
|
12
|
-
import
|
|
13
|
-
|
|
27
|
+
import * as ActiveStorage from "@rails/activestorage"
|
|
28
|
+
ActiveStorage.start()
|
|
29
|
+
import "trix"
|
|
30
|
+
import "@rails/actiontext"
|
|
14
31
|
|
|
15
|
-
import
|
|
32
|
+
import { Application, Controller } from '@hotwired/stimulus'
|
|
33
|
+
const application = Application.start()
|
|
16
34
|
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
import 'https://cdn.skypack.dev/trix'
|
|
20
|
-
import 'https://cdn.skypack.dev/@rails/actiontext@<%= npm_rails_version %>'
|
|
35
|
+
import { Dropdown } from "tailwindcss-stimulus-components"
|
|
36
|
+
application.register("dropdown", Dropdown)
|
|
21
37
|
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
import StimulusFlatpickr from "stimulus-flatpickr"
|
|
39
|
+
application.register("flatpickr", StimulusFlatpickr)
|
|
24
40
|
|
|
25
|
-
import
|
|
41
|
+
import TomSelect from "tom-select"
|
|
26
42
|
|
|
27
43
|
(() => {
|
|
28
44
|
application.register('select', class extends Controller {
|
|
@@ -38,7 +54,8 @@
|
|
|
38
54
|
labelField: 'name',
|
|
39
55
|
searchField: 'name',
|
|
40
56
|
load: (search, callback) => {
|
|
41
|
-
|
|
57
|
+
let url = search ? `${this.urlValue}?q=${search}` : this.urlValue;
|
|
58
|
+
fetch(url)
|
|
42
59
|
.then(response => response.json())
|
|
43
60
|
.then(json => {
|
|
44
61
|
callback(json);
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<div class="mr-2">
|
|
10
10
|
<%= link_to "Edit", resource.edit_path(@record), class: "block bg-white hover:bg-gray-100 text-gray-800 font-semibold py-2 px-4 border border-gray-400 rounded shadow" %>
|
|
11
11
|
</div>
|
|
12
|
-
<%= button_to "Delete", resource.show_path(@record), method: :delete, data: {
|
|
12
|
+
<%= button_to "Delete", resource.show_path(@record), method: :delete, data: { turbo_confirm: "Are you sure?" }, class: "bg-white hover:bg-gray-100 text-red-500 font-semibold py-2 px-4 border border-red-500 rounded shadow pointer-cursor" %>
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
15
15
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<% if (attachment = field.value(record)) && attachment.attached? %>
|
|
2
2
|
<% if attachment.variable? %>
|
|
3
|
-
<%= link_to attachment, target: :_blank do %>
|
|
4
|
-
<%= image_tag attachment, class: "max-h-32" %>
|
|
3
|
+
<%= link_to main_app.url_for(attachment), target: :_blank do %>
|
|
4
|
+
<%= image_tag main_app.url_for(attachment), class: "max-h-32" %>
|
|
5
5
|
<% end %>
|
|
6
6
|
<% else %>
|
|
7
|
-
<%= link_to attachment.filename, attachment, target: :_blank, class: "text-indigo-500 underline" %>
|
|
7
|
+
<%= link_to attachment.filename, main_app.url_for(attachment), target: :_blank, class: "text-indigo-500 underline" %>
|
|
8
8
|
<% end %>
|
|
9
|
-
<% end %>
|
|
9
|
+
<% end %>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<% if (attachments = field.value(record)) && attachments.attached? %>
|
|
2
2
|
<% attachments.each do |attachment| %>
|
|
3
3
|
<% if attachment.variable? %>
|
|
4
|
-
<%= link_to attachment, target: :_blank do %>
|
|
5
|
-
<%= image_tag attachment, class: "max-h-32" %>
|
|
4
|
+
<%= link_to main_app.url_for(attachment), target: :_blank do %>
|
|
5
|
+
<%= image_tag main_app.url_for(attachment), class: "max-h-32" %>
|
|
6
6
|
<% end %>
|
|
7
7
|
<% else %>
|
|
8
|
-
<%= link_to attachment.filename, attachment, target: :_blank, class: "text-indigo-500 underline" %>
|
|
8
|
+
<%= link_to attachment.filename, main_app.url_for(attachment), target: :_blank, class: "text-indigo-500 underline" %>
|
|
9
9
|
<% end %>
|
|
10
10
|
<% end %>
|
|
11
11
|
<% end %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= truncate field.value(record) %>
|
|
1
|
+
<%= truncate field.value(record).to_s %>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<%#
|
|
2
|
+
This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
|
|
3
|
+
calls with the actual strings ("‹ Prev", "Next ›", "…").
|
|
4
|
+
The link variable is set to a proc that returns the link tag.
|
|
5
|
+
Usage: link.call( page_number [, text [, extra_attributes_string ]])
|
|
6
|
+
-%>
|
|
7
|
+
<% link = pagy_link_proc(pagy) -%>
|
|
8
|
+
<%# -%><nav aria-label="pager" class="space-x-1 px-2 py-1" role="navigation">
|
|
9
|
+
<% if pagy.prev -%> <span><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous" class="text-white bg-indigo-500 rounded-2xl px-3 py-1.5"') %></span>
|
|
10
|
+
<% else -%> <span class="text-gray-400 bg-gray-100 rounded-2xl px-3 py-1.5 cursor-not-allowed"><%== pagy_t('pagy.nav.prev') %></span>
|
|
11
|
+
<% end -%>
|
|
12
|
+
<% pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36] -%>
|
|
13
|
+
<% if item.is_a?(Integer) -%> <span><%== link.call(item, item, 'class="text-gray-400 rounded-full px-2.5 py-1.5 hover:bg-indigo-200 hover:text-indigo-500"') %></span>
|
|
14
|
+
<% elsif item.is_a?(String) -%> <span class="text-indigo-500 font-semibold px-2.5 py-1.5"><%= item %></span>
|
|
15
|
+
<% elsif item == :gap -%> <span class="text-gray-400 text-xl px-1.5 py-1.5"><%== pagy_t('pagy.nav.gap') %></span>
|
|
16
|
+
<% end -%>
|
|
17
|
+
<% end -%>
|
|
18
|
+
<% if pagy.next -%> <span><%== link.call(pagy.next, pagy_t('pagy.nav.next'), 'aria-label="next" class="text-white bg-indigo-500 rounded-2xl px-3 py-1.5"') %></span>
|
|
19
|
+
<% else -%> <span class="text-gray-400 bg-gray-100 rounded-2xl px-3 py-1.5 cursor-not-allowed"><%== pagy_t('pagy.nav.next') %></span>
|
|
20
|
+
<% end -%>
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
<div class="block md:inline-block md:w-32 flex-shrink-0 text-gray-700">
|
|
2
|
+
<%= render "madmin/shared/label", form: form, field: field %>
|
|
3
|
+
</div>
|
|
2
4
|
<%= form.text_field field.attribute_name, class: "form-input" %>
|
data/lib/madmin/engine.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
module Madmin
|
|
2
2
|
class Engine < ::Rails::Engine
|
|
3
|
+
isolate_namespace Madmin
|
|
4
|
+
|
|
3
5
|
config.before_configuration do |app|
|
|
4
|
-
app.config.
|
|
5
|
-
app.config.
|
|
6
|
+
app.config.eager_load_paths << File.expand_path("app/madmin/resources", Rails.root)
|
|
7
|
+
app.config.eager_load_paths << File.expand_path("app/madmin/fields", Rails.root)
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
config.to_prepare do
|
data/lib/madmin/resource.rb
CHANGED
|
@@ -55,7 +55,7 @@ module Madmin
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def friendly_name
|
|
58
|
-
model_name.gsub("::", " / ")
|
|
58
|
+
model_name.gsub("::", " / ").split(/(?=[A-Z])/).join(" ")
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
# Support for isolated namespaces
|
|
@@ -89,7 +89,7 @@ module Madmin
|
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def permitted_params
|
|
92
|
-
attributes.values.
|
|
92
|
+
attributes.values.filter { |a| a.field.visible?(:form) }.map { |a| a.field.to_param }
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
def display_name(record)
|
|
@@ -129,6 +129,7 @@ module Madmin
|
|
|
129
129
|
text: Fields::Text,
|
|
130
130
|
time: Fields::Time,
|
|
131
131
|
timestamp: Fields::Time,
|
|
132
|
+
timestamptz: Fields::Time,
|
|
132
133
|
password: Fields::Password,
|
|
133
134
|
file: Fields::File,
|
|
134
135
|
|
data/lib/madmin/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: madmin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Oliver
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2022-09-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rails
|
|
@@ -34,7 +34,7 @@ dependencies:
|
|
|
34
34
|
version: '3.5'
|
|
35
35
|
- - "<"
|
|
36
36
|
- !ruby/object:Gem::Version
|
|
37
|
-
version: '
|
|
37
|
+
version: '6.0'
|
|
38
38
|
type: :runtime
|
|
39
39
|
prerelease: false
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -44,7 +44,7 @@ dependencies:
|
|
|
44
44
|
version: '3.5'
|
|
45
45
|
- - "<"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '6.0'
|
|
48
48
|
description: It's an admin, obviously.
|
|
49
49
|
email:
|
|
50
50
|
- excid3@gmail.com
|
|
@@ -139,6 +139,7 @@ files:
|
|
|
139
139
|
- app/views/madmin/fields/time/_form.html.erb
|
|
140
140
|
- app/views/madmin/fields/time/_index.html.erb
|
|
141
141
|
- app/views/madmin/fields/time/_show.html.erb
|
|
142
|
+
- app/views/madmin/pagy/_nav.html.erb
|
|
142
143
|
- app/views/madmin/shared/_label.html.erb
|
|
143
144
|
- lib/generators/madmin/field/field_generator.rb
|
|
144
145
|
- lib/generators/madmin/field/templates/_form.html.erb
|
|
@@ -211,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
211
212
|
- !ruby/object:Gem::Version
|
|
212
213
|
version: '0'
|
|
213
214
|
requirements: []
|
|
214
|
-
rubygems_version: 3.
|
|
215
|
+
rubygems_version: 3.3.7
|
|
215
216
|
signing_key:
|
|
216
217
|
specification_version: 4
|
|
217
218
|
summary: A modern admin for Ruby on Rails apps
|