assetable 0.1.3 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/javascripts/assetable/assetable_uploader.js.coffee +31 -3
- data/app/assets/javascripts/assetable/gallery.js.coffee +11 -6
- data/app/assets/javascripts/assetable/uploader.js.coffee +4 -0
- data/app/assets/stylesheets/assetable/components/_uploader.css.sass +1 -1
- data/app/controllers/assetable/assets_controller.rb +26 -5
- data/app/models/asset.rb +1 -1
- data/app/uploaders/asset_uploader.rb +28 -0
- data/app/uploaders/document_uploader.rb +1 -14
- data/app/uploaders/image_uploader.rb +1 -14
- data/app/uploaders/video_uploader.rb +0 -12
- data/app/views/assetable/assets/_asset.html.haml +2 -2
- data/app/views/assetable/assets/_form.html.haml +32 -0
- data/app/views/assetable/assets/edit.html.haml +1 -0
- data/app/views/assetable/external_services/_form.html.haml +34 -0
- data/app/views/assetable/external_services/new.html.haml +1 -34
- data/config/initializers/gallery_input.rb +1 -1
- data/config/initializers/uploader_input.rb +4 -4
- data/lib/assetable/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjllOWNiYzFhMzExZGIwYmQ2NGVhNjE1YWIyN2UzZThlYjZkZjE4Yg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWQxY2FmNGM3Mzk4MDlhYjJhMzI2M2YwMTE0NjczYzZmNWYzNWE0OA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZmYyNjQ0YmQ2MDUwMmNlNWFiODcxMDM3YWZkZTE4OWVjNDljMDAwNWUzZTZi
|
10
|
+
YjIzYjZhYzBiNmNmM2RhMDNhZjJlZDFlNTFiMGJmYzVkNTk0NWNiMzczNGI5
|
11
|
+
MWFlNDIwZjE4N2E1OGVlYjVjN2Y4N2U1YWM2OTM1YzhiYWQyYTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDk4ZDYwNjZlMjEyOTlkMDI4MzRlZGEyYjlmNDJkYmU2OGQyYTljNjVhZTEw
|
14
|
+
YTY5ODYwZTczZDQ1MmVkZjQyYTdkZjA2OThjZmEzMjQ2YjRiMzUwODZmYmQ5
|
15
|
+
ZTdiOTdhODdkZjdkYzZhODJmZWUwNTZhOGQxOTNiNWNiY2EwODc=
|
@@ -9,6 +9,7 @@
|
|
9
9
|
fieldname: null
|
10
10
|
FileUploaded: options.onUploaded
|
11
11
|
fileRemoved: options.fileRemoved
|
12
|
+
fileUpdated: options.fileUpdated
|
12
13
|
gallery: false
|
13
14
|
id: null
|
14
15
|
max_file_size: "10mb"
|
@@ -133,6 +134,26 @@
|
|
133
134
|
assetable_uploader.options.fileRemoved this, assetable_uploader
|
134
135
|
|
135
136
|
|
137
|
+
$(assetable_uploader).on "click", ".btn-uploader-edit-asset", (e)->
|
138
|
+
e.preventDefault()
|
139
|
+
$.ajax
|
140
|
+
url: $(this).attr('href')
|
141
|
+
data: {fieldname: assetable_uploader.options.fieldname}
|
142
|
+
type: 'GET'
|
143
|
+
|
144
|
+
success: (response)->
|
145
|
+
$response = $(response)
|
146
|
+
$response.modal()
|
147
|
+
|
148
|
+
$('form.form-edit-asset').on 'ajax:beforeSend', ()->
|
149
|
+
# console.log "form submitting..."
|
150
|
+
|
151
|
+
$('form.form-edit-asset').on 'ajax:success', (data, status, xhr)->
|
152
|
+
if status.success
|
153
|
+
$response.modal('hide').remove()
|
154
|
+
assetable_uploader.options.fileUpdated status
|
155
|
+
|
156
|
+
|
136
157
|
$(assetable_uploader).on "click", ".btn-open-asset-gallery", (e)->
|
137
158
|
e.preventDefault()
|
138
159
|
$(assetable_uploader).asset_gallery({fieldname: assetable_uploader.options.fieldname})
|
@@ -173,11 +194,11 @@
|
|
173
194
|
) jQuery
|
174
195
|
|
175
196
|
|
176
|
-
$(document).ready ->
|
177
197
|
|
198
|
+
|
199
|
+
bind_uploaders = ->
|
178
200
|
# Bind the koh uploader and galleries to a page
|
179
201
|
$(".uploader").each ->
|
180
|
-
|
181
202
|
# Check that it's not already bound
|
182
203
|
unless $(this).hasClass("uploadable")
|
183
204
|
$(this).addClass "uploadable"
|
@@ -198,7 +219,14 @@ $(document).ready ->
|
|
198
219
|
return false unless $(item).hasClass("uploader-has-asset")
|
199
220
|
$('.uploader-preview', item).html('<input type="hidden" name="' + field + '" />')
|
200
221
|
$(item).removeClass("uploader-has-asset")
|
222
|
+
fileUpdated: (resp) ->
|
223
|
+
$this.find('div.uploader-preview[data-asset-id="' + resp.id + '"]').replaceWith(resp.html)
|
201
224
|
# openAssetGallery: (button, item) ->
|
202
225
|
|
203
|
-
|
204
226
|
|
227
|
+
|
228
|
+
window.Assetable.bind_uploaders = bind_uploaders
|
229
|
+
|
230
|
+
$(document).ready ->
|
231
|
+
|
232
|
+
window.Assetable.bind_uploaders()
|
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
bind_galleries = ->
|
3
2
|
# Bind the koh uploader and galleries to a page
|
4
3
|
$(".gallery-uploader").each ->
|
5
|
-
|
6
4
|
# Check that it's not already bound
|
7
5
|
unless $(this).hasClass("uploadable")
|
8
6
|
$(this).addClass "uploadable"
|
@@ -18,11 +16,11 @@ $(document).ready ->
|
|
18
16
|
fieldname: field
|
19
17
|
authenticity_token: $("meta[name=\"csrf-token\"]").attr("content")
|
20
18
|
onUploaded: (resp) ->
|
21
|
-
$this.find('.
|
19
|
+
$this.find('.uploader-data-wrapper').append(resp.html)
|
22
20
|
fileRemoved: (button, item) ->
|
23
21
|
$(button).closest('.uploader-preview').remove()
|
24
|
-
|
25
|
-
|
22
|
+
fileUpdated: (resp) ->
|
23
|
+
$this.find('div.uploader-preview[data-asset-id="' + resp.id + '"]').replaceWith(resp.html)
|
26
24
|
|
27
25
|
# Make the gallery sortable
|
28
26
|
$(this).sortable
|
@@ -31,3 +29,10 @@ $(document).ready ->
|
|
31
29
|
tolerance: 'pointer'
|
32
30
|
placeholder: 'uploader-sortable-placeholder'
|
33
31
|
|
32
|
+
|
33
|
+
window.Assetable.bind_galleries = bind_galleries
|
34
|
+
|
35
|
+
$(document).ready ->
|
36
|
+
|
37
|
+
window.Assetable.bind_galleries()
|
38
|
+
|
@@ -13,9 +13,6 @@ class Assetable::AssetsController < ActionController::Base
|
|
13
13
|
content_type = params[:file].content_type
|
14
14
|
asset_params = {name: params[:file].original_filename, filename: params[:file]}
|
15
15
|
|
16
|
-
puts "params:: #{params.inspect}"
|
17
|
-
puts "content_type:: #{content_type}"
|
18
|
-
|
19
16
|
# Create the appropriate model
|
20
17
|
if content_type.split("/").first == "image"
|
21
18
|
@asset = Image.new(asset_params)
|
@@ -25,8 +22,6 @@ class Assetable::AssetsController < ActionController::Base
|
|
25
22
|
@asset = Document.new(asset_params)
|
26
23
|
end
|
27
24
|
|
28
|
-
puts "@asset:: #{@asset.inspect}"
|
29
|
-
|
30
25
|
# Return
|
31
26
|
if @asset.errors.empty? and @asset.save
|
32
27
|
render json: { success: true, html: render_to_string(partial: "assetable/assets/asset", locals: { asset: @asset, fieldname: params[:fieldname]})}
|
@@ -35,4 +30,30 @@ class Assetable::AssetsController < ActionController::Base
|
|
35
30
|
end
|
36
31
|
end
|
37
32
|
|
33
|
+
def edit
|
34
|
+
@asset = Asset.find(params[:id])
|
35
|
+
end
|
36
|
+
|
37
|
+
def update
|
38
|
+
@asset = Asset.find(params[:id])
|
39
|
+
if @asset and @asset.errors.empty? and @asset.update_attributes(permitted_params)
|
40
|
+
render json: { success: true, id: @asset.id, html: render_to_string(partial: "assetable/assets/asset", locals: { asset: @asset, fieldname: params[:fieldname]})}
|
41
|
+
else
|
42
|
+
render json: { status: "error", errors: @external_service.errors.full_messages, html: render_to_string(:edit) }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Permitted params for the model
|
47
|
+
def permitted_params
|
48
|
+
params.require(params[:asset_type].underscore.to_sym).permit(
|
49
|
+
:name,
|
50
|
+
:filename,
|
51
|
+
:body,
|
52
|
+
:content_type,
|
53
|
+
:width,
|
54
|
+
:height,
|
55
|
+
:asset_type
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
38
59
|
end
|
data/app/models/asset.rb
CHANGED
@@ -62,7 +62,7 @@ class Asset < ActiveRecord::Base
|
|
62
62
|
self.content_type = self.filename.file.content_type
|
63
63
|
self.file_size = self.filename.file.size
|
64
64
|
self.width, self.height = `identify -format "%wx%h" #{self.filename.file.path}`.split(/x/) unless self.document?
|
65
|
-
self.checksum = Digest::MD5.file(self.filename.
|
65
|
+
# self.checksum = Digest::MD5.file(self.filename.to_s).to_s
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class AssetUploader < CarrierWave::Uploader::Base
|
4
|
+
|
5
|
+
# Choose what kind of storage to use for this uploader:
|
6
|
+
storage Assetable.storage
|
7
|
+
|
8
|
+
# Set the MD5 hash
|
9
|
+
process :set_md5
|
10
|
+
|
11
|
+
# Override the directory where uploaded files will be stored.
|
12
|
+
# This is a sensible default for uploaders that are meant to be mounted:
|
13
|
+
def store_dir
|
14
|
+
if model.present?
|
15
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
16
|
+
else
|
17
|
+
"uploads/#{mounted_as}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Set an MD5 hash of the image
|
22
|
+
def set_md5
|
23
|
+
if model.present?
|
24
|
+
model.checksum = Digest::MD5.file(current_path).to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -1,19 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
class DocumentUploader <
|
4
|
-
|
5
|
-
# Choose what kind of storage to use for this uploader:
|
6
|
-
storage Assetable.storage
|
7
|
-
|
8
|
-
# Override the directory where uploaded files will be stored.
|
9
|
-
# This is a sensible default for uploaders that are meant to be mounted:
|
10
|
-
def store_dir
|
11
|
-
if model.present?
|
12
|
-
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
13
|
-
else
|
14
|
-
"uploads/#{mounted_as}"
|
15
|
-
end
|
16
|
-
end
|
3
|
+
class DocumentUploader < AssetUploader
|
17
4
|
|
18
5
|
# Provide a default URL as a default if there hasn't been a file uploaded:
|
19
6
|
# def default_url
|
@@ -1,27 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
class ImageUploader <
|
3
|
+
class ImageUploader < AssetUploader
|
4
4
|
|
5
5
|
include CarrierWave::MimeTypes
|
6
6
|
# Include RMagick or MiniMagick support:
|
7
7
|
include CarrierWave::RMagick
|
8
8
|
|
9
|
-
# Choose what kind of storage to use for this uploader:
|
10
|
-
storage Assetable.storage
|
11
|
-
|
12
9
|
# More reliable content types
|
13
10
|
process :set_content_type
|
14
11
|
|
15
|
-
# Override the directory where uploaded files will be stored.
|
16
|
-
# This is a sensible default for uploaders that are meant to be mounted:
|
17
|
-
def store_dir
|
18
|
-
if model.present?
|
19
|
-
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
20
|
-
else
|
21
|
-
"uploads/#{mounted_as}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
12
|
# Add a white list of extensions which are allowed to be uploaded.
|
26
13
|
# For images you might use something like this:
|
27
14
|
def extension_white_list
|
@@ -1,16 +1,4 @@
|
|
1
1
|
class VideoUploader < CarrierWave::Uploader::Base
|
2
|
-
|
3
|
-
storage Assetable.storage
|
4
|
-
|
5
|
-
# Override the directory where uploaded files will be stored.
|
6
|
-
# This is a sensible default for uploaders that are meant to be mounted:
|
7
|
-
def store_dir
|
8
|
-
if model.present?
|
9
|
-
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
10
|
-
else
|
11
|
-
"uploads/#{mounted_as}"
|
12
|
-
end
|
13
|
-
end
|
14
2
|
|
15
3
|
# Create an MP4 version
|
16
4
|
# version :mp4 do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
.uploader-preview
|
1
|
+
.uploader-preview{:'data-asset-id' => asset.id}
|
2
2
|
|
3
3
|
= link_to asset.filename.to_s, target: "_blank" do
|
4
4
|
- if asset.image?
|
@@ -18,6 +18,6 @@
|
|
18
18
|
%span.uploader-size= number_to_human_size(asset.file_size)
|
19
19
|
.uploader-actions
|
20
20
|
= link_to "delete", "#", class: "btn-uploader btn-uploader-remove-asset"
|
21
|
-
= link_to "edit",
|
21
|
+
= link_to "edit", edit_assetable_asset_path(asset), class: "btn-uploader btn-uploader-edit-asset"
|
22
22
|
|
23
23
|
= hidden_field_tag(fieldname, asset.id)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
.assetable-assets.assetable-modal.modal.fade
|
2
|
+
.modal-dialog
|
3
|
+
.modal-content
|
4
|
+
= form_for [:assetable, @asset], url: assetable_asset_path(@asset, asset_type: @asset.type), remote: true, html: {class: "form-edit-asset"} do |f|
|
5
|
+
.modal-header
|
6
|
+
%button.close{"aria-hidden" => "true", "data-dismiss" => "modal", type: "button"} ×
|
7
|
+
%h4.modal-title Asset
|
8
|
+
.modal-body
|
9
|
+
|
10
|
+
= hidden_field_tag :fieldname, params[:fieldname]
|
11
|
+
|
12
|
+
.form-group
|
13
|
+
= f.label :name
|
14
|
+
= f.text_field :name, class: "form-control input-fluid", required: true
|
15
|
+
- unless f.object.filename.present?
|
16
|
+
.form-group
|
17
|
+
= f.label :filename
|
18
|
+
= f.text_field :filename, class: "form-control input-fluid"
|
19
|
+
.form-group
|
20
|
+
= f.label :body
|
21
|
+
= f.text_area :body, class: "form-control input-fluid"
|
22
|
+
.form-group.row
|
23
|
+
.col-xs-6
|
24
|
+
= f.label :width
|
25
|
+
= f.number_field :width, class: "form-control input-fluid"
|
26
|
+
.col-xs-6
|
27
|
+
= f.label :height
|
28
|
+
= f.number_field :height, class: "form-control input-fluid"
|
29
|
+
|
30
|
+
.modal-footer
|
31
|
+
= button_tag "Cancel", class: "btn btn-default", :'data-dismiss' => "modal", type: "button"
|
32
|
+
= f.submit "Save Asset", class: "btn btn-primary"
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'form'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
.assetable-external-services.assetable-modal.modal.fade
|
2
|
+
.modal-dialog
|
3
|
+
.modal-content
|
4
|
+
= form_for [:assetable, @external_service], remote: true do |f|
|
5
|
+
.modal-header
|
6
|
+
%button.close{"aria-hidden" => "true", "data-dismiss" => "modal", type: "button"} ×
|
7
|
+
%h4.modal-title Third Party Service
|
8
|
+
.modal-body
|
9
|
+
|
10
|
+
= hidden_field_tag :fieldname, params[:fieldname]
|
11
|
+
|
12
|
+
.form-group
|
13
|
+
= f.label :name
|
14
|
+
= f.text_field :name, class: "form-control input-fluid", required: true
|
15
|
+
.form-group
|
16
|
+
= f.label :content_type
|
17
|
+
= f.select :content_type, ExternalService.possible_content_types
|
18
|
+
.form-group
|
19
|
+
= f.label :filename
|
20
|
+
= f.text_field :filename, class: "form-control input-fluid"
|
21
|
+
.form-group
|
22
|
+
= f.label :body
|
23
|
+
= f.text_area :body, class: "form-control input-fluid", required: true
|
24
|
+
.form-group.row
|
25
|
+
.col-xs-6
|
26
|
+
= f.label :width
|
27
|
+
= f.number_field :width, class: "form-control input-fluid"
|
28
|
+
.col-xs-6
|
29
|
+
= f.label :height
|
30
|
+
= f.number_field :height, class: "form-control input-fluid"
|
31
|
+
|
32
|
+
.modal-footer
|
33
|
+
= button_tag "Cancel", class: "btn btn-default", :'data-dismiss' => "modal", type: "button"
|
34
|
+
= f.submit "Add Third Party Service", class: "btn btn-primary"
|
@@ -1,34 +1 @@
|
|
1
|
-
|
2
|
-
.modal-dialog
|
3
|
-
.modal-content
|
4
|
-
= form_for [:assetable, @external_service], remote: true do |f|
|
5
|
-
.modal-header
|
6
|
-
%button.close{"aria-hidden" => "true", "data-dismiss" => "modal", type: "button"} ×
|
7
|
-
%h4.modal-title Third Party Service
|
8
|
-
.modal-body
|
9
|
-
|
10
|
-
= hidden_field_tag :fieldname, params[:fieldname]
|
11
|
-
|
12
|
-
.form-group
|
13
|
-
= f.label :name
|
14
|
-
= f.text_field :name, class: "form-control input-fluid", required: true
|
15
|
-
.form-group
|
16
|
-
= f.label :content_type
|
17
|
-
= f.select :content_type, ExternalService.possible_content_types
|
18
|
-
.form-group
|
19
|
-
= f.label :filename
|
20
|
-
= f.text_field :filename, class: "form-control input-fluid"
|
21
|
-
.form-group
|
22
|
-
= f.label :body
|
23
|
-
= f.text_area :body, class: "form-control input-fluid", required: true
|
24
|
-
.form-group.row
|
25
|
-
.col-xs-6
|
26
|
-
= f.label :width
|
27
|
-
= f.number_field :width, class: "form-control input-fluid"
|
28
|
-
.col-xs-6
|
29
|
-
= f.label :height
|
30
|
-
= f.number_field :height, class: "form-control input-fluid"
|
31
|
-
|
32
|
-
.modal-footer
|
33
|
-
= button_tag "Cancel", class: "btn btn-default", :'data-dismiss' => "modal", type: "button"
|
34
|
-
= f.submit "Add Third Party Service", class: "btn btn-primary"
|
1
|
+
= render 'form'
|
@@ -27,7 +27,7 @@ class ActionView::Helpers::FormBuilder
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Uploader HTML with the asset previews and actions
|
30
|
-
uploader_html = content_tag(:div, (asset_preview.html_safe), class: "
|
30
|
+
uploader_html = content_tag(:div, (asset_preview.html_safe), class: "uploader-data-wrapper")
|
31
31
|
|
32
32
|
# Wrap the previews and uploader in a div
|
33
33
|
uploader_wrapper = content_tag(:div, uploader_html, class: "gallery-uploader", id: options[:id], :'data-uploader-input-name' => fieldname)
|
@@ -38,9 +38,9 @@ class ActionView::Helpers::FormBuilder
|
|
38
38
|
image_tag = asset_preview_image(asset)
|
39
39
|
asset_name = content_tag(:span, asset.name.to_s, class: "uploader-name")
|
40
40
|
asset_size = content_tag(:span, number_to_human_size(asset.file_size.to_s), class: "uploader-size")
|
41
|
-
asset_size_and_actions = content_tag(:div, (asset_size + asset_actions), class: "uploader-size-and-actions")
|
41
|
+
asset_size_and_actions = content_tag(:div, (asset_size + asset_actions(asset)), class: "uploader-size-and-actions")
|
42
42
|
field = hidden_field_tag(fieldname, (asset.id))
|
43
|
-
return content_tag(:div, (image_tag + asset_name + asset_size_and_actions + field), class: "uploader-preview")
|
43
|
+
return content_tag(:div, (image_tag + asset_name + asset_size_and_actions + field), class: "uploader-preview", :'data-asset-id' => asset.id)
|
44
44
|
end
|
45
45
|
|
46
46
|
# Asset preview image or fallback to a content type image
|
@@ -63,9 +63,9 @@ class ActionView::Helpers::FormBuilder
|
|
63
63
|
end
|
64
64
|
|
65
65
|
# Asset actions, i.e.e remove and edit buttons
|
66
|
-
def asset_actions
|
66
|
+
def asset_actions asset
|
67
67
|
remove_btn = link_to "delete", "#", class: "btn-uploader btn-uploader-remove-asset"
|
68
|
-
edit_btn = link_to "edit",
|
68
|
+
edit_btn = link_to "edit", Rails.application.routes.url_helpers.edit_assetable_asset_path(asset), class: "btn-uploader btn-uploader-edit-asset", :'data-asset-id' => asset.id
|
69
69
|
content_tag(:div, (remove_btn + edit_btn), class: "uploader-actions")
|
70
70
|
end
|
71
71
|
|
data/lib/assetable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assetable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Koht
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -306,11 +306,15 @@ files:
|
|
306
306
|
- app/models/gallery.rb
|
307
307
|
- app/models/image.rb
|
308
308
|
- app/models/video.rb
|
309
|
+
- app/uploaders/asset_uploader.rb
|
309
310
|
- app/uploaders/document_uploader.rb
|
310
311
|
- app/uploaders/image_uploader.rb
|
311
312
|
- app/uploaders/video_uploader.rb
|
312
313
|
- app/views/assetable/assets/_asset.html.haml
|
314
|
+
- app/views/assetable/assets/_form.html.haml
|
313
315
|
- app/views/assetable/assets/_gallery.html.haml
|
316
|
+
- app/views/assetable/assets/edit.html.haml
|
317
|
+
- app/views/assetable/external_services/_form.html.haml
|
314
318
|
- app/views/assetable/external_services/new.html.haml
|
315
319
|
- config/initializers/carrierwave.rb
|
316
320
|
- config/initializers/gallery_input.rb
|