effective_assets 1.11.0 → 1.11.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 259da306cae2ad7cb0016c97ede0590b1bb1cbd612cfd1e22785d9c67c106309
4
- data.tar.gz: b91cc52f732ef79aae08033a4036128075c116bb24c8ce919815d01f47f1db0f
3
+ metadata.gz: 707e5ea1b01c0563aa8331e9fc33f374a455cbbd96da811cc1e760550018a3de
4
+ data.tar.gz: 81b9a2f560e72c9a1000bc4b0f5838ab73a91a2f2b4994c6307958bd5c44250c
5
5
  SHA512:
6
- metadata.gz: e3ea04ae3523163153546607ddbf184d2b6897b620f09d115fae21b519858d4ca4ac2bd0d436ac63ebf71af7fe5319af59fce05f6095b776fc9dd24bb5979d60
7
- data.tar.gz: 2b58a23dc835673c47f110ffa675689c4330cae7899d78d4713deea01141e0bc71db0028d6ee0db93b85333e7e8f006cc0cb474f5a2786c5cfb29119a049d0ae
6
+ metadata.gz: b817d4c9c537d44ed1b6533d9ae26e0965a2e0ac2067e9579df56a348a66e6d41d48b5c6bfec9b71e11c54cadb97214cf36d9ee563a4d9c94bbb711385d3c9f3
7
+ data.tar.gz: c278a7b17cc5723a67a0799b3812239632a8a8ef2422a705e3bca6f4ff34433a6a80517ae03e60e8b2e7b4bcd19b16130bdc529294d6f5b2b24d20dbccb5b1ee
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2017 Code and Effect Inc.
1
+ Copyright 2020 Code and Effect Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,2 @@
1
+ //= link_directory ../images/mime-types
2
+ //= link_directory ../images/effective_assets
@@ -11,7 +11,7 @@ CKEDITOR.dialog.add 'effective_asset', (editor) ->
11
11
  {
12
12
  id: 'iframe-insert',
13
13
  type: 'html',
14
- html: "<div><p id='iframe-insert-loading' style='text-align: center;'><br><br><br><br><br><br><img src='<%= asset_path('effective_assets/spinner.gif') %>' /><br><br>&nbsp;&nbsp;&nbsp;Loading...</p><iframe class='effective_assets_iframe' style='width: 100%; height: 100%; min-height: 500px;' src='/effective/assets?only=nonimages'></iframe></div>"
14
+ html: "<div><p id='iframe-insert-loading' style='text-align: center;'><br><br><br><br><br><br><br><br>&nbsp;&nbsp;&nbsp;Loading...</p><iframe class='effective_assets_iframe' style='width: 100%; height: 100%; min-height: 500px;' src='/effective/assets?only=nonimages'></iframe></div>"
15
15
  onLoad: (evt) ->
16
16
  dialog = evt.sender # This is the CKEditor.dialog
17
17
  iframe = $('#' + dialog.getContentElement('upload', 'iframe-insert').domId).children('iframe').first()
@@ -8,8 +8,7 @@ module Effective
8
8
  def index # This is the IFRAME modal dialog that is read by CKEDITOR
9
9
  EffectiveAssets.authorized?(self, :index, Effective::Asset.new(:user_id => current_user.try(:id)))
10
10
 
11
- effective_iframe_uploads = Effective::Attachment.where(box: EffectiveAssets::IFRAME_UPLOADS).pluck(:asset_id)
12
- @assets = Effective::Asset.where(id: effective_iframe_uploads)
11
+ @assets = Effective::Asset.where(user_id: current_user.id)
13
12
 
14
13
  if params[:only] == 'images'
15
14
  @assets = @assets.images
@@ -22,9 +21,8 @@ module Effective
22
21
  end
23
22
 
24
23
  @user_uploads = IframeUpload.new(@assets)
25
- @user_uploads.add_to_asset_box(:uploads, @assets)
26
24
 
27
- render :file => 'effective/assets/iframe'
25
+ render 'effective/assets/iframe'
28
26
  end
29
27
 
30
28
  def destroy
@@ -195,9 +195,6 @@ module Effective
195
195
  # Do Nothing
196
196
  elsif upload_file.include?(Effective::Asset.string_base_path)
197
197
  puts 'String-based Asset processing and uploading'
198
-
199
- data.cache_stored_file!
200
- data.retrieve_from_cache!(data.cache_name)
201
198
  data.recreate_versions!
202
199
  elsif upload_file.include?(Effective::Asset.s3_base_path)
203
200
  # Carrierwave must download the file, process it, then upload the generated versions to S3
@@ -24,7 +24,7 @@ if defined?(EffectiveRegions)
24
24
  end
25
25
 
26
26
  def is_private?
27
- private_url == true
27
+ [true, 'true', '1'].include?(private_url)
28
28
  end
29
29
 
30
30
  def aws_private?
@@ -2,7 +2,9 @@ module EffectiveAssets
2
2
  class Engine < ::Rails::Engine
3
3
  engine_name 'effective_assets'
4
4
 
5
- config.autoload_paths += Dir["#{config.root}/app/models/**/", "#{config.root}/app/jobs/**/"]
5
+ config.autoload_paths += Dir["#{config.root}/lib/validators/", "#{config.root}/lib/inputs/"]
6
+
7
+ config.eager_load_paths += Dir["#{config.root}/lib/validators/", "#{config.root}/lib/inputs/"]
6
8
 
7
9
  # Include acts_as_addressable concern and allow any ActiveRecord object to call it
8
10
  initializer 'effective_assets.active_record' do |app|
@@ -13,7 +15,7 @@ module EffectiveAssets
13
15
 
14
16
  initializer 'effective_assets.action_view' do |app|
15
17
  ActiveSupport.on_load :action_view do
16
- ActionView::Helpers::FormBuilder.send(:include, Inputs::AssetBoxFormInput)
18
+ ActionView::Helpers::FormBuilder.send(:include, AssetBoxFormInput)
17
19
  end
18
20
  end
19
21
 
@@ -23,7 +25,10 @@ module EffectiveAssets
23
25
  end
24
26
 
25
27
  initializer "effective_assets.append_precompiled_assets" do |app|
26
- Rails.application.config.assets.precompile += ['effective_assets.js', 'effective_assets_iframe.js', 'effective_assets_iframe.css', 'effective_assets/*', 'mime-types/*']
28
+ Rails.application.config.assets.precompile += [
29
+ 'effective_assets_manifest.js', 'effective_assets.js', 'effective_assets_iframe.js', 'effective_assets_iframe.css',
30
+ 'effective_assets/*', 'mime-types/*'
31
+ ]
27
32
  end
28
33
 
29
34
  # ActiveAdmin (optional)
@@ -1,3 +1,3 @@
1
1
  module EffectiveAssets
2
- VERSION = '1.11.0'.freeze
2
+ VERSION = '1.11.5'.freeze
3
3
  end
@@ -0,0 +1,210 @@
1
+ class AssetBox
2
+ delegate :content_tag, :render, :current_user, :to => :@template
3
+
4
+ def initialize(object, object_name, template, method, opts)
5
+ @object = object
6
+ @object_name = object_name
7
+ @template = template
8
+ @options = initialize_options(method, opts)
9
+ end
10
+
11
+ def to_html
12
+ output = ''
13
+ output += header_html
14
+
15
+ if @options[:uploader] == :top
16
+ output += uploader_html
17
+ output += attachments_html
18
+ output += dialog_html if @options[:dialog]
19
+ else
20
+ output += attachments_html
21
+ output += dialog_html if @options[:dialog]
22
+ output += uploader_html if @options[:uploader]
23
+ end
24
+
25
+ output += footer_html
26
+
27
+ output.html_safe
28
+ end
29
+
30
+ private
31
+
32
+ def header_html
33
+ "<div id='asset-box-input-#{@options[:uid]}'
34
+ class='asset-box-input #{@options[:box]}'
35
+ data-box='#{@options[:box]}'
36
+ data-uploader='s3_#{@options[:uid]}'
37
+ data-limit='#{@options[:limit]}'
38
+ data-attachable-id='#{@options[:attachable_id]}'
39
+ data-attachable-type='#{@options[:attachable_type]}'
40
+ data-attachable-object-name='#{@object_name}'
41
+ data-attachment-style='#{@options[:attachment_style]}'
42
+ data-attachment-add-to='#{@options[:attachment_add_to]}'
43
+ data-attachment-actions='#{@options[:attachment_actions].to_json()}'
44
+ data-attachment-count='#{attachments.length}'
45
+ data-attachment-links='#{@options[:attachment_links]}'
46
+ data-over-limit-alerted='false'
47
+ data-aws-acl='#{@options[:aws_acl]}'
48
+ >".html_safe
49
+ end
50
+
51
+ def attachments_html
52
+ if @options[:attachment_style] == :table
53
+ attachments_table_html
54
+ elsif @options[:attachment_style] == :list
55
+ content_tag(:ul, build_values_html, :class => 'attachments')
56
+ else
57
+ content_tag(:div, build_values_html, :class => 'row attachments thumbnails')
58
+ end
59
+ end
60
+
61
+ def attachments_table_html
62
+ content_tag(:table, :class => 'table') do
63
+ head = attachments_table_head_html if @options[:table_filter_bar]
64
+ body = content_tag(:tbody, build_values_html, :class => 'attachments')
65
+ head ? head + body : body
66
+ end
67
+ end
68
+
69
+ def attachments_table_head_html
70
+ content_tag(:thead) do
71
+ content_tag(:tr) do
72
+ content_tag(:th, filter_bar_html, :colspan => 4)
73
+ end
74
+ end
75
+ end
76
+
77
+ def dialog_html
78
+ render(
79
+ :partial => 'asset_box_input/dialog',
80
+ :locals => {
81
+ :dialog_url => @options[:dialog_url]
82
+ }
83
+ ).html_safe
84
+ end
85
+
86
+ def uploader_html
87
+ # Check that we have permission to upload.
88
+ asset = Effective::Asset.new(user_id: ((current_user.try(:id) || 1) rescue 1), upload_file: 'placeholder')
89
+
90
+ unless (EffectiveAssets.authorized?(@template.controller, :create, asset) rescue false)
91
+ @options[:btn_title] = 'Unable to upload. (cannot :create Effective::Asset)'
92
+ @options[:disabled] = true
93
+ end
94
+
95
+ html_class = [
96
+ ('drop-files' if @options[:uploader_drop_files]),
97
+ ((@options[:uploader_html] || {})[:class])
98
+ ].compact.join(' ')
99
+
100
+ render(
101
+ :partial => 'asset_box_input/uploader',
102
+ :locals => {
103
+ :uid => @options[:uid],
104
+ :click_submit => @options[:click_submit],
105
+ :html_class => html_class,
106
+ :limit => @options[:limit],
107
+ :disabled => @options[:disabled],
108
+ :required => (@options[:required] == true && attachments.length == 0),
109
+ :file_types => @options[:file_types],
110
+ :progress_bar_partial => @options[:progress_bar_partial],
111
+ :drop_files => @options[:uploader_drop_files],
112
+ :drop_files_help_text => @options[:drop_files_help_text],
113
+ :aws_acl => @options[:aws_acl],
114
+ :btn_label => @options[:btn_label],
115
+ :btn_title => @options[:btn_title]
116
+ }
117
+ ).html_safe
118
+ end
119
+
120
+ def filter_bar_html
121
+ "<input type='text' class='form-control filter-attachments' placeholder='Filter by title'>".html_safe
122
+ end
123
+
124
+ def build_values_html
125
+ attachment_partial =
126
+ case @options[:attachment_style]
127
+ when :table
128
+ 'attachment_as_table'
129
+ when :list
130
+ 'attachment_as_list'
131
+ when :thumbnail
132
+ 'attachment_as_thumbnail'
133
+ when nil
134
+ 'attachment_as_thumbnail'
135
+ else
136
+ raise "unknown AssetBox attachment_style: #{@options[:attachment_style]}. Valid options are :thumbnail, :list and :table"
137
+ end
138
+
139
+ render(
140
+ :partial => "asset_box_input/#{attachment_partial}",
141
+ :collection => attachments.reject { |attachment| attachment.marked_for_destruction? },
142
+ :as => :attachment,
143
+ :locals => {
144
+ :attachment_actions => @options[:attachment_actions].map { |action| action.to_s },
145
+ :attachment_links => @options[:attachment_links],
146
+ :limit => @options[:limit],
147
+ :disabled => @options[:disabled],
148
+ :attachable_object_name => @object_name
149
+ }
150
+ )
151
+ end
152
+
153
+ def footer_html
154
+ "</div>".html_safe
155
+ end
156
+
157
+ def attachments
158
+ @object.attachments.select { |attachment| attachment.box == @options[:box] }
159
+ end
160
+
161
+ def initialize_options(method, opts)
162
+ {
163
+ :uploader => true, # :top, :bottom, true or false
164
+ :uploader_drop_files => false,
165
+ :drop_files_help_text => 'Drop files here',
166
+ :progress_bar_partial => 'asset_box_input/progress_bar_template',
167
+ :attachment_style => :thumbnail, # :thumbnail, :table, or :list
168
+ :attachment_links => true,
169
+ :attachment_add_to => :bottom, # :bottom or :top (of attachments div)
170
+ :attachment_actions => [:remove], # or :insert, :delete, :remove
171
+ :table_filter_bar => false,
172
+ :dialog => false,
173
+ :dialog_url => @template.effective_assets.effective_assets_path,
174
+ :disabled => false,
175
+ :file_types => [:any],
176
+ :btn_label => 'Upload...',
177
+ :btn_title => 'Click or drag & drop to upload a file'
178
+ }.merge(opts).tap do |options|
179
+ options[:method] = method.to_s
180
+ options[:box] = method.to_s.pluralize
181
+ options[:attachable_id] ||= (@object.try(:id) rescue nil)
182
+ options[:attachable_type] ||= @object.class.name.titleize.gsub(" ", "_").gsub('/', '_').downcase
183
+
184
+ # The logic for the AWS ACL is such that:
185
+ # 1.) If the :private or :aws_acl keys are set on the asset_box input, use those values
186
+ # 2.) If the :private or :public keys are set on the acts_as_asset_box declaration, use those values
187
+ # 3.) Fall back to default EffectiveAssets.aws_acl as per config file
188
+
189
+ uploader_private = (opts[:private] == true || opts[:public] == false || opts[:aws_acl] == EffectiveAssets::AWS_PRIVATE)
190
+ uploader_public = (opts[:private] == false || opts[:public] == true || opts[:aws_acl] == EffectiveAssets::AWS_PUBLIC)
191
+ object_private = ((@object.asset_boxes[method] == :private || @object.asset_boxes[method].first[:private] == true || @object.asset_boxes[method].first[:public] == false) rescue false)
192
+ object_public = ((@object.asset_boxes[method] == :public || @object.asset_boxes[method].first[:public] == true || @object.asset_boxes[method].first[:private] == false) rescue false)
193
+
194
+ if uploader_private
195
+ options[:aws_acl] = EffectiveAssets::AWS_PRIVATE
196
+ elsif uploader_public
197
+ options[:aws_acl] = EffectiveAssets::AWS_PUBLIC
198
+ elsif object_private
199
+ options[:aws_acl] = EffectiveAssets::AWS_PRIVATE
200
+ elsif object_public
201
+ options[:aws_acl] = EffectiveAssets::AWS_PUBLIC
202
+ else
203
+ options[:aws_acl] = EffectiveAssets.aws_acl
204
+ end
205
+
206
+ options[:uid] = "#{options[:attachable_type]}-#{options[:attachable_id]}-#{options[:method]}-#{Time.zone.now.to_f}".parameterize
207
+ options[:limit] = (options[:method] == options[:box] ? (options[:limit] || 10000) : 1)
208
+ end
209
+ end
210
+ end
@@ -0,0 +1,5 @@
1
+ module AssetBoxFormInput
2
+ def asset_box_input(method, opts = {})
3
+ AssetBox.new(@object, @object_name, @template, method, opts).to_html
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AssetBoxFormtasticInput < defined?(Formtastic) ? Formtastic::Inputs::FileInput : Object
2
+ def to_html
3
+ input_wrapping do
4
+ label_html << AssetBox.new(@object, @object_name, @template, @method, @options).to_html
5
+ end
6
+ end
7
+ end
@@ -4,15 +4,21 @@
4
4
  if defined?(SimpleForm)
5
5
  class AssetBoxInput < SimpleForm::Inputs::FileInput
6
6
  def input(wrapper_options = nil)
7
- Inputs::AssetBox.new(object, object_name, template, attribute_name, options).to_html
7
+ AssetBox.new(object, object_name, template, attribute_name, options).to_html
8
8
  end
9
9
  end
10
10
  elsif defined?(Formtastic)
11
11
  class AssetBoxInput < Formtastic::Inputs::FileInput
12
12
  def to_html
13
13
  input_wrapping do
14
- label_html << Inputs::AssetBox.new(@object, @object_name, @template, @method, @options).to_html
14
+ label_html << AssetBox.new(@object, @object_name, @template, @method, @options).to_html
15
15
  end
16
16
  end
17
17
  end
18
+ else
19
+ class AssetBoxInput < Object
20
+ def to_html
21
+ 'expected simpleform or formtastic'
22
+ end
23
+ end
18
24
  end
@@ -0,0 +1,5 @@
1
+ class AssetBoxSimpleFormInput < defined?(SimpleForm) ? SimpleForm::Inputs::FileInput : Object
2
+ def input(wrapper_options = nil)
3
+ AssetBox.new(object, object_name, template, attribute_name, options).to_html
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-06 00:00:00.000000000 Z
11
+ date: 2021-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -133,6 +133,7 @@ files:
133
133
  - MIT-LICENSE
134
134
  - README.md
135
135
  - active_admin/effective_assets.rb
136
+ - app/assets/config/effective_assets_manifest.js
136
137
  - app/assets/images/effective_assets/icon_close.png
137
138
  - app/assets/images/effective_assets/spinner.gif
138
139
  - app/assets/images/mime-types/excel.jpg
@@ -142,7 +143,7 @@ files:
142
143
  - app/assets/images/mime-types/video.png
143
144
  - app/assets/images/mime-types/word.jpg
144
145
  - app/assets/images/mime-types/zip.png
145
- - app/assets/javascripts/effective/snippets/effective_asset.js.coffee.erb
146
+ - app/assets/javascripts/effective/snippets/effective_asset.js.coffee
146
147
  - app/assets/javascripts/effective_assets.js
147
148
  - app/assets/javascripts/effective_assets/asset_box.js.coffee
148
149
  - app/assets/javascripts/effective_assets/asset_box_dialog.js.coffee
@@ -172,13 +173,6 @@ files:
172
173
  - app/models/effective/attachment.rb
173
174
  - app/models/effective/iframe_upload.rb
174
175
  - app/models/effective/snippets/effective_asset.rb
175
- - app/models/inputs/asset_box.rb
176
- - app/models/inputs/asset_box_form_input.rb
177
- - app/models/inputs/asset_box_formtastic_input.rb
178
- - app/models/inputs/asset_box_input.rb
179
- - app/models/inputs/asset_box_simple_form_input.rb
180
- - app/models/validators/asset_box_length_validator.rb
181
- - app/models/validators/asset_box_presence_validator.rb
182
176
  - app/uploaders/effective_assets_uploader.rb
183
177
  - app/uploaders/test_asset_uploader.rb
184
178
  - app/views/active_admin/effective_assets/_edit.html.haml
@@ -201,12 +195,19 @@ files:
201
195
  - lib/effective_assets/version.rb
202
196
  - lib/generators/effective_assets/install_generator.rb
203
197
  - lib/generators/templates/asset_uploader.rb
198
+ - lib/inputs/asset_box.rb
199
+ - lib/inputs/asset_box_form_input.rb
200
+ - lib/inputs/asset_box_formtastic_input.rb
201
+ - lib/inputs/asset_box_input.rb
202
+ - lib/inputs/asset_box_simple_form_input.rb
204
203
  - lib/tasks/effective_assets_tasks.rake
204
+ - lib/validators/asset_box_length_validator.rb
205
+ - lib/validators/asset_box_presence_validator.rb
205
206
  homepage: https://github.com/code-and-effect/effective_assets
206
207
  licenses:
207
208
  - MIT
208
209
  metadata: {}
209
- post_install_message:
210
+ post_install_message:
210
211
  rdoc_options: []
211
212
  require_paths:
212
213
  - lib
@@ -221,8 +222,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
222
  - !ruby/object:Gem::Version
222
223
  version: '0'
223
224
  requirements: []
224
- rubygems_version: 3.0.3
225
- signing_key:
225
+ rubygems_version: 3.1.2
226
+ signing_key:
226
227
  specification_version: 4
227
228
  summary: Upload images and files directly to AWS S3 with a custom form input then
228
229
  seamlessly organize and attach them to any ActiveRecord object.
@@ -1,213 +0,0 @@
1
- module Inputs
2
- class AssetBox
3
- delegate :content_tag, :render, :current_user, :to => :@template
4
-
5
- def initialize(object, object_name, template, method, opts)
6
- @object = object
7
- @object_name = object_name
8
- @template = template
9
- @options = initialize_options(method, opts)
10
- end
11
-
12
- def to_html
13
- output = ''
14
- output += header_html
15
-
16
- if @options[:uploader] == :top
17
- output += uploader_html
18
- output += attachments_html
19
- output += dialog_html if @options[:dialog]
20
- else
21
- output += attachments_html
22
- output += dialog_html if @options[:dialog]
23
- output += uploader_html if @options[:uploader]
24
- end
25
-
26
- output += footer_html
27
-
28
- output.html_safe
29
- end
30
-
31
- private
32
-
33
- def header_html
34
- "<div id='asset-box-input-#{@options[:uid]}'
35
- class='asset-box-input #{@options[:box]}'
36
- data-box='#{@options[:box]}'
37
- data-uploader='s3_#{@options[:uid]}'
38
- data-limit='#{@options[:limit]}'
39
- data-attachable-id='#{@options[:attachable_id]}'
40
- data-attachable-type='#{@options[:attachable_type]}'
41
- data-attachable-object-name='#{@object_name}'
42
- data-attachment-style='#{@options[:attachment_style]}'
43
- data-attachment-add-to='#{@options[:attachment_add_to]}'
44
- data-attachment-actions='#{@options[:attachment_actions].to_json()}'
45
- data-attachment-count='#{attachments.length}'
46
- data-attachment-links='#{@options[:attachment_links]}'
47
- data-over-limit-alerted='false'
48
- data-aws-acl='#{@options[:aws_acl]}'
49
- >".html_safe
50
- end
51
-
52
- def attachments_html
53
- if @options[:attachment_style] == :table
54
- attachments_table_html
55
- elsif @options[:attachment_style] == :list
56
- content_tag(:ul, build_values_html, :class => 'attachments')
57
- else
58
- content_tag(:div, build_values_html, :class => 'row attachments thumbnails')
59
- end
60
- end
61
-
62
- def attachments_table_html
63
- content_tag(:table, :class => 'table') do
64
- head = attachments_table_head_html if @options[:table_filter_bar]
65
- body = content_tag(:tbody, build_values_html, :class => 'attachments')
66
- head ? head + body : body
67
- end
68
- end
69
-
70
- def attachments_table_head_html
71
- content_tag(:thead) do
72
- content_tag(:tr) do
73
- content_tag(:th, filter_bar_html, :colspan => 4)
74
- end
75
- end
76
- end
77
-
78
- def dialog_html
79
- render(
80
- :partial => 'asset_box_input/dialog',
81
- :locals => {
82
- :dialog_url => @options[:dialog_url]
83
- }
84
- ).html_safe
85
- end
86
-
87
- def uploader_html
88
- # Check that we have permission to upload.
89
- asset = Effective::Asset.new(user_id: ((current_user.try(:id) || 1) rescue 1), upload_file: 'placeholder')
90
-
91
- unless (EffectiveAssets.authorized?(@template.controller, :create, asset) rescue false)
92
- @options[:btn_title] = 'Unable to upload. (cannot :create Effective::Asset)'
93
- @options[:disabled] = true
94
- end
95
-
96
- html_class = [
97
- ('drop-files' if @options[:uploader_drop_files]),
98
- ((@options[:uploader_html] || {})[:class])
99
- ].compact.join(' ')
100
-
101
- render(
102
- :partial => 'asset_box_input/uploader',
103
- :locals => {
104
- :uid => @options[:uid],
105
- :click_submit => @options[:click_submit],
106
- :html_class => html_class,
107
- :limit => @options[:limit],
108
- :disabled => @options[:disabled],
109
- :required => (@options[:required] == true && attachments.length == 0),
110
- :file_types => @options[:file_types],
111
- :progress_bar_partial => @options[:progress_bar_partial],
112
- :drop_files => @options[:uploader_drop_files],
113
- :drop_files_help_text => @options[:drop_files_help_text],
114
- :aws_acl => @options[:aws_acl],
115
- :btn_label => @options[:btn_label],
116
- :btn_title => @options[:btn_title]
117
- }
118
- ).html_safe
119
- end
120
-
121
- def filter_bar_html
122
- "<input type='text' class='form-control filter-attachments' placeholder='Filter by title'>".html_safe
123
- end
124
-
125
- def build_values_html
126
- attachment_partial =
127
- case @options[:attachment_style]
128
- when :table
129
- 'attachment_as_table'
130
- when :list
131
- 'attachment_as_list'
132
- when :thumbnail
133
- 'attachment_as_thumbnail'
134
- when nil
135
- 'attachment_as_thumbnail'
136
- else
137
- raise "unknown AssetBox attachment_style: #{@options[:attachment_style]}. Valid options are :thumbnail, :list and :table"
138
- end
139
-
140
- render(
141
- :partial => "asset_box_input/#{attachment_partial}",
142
- :collection => attachments.reject { |attachment| attachment.marked_for_destruction? },
143
- :as => :attachment,
144
- :locals => {
145
- :attachment_actions => @options[:attachment_actions].map { |action| action.to_s },
146
- :attachment_links => @options[:attachment_links],
147
- :limit => @options[:limit],
148
- :disabled => @options[:disabled],
149
- :attachable_object_name => @object_name
150
- }
151
- )
152
- end
153
-
154
- def footer_html
155
- "</div>".html_safe
156
- end
157
-
158
- def attachments
159
- @object.attachments.select { |attachment| attachment.box == @options[:box] }
160
- end
161
-
162
- def initialize_options(method, opts)
163
- {
164
- :uploader => true, # :top, :bottom, true or false
165
- :uploader_drop_files => false,
166
- :drop_files_help_text => 'Drop files here',
167
- :progress_bar_partial => 'asset_box_input/progress_bar_template',
168
- :attachment_style => :thumbnail, # :thumbnail, :table, or :list
169
- :attachment_links => true,
170
- :attachment_add_to => :bottom, # :bottom or :top (of attachments div)
171
- :attachment_actions => [:remove], # or :insert, :delete, :remove
172
- :table_filter_bar => false,
173
- :dialog => false,
174
- :dialog_url => @template.effective_assets.effective_assets_path,
175
- :disabled => false,
176
- :file_types => [:any],
177
- :btn_label => 'Upload...',
178
- :btn_title => 'Click or drag & drop to upload a file'
179
- }.merge(opts).tap do |options|
180
- options[:method] = method.to_s
181
- options[:box] = method.to_s.pluralize
182
- options[:attachable_id] ||= (@object.try(:id) rescue nil)
183
- options[:attachable_type] ||= @object.class.name.titleize.gsub(" ", "_").gsub('/', '_').downcase
184
-
185
- # The logic for the AWS ACL is such that:
186
- # 1.) If the :private or :aws_acl keys are set on the asset_box input, use those values
187
- # 2.) If the :private or :public keys are set on the acts_as_asset_box declaration, use those values
188
- # 3.) Fall back to default EffectiveAssets.aws_acl as per config file
189
-
190
- uploader_private = (opts[:private] == true || opts[:public] == false || opts[:aws_acl] == EffectiveAssets::AWS_PRIVATE)
191
- uploader_public = (opts[:private] == false || opts[:public] == true || opts[:aws_acl] == EffectiveAssets::AWS_PUBLIC)
192
- object_private = ((@object.asset_boxes[method] == :private || @object.asset_boxes[method].first[:private] == true || @object.asset_boxes[method].first[:public] == false) rescue false)
193
- object_public = ((@object.asset_boxes[method] == :public || @object.asset_boxes[method].first[:public] == true || @object.asset_boxes[method].first[:private] == false) rescue false)
194
-
195
- if uploader_private
196
- options[:aws_acl] = EffectiveAssets::AWS_PRIVATE
197
- elsif uploader_public
198
- options[:aws_acl] = EffectiveAssets::AWS_PUBLIC
199
- elsif object_private
200
- options[:aws_acl] = EffectiveAssets::AWS_PRIVATE
201
- elsif object_public
202
- options[:aws_acl] = EffectiveAssets::AWS_PUBLIC
203
- else
204
- options[:aws_acl] = EffectiveAssets.aws_acl
205
- end
206
-
207
- options[:uid] = "#{options[:attachable_type]}-#{options[:attachable_id]}-#{options[:method]}-#{Time.zone.now.to_f}".parameterize
208
- options[:limit] = (options[:method] == options[:box] ? (options[:limit] || 10000) : 1)
209
- end
210
- end
211
- end
212
- end
213
-
@@ -1,7 +0,0 @@
1
- module Inputs
2
- module AssetBoxFormInput
3
- def asset_box_input(method, opts = {})
4
- AssetBox.new(@object, @object_name, @template, method, opts).to_html
5
- end
6
- end
7
- end
@@ -1,9 +0,0 @@
1
- if defined?(Formtastic)
2
- class AssetBoxFormtasticInput < Formtastic::Inputs::FileInput
3
- def to_html
4
- input_wrapping do
5
- label_html << Inputs::AssetBox.new(@object, @object_name, @template, @method, @options).to_html
6
- end
7
- end
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- if defined?(SimpleForm)
2
- class AssetBoxSimpleFormInput < SimpleForm::Inputs::FileInput
3
- def input(wrapper_options = nil)
4
- Inputs::AssetBox.new(object, object_name, template, attribute_name, options).to_html
5
- end
6
- end
7
- end