action_admin 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/{admin/admin.js → action_admin/action-admin.js} +1 -0
- data/app/assets/javascripts/admin/application.js +1 -1
- data/app/assets/stylesheets/action_admin/action-admin.scss +12 -0
- data/app/assets/stylesheets/action_admin/action-admin/tinymce.scss +6 -0
- data/app/assets/stylesheets/admin/application.scss +1 -1
- data/app/assets/stylesheets/admin/tinymce-editor.scss +1 -0
- data/app/controllers/action_admin/devise/confirmations_controller.rb +10 -0
- data/app/controllers/action_admin/devise/omniauth_callbacks_controller.rb +7 -0
- data/app/controllers/action_admin/devise/passwords_controller.rb +10 -0
- data/app/controllers/action_admin/devise/registrations_controller.rb +10 -0
- data/app/controllers/action_admin/devise/sessions_controller.rb +9 -0
- data/app/controllers/action_admin/devise/unlocks_controller.rb +10 -0
- data/{lib → app/controllers/concerns}/action_admin/actionable.rb +1 -0
- data/{lib → app/controllers/concerns}/action_admin/controller.rb +0 -0
- data/{lib → app/controllers/concerns}/action_admin/crudable.rb +0 -0
- data/app/helpers/action_admin/admin_helper.rb +19 -3
- data/app/helpers/action_admin/form_helper.rb +4 -4
- data/app/helpers/action_admin/markup_helper.rb +6 -3
- data/app/inputs/action_admin/attachment_input.rb +51 -0
- data/app/inputs/action_admin/select_list_input.rb +14 -0
- data/app/inputs/action_admin/slug_input.rb +63 -0
- data/app/inputs/action_admin/tag_list_input.rb +10 -0
- data/app/inputs/action_admin/tinymce_input.rb +9 -0
- data/app/inputs/action_admin/title_input.rb +16 -0
- data/app/presenters/action_admin/presenter.rb +126 -0
- data/app/presenters/concerns/action_admin/presentable.rb +29 -0
- data/app/views/action_admin/devise/confirmations/new.html.slim +14 -0
- data/app/views/action_admin/devise/passwords/edit.html.slim +20 -0
- data/app/views/action_admin/devise/passwords/new.html.slim +13 -0
- data/app/views/action_admin/devise/registrations/edit.html.slim +22 -0
- data/app/views/action_admin/devise/registrations/new.html.slim +19 -0
- data/app/views/action_admin/devise/sessions/new.html.slim +14 -0
- data/app/views/action_admin/devise/shared/_links.html.slim +19 -0
- data/app/views/action_admin/devise/unlocks/new.html.slim +14 -0
- data/app/views/admin/common/_alerts.html.slim +17 -0
- data/app/views/admin/common/_header.html.slim +2 -0
- data/app/views/admin/panels/_default.html.slim +11 -0
- data/app/views/admin/panels/_expanded.html.slim +11 -0
- data/app/views/admin/panels/_group.html.slim +1 -0
- data/app/views/admin/panels/_plain.html.slim +1 -0
- data/app/views/admin/records/_form.html.slim +34 -24
- data/app/views/admin/records/index.html.slim +9 -19
- data/app/views/layouts/admin.html.slim +0 -2
- data/app/views/layouts/admin/devise.html.slim +16 -0
- data/lib/action_admin.rb +2 -4
- data/lib/action_admin/config.rb +2 -1
- data/lib/action_admin/engine.rb +7 -1
- data/lib/action_admin/{simple_form.rb → form.rb} +3 -3
- data/lib/action_admin/{simple_form/form_builder.rb → form/builder.rb} +14 -3
- data/lib/action_admin/{simple_form → form}/error_notification.rb +1 -1
- data/lib/action_admin/form/minimal_builder.rb +19 -0
- data/lib/action_admin/routes.rb +19 -0
- data/lib/action_admin/version.rb +1 -1
- metadata +42 -11
- data/app/assets/stylesheets/admin/admin.scss +0 -2
- data/lib/action_admin/simple_form/minimal_form_builder.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f5a65a3d49134131805423322fd40c7b66b7520
|
4
|
+
data.tar.gz: 6bbba84f33f86e1dfa1d4be12e663746b6ef95b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa326acf06c41b654146b5ff48c61d332c2dbda5a42e3273301c2244ca8a48cfec4f557d4459e90aa430bbc8cc922e7813eb2d1332fa361bd3a47357be61b254
|
7
|
+
data.tar.gz: ad25a999ffbd4129fda022e04b69f47c98ccce3b6153b5d233ce29804fc484da6d9ebb04b063ab6b5fb22d95d2fcde49209f91f41492d39009e0c3d3c9ed4a7a
|
@@ -1 +1 @@
|
|
1
|
-
@import "admin";
|
1
|
+
@import "action-admin";
|
@@ -0,0 +1 @@
|
|
1
|
+
@import "action-admin/tinymce";
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class Devise::RegistrationsController < ::Devise::RegistrationsController
|
3
|
+
include ActionAdmin::Actionable
|
4
|
+
|
5
|
+
action_title :new, 'Register'
|
6
|
+
action_title :edit, 'Edit Profile'
|
7
|
+
|
8
|
+
layout -> { action_name == 'edit' ? 'admin' : 'admin/devise' }
|
9
|
+
end
|
10
|
+
end
|
File without changes
|
File without changes
|
@@ -5,8 +5,10 @@ module ActionAdmin
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def admin_action_title(action=nil)
|
8
|
-
|
9
|
-
|
8
|
+
if controller.respond_to? :action_header
|
9
|
+
name = action || action_name
|
10
|
+
controller.action_header.action_title(name, self)
|
11
|
+
end
|
10
12
|
end
|
11
13
|
|
12
14
|
def admin_meta_tags
|
@@ -16,11 +18,25 @@ module ActionAdmin
|
|
16
18
|
nofollow: true,
|
17
19
|
reverse: true,
|
18
20
|
title: admin_action_title || "#{action_name}".titleize,
|
19
|
-
charset: 'utf-8'
|
21
|
+
charset: 'utf-8',
|
22
|
+
viewport: 'width=device-width, initial-scale=1.0'
|
20
23
|
}
|
21
24
|
|
22
25
|
set_meta_tags tags
|
23
26
|
display_meta_tags
|
24
27
|
end
|
28
|
+
|
29
|
+
def admin_present(record, presenter=nil)
|
30
|
+
record = record.new if record.respond_to? :new
|
31
|
+
class_name = record.class.name
|
32
|
+
presenter = presenter || "Admin::#{class_name}Presenter"
|
33
|
+
presenter = "#{presenter}".safe_constantize || 'ActionAdmin::Presenter'.constantize
|
34
|
+
|
35
|
+
presenter.new(record, self)
|
36
|
+
end
|
37
|
+
|
38
|
+
def admin_present_many(records, presenter=nil)
|
39
|
+
records.to_a.map { |r| admin_present(r, presenter) }
|
40
|
+
end
|
25
41
|
end
|
26
42
|
end
|
@@ -3,7 +3,7 @@ module ActionAdmin
|
|
3
3
|
# Admin simple form
|
4
4
|
def admin_form_for(object, *args, &block)
|
5
5
|
options = args.extract_options!
|
6
|
-
builder = { builder: ActionAdmin::
|
6
|
+
builder = { builder: ActionAdmin::Form::Builder }
|
7
7
|
options = options.merge(builder) unless options[:builder]
|
8
8
|
|
9
9
|
simple_form_for(object, *(args << options), &block)
|
@@ -12,7 +12,7 @@ module ActionAdmin
|
|
12
12
|
# Admin simple form fields
|
13
13
|
def admin_fields_for(*args, &block)
|
14
14
|
options = args.extract_options!
|
15
|
-
builder = { builder: ActionAdmin::
|
15
|
+
builder = { builder: ActionAdmin::Form::Builder }
|
16
16
|
options = options.merge(builder) unless options[:builder]
|
17
17
|
|
18
18
|
simple_form_for(*(args << options), &block)
|
@@ -21,7 +21,7 @@ module ActionAdmin
|
|
21
21
|
# Admin simple form with placeholders
|
22
22
|
def admin_minimal_form_for(object, *args, &block)
|
23
23
|
options = args.extract_options!
|
24
|
-
options = options.merge(builder: ActionAdmin::
|
24
|
+
options = options.merge(builder: ActionAdmin::Form::MinimalBuilder)
|
25
25
|
|
26
26
|
admin_form_for(object, *(args << options), &block)
|
27
27
|
end
|
@@ -29,7 +29,7 @@ module ActionAdmin
|
|
29
29
|
# Admin simple form fields with placeholders
|
30
30
|
def admin_minimal_fields_for(*args, &block)
|
31
31
|
options = args.extract_options!
|
32
|
-
options = options.merge(builder: ActionAdmin::
|
32
|
+
options = options.merge(builder: ActionAdmin::Form::MinimalBuilder)
|
33
33
|
|
34
34
|
admin_fields_for(*(args << options), &block)
|
35
35
|
end
|
@@ -68,17 +68,20 @@ module ActionAdmin
|
|
68
68
|
}
|
69
69
|
|
70
70
|
options = {
|
71
|
-
menu_class: 'menu',
|
71
|
+
menu_class: 'menu icons icon-left',
|
72
72
|
separator_class: 'is-separator',
|
73
73
|
submenu_parent_class: 'has-children',
|
74
74
|
submenu_class: 'vertical menu nested',
|
75
75
|
active_class: 'is-current',
|
76
76
|
active_submenu_class: 'is-current',
|
77
77
|
icon_prefix: 'mdi mdi-',
|
78
|
-
icon_position: '
|
78
|
+
icon_position: 'left'
|
79
79
|
}
|
80
80
|
|
81
|
-
|
81
|
+
custom = ActionAdmin.config.menus.send(:"topbar_#{position}")
|
82
|
+
items = items[position].merge(Hash(custom).symbolize_keys)
|
83
|
+
|
84
|
+
smart_navigation_for items, options
|
82
85
|
end
|
83
86
|
|
84
87
|
def admin_action_links(action=nil)
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class AttachmentInput < SimpleForm::Inputs::StringInput
|
3
|
+
def input(wrapper_options)
|
4
|
+
modal = options.fetch :modal, 'media-modal'
|
5
|
+
html = content_tag :div, input_placeholder, id: input_html_id, data: { media_attach: modal }
|
6
|
+
|
7
|
+
html + input_template
|
8
|
+
end
|
9
|
+
|
10
|
+
def input_placeholder
|
11
|
+
span = content_tag :span, 'No thumbnail', class: 'margin-bottom-1'
|
12
|
+
icon = content_tag :i, nil, class: 'mdi mdi-camera-off'
|
13
|
+
button = content_tag :a, 'Add Thumbnail', data: { open: input_html_id }, class: 'button success small hollow margin-0'
|
14
|
+
content = content_tag :div, empty_input + icon + span + button, class: 'no-content hide', data: { empty_state: '' }
|
15
|
+
image = attachment(attachment_url) if attachment_url.present?
|
16
|
+
|
17
|
+
content + content_tag(:div, image, data: { list_remove: '' }, class: 'attachments')
|
18
|
+
end
|
19
|
+
|
20
|
+
def empty_input
|
21
|
+
@builder.hidden_field(:"#{attribute_name}_id", value: '', id: nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
def hidden_input
|
25
|
+
@builder.hidden_field(:"#{attribute_name}_id", data: { value: :id })
|
26
|
+
end
|
27
|
+
|
28
|
+
def input_html_id
|
29
|
+
hidden_input[/id=\"(.*)\"/, 1].dasherize
|
30
|
+
end
|
31
|
+
|
32
|
+
def attachment_url
|
33
|
+
object.send(attribute_name).try(:file_url, :preview)
|
34
|
+
end
|
35
|
+
|
36
|
+
def attachment(image_url=nil)
|
37
|
+
image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { src: :id, url: "#{template.root_url.chomp('/')}[src]" }
|
38
|
+
button = content_tag :a, 'Remove Thumbnail', class: 'button alert small hollow margin-0', data: { remove: '' }
|
39
|
+
|
40
|
+
content_tag :div, hidden_input + image + button, class: 'attachment text-center', data: { list_item: '' }
|
41
|
+
end
|
42
|
+
|
43
|
+
def input_template
|
44
|
+
content_tag :script, attachment, id: "#{input_html_id}-item-template", type: 'text/template'
|
45
|
+
end
|
46
|
+
|
47
|
+
def label(wrapper_options)
|
48
|
+
''
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class SelectListInput < SimpleForm::Inputs::CollectionSelectInput
|
3
|
+
def input(wrapper_options)
|
4
|
+
input_html_options[:data] ||= {}
|
5
|
+
input_html_options[:data].merge!({
|
6
|
+
select_box: '',
|
7
|
+
list: true,
|
8
|
+
placeholder: input_html_options[:placeholder]
|
9
|
+
})
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class SlugInput < SimpleForm::Inputs::StringInput
|
3
|
+
def input(wrapper_options)
|
4
|
+
input_html_options[:placeholder] ||= raw_label_text
|
5
|
+
input_html_options[:type] ||= 'text'
|
6
|
+
input_html_options[:class] ||= []
|
7
|
+
input_html_options[:class] += ['small', 'edit-input']
|
8
|
+
|
9
|
+
opts = { class: 'inline-edit-box', data: { inline_edit_box: '' } }
|
10
|
+
|
11
|
+
template.content_tag(:div, opts) do
|
12
|
+
template.concat preview_link
|
13
|
+
template.concat super
|
14
|
+
template.concat edit_button
|
15
|
+
template.concat save_button
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def url
|
20
|
+
method = options.fetch :url, ActionAdmin.config.app_urls
|
21
|
+
template.try(method, object) unless object.new_record?
|
22
|
+
end
|
23
|
+
|
24
|
+
def prefix(text)
|
25
|
+
"#{raw_label_text}: #{text}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def input_value
|
29
|
+
object.try(attribute_name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def empty_value
|
33
|
+
prefix('Not defined')
|
34
|
+
end
|
35
|
+
|
36
|
+
def value_pattern
|
37
|
+
prefix "#{url}".sub("#{input_value}", '[val]')
|
38
|
+
end
|
39
|
+
|
40
|
+
def preview_value
|
41
|
+
input_value.present? ? prefix(url) : empty_value
|
42
|
+
end
|
43
|
+
|
44
|
+
def preview_link
|
45
|
+
data = { preview: '', value: value_pattern, placeholder: empty_value }
|
46
|
+
template.content_tag :small, preview_value, class: 'edit-preview', data: data
|
47
|
+
end
|
48
|
+
|
49
|
+
def edit_button
|
50
|
+
opts = { class: 'edit-button mdi mdi-pencil', data: { edit: '' } }
|
51
|
+
template.content_tag :span, nil, opts
|
52
|
+
end
|
53
|
+
|
54
|
+
def save_button
|
55
|
+
opts = { class: 'save-button mdi mdi-check', data: { save: '' } }
|
56
|
+
template.content_tag :span, nil, opts
|
57
|
+
end
|
58
|
+
|
59
|
+
def label(wrapper_options)
|
60
|
+
''
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class TinymceInput < SimpleForm::Inputs::TextInput
|
3
|
+
def input(wrapper_options)
|
4
|
+
input_html_options[:data] ||= {}
|
5
|
+
input_html_options[:data].merge!({ tiny_mce_editor: '', content_css: template.asset_path('admin/tinymce-editor.css') })
|
6
|
+
super
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class TitleInput < SimpleForm::Inputs::StringInput
|
3
|
+
def input(wrapper_options)
|
4
|
+
input_html_options[:placeholder] ||= raw_label_text
|
5
|
+
input_html_options[:type] ||= 'text'
|
6
|
+
input_html_options[:class] ||= []
|
7
|
+
input_html_options[:class] += ['large']
|
8
|
+
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def label(wrapper_options)
|
13
|
+
''
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class Presenter
|
3
|
+
include ActionAdmin::Presentable
|
4
|
+
|
5
|
+
def initialize(record, context)
|
6
|
+
@model = record.class
|
7
|
+
@record = record
|
8
|
+
@context = context
|
9
|
+
end
|
10
|
+
|
11
|
+
def attributes
|
12
|
+
self.record_attributes
|
13
|
+
end
|
14
|
+
|
15
|
+
def attribute_names
|
16
|
+
if attributes.keys.any?
|
17
|
+
attributes.keys
|
18
|
+
else
|
19
|
+
items = ['title', 'name', 'email', 'id']
|
20
|
+
names = @record.class.attribute_names.select { |i| i.in? items }
|
21
|
+
|
22
|
+
names.sort_by { |i| items.index i }.first(1)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def attribute_labels
|
27
|
+
attribute_names.map { |i| @model.human_attribute_name(i) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def render_attribute(name)
|
31
|
+
@context.simple_attribute_for(@record, name, Hash(attributes[name]))
|
32
|
+
end
|
33
|
+
|
34
|
+
def render_attributes(*args)
|
35
|
+
options = args.extract_options!
|
36
|
+
wrapper = args.first
|
37
|
+
attribs = attribute_names.map do |a|
|
38
|
+
@context.content_tag(wrapper, render_attribute(a), options)
|
39
|
+
end
|
40
|
+
|
41
|
+
attribs.join.html_safe
|
42
|
+
end
|
43
|
+
|
44
|
+
def render_attributes_labels(*args)
|
45
|
+
options = args.extract_options!
|
46
|
+
wrapper = args.first
|
47
|
+
attribs = attribute_labels.map do |a|
|
48
|
+
@context.content_tag(wrapper, a, options)
|
49
|
+
end
|
50
|
+
|
51
|
+
attribs.join.html_safe
|
52
|
+
end
|
53
|
+
|
54
|
+
def action_links(*args)
|
55
|
+
options = args.extract_options!
|
56
|
+
wrapper = args.first
|
57
|
+
|
58
|
+
@context.content_tag wrapper, options do
|
59
|
+
@context.admin_table_action_links(@record)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def fields
|
64
|
+
self.record_fields
|
65
|
+
end
|
66
|
+
|
67
|
+
def render_field(form, field, options={})
|
68
|
+
association = options[:association]
|
69
|
+
|
70
|
+
if association.present?
|
71
|
+
form.association field, Hash(options).except(:association)
|
72
|
+
else
|
73
|
+
form.input field, Hash(options)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def render_fields(form)
|
78
|
+
fields.map { |f, o| render_field(form, f, 0) }.join.html_safe
|
79
|
+
end
|
80
|
+
|
81
|
+
def panels
|
82
|
+
self.record_panels
|
83
|
+
end
|
84
|
+
|
85
|
+
def render_panel(form, options={})
|
86
|
+
template = "admin/panels/#{options.fetch :template, 'default'}"
|
87
|
+
content = Array(options[:fields]).map do |f|
|
88
|
+
opts = fields[f]
|
89
|
+
|
90
|
+
opts[:label] = false if options[:labels] == false
|
91
|
+
opts[:label] = true if Array(options[:labels]).include?(f)
|
92
|
+
|
93
|
+
render_field(form, f, opts)
|
94
|
+
end
|
95
|
+
|
96
|
+
options = {
|
97
|
+
layout: false,
|
98
|
+
content: content.join.html_safe,
|
99
|
+
title: options[:title],
|
100
|
+
footer: options[:footer]
|
101
|
+
}
|
102
|
+
|
103
|
+
@context.render template, options
|
104
|
+
end
|
105
|
+
|
106
|
+
def render_panels(options={})
|
107
|
+
form = options[:form]
|
108
|
+
context = options[:context]
|
109
|
+
|
110
|
+
panels_for_context(context).map { |_i, o| render_panel(form, o) }.join.html_safe
|
111
|
+
end
|
112
|
+
|
113
|
+
def sorted_panels
|
114
|
+
items = [:high, :medium, :low]
|
115
|
+
panels.sort_by { |_i, o| [items.index(o[:priority]).to_i, o[:order].to_i] }
|
116
|
+
end
|
117
|
+
|
118
|
+
def panels_for_context(context=nil)
|
119
|
+
if context.blank?
|
120
|
+
sorted_panels.select { |_i, o| o[:context].blank? }
|
121
|
+
else
|
122
|
+
sorted_panels.select { |_i, o| o[:context] == context }
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module Presentable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
class_attribute :record_attributes
|
7
|
+
class_attribute :record_fields
|
8
|
+
class_attribute :record_panels
|
9
|
+
|
10
|
+
self.record_attributes = {}
|
11
|
+
self.record_fields = {}
|
12
|
+
self.record_panels = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
class_methods do
|
16
|
+
def attribute(name, options={})
|
17
|
+
self.record_attributes = self.record_attributes.merge(name => options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def field(name, options={})
|
21
|
+
self.record_fields = self.record_fields.merge(name => options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def panel(name, options={})
|
25
|
+
self.record_panels = self.record_panels.merge(name => options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
= admin_minimal_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f|
|
2
|
+
.panel
|
3
|
+
.panel-header.border
|
4
|
+
= admin_action_title
|
5
|
+
|
6
|
+
.panel-content.border
|
7
|
+
= f.error_notification
|
8
|
+
= f.full_error :confirmation_token
|
9
|
+
= f.input :email, required: true, autofocus: true
|
10
|
+
|
11
|
+
.panel-footer
|
12
|
+
= f.button :submit, 'Resend confirmation instructions', class: 'expanded margin-0'
|
13
|
+
|
14
|
+
= render 'action_admin/devise/shared/links'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
= admin_minimal_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f|
|
2
|
+
.panel
|
3
|
+
.panel-header.border
|
4
|
+
= admin_action_title
|
5
|
+
|
6
|
+
.panel-content.border
|
7
|
+
= f.error_notification
|
8
|
+
|
9
|
+
- if @minimum_password_length
|
10
|
+
.callout.info = "Password: #{@minimum_password_length} characters minimum"
|
11
|
+
|
12
|
+
= f.input :reset_password_token, as: :hidden
|
13
|
+
= f.full_error :reset_password_token
|
14
|
+
= f.input :password, label: 'New password', required: true, autofocus: true
|
15
|
+
= f.input :password_confirmation, label: 'Confirm new password', required: true
|
16
|
+
|
17
|
+
.panel-footer
|
18
|
+
= f.button :submit, 'Change password', class: 'expanded margin-0'
|
19
|
+
|
20
|
+
= render 'action_admin/devise/shared/links'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
= admin_minimal_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f|
|
2
|
+
.panel
|
3
|
+
.panel-header.border
|
4
|
+
= admin_action_title
|
5
|
+
|
6
|
+
.panel-content.border
|
7
|
+
= f.error_notification
|
8
|
+
= f.input :email, required: true, autofocus: true
|
9
|
+
|
10
|
+
.panel-footer
|
11
|
+
= f.button :submit, 'Send me reset password instructions', class: 'expanded margin-0'
|
12
|
+
|
13
|
+
= render 'action_admin/devise/shared/links'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
= admin_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f|
|
2
|
+
= f.error_notification
|
3
|
+
|
4
|
+
- if devise_mapping.confirmable? && resource.pending_reconfirmation?
|
5
|
+
p.callout.primary = "Currently waiting confirmation for: #{resource.unconfirmed_email}"
|
6
|
+
|
7
|
+
.panel
|
8
|
+
.panel-header.border
|
9
|
+
= action_name.titleize
|
10
|
+
|
11
|
+
.panel-content.border
|
12
|
+
= f.input :email, required: true, autofocus: true
|
13
|
+
= f.input :password, autocomplete: 'off', hint: "leave it blank if you don't want to change it", required: false
|
14
|
+
= f.input :password_confirmation, required: false
|
15
|
+
= f.input :current_password, hint: 'we need your current password to confirm your changes', required: true
|
16
|
+
|
17
|
+
.panel-footer
|
18
|
+
.grid-x
|
19
|
+
.cell.auto
|
20
|
+
= f.button :submit, 'Update', class: 'margin-0'
|
21
|
+
.cell.shrink
|
22
|
+
= link_to 'Cancel my account', registration_path(resource_name), class: 'button alert hollow margin-0' data: { confirm: 'Are you sure?' }, method: :delete
|
@@ -0,0 +1,19 @@
|
|
1
|
+
= admin_minimal_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
|
2
|
+
.panel
|
3
|
+
.panel-header.border
|
4
|
+
= admin_action_title
|
5
|
+
|
6
|
+
.panel-content.border
|
7
|
+
= f.error_notification
|
8
|
+
|
9
|
+
- if @minimum_password_length
|
10
|
+
.callout.info = "Password: #{@minimum_password_length} characters minimum"
|
11
|
+
|
12
|
+
= f.input :email, required: true, autofocus: true
|
13
|
+
= f.input :password, required: true
|
14
|
+
= f.input :password_confirmation, required: true
|
15
|
+
|
16
|
+
.panel-footer
|
17
|
+
= f.button :submit, 'Sign up', class: 'expanded margin-0'
|
18
|
+
|
19
|
+
= render 'action_admin/devise/shared/links'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
= admin_minimal_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
|
2
|
+
.panel
|
3
|
+
.panel-header.border
|
4
|
+
= admin_action_title
|
5
|
+
|
6
|
+
.panel-content.border
|
7
|
+
= f.input :email, required: false, autofocus: true
|
8
|
+
= f.input :password, required: false
|
9
|
+
= f.input :remember_me, as: :boolean if devise_mapping.rememberable?
|
10
|
+
|
11
|
+
.panel-footer
|
12
|
+
= f.button :submit, 'Log in', class: 'expanded margin-0'
|
13
|
+
|
14
|
+
= render 'action_admin/devise/shared/links'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.footer-links
|
2
|
+
- if controller_name != 'sessions'
|
3
|
+
= link_to "Log in", new_session_path(resource_name)
|
4
|
+
|
5
|
+
- if devise_mapping.registerable? && controller_name != 'registrations'
|
6
|
+
= link_to "Sign up", new_registration_path(resource_name)
|
7
|
+
|
8
|
+
- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
|
9
|
+
= link_to "Forgot your password?", new_password_path(resource_name)
|
10
|
+
|
11
|
+
- if devise_mapping.confirmable? && controller_name != 'confirmations'
|
12
|
+
= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name)
|
13
|
+
|
14
|
+
- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks'
|
15
|
+
= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name)
|
16
|
+
|
17
|
+
- if devise_mapping.omniauthable?
|
18
|
+
- resource_class.omniauth_providers.each do |provider|
|
19
|
+
= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
= admin_minimal_form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f|
|
2
|
+
.panel
|
3
|
+
.panel-header.border
|
4
|
+
= admin_action_title
|
5
|
+
|
6
|
+
.panel-content.border
|
7
|
+
= f.error_notification
|
8
|
+
= f.full_error :unlock_token
|
9
|
+
= f.input :email, required: true, autofocus: true
|
10
|
+
|
11
|
+
.panel-footer
|
12
|
+
= f.button :submit, 'Resend unlock instructions', class: 'expanded margin-0'
|
13
|
+
|
14
|
+
= render 'action_admin/devise/shared/links'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
- if notice.present?
|
2
|
+
.callout.primary
|
3
|
+
- [notice].flatten.each do |msg|
|
4
|
+
= msg
|
5
|
+
br
|
6
|
+
|
7
|
+
- if alert.present?
|
8
|
+
.callout.warning
|
9
|
+
- [alert].flatten.each do |msg|
|
10
|
+
= msg
|
11
|
+
br
|
12
|
+
|
13
|
+
- if defined? record and record.errors.present?
|
14
|
+
.callout.warning
|
15
|
+
- record.errors.full_messages.each do |error|
|
16
|
+
= error
|
17
|
+
br
|
@@ -0,0 +1 @@
|
|
1
|
+
.panel.input-group-list = content
|
@@ -0,0 +1 @@
|
|
1
|
+
.panel.background-none = content
|
@@ -1,29 +1,39 @@
|
|
1
1
|
= admin_form_for([:admin, current_record]) do |f|
|
2
2
|
= f.error_notification
|
3
3
|
|
4
|
-
.
|
5
|
-
.
|
6
|
-
|
7
|
-
- (permitted_params - current_model.attribute_aliases.values.map(&:to_sym)).each do |parameter|
|
8
|
-
- parameter = parameter.first if parameter.is_a? Array
|
9
|
-
- parameter = parameter.keys.first if parameter.is_a? Hash
|
4
|
+
.page-content
|
5
|
+
.content
|
6
|
+
= admin_present(current_record).render_panels(form: f)
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
= f.input parameter, as: :select, collection: current_model.where.not(id: exclude), include_blank: 'No parent'
|
15
|
-
- else
|
16
|
-
- assoc = parameter.to_s.sub('_ids', '').sub('_id', '')
|
17
|
-
- single = current_model.reflect_on_association(assoc)
|
18
|
-
- plural = current_model.reflect_on_association(assoc.pluralize)
|
19
|
-
- assoc = assoc.pluralize unless plural.nil?
|
8
|
+
.sidebar
|
9
|
+
= f.button :submit, class: 'large expanded'
|
10
|
+
= admin_present(current_record).render_panels(form: f, context: :sidebar)
|
20
11
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
12
|
+
/ .panel
|
13
|
+
/ .panel-header.border
|
14
|
+
/ = action_name.titleize
|
15
|
+
/
|
16
|
+
/ .panel-content.border
|
17
|
+
/ - (permitted_params - current_model.attribute_aliases.values.map(&:to_sym)).each do |parameter|
|
18
|
+
/ - parameter = parameter.first if parameter.is_a? Array
|
19
|
+
/ - parameter = parameter.keys.first if parameter.is_a? Hash
|
20
|
+
/
|
21
|
+
/ - if current_record.respond_to? parameter
|
22
|
+
/ - if parameter.to_s == 'parent_id'
|
23
|
+
/ - exclude = [current_record.id] + current_record.child_ids unless current_record.new_record?
|
24
|
+
/ = f.input parameter, as: :select, collection: current_model.where.not(id: exclude), include_blank: 'No parent'
|
25
|
+
/ - else
|
26
|
+
/ - assoc = parameter.to_s.sub('_ids', '').sub('_id', '')
|
27
|
+
/ - single = current_model.reflect_on_association(assoc)
|
28
|
+
/ - plural = current_model.reflect_on_association(assoc.pluralize)
|
29
|
+
/ - assoc = assoc.pluralize unless plural.nil?
|
30
|
+
/
|
31
|
+
/ - if parameter.to_s.ends_with?('_id')
|
32
|
+
/ = f.input parameter, collection: single.options[:class_name].classify.constantize.all, include_blank: 'None'
|
33
|
+
/ - elsif parameter.to_s.ends_with?('_ids')
|
34
|
+
/ = f.association assoc
|
35
|
+
/ - else
|
36
|
+
/ = f.input parameter, include_blank: 'Default', placeholder: "Enter #{parameter.to_s.humanize.downcase}..."
|
37
|
+
/
|
38
|
+
/ .panel-footer
|
39
|
+
/ = f.button :submit, class: 'margin-0'
|
@@ -3,31 +3,21 @@
|
|
3
3
|
|
4
4
|
- else
|
5
5
|
.panel
|
6
|
-
.panel-header
|
6
|
+
.panel-header
|
7
|
+
= action_name.titleize
|
8
|
+
|
7
9
|
.panel-content.padding-0.border-none
|
8
|
-
table.unstriped.margin-0
|
10
|
+
table.unstriped.margin-0
|
9
11
|
thead
|
10
12
|
tr
|
11
|
-
|
12
|
-
|
13
|
-
- parameter = parameter.first if parameter.is_a? Array
|
14
|
-
- parameter = parameter.keys.first if parameter.is_a? Hash
|
15
|
-
th.expand = parameter.to_s.titleize
|
16
|
-
|
17
|
-
th.shrink.actions Actions
|
13
|
+
= admin_present(current_model).render_attributes_labels(:th)
|
14
|
+
th = 'Actions'
|
18
15
|
|
19
16
|
tbody
|
20
|
-
- current_records.each do |record|
|
17
|
+
- admin_present_many(current_records).each do |record|
|
21
18
|
tr
|
22
|
-
|
23
|
-
|
24
|
-
- parameter = parameter.keys.first if parameter.is_a? Hash
|
25
|
-
|
26
|
-
- if record.respond_to? parameter
|
27
|
-
td.expand = attribute_for record, parameter
|
28
|
-
|
29
|
-
td.shrink.actions
|
30
|
-
= admin_table_action_links record
|
19
|
+
= record.render_attributes(:td, class: 'expand')
|
20
|
+
= record.action_links(:td, class: 'shrink actions')
|
31
21
|
|
32
22
|
- if current_records.respond_to? :current_page
|
33
23
|
.panel-footer
|
@@ -0,0 +1,16 @@
|
|
1
|
+
doctype html
|
2
|
+
|
3
|
+
html
|
4
|
+
head
|
5
|
+
= admin_meta_tags
|
6
|
+
= csrf_meta_tags
|
7
|
+
= favicon_link_tag 'admin/favicon.png'
|
8
|
+
= stylesheet_link_tag 'admin/application', media: 'all'
|
9
|
+
|
10
|
+
body
|
11
|
+
.login-box
|
12
|
+
.logo-image = image_tag 'admin/logo-login.svg'
|
13
|
+
= render 'admin/common/alerts'
|
14
|
+
= yield
|
15
|
+
|
16
|
+
= javascript_include_tag 'admin/application'
|
data/lib/action_admin.rb
CHANGED
@@ -5,6 +5,7 @@ require 'action_crud'
|
|
5
5
|
require 'smart_pagination'
|
6
6
|
require 'smart_navigation'
|
7
7
|
require 'simple_attribute'
|
8
|
+
require 'action_admin/routes'
|
8
9
|
require 'action_admin/engine'
|
9
10
|
|
10
11
|
module ActionAdmin
|
@@ -12,10 +13,7 @@ module ActionAdmin
|
|
12
13
|
|
13
14
|
# Autoload modules
|
14
15
|
autoload :Config
|
15
|
-
autoload :
|
16
|
-
autoload :Controller
|
17
|
-
autoload :Actionable
|
18
|
-
autoload :Crudable
|
16
|
+
autoload :Form
|
19
17
|
autoload :Header
|
20
18
|
|
21
19
|
# Set attr accessors
|
data/lib/action_admin/config.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module ActionAdmin
|
2
2
|
class Config < Hashie::Dash
|
3
3
|
property :app_name, default: 'Action Admin'
|
4
|
-
property :
|
4
|
+
property :app_urls, default: :web_url
|
5
|
+
property :menus, default: Hashie::Mash.new
|
5
6
|
|
6
7
|
def menu(name, &block)
|
7
8
|
if self.menus.send(:"#{name}").nil?
|
data/lib/action_admin/engine.rb
CHANGED
@@ -5,7 +5,13 @@ module ActionAdmin
|
|
5
5
|
end
|
6
6
|
|
7
7
|
initializer 'action_admin.assets.precompile' do |app|
|
8
|
-
|
8
|
+
%w(action_admin admin).each do |sf|
|
9
|
+
app.config.assets.paths << root.join('app', 'assets', 'javascripts', sf).to_s
|
10
|
+
app.config.assets.paths << root.join('app', 'assets', 'stylesheets', sf).to_s
|
11
|
+
app.config.assets.paths << root.join('app', 'assets', 'images', sf).to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
app.config.assets.precompile += %w(admin/application.js admin/application.css admin/tinymce-editor.css images/admin/*.*)
|
9
15
|
end
|
10
16
|
|
11
17
|
initializer 'action_admin', before: :load_config_initializers do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActionAdmin
|
2
|
-
module
|
3
|
-
class
|
2
|
+
module Form
|
3
|
+
class Builder < ::SimpleForm::FormBuilder
|
4
4
|
# Initialize form builder
|
5
5
|
def initialize(*)
|
6
6
|
super
|
@@ -37,7 +37,7 @@ module ActionAdmin
|
|
37
37
|
|
38
38
|
# Create error notification
|
39
39
|
def error_notification(options={})
|
40
|
-
|
40
|
+
Form::ErrorNotification.new(self, options).render
|
41
41
|
end
|
42
42
|
|
43
43
|
# Find field wrapper
|
@@ -48,6 +48,17 @@ module ActionAdmin
|
|
48
48
|
@admin[:wrapper_mappings] && @admin[:wrapper_mappings][input_type]
|
49
49
|
end
|
50
50
|
end
|
51
|
+
|
52
|
+
# Find namespaced input
|
53
|
+
def attempt_mapping_with_custom_namespace(input_name)
|
54
|
+
['ActionAdmin', 'Admin'].each do |namespace|
|
55
|
+
if (mapping = attempt_mapping(input_name, namespace.constantize))
|
56
|
+
return mapping
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
nil
|
61
|
+
end
|
51
62
|
end
|
52
63
|
end
|
53
64
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module Form
|
3
|
+
class MinimalBuilder < Builder
|
4
|
+
# Form builder input
|
5
|
+
def input(attribute_name, options = {}, &block)
|
6
|
+
options = @defaults.deep_dup.deep_merge(options) if @defaults
|
7
|
+
input = find_input(attribute_name, options, &block)
|
8
|
+
excluded = [:radio, :checkbox, :boolean, :check_boxes, :radio_buttons]
|
9
|
+
|
10
|
+
if !input.input_type.in?(excluded) and options[:placeholder].nil?
|
11
|
+
options[:placeholder] ||= input.send(:raw_label_text)
|
12
|
+
options[:label] ||= false
|
13
|
+
end
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActionDispatch::Routing
|
2
|
+
class Mapper
|
3
|
+
def authenticate_admin(resource, options={})
|
4
|
+
space = options.fetch :namespace, :admin
|
5
|
+
path = options.fetch :path, "#{space}/#{resource}"
|
6
|
+
model = "#{resource}".pluralize
|
7
|
+
names = { sign_in: 'login', sign_out: 'logout', sign_up: 'signup', edit: 'profile' }
|
8
|
+
options = { path: path, path_names: names, module: 'action_admin/devise' }.merge(options)
|
9
|
+
|
10
|
+
devise_for :"#{model}", options
|
11
|
+
|
12
|
+
authenticate resource do
|
13
|
+
namespace space do
|
14
|
+
yield
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/action_admin/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonian Guveli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -175,17 +175,45 @@ files:
|
|
175
175
|
- README.md
|
176
176
|
- Rakefile
|
177
177
|
- app/assets/images/admin/logo.svg
|
178
|
-
- app/assets/javascripts/
|
178
|
+
- app/assets/javascripts/action_admin/action-admin.js
|
179
179
|
- app/assets/javascripts/admin/application.js
|
180
|
-
- app/assets/stylesheets/
|
180
|
+
- app/assets/stylesheets/action_admin/action-admin.scss
|
181
|
+
- app/assets/stylesheets/action_admin/action-admin/tinymce.scss
|
181
182
|
- app/assets/stylesheets/admin/application.scss
|
183
|
+
- app/assets/stylesheets/admin/tinymce-editor.scss
|
182
184
|
- app/controllers/action_admin/base_controller.rb
|
183
185
|
- app/controllers/action_admin/crud_controller.rb
|
186
|
+
- app/controllers/action_admin/devise/confirmations_controller.rb
|
187
|
+
- app/controllers/action_admin/devise/omniauth_callbacks_controller.rb
|
188
|
+
- app/controllers/action_admin/devise/passwords_controller.rb
|
189
|
+
- app/controllers/action_admin/devise/registrations_controller.rb
|
190
|
+
- app/controllers/action_admin/devise/sessions_controller.rb
|
191
|
+
- app/controllers/action_admin/devise/unlocks_controller.rb
|
184
192
|
- app/controllers/action_admin/welcome_controller.rb
|
193
|
+
- app/controllers/concerns/action_admin/actionable.rb
|
194
|
+
- app/controllers/concerns/action_admin/controller.rb
|
195
|
+
- app/controllers/concerns/action_admin/crudable.rb
|
185
196
|
- app/helpers/action_admin/admin_helper.rb
|
186
197
|
- app/helpers/action_admin/form_helper.rb
|
187
198
|
- app/helpers/action_admin/markup_helper.rb
|
199
|
+
- app/inputs/action_admin/attachment_input.rb
|
200
|
+
- app/inputs/action_admin/select_list_input.rb
|
201
|
+
- app/inputs/action_admin/slug_input.rb
|
202
|
+
- app/inputs/action_admin/tag_list_input.rb
|
203
|
+
- app/inputs/action_admin/tinymce_input.rb
|
204
|
+
- app/inputs/action_admin/title_input.rb
|
205
|
+
- app/presenters/action_admin/presenter.rb
|
206
|
+
- app/presenters/concerns/action_admin/presentable.rb
|
207
|
+
- app/views/action_admin/devise/confirmations/new.html.slim
|
208
|
+
- app/views/action_admin/devise/passwords/edit.html.slim
|
209
|
+
- app/views/action_admin/devise/passwords/new.html.slim
|
210
|
+
- app/views/action_admin/devise/registrations/edit.html.slim
|
211
|
+
- app/views/action_admin/devise/registrations/new.html.slim
|
212
|
+
- app/views/action_admin/devise/sessions/new.html.slim
|
213
|
+
- app/views/action_admin/devise/shared/_links.html.slim
|
214
|
+
- app/views/action_admin/devise/unlocks/new.html.slim
|
188
215
|
- app/views/action_admin/welcome/index.html.slim
|
216
|
+
- app/views/admin/common/_alerts.html.slim
|
189
217
|
- app/views/admin/common/_footer.html.slim
|
190
218
|
- app/views/admin/common/_header.html.slim
|
191
219
|
- app/views/admin/common/_logobar.html.slim
|
@@ -194,25 +222,28 @@ files:
|
|
194
222
|
- app/views/admin/common/_sidebar.html.slim
|
195
223
|
- app/views/admin/common/_topbar.html.slim
|
196
224
|
- app/views/admin/common/action.html.slim
|
225
|
+
- app/views/admin/panels/_default.html.slim
|
226
|
+
- app/views/admin/panels/_expanded.html.slim
|
227
|
+
- app/views/admin/panels/_group.html.slim
|
228
|
+
- app/views/admin/panels/_plain.html.slim
|
197
229
|
- app/views/admin/records/_form.html.slim
|
198
230
|
- app/views/admin/records/edit.html.slim
|
199
231
|
- app/views/admin/records/index.html.slim
|
200
232
|
- app/views/admin/records/new.html.slim
|
201
233
|
- app/views/admin/records/show.html.slim
|
202
234
|
- app/views/layouts/admin.html.slim
|
235
|
+
- app/views/layouts/admin/devise.html.slim
|
203
236
|
- config/initializers/admin_simple_form.rb
|
204
237
|
- config/routes.rb
|
205
238
|
- lib/action_admin.rb
|
206
|
-
- lib/action_admin/actionable.rb
|
207
239
|
- lib/action_admin/config.rb
|
208
|
-
- lib/action_admin/controller.rb
|
209
|
-
- lib/action_admin/crudable.rb
|
210
240
|
- lib/action_admin/engine.rb
|
241
|
+
- lib/action_admin/form.rb
|
242
|
+
- lib/action_admin/form/builder.rb
|
243
|
+
- lib/action_admin/form/error_notification.rb
|
244
|
+
- lib/action_admin/form/minimal_builder.rb
|
211
245
|
- lib/action_admin/header.rb
|
212
|
-
- lib/action_admin/
|
213
|
-
- lib/action_admin/simple_form/error_notification.rb
|
214
|
-
- lib/action_admin/simple_form/form_builder.rb
|
215
|
-
- lib/action_admin/simple_form/minimal_form_builder.rb
|
246
|
+
- lib/action_admin/routes.rb
|
216
247
|
- lib/action_admin/version.rb
|
217
248
|
- lib/tasks/action_admin_tasks.rake
|
218
249
|
homepage: https://github.com/hardpixel/action-admin
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module ActionAdmin
|
2
|
-
module SimpleForm
|
3
|
-
class MinimalFormBuilder < FormBuilder
|
4
|
-
# Form builder input
|
5
|
-
def input(attribute_name, options = {}, &block)
|
6
|
-
if options[:placeholder].nil?
|
7
|
-
options[:placeholder] ||= if object.class.respond_to?(:human_attribute_name)
|
8
|
-
object.class.human_attribute_name(attribute_name.to_s)
|
9
|
-
else
|
10
|
-
attribute_name.to_s.humanize
|
11
|
-
end
|
12
|
-
|
13
|
-
options[:label] = false if options[:label].nil?
|
14
|
-
end
|
15
|
-
|
16
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|