action_admin 0.1.1 → 0.1.2
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/app/assets/images/admin/upload-preview.svg +34 -0
- data/app/assets/stylesheets/action_admin/action-admin.scss +59 -1
- data/app/assets/stylesheets/action_admin/action-admin/tinymce.scss +16 -0
- data/app/controllers/concerns/action_admin/actionable.rb +10 -1
- data/app/helpers/action_admin/admin_helper.rb +8 -0
- data/app/inputs/action_admin/attachment_input.rb +1 -1
- data/app/inputs/action_admin/upload_input.rb +62 -0
- data/app/views/admin/common/_dropzone_template.html.slim +11 -0
- data/app/views/admin/common/_media_modal.html.slim +59 -0
- data/app/views/admin/records/edit.html.slim +1 -1
- data/app/views/admin/records/new.html.slim +1 -1
- data/app/views/admin/templates/_upload.html.slim +22 -0
- data/app/views/layouts/admin.html.slim +2 -0
- data/lib/action_admin/engine.rb +2 -1
- data/lib/action_admin/header.rb +2 -2
- data/lib/action_admin/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c130d9173df9250a76f41a1fb2687c8042ac842
|
4
|
+
data.tar.gz: d26a179831e85af820d332744ad27b64c15e2380
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c081bec36607b46f36237b4782fcd56f871bcfbd3a7c2bc55d1695df3452260751d25512991006f73b2940214acced809d883389306f2f046626119ffc5f882
|
7
|
+
data.tar.gz: e3168380227a10278a910c516a423b840bb5c16a458dd9d637df1046724367e2eeecc996978a1aaf5312604e036845d32908473be8481d6b457387e9827218d1
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<svg
|
3
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
4
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
5
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
6
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
8
|
+
id="svg2"
|
9
|
+
height="250"
|
10
|
+
width="250"
|
11
|
+
version="1.1">
|
12
|
+
<defs
|
13
|
+
id="defs4" />
|
14
|
+
<metadata
|
15
|
+
id="metadata7">
|
16
|
+
<rdf:RDF>
|
17
|
+
<cc:Work
|
18
|
+
rdf:about="">
|
19
|
+
<dc:format>image/svg+xml</dc:format>
|
20
|
+
<dc:type
|
21
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
22
|
+
<dc:title></dc:title>
|
23
|
+
</cc:Work>
|
24
|
+
</rdf:RDF>
|
25
|
+
</metadata>
|
26
|
+
<path
|
27
|
+
d="M 0,-1.5258789e-5 H 250 V 250 H 0 Z"
|
28
|
+
id="rect3126"
|
29
|
+
style="fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.79056942" />
|
30
|
+
<path
|
31
|
+
d="m 161.401,117.51166 c -2.14973,-18.309425 -17.6266,-32.511675 -36.40113,-32.511675 -18.77454,0 -34.25114,14.20225 -36.40087,32.511675 -13.03272,0 -23.599,10.63051 -23.599,23.74417 0,13.11364 10.5649,23.74415 23.59762,23.74415 h 72.80477 c 13.03271,0 23.59761,-10.63051 23.59761,-23.74415 0,-13.11366 -10.56627,-23.74417 -23.599,-23.74417 z m -58.41308,32.26113 c -2.27933,0 -4.12723,-1.85937 -4.12723,-4.15286 0,-2.29349 1.8479,-4.15287 4.12723,-4.15287 2.27934,0 4.12724,1.85938 4.12724,4.15287 0,2.29377 -1.84762,4.15286 -4.12724,4.15286 z m 22.01195,0 c -2.27935,0 -4.12725,-1.85937 -4.12725,-4.15286 0,-2.29349 1.8479,-4.15287 4.12725,-4.15287 2.27933,0 4.12723,1.85938 4.12723,4.15287 0,2.29349 -1.84762,4.15286 -4.12723,4.15286 z m 22.01194,0 c -2.27935,0 -4.12725,-1.85937 -4.12725,-4.15286 0,-2.29349 1.8479,-4.15287 4.12725,-4.15287 2.27933,0 4.12723,1.85938 4.12723,4.15287 0,2.29349 -1.84763,4.15286 -4.12723,4.15286 z"
|
32
|
+
id="path3149"
|
33
|
+
style="fill:#808080;fill-opacity:1" />
|
34
|
+
</svg>
|
@@ -1,12 +1,70 @@
|
|
1
1
|
@import "foundation-components";
|
2
2
|
@import "bedrock-components";
|
3
3
|
|
4
|
+
|
5
|
+
// Panels
|
6
|
+
|
4
7
|
.panel {
|
5
8
|
|
6
|
-
.input:last-child {
|
9
|
+
.input:last-child:not(.error) {
|
7
10
|
|
8
11
|
input, textarea, select, .select2 {
|
9
12
|
margin-bottom: 0;
|
10
13
|
}
|
11
14
|
}
|
15
|
+
|
16
|
+
.input.error:last-child {
|
17
|
+
|
18
|
+
.form-error {
|
19
|
+
margin-bottom: 0;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
|
25
|
+
// Invalid Inputs
|
26
|
+
|
27
|
+
.input.error {
|
28
|
+
|
29
|
+
input, textarea, select {
|
30
|
+
@include form-input-error;
|
31
|
+
}
|
32
|
+
|
33
|
+
&.attachment {
|
34
|
+
@include form-input-error;
|
35
|
+
border: 1px solid;
|
36
|
+
color: $alert-color;
|
37
|
+
position: relative;
|
38
|
+
padding-bottom: $global-padding * 2;
|
39
|
+
|
40
|
+
.no-content {
|
41
|
+
color: $alert-color;
|
42
|
+
}
|
43
|
+
|
44
|
+
.form-error {
|
45
|
+
text-align: center;
|
46
|
+
position: absolute;
|
47
|
+
bottom: 0;
|
48
|
+
left: 0;
|
49
|
+
width: 100%;
|
50
|
+
background: $alert-color;
|
51
|
+
color: $white;
|
52
|
+
margin: 0;
|
53
|
+
padding: ($global-padding / 4) ($global-padding / 2);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
}
|
58
|
+
|
59
|
+
.input-group-list {
|
60
|
+
|
61
|
+
.input.error {
|
62
|
+
|
63
|
+
.form-error {
|
64
|
+
margin: 0;
|
65
|
+
background: $alert-color;
|
66
|
+
color: $white;
|
67
|
+
padding: ($global-padding / 4) ($global-padding / 2);
|
68
|
+
}
|
69
|
+
}
|
12
70
|
}
|
@@ -4,3 +4,19 @@
|
|
4
4
|
@include foundation-typography;
|
5
5
|
@include foundation-button;
|
6
6
|
@include foundation-forms;
|
7
|
+
|
8
|
+
|
9
|
+
// Custom styles
|
10
|
+
|
11
|
+
body {
|
12
|
+
margin: $global-margin / 2;
|
13
|
+
font-size: inherit !important;
|
14
|
+
}
|
15
|
+
|
16
|
+
img[data-mce-style*="float: left"] {
|
17
|
+
margin-right: $global-margin;
|
18
|
+
}
|
19
|
+
|
20
|
+
img[data-mce-style*="float: right"] {
|
21
|
+
margin-left: $global-margin;
|
22
|
+
}
|
@@ -6,7 +6,10 @@ module ActionAdmin
|
|
6
6
|
include Controller
|
7
7
|
|
8
8
|
class_attribute :action_header
|
9
|
-
|
9
|
+
class_attribute :_action_templates
|
10
|
+
|
11
|
+
self.action_header = Header.new
|
12
|
+
self._action_templates = {}
|
10
13
|
end
|
11
14
|
|
12
15
|
class_methods do
|
@@ -16,6 +19,12 @@ module ActionAdmin
|
|
16
19
|
self.action_header.action(nil)
|
17
20
|
end
|
18
21
|
|
22
|
+
def action_template(action, template, options={})
|
23
|
+
self._action_templates = self._action_templates.merge(
|
24
|
+
action => options.merge(partial: "admin/templates/#{template}")
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
19
28
|
def header(action, &block)
|
20
29
|
self.action_header.action(action)
|
21
30
|
yield self.action_header
|
@@ -38,5 +38,13 @@ module ActionAdmin
|
|
38
38
|
def admin_present_many(records, presenter=nil)
|
39
39
|
records.to_a.map { |r| admin_present(r, presenter) }
|
40
40
|
end
|
41
|
+
|
42
|
+
def admin_render_template(fallback)
|
43
|
+
template = Hash(controller._action_templates[:"#{action_name}"])
|
44
|
+
partial = template.fetch :partial, fallback
|
45
|
+
options = template.except(:partial)
|
46
|
+
|
47
|
+
render partial, options
|
48
|
+
end
|
41
49
|
end
|
42
50
|
end
|
@@ -34,7 +34,7 @@ module ActionAdmin
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def attachment(image_url=nil)
|
37
|
-
image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { src:
|
37
|
+
image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { src: 'file.preview.url', url: "#{template.root_url.chomp('/')}[src]" }
|
38
38
|
button = content_tag :a, 'Remove Thumbnail', class: 'button alert small hollow margin-0', data: { remove: '' }
|
39
39
|
|
40
40
|
content_tag :div, hidden_input + image + button, class: 'attachment text-center', data: { list_item: '' }
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class UploadInput < SimpleForm::Inputs::FileInput
|
3
|
+
def input(wrapper_options)
|
4
|
+
out = ActiveSupport::SafeBuffer.new
|
5
|
+
data = { file_input: '', previews_container: "##{input_html_id}-preview" }
|
6
|
+
html = content_tag :div, input_placeholder, id: input_html_id, class: 'dropzone', data: data
|
7
|
+
|
8
|
+
out << html
|
9
|
+
out << input_template
|
10
|
+
end
|
11
|
+
|
12
|
+
def input_placeholder
|
13
|
+
span = content_tag :span, 'Drop file here', class: 'margin-bottom-1'
|
14
|
+
icon = content_tag :i, nil, class: 'mdi mdi-upload'
|
15
|
+
button = content_tag :label, 'Upload File', for: attr_html_id, class: 'button success small hollow margin-0'
|
16
|
+
content = content_tag :div, icon + span + file_input + button, class: 'no-content'
|
17
|
+
image = attachment(attachment_url) if attachment_url.present?
|
18
|
+
|
19
|
+
content_tag(:div, content, class: 'dz-message bordered') +
|
20
|
+
content_tag(:div, image, id: "#{input_html_id}-preview")
|
21
|
+
end
|
22
|
+
|
23
|
+
def file_input
|
24
|
+
@builder.file_field(attribute_name, input_html_options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def hidden_input
|
28
|
+
if object.respond_to?("#{attribute_name}_cache")
|
29
|
+
@builder.hidden_field("#{attribute_name}_cache")
|
30
|
+
else
|
31
|
+
''.html_safe
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def attr_html_id
|
36
|
+
file_input[/id=\"(.*)\"/, 1]
|
37
|
+
end
|
38
|
+
|
39
|
+
def input_html_id
|
40
|
+
attr_html_id.dasherize
|
41
|
+
end
|
42
|
+
|
43
|
+
def attachment_url
|
44
|
+
object.send(attribute_name).try(:url)
|
45
|
+
end
|
46
|
+
|
47
|
+
def attachment(image_url=nil)
|
48
|
+
image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', 'dz-thumbnail' => ''
|
49
|
+
button = content_tag :a, 'Remove File', class: 'button alert small hollow margin-0', 'dz-remove' => ''
|
50
|
+
|
51
|
+
content_tag :div, hidden_input + image + button, class: 'text-center'
|
52
|
+
end
|
53
|
+
|
54
|
+
def input_template
|
55
|
+
content_tag :script, attachment, id: "#{input_html_id}-preview-template", type: 'text/template'
|
56
|
+
end
|
57
|
+
|
58
|
+
def label(wrapper_options)
|
59
|
+
''
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
script#dropzone-preview-template type="text/template"
|
2
|
+
.attachment
|
3
|
+
.thumbnail
|
4
|
+
img data-dz-thumbnail="" src=asset_url('admin/upload-preview.svg')
|
5
|
+
span.filename data-dz-name=""
|
6
|
+
span.size data-dz-size=""
|
7
|
+
.progress.success
|
8
|
+
span.progress-meter data-dz-uploadprogress=""
|
9
|
+
i.icon-success.mdi.mdi-check
|
10
|
+
i.icon-error.mdi.mdi-close
|
11
|
+
.message data-dz-errormessage=""
|
@@ -0,0 +1,59 @@
|
|
1
|
+
ruby:
|
2
|
+
current_record = Medium.new
|
3
|
+
options = {
|
4
|
+
dropzone_upload: "",
|
5
|
+
clickable: "#media-modal-upload-button",
|
6
|
+
previews_container: "#media-modal-upload-previews",
|
7
|
+
param_name: "medium[file]",
|
8
|
+
thumbnail_height: "300",
|
9
|
+
thumbnail_width: "300"
|
10
|
+
}
|
11
|
+
|
12
|
+
#media-modal.reveal.full.reveal-panel data-media-reveal="" data-media-url=admin_media_url(per_page: 10000, format: :json)
|
13
|
+
.panel
|
14
|
+
.panel-header.border
|
15
|
+
= 'Add Media'
|
16
|
+
button.close-button aria-label='Close modal' data-close="" type="button"
|
17
|
+
span aria-hidden="true" ×
|
18
|
+
|
19
|
+
.panel-header.border.padding-0
|
20
|
+
ul#media-modal-tabs.tabs.padding-0.border-none data-tabs=""
|
21
|
+
li.tabs-title.is-active
|
22
|
+
a aria-selected="true" href="#media-modal-library"
|
23
|
+
i.mdi.mdi-play-circle-outline
|
24
|
+
| Library
|
25
|
+
li.tabs-title
|
26
|
+
a href="#media-modal-uploads"
|
27
|
+
i.mdi.mdi-upload
|
28
|
+
| Upload
|
29
|
+
|
30
|
+
.panel-content.border.padding-0
|
31
|
+
.tabs-content.border-none.padding-0 data-tabs-content="media-modal-tabs"
|
32
|
+
#media-modal-library.tabs-panel.is-active
|
33
|
+
.attachments-grid data-list-select=""
|
34
|
+
#media-modal-uploads.tabs-panel
|
35
|
+
= admin_form_for([:admin, current_record], html: { id: 'media-modal-upload', class: 'dropzone', data: options }) do |f|
|
36
|
+
= f.input :file, as: :hidden
|
37
|
+
|
38
|
+
.dz-message.bordered.margin-bottom-1
|
39
|
+
.no-content
|
40
|
+
i.mdi.mdi-upload
|
41
|
+
span = 'Drop files here to upload'
|
42
|
+
a#media-modal-upload-button.button.success.hollow.margin-top-1 = 'Select Files'
|
43
|
+
|
44
|
+
#media-modal-upload-previews.attachments-grid
|
45
|
+
|
46
|
+
.panel-footer
|
47
|
+
.grid-x
|
48
|
+
.cell.auto
|
49
|
+
button.button.hollow.alert.margin-0 aria-label='Close modal' data-close="" type="button" = 'Close'
|
50
|
+
|
51
|
+
.cell.shrink
|
52
|
+
button.button.margin-0 aria-label='Insert Media' data-insert="" type="button" = 'Insert Media'
|
53
|
+
|
54
|
+
script#media-modal-item-template type="text/template"
|
55
|
+
.attachment data-list-item=""
|
56
|
+
.thumbnail
|
57
|
+
img data-src="file.small.url" data-url="#{root_url.chomp('/')}[src]" src=asset_url('admin/upload-preview.svg')
|
58
|
+
span.filename data-text="name"
|
59
|
+
span.check-button.mdi.mdi-check
|
@@ -1 +1 @@
|
|
1
|
-
=
|
1
|
+
= admin_render_template 'form'
|
@@ -1 +1 @@
|
|
1
|
-
=
|
1
|
+
= admin_render_template 'form'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
ruby:
|
2
|
+
options = {
|
3
|
+
dropzone_upload: "",
|
4
|
+
clickable: "#media-upload-button",
|
5
|
+
previews_container: "#media-upload-previews",
|
6
|
+
param_name: "#{current_record.class.model_name.singular}[#{field}]",
|
7
|
+
thumbnail_height: "300",
|
8
|
+
thumbnail_width: "300"
|
9
|
+
}
|
10
|
+
|
11
|
+
= admin_form_for([:admin, current_record], html: { id: 'media-upload', class: 'dropzone', data: options }) do |f|
|
12
|
+
= f.input field, as: :hidden
|
13
|
+
|
14
|
+
.panel
|
15
|
+
.panel-content
|
16
|
+
.dz-message.bordered
|
17
|
+
.no-content
|
18
|
+
i.mdi.mdi-upload
|
19
|
+
span = 'Drop files here to upload'
|
20
|
+
a#media-upload-button.button.success.hollow.margin-top-1 = 'Select Files'
|
21
|
+
|
22
|
+
#media-upload-previews.attachments-grid
|
@@ -20,6 +20,8 @@ html
|
|
20
20
|
= render 'admin/common/header'
|
21
21
|
= yield
|
22
22
|
= render 'admin/common/footer'
|
23
|
+
= render 'admin/common/media_modal'
|
24
|
+
= render 'admin/common/dropzone_template'
|
23
25
|
|
24
26
|
#offcanvas.off-canvas.position-right data-off-canvas=""
|
25
27
|
= render 'admin/common/messagebar'
|
data/lib/action_admin/engine.rb
CHANGED
@@ -11,7 +11,8 @@ module ActionAdmin
|
|
11
11
|
app.config.assets.paths << root.join('app', 'assets', 'images', sf).to_s
|
12
12
|
end
|
13
13
|
|
14
|
-
app.config.assets.precompile += %w(admin/application.js admin/application.css admin/tinymce-editor.css
|
14
|
+
app.config.assets.precompile += %w(admin/application.js admin/application.css admin/tinymce-editor.css)
|
15
|
+
app.config.assets.precompile += %w(images/admin/*.* admin/*.svg admin/*.png)
|
15
16
|
end
|
16
17
|
|
17
18
|
initializer 'action_admin', before: :load_config_initializers do
|
data/lib/action_admin/header.rb
CHANGED
@@ -51,8 +51,8 @@ module ActionAdmin
|
|
51
51
|
return {} unless context.controller.respond_to? :permitted_params
|
52
52
|
|
53
53
|
{
|
54
|
-
show: { label: 'View', icon: 'eye', url: :record_path },
|
55
|
-
index: { label: 'Back', icon: 'arrow-left', url: :records_path, html: { class: '
|
54
|
+
show: { label: 'View', icon: 'eye', url: :record_path, html: { class: 'success' } },
|
55
|
+
index: { label: 'Back', icon: 'arrow-left', url: :records_path, html: { class: 'secondary' } },
|
56
56
|
new: { label: 'New', icon: 'plus', url: :new_record_path, html: { class: 'success' } },
|
57
57
|
edit: { label: 'Edit', icon: 'pencil', url: :edit_record_path, html: { class: 'warning' } },
|
58
58
|
destroy: { label: 'Delete', icon: 'delete', url: :record_path, html: { class: 'alert' }, method: 'delete' }
|
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.2
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -175,6 +175,7 @@ files:
|
|
175
175
|
- README.md
|
176
176
|
- Rakefile
|
177
177
|
- app/assets/images/admin/logo.svg
|
178
|
+
- app/assets/images/admin/upload-preview.svg
|
178
179
|
- app/assets/javascripts/action_admin/action-admin.js
|
179
180
|
- app/assets/javascripts/admin/application.js
|
180
181
|
- app/assets/stylesheets/action_admin/action-admin.scss
|
@@ -202,6 +203,7 @@ files:
|
|
202
203
|
- app/inputs/action_admin/tag_list_input.rb
|
203
204
|
- app/inputs/action_admin/tinymce_input.rb
|
204
205
|
- app/inputs/action_admin/title_input.rb
|
206
|
+
- app/inputs/action_admin/upload_input.rb
|
205
207
|
- app/presenters/action_admin/presenter.rb
|
206
208
|
- app/presenters/concerns/action_admin/presentable.rb
|
207
209
|
- app/views/action_admin/devise/confirmations/new.html.slim
|
@@ -214,9 +216,11 @@ files:
|
|
214
216
|
- app/views/action_admin/devise/unlocks/new.html.slim
|
215
217
|
- app/views/action_admin/welcome/index.html.slim
|
216
218
|
- app/views/admin/common/_alerts.html.slim
|
219
|
+
- app/views/admin/common/_dropzone_template.html.slim
|
217
220
|
- app/views/admin/common/_footer.html.slim
|
218
221
|
- app/views/admin/common/_header.html.slim
|
219
222
|
- app/views/admin/common/_logobar.html.slim
|
223
|
+
- app/views/admin/common/_media_modal.html.slim
|
220
224
|
- app/views/admin/common/_messagebar.html.slim
|
221
225
|
- app/views/admin/common/_noresults.html.slim
|
222
226
|
- app/views/admin/common/_sidebar.html.slim
|
@@ -231,6 +235,7 @@ files:
|
|
231
235
|
- app/views/admin/records/index.html.slim
|
232
236
|
- app/views/admin/records/new.html.slim
|
233
237
|
- app/views/admin/records/show.html.slim
|
238
|
+
- app/views/admin/templates/_upload.html.slim
|
234
239
|
- app/views/layouts/admin.html.slim
|
235
240
|
- app/views/layouts/admin/devise.html.slim
|
236
241
|
- config/initializers/admin_simple_form.rb
|