administrate-field-active_storage 0.2.2 → 0.3.0
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 -36
- data/administrate-field-active_storage.gemspec +1 -1
- data/app/views/fields/active_storage/_form.html.erb +5 -4
- data/app/views/fields/active_storage/_index.html.erb +18 -12
- data/app/views/fields/active_storage/_item.html.erb +10 -24
- data/app/views/fields/active_storage/_items.html.erb +10 -5
- data/app/views/fields/active_storage/_preview.html.erb +25 -0
- data/app/views/fields/active_storage/_show.html.erb +2 -0
- data/lib/administrate/field/active_storage.rb +23 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc5923a984b8ef1046ab8657f3de54cbd68c5c50bc90b9f0aba62d36ed0c0a1b
|
4
|
+
data.tar.gz: d383f74c54bfd179912f66d612d4ad19c0b4f4da5baf1facd14c1df10d2c2c9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7686831282ed9ffaf94c01cdab6e3f029a7ba93736896982d8255db70bc28f93402f2a9a0f17b820b17258eadbf2f9a294e2e07cc8fd5164dd5d979eb6ad9cb
|
7
|
+
data.tar.gz: e479ad715183dd81c20b58aec5796f9a06949537729a25e320ea8f0a83b9a056d05cc36b7186da561468fce878284e33dcb8314af33cc38149a18ce34dd22bcd
|
data/README.md
CHANGED
@@ -95,53 +95,53 @@ Your `routes.rb` file must point to a controller action with method `delete` whi
|
|
95
95
|
end
|
96
96
|
```
|
97
97
|
|
98
|
-
|
99
|
-
Only the following needs to change in order for the field to be url_only
|
100
|
-
```ruby
|
101
|
-
class ModelDashboard < Administrate::BaseDashboard
|
102
|
-
ATTRIBUTE_TYPES = {
|
103
|
-
attachments: Field::ActiveStorage.with_options({url_only: true}),
|
104
|
-
# ...
|
105
|
-
}
|
106
|
-
# ...
|
107
|
-
end
|
108
|
-
```
|
98
|
+
## Options
|
109
99
|
|
110
|
-
|
111
|
-
|
112
|
-
```ruby
|
113
|
-
class ModelDashboard < Administrate::BaseDashboard
|
114
|
-
ATTRIBUTE_TYPES = {
|
115
|
-
attachments: Field::ActiveStorage.with_options({show_in_index: true}),
|
116
|
-
# ...
|
117
|
-
}
|
118
|
-
# ...
|
119
|
-
end
|
120
|
-
```
|
100
|
+
Various options can be passed to `Administrate::Field::ActiveStorage#with_options`
|
101
|
+
as illustrated below:
|
121
102
|
|
122
|
-
|
123
|
-
Supply the size of the image preview inside the show page. Check out the [mini_magic#resize_to_limit](https://github.com/janko/image_processing/blob/master/doc/minimagick.md#methods) documentation
|
124
|
-
```ruby
|
103
|
+
```rb
|
125
104
|
class ModelDashboard < Administrate::BaseDashboard
|
126
105
|
ATTRIBUTE_TYPES = {
|
127
|
-
attachments: Field::ActiveStorage.with_options(
|
106
|
+
attachments: Field::ActiveStorage.with_options(index_display_preview: false),
|
128
107
|
# ...
|
129
108
|
}
|
130
109
|
# ...
|
131
110
|
end
|
132
111
|
```
|
133
112
|
|
113
|
+
### show_display_preview
|
114
|
+
|
115
|
+
Display attachment preview.
|
116
|
+
|
117
|
+
Defaults to `true`.
|
118
|
+
|
119
|
+
### index_display_preview
|
120
|
+
|
121
|
+
Displays the first attachment (which is the only attachment in case of `has_one`)
|
122
|
+
in the `index` action.
|
123
|
+
|
124
|
+
Defaults to `true`.
|
125
|
+
|
126
|
+
### index_preview_size and show_preview_size
|
127
|
+
|
128
|
+
Indicate the size of the image preview for the `index` and `show` actions, respectively.
|
129
|
+
Refer to [mini_magic#resize_to_limit](https://github.com/janko/image_processing/blob/master/doc/minimagick.md#methods)
|
130
|
+
for documentation.
|
131
|
+
|
132
|
+
Default to `[150, 150]` and `[800, 800]`, respectively.
|
133
|
+
|
134
|
+
### index_display_count
|
135
|
+
|
136
|
+
Displays the number of attachments in the `index` action.
|
137
|
+
|
138
|
+
Defaults to `true` if number of attachments is not 1.
|
139
|
+
|
134
140
|
### direct_upload
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
attachments: Field::ActiveStorage.with_options({direct_upload: true}),
|
140
|
-
# ...
|
141
|
-
}
|
142
|
-
# ...
|
143
|
-
end
|
144
|
-
```
|
141
|
+
|
142
|
+
Enables direct upload from the browser to the cloud.
|
143
|
+
|
144
|
+
Defaults to `false`.
|
145
145
|
|
146
146
|
Don't forget to include [ActiveStorage JavaScript](https://edgeguides.rubyonrails.org/active_storage_overview.html#direct-uploads). You can use `rails generate administrate:assets:javascripts` to be able to customize Administrate JavaScripts in your application.
|
147
147
|
|
@@ -2,7 +2,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = "administrate-field-active_storage"
|
5
|
-
gem.version = "0.
|
5
|
+
gem.version = "0.3.0"
|
6
6
|
gem.authors = ["Hamad AlGhanim"]
|
7
7
|
gem.email = ["hamadyalghanim@gmail.com"]
|
8
8
|
gem.homepage = "https://github.com/Dreamersoul/administrate-field-active_storage"
|
@@ -20,11 +20,12 @@ By default, the input is a text field for the image's URL.
|
|
20
20
|
</div>
|
21
21
|
|
22
22
|
<div class="field-unit__field">
|
23
|
-
<% if field.
|
23
|
+
<% if field.attached? %>
|
24
24
|
<%= render partial: 'fields/active_storage/items', locals: { field: field, removable: field.destroyable? } %>
|
25
|
-
<br />
|
26
|
-
Add:
|
27
25
|
<% end %>
|
28
26
|
|
29
|
-
|
27
|
+
<div>
|
28
|
+
<%= field.can_add_attachment? ? "Add:" : "Replace:" %>
|
29
|
+
<%= f.file_field field.attribute, multiple: field.many?, direct_upload: field.direct? %>
|
30
|
+
</div>
|
30
31
|
</div>
|
@@ -14,19 +14,25 @@ By default, the attribute is rendered as an image tag.
|
|
14
14
|
|
15
15
|
[1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/Image
|
16
16
|
%>
|
17
|
-
|
17
|
+
|
18
|
+
<% if field.attached? %>
|
19
|
+
<style> <%# figure out a way to remove this %>
|
18
20
|
td img {
|
19
|
-
|
21
|
+
max-height: unset !important;
|
20
22
|
}
|
21
|
-
</style>
|
22
|
-
<%
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
</style>
|
24
|
+
<% if field.index_display_preview? %>
|
25
|
+
<%= render partial: 'fields/active_storage/preview',
|
26
|
+
locals: {
|
27
|
+
field: field,
|
28
|
+
attachment: field.attachments[0],
|
29
|
+
size: field.index_preview_size
|
30
|
+
} %>
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
<% if field.index_display_count? %>
|
34
|
+
<div class="attachments-count">
|
35
|
+
<%= pluralize(field.attachments.count, 'Attachment') %>
|
36
|
+
</div>
|
28
37
|
<% end %>
|
29
|
-
<%= pluralize(attachments.count, 'Attached file') %>
|
30
|
-
<% else %>
|
31
|
-
0 Attached files
|
32
38
|
<% end %>
|
@@ -19,37 +19,23 @@ controlled via a boolean local variable.
|
|
19
19
|
- `removable`:
|
20
20
|
A boolean used to control the display of a `Remove` link which
|
21
21
|
is used to destroy a single attachment. Defaults to `false`
|
22
|
+
- `size`:
|
23
|
+
[x, y]
|
24
|
+
Maximum size of the ActiveStorage preview.
|
22
25
|
%>
|
23
26
|
|
24
27
|
<%
|
25
28
|
# By default we don't allow attachment removal
|
26
29
|
removable = local_assigns.fetch(:removable, false)
|
27
|
-
image_size = local_assigns.fetch(:image_size, [1920, 1080])
|
28
30
|
%>
|
29
31
|
|
30
|
-
|
31
|
-
<%=
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
<%= link_to
|
36
|
-
|
37
|
-
<% end %>
|
38
|
-
<% elsif attachment.video? and attachment.previewable? and !field.url_only? %> <%# if ffmpeg is installed %>
|
39
|
-
<%= video_tag(field.url(attachment), poster: field.preview(attachment, resize_to_limit: image_size), controls: true, autobuffer: true, style: "width: 100%; height: auto;") %>
|
40
|
-
<% elsif attachment.video? and !field.url_only? %>
|
41
|
-
<%= video_tag(field.url(attachment), controls: true, autobuffer: true, style: "width: 100%; height: auto;") %>
|
42
|
-
<% elsif attachment.audio? and !field.url_only? %>
|
43
|
-
<%= audio_tag(field.url(attachment), autoplay: false, controls: true) %>
|
44
|
-
<% else %>
|
45
|
-
<%= link_to(field.blob_url(attachment), title: attachment.filename) do %>
|
46
|
-
<% if attachment.previewable? and !field.url_only? %>
|
47
|
-
<%= image_tag(field.preview(attachment, resize_to_limit: [595, 842])) %>
|
48
|
-
<% else %>
|
49
|
-
<%= attachment.filename %>
|
50
|
-
<% end %>
|
51
|
-
<% end %>
|
52
|
-
<% end %>
|
32
|
+
<div>
|
33
|
+
<%= render partial: 'fields/active_storage/preview', locals: local_assigns %>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<div>
|
37
|
+
<%= link_to 'Download', field.blob_url(attachment), title: attachment.filename %>
|
38
|
+
</div>
|
53
39
|
|
54
40
|
<% if removable %>
|
55
41
|
<%= link_to 'Remove', field.destroy_path(field, attachment), method: :delete, class: 'remove-attachment-link' %>
|
@@ -9,17 +9,22 @@ This partial renders one or more attachments
|
|
9
9
|
An instance of [Administrate::Field::Image].
|
10
10
|
A wrapper around the image url pulled from the database.
|
11
11
|
- `removable`:
|
12
|
-
A boolean used to control the display of a `Remove` link which
|
12
|
+
A boolean used to control the display of a `Remove` link which
|
13
13
|
is used to destroy a single attachment. Defaults to `false`
|
14
14
|
%>
|
15
15
|
|
16
|
-
<%
|
17
|
-
attachments = Array(field.many? ? field.attachments : field.data)
|
16
|
+
<%
|
18
17
|
removable = local_assigns.fetch(:removable, false)
|
19
18
|
%>
|
20
19
|
|
21
|
-
<% attachments.each do |attachment| %>
|
20
|
+
<% field.attachments.each do |attachment| %>
|
22
21
|
<div class="attachments-listing">
|
23
|
-
<%= render partial: 'fields/active_storage/item',
|
22
|
+
<%= render partial: 'fields/active_storage/item',
|
23
|
+
locals: {
|
24
|
+
field: field,
|
25
|
+
attachment: attachment,
|
26
|
+
removable: removable,
|
27
|
+
size: field.show_preview_size
|
28
|
+
} %>
|
24
29
|
</div>
|
25
30
|
<% end %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div style="width: <%=size[0]%>px; height: auto; overflow: hidden;">
|
2
|
+
<% if attachment.image? %>
|
3
|
+
<% if attachment.variable? %>
|
4
|
+
<%= image_tag(field.variant(attachment, resize_to_limit: size)) %>
|
5
|
+
<% else %>
|
6
|
+
<%= image_tag(field.url(attachment)) %>
|
7
|
+
<% end %>
|
8
|
+
<% elsif attachment.video? %>
|
9
|
+
<% if attachment.previewable? %>
|
10
|
+
<%= video_tag(field.url(attachment),
|
11
|
+
poster: field.preview(attachment, resize_to_limit: size),
|
12
|
+
controls: true,
|
13
|
+
autobuffer: true,
|
14
|
+
style: "object-fit: contain; width: 100%; height: 100%;") %>
|
15
|
+
<% else %>
|
16
|
+
<%= video_tag(field.url(attachment), controls: true, autobuffer: true, style: style) %>
|
17
|
+
<% end %>
|
18
|
+
<% elsif attachment.audio? %>
|
19
|
+
<%= audio_tag(field.url(attachment), autoplay: false, controls: true) %>
|
20
|
+
<% elsif attachment.previewable? %>
|
21
|
+
<%= image_tag(field.preview(attachment, resize_to_limit: size)) %>
|
22
|
+
<% else %>
|
23
|
+
<%= attachment.filename %>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
@@ -7,20 +7,28 @@ module Administrate
|
|
7
7
|
class Engine < ::Rails::Engine
|
8
8
|
end
|
9
9
|
|
10
|
-
def url_only?
|
11
|
-
options.fetch(:url_only, false)
|
12
|
-
end
|
13
|
-
|
14
10
|
def destroyable?
|
15
11
|
options.key?(:destroy_path)
|
16
12
|
end
|
17
13
|
|
18
|
-
def
|
19
|
-
options.fetch(:
|
14
|
+
def index_display_preview?
|
15
|
+
options.fetch(:index_display_preview, true)
|
16
|
+
end
|
17
|
+
|
18
|
+
def index_preview_size
|
19
|
+
options.fetch(:index_preview_size, [150, 150])
|
20
|
+
end
|
21
|
+
|
22
|
+
def index_display_count?
|
23
|
+
options.fetch(:index_display_count) { attachments.count != 1 }
|
24
|
+
end
|
25
|
+
|
26
|
+
def show_display_preview?
|
27
|
+
options.fetch(:show_display_preview, true)
|
20
28
|
end
|
21
29
|
|
22
30
|
def show_preview_size
|
23
|
-
options.fetch(:show_preview_size, [
|
31
|
+
options.fetch(:show_preview_size, [800, 800])
|
24
32
|
end
|
25
33
|
|
26
34
|
def many?
|
@@ -65,7 +73,14 @@ module Administrate
|
|
65
73
|
Rails.application.routes.url_helpers.send(destroy_path_helper, {:record_id => record_id, :attachment_id => attachment_id})
|
66
74
|
end
|
67
75
|
|
68
|
-
|
76
|
+
def can_add_attachment?
|
77
|
+
many? || attachments.empty?
|
78
|
+
end
|
79
|
+
|
80
|
+
def attached?
|
81
|
+
data.present? && data.attached?
|
82
|
+
end
|
83
|
+
|
69
84
|
delegate :attachments, to: :data
|
70
85
|
end
|
71
86
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: administrate-field-active_storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hamad AlGhanim
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: administrate
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- app/views/fields/active_storage/_index.html.erb
|
72
72
|
- app/views/fields/active_storage/_item.html.erb
|
73
73
|
- app/views/fields/active_storage/_items.html.erb
|
74
|
+
- app/views/fields/active_storage/_preview.html.erb
|
74
75
|
- app/views/fields/active_storage/_show.html.erb
|
75
76
|
- contribute.md
|
76
77
|
- example-project/.gitignore
|