madmin 1.2.11 → 2.0.1
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 +36 -7
- data/app/assets/config/madmin_manifest.js +3 -0
- data/app/assets/stylesheets/madmin/actiontext.css +31 -0
- data/app/assets/stylesheets/madmin/application-sprockets.css +11 -0
- data/app/assets/stylesheets/madmin/application.css +10 -0
- data/app/assets/stylesheets/madmin/base.css +117 -0
- data/app/assets/stylesheets/madmin/buttons.css +46 -0
- data/app/assets/stylesheets/madmin/forms.css +64 -0
- data/app/assets/stylesheets/madmin/pagination.css +59 -0
- data/app/assets/stylesheets/madmin/reset.css +242 -0
- data/app/assets/stylesheets/madmin/sidebar.css +80 -0
- data/app/assets/stylesheets/madmin/tables.css +56 -0
- data/app/controllers/madmin/application_controller.rb +7 -12
- data/app/controllers/madmin/base_controller.rb +1 -0
- data/app/controllers/madmin/resource_controller.rb +7 -1
- data/app/helpers/madmin/application_helper.rb +1 -12
- data/app/helpers/madmin/sort_helper.rb +17 -1
- data/app/javascript/madmin/application.js +4 -0
- data/app/javascript/madmin/controllers/application.js +12 -0
- data/app/javascript/madmin/controllers/index.js +5 -0
- data/app/javascript/madmin/controllers/nested_form_controller.js +34 -0
- data/app/javascript/madmin/controllers/select_controller.js +32 -0
- data/app/views/layouts/madmin/application.html.erb +12 -13
- data/app/views/madmin/application/_flash.html.erb +13 -0
- data/app/views/madmin/application/_form.html.erb +13 -12
- data/app/views/madmin/application/_javascript.html.erb +3 -136
- data/app/views/madmin/application/_navigation.html.erb +22 -27
- data/app/views/madmin/application/edit.html.erb +9 -5
- data/app/views/madmin/application/index.html.erb +37 -31
- data/app/views/madmin/application/new.html.erb +9 -5
- data/app/views/madmin/application/show.html.erb +28 -22
- data/app/views/madmin/dashboard/show.html.erb +4 -1
- data/app/views/madmin/fields/attachment/_form.html.erb +11 -4
- data/app/views/madmin/fields/attachment/_index.html.erb +5 -1
- data/app/views/madmin/fields/attachment/_show.html.erb +4 -4
- data/app/views/madmin/fields/attachments/_form.html.erb +1 -4
- data/app/views/madmin/fields/belongs_to/_form.html.erb +1 -4
- data/app/views/madmin/fields/belongs_to/_index.html.erb +2 -1
- data/app/views/madmin/fields/boolean/_form.html.erb +3 -4
- data/app/views/madmin/fields/currency/_form.html.erb +1 -0
- data/app/views/madmin/fields/currency/_index.html.erb +1 -0
- data/app/views/madmin/fields/currency/_show.html.erb +1 -0
- data/app/views/madmin/fields/date/_form.html.erb +1 -4
- data/app/views/madmin/fields/date_time/_form.html.erb +1 -4
- data/app/views/madmin/fields/decimal/_form.html.erb +1 -4
- data/app/views/madmin/fields/enum/_form.html.erb +1 -4
- data/app/views/madmin/fields/file/_form.html.erb +1 -4
- data/app/views/madmin/fields/float/_form.html.erb +1 -4
- data/app/views/madmin/fields/has_many/_form.html.erb +1 -4
- data/app/views/madmin/fields/has_many/_show.html.erb +7 -1
- data/app/views/madmin/fields/has_one/_form.html.erb +0 -3
- data/app/views/madmin/fields/integer/_form.html.erb +1 -4
- data/app/views/madmin/fields/integer/_index.html.erb +1 -5
- data/app/views/madmin/fields/json/_form.html.erb +1 -4
- data/app/views/madmin/fields/nested_has_many/_fields.html.erb +4 -5
- data/app/views/madmin/fields/nested_has_many/_form.html.erb +0 -4
- data/app/views/madmin/fields/nested_has_many/_show.html.erb +7 -1
- data/app/views/madmin/fields/password/_form.html.erb +1 -4
- data/app/views/madmin/fields/polymorphic/_form.html.erb +1 -4
- data/app/views/madmin/fields/rich_text/_form.html.erb +1 -6
- data/app/views/madmin/fields/select/_form.html.erb +1 -0
- data/app/views/madmin/fields/select/_index.html.erb +1 -0
- data/app/views/madmin/fields/select/_show.html.erb +1 -0
- data/app/views/madmin/fields/string/_form.html.erb +1 -4
- data/app/views/madmin/fields/text/_form.html.erb +1 -4
- data/app/views/madmin/shared/_label.html.erb +2 -2
- data/config/importmap.rb +10 -0
- data/lib/generators/madmin/field/templates/_form.html.erb +1 -4
- data/lib/generators/madmin/install/templates/controller.rb.tt +5 -12
- data/lib/generators/madmin/resource/resource_generator.rb +1 -1
- data/lib/generators/madmin/resource/templates/resource.rb.tt +12 -10
- data/lib/madmin/engine.rb +26 -0
- data/lib/madmin/field.rb +21 -5
- data/lib/madmin/fields/belongs_to.rb +10 -5
- data/lib/madmin/fields/currency.rb +15 -0
- data/lib/madmin/fields/has_many.rb +17 -0
- data/lib/madmin/fields/nested_has_many.rb +5 -1
- data/lib/madmin/fields/polymorphic.rb +1 -1
- data/lib/madmin/fields/select.rb +9 -0
- data/lib/madmin/generator_helpers.rb +6 -2
- data/lib/madmin/menu.rb +70 -0
- data/lib/madmin/resource.rb +56 -24
- data/lib/madmin/search.rb +1 -1
- data/lib/madmin/version.rb +1 -1
- data/lib/madmin.rb +23 -1
- metadata +61 -13
- data/app/assets/config/manifest.js +0 -2
- data/app/assets/stylesheets/actiontext.scss +0 -36
- data/app/assets/stylesheets/application.css +0 -15
- data/app/views/madmin/application/_menu_resources.html.erb +0 -7
data/lib/madmin/field.rb
CHANGED
@@ -6,8 +6,8 @@ module Madmin
|
|
6
6
|
to_s.split("::").last.underscore
|
7
7
|
end
|
8
8
|
|
9
|
-
def initialize(attribute_name:, model:, resource:,
|
10
|
-
@attribute_name = attribute_name
|
9
|
+
def initialize(attribute_name:, model:, resource:, options:)
|
10
|
+
@attribute_name = attribute_name.to_sym
|
11
11
|
@model = model
|
12
12
|
@resource = resource
|
13
13
|
@options = options
|
@@ -18,7 +18,7 @@ module Madmin
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def to_partial_path(name)
|
21
|
-
unless %w[index show form].include? name
|
21
|
+
unless %w[index show form].include? name.to_s
|
22
22
|
raise ArgumentError, "`partial` must be 'index', 'show', or 'form'"
|
23
23
|
end
|
24
24
|
|
@@ -30,8 +30,20 @@ module Madmin
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Used for checking visibility of attribute on an view
|
33
|
-
def visible?(action
|
34
|
-
|
33
|
+
def visible?(action)
|
34
|
+
action = action.to_sym
|
35
|
+
options.fetch(action) do
|
36
|
+
case action
|
37
|
+
when :index
|
38
|
+
default_index_attributes.include?(attribute_name)
|
39
|
+
else
|
40
|
+
true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def default_index_attributes
|
46
|
+
[model.primary_key.to_sym, :avatar, :title, :name, :user, :created_at]
|
35
47
|
end
|
36
48
|
|
37
49
|
def required?
|
@@ -41,5 +53,9 @@ module Madmin
|
|
41
53
|
def searchable?
|
42
54
|
false
|
43
55
|
end
|
56
|
+
|
57
|
+
def paginateable?
|
58
|
+
false
|
59
|
+
end
|
44
60
|
end
|
45
61
|
end
|
@@ -2,12 +2,13 @@ module Madmin
|
|
2
2
|
module Fields
|
3
3
|
class BelongsTo < Field
|
4
4
|
def options_for_select(record)
|
5
|
-
if (record = record.send(attribute_name))
|
6
|
-
|
7
|
-
[[resource.display_name(record), record.id]]
|
5
|
+
records = if (record = record.send(attribute_name))
|
6
|
+
[record]
|
8
7
|
else
|
9
|
-
|
8
|
+
associated_resource.model.first(25)
|
10
9
|
end
|
10
|
+
|
11
|
+
records.map { [Madmin.resource_for(_1).display_name(_1), _1.id] }
|
11
12
|
end
|
12
13
|
|
13
14
|
def to_param
|
@@ -15,7 +16,11 @@ module Madmin
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def index_path
|
18
|
-
|
19
|
+
associated_resource.index_path(format: :json)
|
20
|
+
end
|
21
|
+
|
22
|
+
def associated_resource
|
23
|
+
Madmin.resource_by_name(model.reflect_on_association(attribute_name).klass)
|
19
24
|
end
|
20
25
|
end
|
21
26
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Madmin
|
2
|
+
module Fields
|
3
|
+
class Currency < Field
|
4
|
+
def value(record)
|
5
|
+
value = record.public_send(attribute_name)
|
6
|
+
value /= 100.0 if value && options.minor_units
|
7
|
+
value
|
8
|
+
end
|
9
|
+
|
10
|
+
def searchable?
|
11
|
+
options.fetch(:searchable, model.column_names.include?(attribute_name.to_s))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Madmin
|
2
2
|
module Fields
|
3
3
|
class HasMany < Field
|
4
|
+
include Pagy::Backend
|
5
|
+
|
4
6
|
def options_for_select(record)
|
5
7
|
if (records = record.send(attribute_name))
|
6
8
|
return [] unless records.first
|
@@ -18,6 +20,21 @@ module Madmin
|
|
18
20
|
def index_path
|
19
21
|
Madmin.resource_by_name(model.reflect_on_association(attribute_name).klass).index_path(format: :json)
|
20
22
|
end
|
23
|
+
|
24
|
+
def paginateable?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def paginated_value(record, params)
|
29
|
+
pagy value(record), params: params, page_param: "#{attribute_name}_page"
|
30
|
+
end
|
31
|
+
|
32
|
+
# Override to access params from vars since we're not in a controller/view
|
33
|
+
def pagy_get_page(vars, force_integer: true)
|
34
|
+
params = vars[:params]
|
35
|
+
page = params[vars[:page_param] || DEFAULT[:page_param]]
|
36
|
+
force_integer ? (page || 1).to_i : page
|
37
|
+
end
|
21
38
|
end
|
22
39
|
end
|
23
40
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Madmin
|
2
2
|
module Fields
|
3
|
-
class NestedHasMany <
|
3
|
+
class NestedHasMany < HasMany
|
4
4
|
DEFAULT_ATTRIBUTES = %w[_destroy id].freeze
|
5
5
|
def nested_attributes
|
6
6
|
resource.attributes.except(*skipped_fields)
|
@@ -26,6 +26,10 @@ module Madmin
|
|
26
26
|
attribute_name.to_s.singularize.classify.constantize
|
27
27
|
end
|
28
28
|
|
29
|
+
def paginateable?
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
29
33
|
private
|
30
34
|
|
31
35
|
def permitted_fields
|
@@ -41,11 +41,15 @@ module Madmin
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def default_sentinel(file)
|
44
|
-
file.eql?(ROUTES_FILE[:default]) ? /\.routes\.draw do\s*\n/m : /namespace :madmin
|
44
|
+
file.eql?(ROUTES_FILE[:default]) ? /\.routes\.draw do\s*\n/m : /namespace :madmin[^\n]*do\s*\n/m
|
45
45
|
end
|
46
46
|
|
47
47
|
def default_routes_file
|
48
|
-
rails6_1_and_up? ?
|
48
|
+
if rails6_1_and_up? && File.exist?(ROUTES_FILE[:separated])
|
49
|
+
ROUTES_FILE[:separated]
|
50
|
+
else
|
51
|
+
ROUTES_FILE[:default]
|
52
|
+
end
|
49
53
|
end
|
50
54
|
|
51
55
|
def generator_options
|
data/lib/madmin/menu.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
module Madmin
|
2
|
+
class Menu
|
3
|
+
def initialize
|
4
|
+
@children = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def reset
|
8
|
+
@children = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def before_render(&block)
|
12
|
+
if block_given?
|
13
|
+
@before_render = block
|
14
|
+
else
|
15
|
+
@before_render
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def render(&block)
|
20
|
+
instance_eval(&@before_render) if @before_render
|
21
|
+
|
22
|
+
# Ensure all the resources have been added to the menu
|
23
|
+
Madmin.resources.each do |resource|
|
24
|
+
next if resource.menu_options == false
|
25
|
+
add resource.menu_options
|
26
|
+
end
|
27
|
+
|
28
|
+
items.each(&block)
|
29
|
+
end
|
30
|
+
|
31
|
+
module Node
|
32
|
+
def add(options)
|
33
|
+
options = options.dup
|
34
|
+
|
35
|
+
if (parent = options.delete(:parent))
|
36
|
+
@children[parent] ||= Item.new(label: parent)
|
37
|
+
@children[parent].add options
|
38
|
+
else
|
39
|
+
item = Item.new(**options)
|
40
|
+
@children[item.label] = item
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def items
|
45
|
+
@children.values.sort do |a, b|
|
46
|
+
result = a.position <=> b.position
|
47
|
+
result = a.label <=> b.label if result == 0 # sort alphabetically for the same position
|
48
|
+
result
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
include Node
|
54
|
+
|
55
|
+
class Item
|
56
|
+
include Node
|
57
|
+
|
58
|
+
attr_reader :label, :url, :position, :parent, :children
|
59
|
+
|
60
|
+
def initialize(label:, url: nil, position: 99, parent: nil, **options)
|
61
|
+
@label = label
|
62
|
+
@url = url
|
63
|
+
@position = position
|
64
|
+
@parent = parent
|
65
|
+
@if = options.delete(:if)
|
66
|
+
@children = {}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/madmin/resource.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
require "ostruct"
|
2
|
-
|
3
1
|
module Madmin
|
4
2
|
class Resource
|
3
|
+
Attribute = Data.define(:name, :type, :field)
|
4
|
+
|
5
5
|
class_attribute :attributes, default: ActiveSupport::OrderedHash.new
|
6
6
|
class_attribute :member_actions, default: []
|
7
7
|
class_attribute :scopes, default: []
|
8
|
+
class_attribute :menu_options, instance_reader: false
|
8
9
|
|
9
10
|
class << self
|
10
11
|
def inherited(base)
|
@@ -14,12 +15,17 @@ module Madmin
|
|
14
15
|
super
|
15
16
|
end
|
16
17
|
|
17
|
-
def model
|
18
|
-
|
18
|
+
def model(value = nil)
|
19
|
+
if value
|
20
|
+
@model = value
|
21
|
+
else
|
22
|
+
@model ||= model_name.constantize
|
23
|
+
end
|
19
24
|
end
|
20
25
|
|
21
26
|
def model_find(id)
|
22
|
-
friendly_model? ? model.friendly.find(id) : model.find(id)
|
27
|
+
record = friendly_model? ? model.friendly.find(id) : model.find(id)
|
28
|
+
becomes(record)
|
23
29
|
end
|
24
30
|
|
25
31
|
def model_name
|
@@ -36,26 +42,36 @@ module Madmin
|
|
36
42
|
|
37
43
|
def attribute(name, type = nil, **options)
|
38
44
|
type ||= infer_type(name)
|
39
|
-
field = options
|
45
|
+
field = options.delete(:field) || field_for_type(type)
|
40
46
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
if field.nil?
|
48
|
+
Rails.logger.warn <<~MESSAGE
|
49
|
+
WARNING: Madmin could not infer a field type for `#{name}` attribute. Defaulting to a String type.
|
50
|
+
You can set the type by specifying the type on the attribute:
|
51
|
+
|
52
|
+
attribute :#{name}, :boolean
|
53
|
+
MESSAGE
|
54
|
+
field = Fields::String
|
55
|
+
end
|
56
|
+
|
57
|
+
config = ActiveSupport::OrderedOptions.new.merge(options)
|
58
|
+
yield config if block_given?
|
50
59
|
|
51
|
-
|
52
|
-
|
60
|
+
# Form is an alias for new & edit
|
61
|
+
if config.has_key?(:form)
|
62
|
+
config.new = config[:form]
|
63
|
+
config.edit = config[:form]
|
64
|
+
end
|
53
65
|
|
54
|
-
|
55
|
-
|
66
|
+
# New/create and edit/update need to match
|
67
|
+
config.create = config[:create] if config.has_key?(:new)
|
68
|
+
config.update = config[:update] if config.has_key?(:edit)
|
56
69
|
|
57
|
-
|
58
|
-
|
70
|
+
attributes[name] = Attribute.new(
|
71
|
+
name: name,
|
72
|
+
type: type,
|
73
|
+
field: field.new(attribute_name: name, model: model, resource: self, options: config)
|
74
|
+
)
|
59
75
|
end
|
60
76
|
|
61
77
|
def friendly_name
|
@@ -81,11 +97,15 @@ module Madmin
|
|
81
97
|
end
|
82
98
|
|
83
99
|
def show_path(record)
|
84
|
-
url_helpers.polymorphic_path([:madmin, route_namespace, record])
|
100
|
+
url_helpers.polymorphic_path([:madmin, route_namespace, becomes(record)])
|
85
101
|
end
|
86
102
|
|
87
103
|
def edit_path(record)
|
88
|
-
url_helpers.polymorphic_path([:madmin, route_namespace, record], action: :edit)
|
104
|
+
url_helpers.polymorphic_path([:madmin, route_namespace, becomes(record)], action: :edit)
|
105
|
+
end
|
106
|
+
|
107
|
+
def becomes(record)
|
108
|
+
record.instance_of?(model) ? record : record.becomes(model)
|
89
109
|
end
|
90
110
|
|
91
111
|
def param_key
|
@@ -121,6 +141,7 @@ module Madmin
|
|
121
141
|
binary: Fields::String,
|
122
142
|
blob: Fields::Text,
|
123
143
|
boolean: Fields::Boolean,
|
144
|
+
currency: Fields::Currency,
|
124
145
|
date: Fields::Date,
|
125
146
|
datetime: Fields::DateTime,
|
126
147
|
decimal: Fields::Decimal,
|
@@ -131,6 +152,7 @@ module Madmin
|
|
131
152
|
json: Fields::Json,
|
132
153
|
jsonb: Fields::Json,
|
133
154
|
primary_key: Fields::String,
|
155
|
+
select: Fields::Select,
|
134
156
|
string: Fields::String,
|
135
157
|
text: Fields::Text,
|
136
158
|
time: Fields::Time,
|
@@ -176,7 +198,7 @@ module Madmin
|
|
176
198
|
has_one: Fields::HasOne,
|
177
199
|
rich_text: Fields::RichText,
|
178
200
|
nested_has_many: Fields::NestedHasMany
|
179
|
-
}
|
201
|
+
}[type]
|
180
202
|
end
|
181
203
|
|
182
204
|
def infer_type(name)
|
@@ -228,6 +250,16 @@ module Madmin
|
|
228
250
|
store_accessors = model.stored_attributes.values
|
229
251
|
store_accessors.flatten
|
230
252
|
end
|
253
|
+
|
254
|
+
def menu(options)
|
255
|
+
@menu_options = options
|
256
|
+
end
|
257
|
+
|
258
|
+
def menu_options
|
259
|
+
return false if @menu_options == false
|
260
|
+
@menu_options ||= {}
|
261
|
+
@menu_options.with_defaults(label: friendly_name.pluralize, url: index_path)
|
262
|
+
end
|
231
263
|
end
|
232
264
|
end
|
233
265
|
end
|
data/lib/madmin/search.rb
CHANGED
data/lib/madmin/version.rb
CHANGED
data/lib/madmin.rb
CHANGED
@@ -5,6 +5,7 @@ require "pagy"
|
|
5
5
|
module Madmin
|
6
6
|
autoload :Field, "madmin/field"
|
7
7
|
autoload :GeneratorHelpers, "madmin/generator_helpers"
|
8
|
+
autoload :Menu, "madmin/menu"
|
8
9
|
autoload :Resource, "madmin/resource"
|
9
10
|
autoload :ResourceBuilder, "madmin/resource_builder"
|
10
11
|
autoload :Search, "madmin/search"
|
@@ -14,6 +15,7 @@ module Madmin
|
|
14
15
|
autoload :Attachments, "madmin/fields/attachments"
|
15
16
|
autoload :BelongsTo, "madmin/fields/belongs_to"
|
16
17
|
autoload :Boolean, "madmin/fields/boolean"
|
18
|
+
autoload :Currency, "madmin/fields/currency"
|
17
19
|
autoload :Date, "madmin/fields/date"
|
18
20
|
autoload :DateTime, "madmin/fields/date_time"
|
19
21
|
autoload :Decimal, "madmin/fields/decimal"
|
@@ -28,14 +30,33 @@ module Madmin
|
|
28
30
|
autoload :Password, "madmin/fields/password"
|
29
31
|
autoload :Polymorphic, "madmin/fields/polymorphic"
|
30
32
|
autoload :RichText, "madmin/fields/rich_text"
|
33
|
+
autoload :Select, "madmin/fields/select"
|
31
34
|
autoload :String, "madmin/fields/string"
|
32
35
|
autoload :Text, "madmin/fields/text"
|
33
36
|
autoload :Time, "madmin/fields/time"
|
34
37
|
end
|
35
38
|
|
39
|
+
mattr_accessor :importmap, default: Importmap::Map.new
|
40
|
+
mattr_accessor :menu, default: Menu.new
|
41
|
+
mattr_accessor :site_name
|
42
|
+
mattr_accessor :stylesheets, default: []
|
43
|
+
|
36
44
|
class << self
|
37
45
|
def resource_for(object)
|
38
|
-
|
46
|
+
if object.is_a? ::ActiveStorage::Attached
|
47
|
+
"ActiveStorage::AttachmentResource".constantize
|
48
|
+
else
|
49
|
+
begin
|
50
|
+
"#{object.class.name}Resource".constantize
|
51
|
+
rescue
|
52
|
+
# For STI models, see if there's a superclass resource available
|
53
|
+
if (column = object.class.inheritance_column) && object.class.column_names.include?(column)
|
54
|
+
"#{object.class.superclass.base_class.name}Resource".constantize
|
55
|
+
else
|
56
|
+
raise
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
39
60
|
end
|
40
61
|
|
41
62
|
def resource_by_name(name)
|
@@ -48,6 +69,7 @@ module Madmin
|
|
48
69
|
|
49
70
|
def reset_resources!
|
50
71
|
@resources = nil
|
72
|
+
menu.reset
|
51
73
|
end
|
52
74
|
|
53
75
|
def resource_names
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: madmin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Oliver
|
8
8
|
- Andrea Fomera
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2025-02-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
@@ -17,14 +16,14 @@ dependencies:
|
|
17
16
|
requirements:
|
18
17
|
- - ">="
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
19
|
+
version: 7.0.0
|
21
20
|
type: :runtime
|
22
21
|
prerelease: false
|
23
22
|
version_requirements: !ruby/object:Gem::Requirement
|
24
23
|
requirements:
|
25
24
|
- - ">="
|
26
25
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
26
|
+
version: 7.0.0
|
28
27
|
- !ruby/object:Gem::Dependency
|
29
28
|
name: pagy
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,6 +38,34 @@ dependencies:
|
|
39
38
|
- - ">="
|
40
39
|
- !ruby/object:Gem::Version
|
41
40
|
version: '3.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: importmap-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: propshaft
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
42
69
|
description: It's an admin, obviously.
|
43
70
|
email:
|
44
71
|
- excid3@gmail.com
|
@@ -50,9 +77,17 @@ files:
|
|
50
77
|
- MIT-LICENSE
|
51
78
|
- README.md
|
52
79
|
- Rakefile
|
53
|
-
- app/assets/config/
|
54
|
-
- app/assets/stylesheets/actiontext.
|
55
|
-
- app/assets/stylesheets/application.css
|
80
|
+
- app/assets/config/madmin_manifest.js
|
81
|
+
- app/assets/stylesheets/madmin/actiontext.css
|
82
|
+
- app/assets/stylesheets/madmin/application-sprockets.css
|
83
|
+
- app/assets/stylesheets/madmin/application.css
|
84
|
+
- app/assets/stylesheets/madmin/base.css
|
85
|
+
- app/assets/stylesheets/madmin/buttons.css
|
86
|
+
- app/assets/stylesheets/madmin/forms.css
|
87
|
+
- app/assets/stylesheets/madmin/pagination.css
|
88
|
+
- app/assets/stylesheets/madmin/reset.css
|
89
|
+
- app/assets/stylesheets/madmin/sidebar.css
|
90
|
+
- app/assets/stylesheets/madmin/tables.css
|
56
91
|
- app/controllers/madmin/application_controller.rb
|
57
92
|
- app/controllers/madmin/base_controller.rb
|
58
93
|
- app/controllers/madmin/dashboard_controller.rb
|
@@ -60,10 +95,15 @@ files:
|
|
60
95
|
- app/helpers/madmin/application_helper.rb
|
61
96
|
- app/helpers/madmin/nav_helper.rb
|
62
97
|
- app/helpers/madmin/sort_helper.rb
|
98
|
+
- app/javascript/madmin/application.js
|
99
|
+
- app/javascript/madmin/controllers/application.js
|
100
|
+
- app/javascript/madmin/controllers/index.js
|
101
|
+
- app/javascript/madmin/controllers/nested_form_controller.js
|
102
|
+
- app/javascript/madmin/controllers/select_controller.js
|
63
103
|
- app/views/layouts/madmin/application.html.erb
|
104
|
+
- app/views/madmin/application/_flash.html.erb
|
64
105
|
- app/views/madmin/application/_form.html.erb
|
65
106
|
- app/views/madmin/application/_javascript.html.erb
|
66
|
-
- app/views/madmin/application/_menu_resources.html.erb
|
67
107
|
- app/views/madmin/application/_navigation.html.erb
|
68
108
|
- app/views/madmin/application/edit.html.erb
|
69
109
|
- app/views/madmin/application/index.html.erb
|
@@ -82,6 +122,9 @@ files:
|
|
82
122
|
- app/views/madmin/fields/boolean/_form.html.erb
|
83
123
|
- app/views/madmin/fields/boolean/_index.html.erb
|
84
124
|
- app/views/madmin/fields/boolean/_show.html.erb
|
125
|
+
- app/views/madmin/fields/currency/_form.html.erb
|
126
|
+
- app/views/madmin/fields/currency/_index.html.erb
|
127
|
+
- app/views/madmin/fields/currency/_show.html.erb
|
85
128
|
- app/views/madmin/fields/date/_form.html.erb
|
86
129
|
- app/views/madmin/fields/date/_index.html.erb
|
87
130
|
- app/views/madmin/fields/date/_show.html.erb
|
@@ -125,6 +168,9 @@ files:
|
|
125
168
|
- app/views/madmin/fields/rich_text/_form.html.erb
|
126
169
|
- app/views/madmin/fields/rich_text/_index.html.erb
|
127
170
|
- app/views/madmin/fields/rich_text/_show.html.erb
|
171
|
+
- app/views/madmin/fields/select/_form.html.erb
|
172
|
+
- app/views/madmin/fields/select/_index.html.erb
|
173
|
+
- app/views/madmin/fields/select/_show.html.erb
|
128
174
|
- app/views/madmin/fields/string/_form.html.erb
|
129
175
|
- app/views/madmin/fields/string/_index.html.erb
|
130
176
|
- app/views/madmin/fields/string/_show.html.erb
|
@@ -135,6 +181,7 @@ files:
|
|
135
181
|
- app/views/madmin/fields/time/_index.html.erb
|
136
182
|
- app/views/madmin/fields/time/_show.html.erb
|
137
183
|
- app/views/madmin/shared/_label.html.erb
|
184
|
+
- config/importmap.rb
|
138
185
|
- lib/generators/madmin/field/field_generator.rb
|
139
186
|
- lib/generators/madmin/field/templates/_form.html.erb
|
140
187
|
- lib/generators/madmin/field/templates/_index.html.erb
|
@@ -162,6 +209,7 @@ files:
|
|
162
209
|
- lib/madmin/fields/attachments.rb
|
163
210
|
- lib/madmin/fields/belongs_to.rb
|
164
211
|
- lib/madmin/fields/boolean.rb
|
212
|
+
- lib/madmin/fields/currency.rb
|
165
213
|
- lib/madmin/fields/date.rb
|
166
214
|
- lib/madmin/fields/date_time.rb
|
167
215
|
- lib/madmin/fields/decimal.rb
|
@@ -176,10 +224,12 @@ files:
|
|
176
224
|
- lib/madmin/fields/password.rb
|
177
225
|
- lib/madmin/fields/polymorphic.rb
|
178
226
|
- lib/madmin/fields/rich_text.rb
|
227
|
+
- lib/madmin/fields/select.rb
|
179
228
|
- lib/madmin/fields/string.rb
|
180
229
|
- lib/madmin/fields/text.rb
|
181
230
|
- lib/madmin/fields/time.rb
|
182
231
|
- lib/madmin/generator_helpers.rb
|
232
|
+
- lib/madmin/menu.rb
|
183
233
|
- lib/madmin/namespace.rb
|
184
234
|
- lib/madmin/resource.rb
|
185
235
|
- lib/madmin/resource_builder.rb
|
@@ -191,7 +241,6 @@ homepage: https://github.com/excid3/madmin
|
|
191
241
|
licenses:
|
192
242
|
- MIT
|
193
243
|
metadata: {}
|
194
|
-
post_install_message:
|
195
244
|
rdoc_options: []
|
196
245
|
require_paths:
|
197
246
|
- lib
|
@@ -199,15 +248,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
248
|
requirements:
|
200
249
|
- - ">="
|
201
250
|
- !ruby/object:Gem::Version
|
202
|
-
version: 2.
|
251
|
+
version: 3.2.0
|
203
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
253
|
requirements:
|
205
254
|
- - ">="
|
206
255
|
- !ruby/object:Gem::Version
|
207
256
|
version: '0'
|
208
257
|
requirements: []
|
209
|
-
rubygems_version: 3.5
|
210
|
-
signing_key:
|
258
|
+
rubygems_version: 3.6.5
|
211
259
|
specification_version: 4
|
212
260
|
summary: A modern admin for Ruby on Rails apps
|
213
261
|
test_files: []
|