active_admin_modal_upload 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +21 -0
- data/app/assets/stylesheets/active_admin_modal_upload.scss +34 -0
- data/app/models/concerns/active_admin_modal_upload/uploadable.rb +41 -0
- data/config/routes.rb +2 -0
- data/lib/active_admin_modal_upload.rb +11 -0
- data/lib/active_admin_modal_upload/dsl.rb +36 -0
- data/lib/active_admin_modal_upload/engine.rb +4 -0
- data/lib/active_admin_modal_upload/inputs/modal_upload_input.rb +117 -0
- data/lib/active_admin_modal_upload/version.rb +3 -0
- data/lib/generators/active_admin_modal_upload/initialize/USAGE +9 -0
- data/lib/generators/active_admin_modal_upload/initialize/initialize_generator.rb +18 -0
- data/lib/tasks/active_admin_modal_upload_tasks.rake +4 -0
- metadata +142 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a6c31773f8a0450f9ca0276908d39c7678e126b1
|
4
|
+
data.tar.gz: 6c429faf4ad614da812aa2ff4aec043ebb278fc6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3a7f184a32c35f723d2c52a051c8ab05173d0290e31df277858dedab0801c58ed1c346296a6c129eaae338169bf4170d0e9665bb24cec9a1c9709a1debb3d469
|
7
|
+
data.tar.gz: d3a400cdb31828055babb59dd3c2a683b9847f0b586bc72ace18def3ef454f30d873d3a5a00ed2b792a0529e0e5e619c3e5a2d53ed3f16b430007d6fac19e2fd
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'ActiveAdminModalUpload'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
.existing-upload {
|
3
|
+
margin-top: 20px;
|
4
|
+
margin-left: auto;
|
5
|
+
margin-right: auto;
|
6
|
+
width: 90%;
|
7
|
+
position: relative;
|
8
|
+
clear: both;
|
9
|
+
|
10
|
+
.file-preview {
|
11
|
+
margin: 10px;
|
12
|
+
// width: 50%;
|
13
|
+
float: left;
|
14
|
+
// display: inline-block;
|
15
|
+
// clear: both;
|
16
|
+
position: relative;
|
17
|
+
}
|
18
|
+
|
19
|
+
.remove-file {
|
20
|
+
margin-top: 10px;
|
21
|
+
display: inline-block;
|
22
|
+
float: left;
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
}
|
27
|
+
|
28
|
+
.modal-window-visible {
|
29
|
+
height: 50%;
|
30
|
+
width: 30%;
|
31
|
+
overflow-y: scroll;
|
32
|
+
overflow-x: hidden;
|
33
|
+
|
34
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module ActiveAdminModalUpload::Uploadable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
include Rails.application.routes.url_helpers
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def allows_upload(name)
|
10
|
+
code = <<-eoruby
|
11
|
+
|
12
|
+
after_save :delay_processing, :if => :temporary_image_url_changed?
|
13
|
+
|
14
|
+
def to_jq_upload
|
15
|
+
{
|
16
|
+
"name" => read_attribute(#{name}),
|
17
|
+
"size" => image.size,
|
18
|
+
"url" => image.url,
|
19
|
+
"thumbnail_url" => image.thumb.url,
|
20
|
+
"delete_url" => destroy_upload_admin_#{self.name.underscore}_url(self, only_path: true),
|
21
|
+
"id" => id,
|
22
|
+
"delete_type" => "DELETE"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def delay_processing
|
27
|
+
#{self.name}.delay.save_remote_file(self.id)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.save_remote_file(id)
|
31
|
+
file = #{self.name}.where(id: id).first
|
32
|
+
if file
|
33
|
+
file.remote_image_url = file.temporary_image_url
|
34
|
+
file.save!
|
35
|
+
end
|
36
|
+
end
|
37
|
+
eoruby
|
38
|
+
class_eval(code)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require "active_admin_modal_upload/engine"
|
2
|
+
require "active_admin_modal_upload/dsl"
|
3
|
+
require "s3_direct_upload"
|
4
|
+
require "jquery-ui-rails"
|
5
|
+
require "jquery-modal-rails"
|
6
|
+
require "active_admin_modal_upload/inputs/modal_upload_input"
|
7
|
+
|
8
|
+
module ActiveAdminModalUpload
|
9
|
+
end
|
10
|
+
|
11
|
+
::ActiveAdmin::DSL.send(:include, ActiveAdminModalUpload::DSL)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ActiveAdminModalUpload
|
2
|
+
module DSL
|
3
|
+
|
4
|
+
def modal_uploads(options={})
|
5
|
+
config.resource_class.send(:include, ::ActiveAdminModalUpload::Uploadable)
|
6
|
+
uploader = options[:mounted_uploader] ||= :image
|
7
|
+
config.resource_class.send(:allows_upload, uploader)
|
8
|
+
|
9
|
+
collection_action :create_upload, method: :post do
|
10
|
+
@upload_model = options[:model] ||= active_admin_config.resource_class
|
11
|
+
@model = @upload_model.new(upload_resource_params)
|
12
|
+
if @model.save
|
13
|
+
respond_to do |format|
|
14
|
+
format.html {
|
15
|
+
render :json => [@model.to_jq_upload].to_json,
|
16
|
+
:content_type => 'text/html',
|
17
|
+
:layout => false
|
18
|
+
}
|
19
|
+
format.json {
|
20
|
+
render :json => { files: [@model.to_jq_upload] }, status: :created
|
21
|
+
}
|
22
|
+
end
|
23
|
+
else
|
24
|
+
render :json => [{:error => "custom_failure"}], :status => 304
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
member_action :destroy_upload, method: :delete do
|
29
|
+
@upload_model = options[:model] ||= active_admin_config.resource_class
|
30
|
+
@model = @upload_model.find(params[:id])
|
31
|
+
@model.destroy
|
32
|
+
render :json => true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
class ModalUploadInput
|
2
|
+
|
3
|
+
include Formtastic::Inputs::Base
|
4
|
+
include Jquery::Helpers
|
5
|
+
include S3DirectUpload::UploadHelper
|
6
|
+
include ActionView::Helpers::UrlHelper
|
7
|
+
include ActionView::Helpers::FormHelper
|
8
|
+
include ActionView::Helpers::AssetTagHelper
|
9
|
+
include ActionView::Context
|
10
|
+
|
11
|
+
|
12
|
+
def js_to_append_modal
|
13
|
+
"<script type='text/javascript'>
|
14
|
+
$(document).ready(function() {
|
15
|
+
$('#main_content').append('" + modal_window + "');
|
16
|
+
});
|
17
|
+
</script>
|
18
|
+
"
|
19
|
+
end
|
20
|
+
|
21
|
+
def uploader_button
|
22
|
+
link_to_modal 'Add File', "\##{options[:resource].class.name.downcase}-#{options[:association]}-uploader-window", :class => 'button', id: "#{options[:association].underscore}_uploader"
|
23
|
+
end
|
24
|
+
|
25
|
+
def modal_window
|
26
|
+
resource = options[:resource].class.name.downcase
|
27
|
+
association = options[:association]
|
28
|
+
modal_window_id = "#{resource}-#{association}-uploader-window"
|
29
|
+
'<div id="' + modal_window_id + '" class="modal-window-visible" style="display: none;">' +
|
30
|
+
upload_form +
|
31
|
+
'</div>'
|
32
|
+
end
|
33
|
+
|
34
|
+
def upload_form
|
35
|
+
s3_uploader_form id: "#{options[:resource].class.name.downcase}-#{options[:association].underscore}-uploader" do
|
36
|
+
file_field_tag :file, multiple: true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def file_previews
|
41
|
+
options[:resource].send(options[:association].to_sym).order("image ASC").each_with_index.map { |file, index|
|
42
|
+
input_name = "#{options[:resource].class.name.downcase}[#{options[:association].underscore}_attributes][#{index}]"
|
43
|
+
|
44
|
+
image_preview = file.image.present? ? image_tag(file.image_url(options[:preview_image_size] ||= :thumb)) : image_tag(file.temporary_image_url, width: "150px", :style => "opacity:0.3; filter:alpha(opacity=30);") + "<br/><em>*This image is still being processed</em>".html_safe
|
45
|
+
|
46
|
+
"<div class='existing-upload'>" +
|
47
|
+
"<div class='file-preview'>" +
|
48
|
+
image_preview +
|
49
|
+
"</div>" +
|
50
|
+
"<div class='remove-file'>" +
|
51
|
+
check_box_tag("#{input_name}[_destroy]") +
|
52
|
+
"<p>Remove File</p>" +
|
53
|
+
hidden_field_tag("#{input_name}[id]", file.id) +
|
54
|
+
"</div>" +
|
55
|
+
"</div>"
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def upload_template
|
60
|
+
"<script id='template-upload' type='text/x-tmpl'>" +
|
61
|
+
"<div id='file-{%=o.unique_id%}'' class='upload'>" +
|
62
|
+
"{%=o.name%}" +
|
63
|
+
"<div class='progress progress-striped active' role='progressbar'><div class='bar' class='progress-bar bar progress-bar-success' style='width: 0%;'></div></div>" +
|
64
|
+
"</div>" +
|
65
|
+
"</script>"
|
66
|
+
end
|
67
|
+
|
68
|
+
def upload_js
|
69
|
+
"
|
70
|
+
<script type='text/javascript'>
|
71
|
+
$(function() {
|
72
|
+
$('\##{options[:resource].class.name.downcase}-#{options[:association].underscore}-uploader').S3Uploader({
|
73
|
+
}).on('s3_upload_complete', function(e, content) {
|
74
|
+
|
75
|
+
|
76
|
+
var preview = $('<div class=\"existing-upload\"><div class=\"file-preview\"><img src=\"' + content['url'] + '\" style=\"width: 150px; opacity:0.3; filter:alpha(opacity=30);\"><br/><em>*This image is still being processed</em></div><div class=\"remove-file\"></div></div>');
|
77
|
+
var lastPreview = $('.existing-upload').last();
|
78
|
+
insertRemoteInput(content);
|
79
|
+
preview.insertAfter(lastPreview);
|
80
|
+
}).bind('s3_uploads_complete', function(e, data) {
|
81
|
+
var processingMessage = $('<h3 style=\"text-align: center; margin-top=20px;\">Uploads completed.</h3>')
|
82
|
+
processingMessage.insertAfter($('#file'));
|
83
|
+
}).on('ajax:success', function(e, data) {
|
84
|
+
insertUploadInputsForPhotographs(JSON.parse(data));
|
85
|
+
}).on('ajax:error', function(e, data) {
|
86
|
+
alert('Something went wrong');
|
87
|
+
}).bind('s3_upload_failed', function(e, content) {
|
88
|
+
return alert('' + content.filename + ' failed to upload : ' + content.error_thrown);
|
89
|
+
});
|
90
|
+
});
|
91
|
+
|
92
|
+
var insertRemoteInput = function(content) {
|
93
|
+
input = $('<input type=\"hidden\" name=\"#{options[:resource].class.name.downcase}[#{options[:association].underscore}_attributes][' + $.now() + '][temporary_image_url]\" value=\"' + content.url + '\" />');
|
94
|
+
input.insertAfter($('\##{options[:association].underscore}_uploader'));
|
95
|
+
}
|
96
|
+
</script>
|
97
|
+
"
|
98
|
+
end
|
99
|
+
|
100
|
+
def placeholder
|
101
|
+
"<div class='existing-upload'></div>"
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def to_html
|
106
|
+
input_wrapping do
|
107
|
+
label_html <<
|
108
|
+
uploader_button <<
|
109
|
+
file_previews.join(" ").html_safe <<
|
110
|
+
placeholder.html_safe <<
|
111
|
+
upload_template.html_safe <<
|
112
|
+
js_to_append_modal.html_safe <<
|
113
|
+
upload_js.html_safe
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ActiveAdminModalUpload
|
2
|
+
class InitializeGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
|
5
|
+
def add_js_assets
|
6
|
+
append_file "app/assets/javascripts/active_admin.js.coffee", "#= require jquery.ui.all\n"
|
7
|
+
append_file "app/assets/javascripts/active_admin.js.coffee", "#= require jquery.modal\n"
|
8
|
+
append_file "app/assets/javascripts/active_admin.js.coffee", "#= require s3_direct_upload\n"
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_css_assets
|
12
|
+
append_file "app/assets/stylesheets/active_admin.css.scss", "@import 'jquery.ui.all';\n"
|
13
|
+
append_file "app/assets/stylesheets/active_admin.css.scss", "@import 'jquery.modal';\n"
|
14
|
+
append_file "app/assets/stylesheets/active_admin.css.scss", "@import 's3_direct_upload_progress_bars';\n"
|
15
|
+
append_file "app/assets/stylesheets/active_admin.css.scss", "@import 'active_admin_modal_upload';\n"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_admin_modal_upload
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Isaac Norman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: s3_direct_upload
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jquery-ui-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jquery-modal-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sidekiq
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Allows for the upload of multiple files in the background from a modal
|
98
|
+
window in Active Admin
|
99
|
+
email:
|
100
|
+
- isaacdnorman@gmail.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- MIT-LICENSE
|
106
|
+
- README.rdoc
|
107
|
+
- Rakefile
|
108
|
+
- app/assets/stylesheets/active_admin_modal_upload.scss
|
109
|
+
- app/models/concerns/active_admin_modal_upload/uploadable.rb
|
110
|
+
- config/routes.rb
|
111
|
+
- lib/active_admin_modal_upload.rb
|
112
|
+
- lib/active_admin_modal_upload/dsl.rb
|
113
|
+
- lib/active_admin_modal_upload/engine.rb
|
114
|
+
- lib/active_admin_modal_upload/inputs/modal_upload_input.rb
|
115
|
+
- lib/active_admin_modal_upload/version.rb
|
116
|
+
- lib/generators/active_admin_modal_upload/initialize/USAGE
|
117
|
+
- lib/generators/active_admin_modal_upload/initialize/initialize_generator.rb
|
118
|
+
- lib/tasks/active_admin_modal_upload_tasks.rake
|
119
|
+
homepage: http://www.papercloud.com.au
|
120
|
+
licenses: []
|
121
|
+
metadata: {}
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
require_paths:
|
125
|
+
- lib
|
126
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
requirements: []
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 2.2.0
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: Modal uploads in ActiveAdmin
|
142
|
+
test_files: []
|