activeadmin-dropzone 0.1.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/README.md +56 -0
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/activeadmin-dropzone.gemspec +10 -7
- data/app/assets/stylesheets/activeadmin-dropzone.css.scss +10 -0
- data/app/controllers/dropzone_controller.rb +2 -1
- data/app/helpers/active_admin/views_helper.rb +12 -5
- data/app/views/application/_dropzone.html.erb +18 -16
- data/config/locales/en.yml +7 -0
- data/config/locales/ru.yml +7 -0
- data/config/routes.rb +6 -3
- data/lib/.DS_Store +0 -0
- data/lib/activeadmin-dropzone/active_record/dropzone.rb +54 -18
- metadata +10 -7
- data/README.rdoc +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79023d46a4a0bd3ac710587deeeb8aeeeb1a35f7
|
4
|
+
data.tar.gz: e6751d2a887c04f89711d514f7ef5fbd9af57d4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08cf6b8bcbd6ca7cb758909e0fbe3abc2d2f0d11d32fbaf8696cb55cf9784aa992640fb046a02a2bf6a5ffff45dc3b98fb8e1e8df208a31fbba9b5d8d10f2f1b
|
7
|
+
data.tar.gz: 244efdb55a81efa871450bc96930d98eef45e8ce326cf349c1828cd214339a3b1dd5c88ad7c1c28b7650dba61115487a152b14a215b3444c055f7dcc8190404a
|
data/.DS_Store
CHANGED
Binary file
|
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# activeadmin-dropzone
|
2
|
+
|
3
|
+
Easy to use integration of drag&drop files upload via [dropzone.js](http://www.dropzonejs.com) for [ActiveAdmin](http://www.activeadmin.info).
|
4
|
+
|
5
|
+
## Requirements
|
6
|
+
|
7
|
+
* [ActiveAdmin](http://www.activeadmin.info);
|
8
|
+
* [Paperclip](https://github.com/thoughtbot/paperclip) gem;
|
9
|
+
* ActiveRecord;
|
10
|
+
* Separate models for file's container and files.
|
11
|
+
|
12
|
+
## Install
|
13
|
+
|
14
|
+
Add line to your Gemfile:
|
15
|
+
|
16
|
+
gem 'activeadmin-dropzone', '~> 0.2.1'
|
17
|
+
|
18
|
+
Add `dropzone` to your file container's class:
|
19
|
+
|
20
|
+
class Post
|
21
|
+
dropzone :images
|
22
|
+
end
|
23
|
+
|
24
|
+
Add `dropzone_item` to your file's class:
|
25
|
+
|
26
|
+
class Image
|
27
|
+
dropzone_item
|
28
|
+
end
|
29
|
+
|
30
|
+
Add `input` to your ActiveAdmin form:
|
31
|
+
|
32
|
+
f.input :images, as: :dropzone
|
33
|
+
|
34
|
+
## Configuration
|
35
|
+
|
36
|
+
You can customize columns used for upload by passing `Hash` to the `dropzone_item` method. Here are the default values:
|
37
|
+
|
38
|
+
dropzone_item title: :title,
|
39
|
+
position: :position,
|
40
|
+
data: :data,
|
41
|
+
file_size: :file_size,
|
42
|
+
url: :url
|
43
|
+
|
44
|
+
## Contributing to activeadmin-dropzone
|
45
|
+
|
46
|
+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
47
|
+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
48
|
+
* Fork the project.
|
49
|
+
* Start a feature/bugfix branch.
|
50
|
+
* Commit and push until you are happy with your contribution.
|
51
|
+
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
52
|
+
|
53
|
+
## Copyright
|
54
|
+
|
55
|
+
Copyright (c) 2014 Maxim Gladkov. See LICENSE.txt for
|
56
|
+
further details.
|
data/Rakefile
CHANGED
@@ -15,10 +15,10 @@ require 'jeweler'
|
|
15
15
|
Jeweler::Tasks.new do |gem|
|
16
16
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
17
|
gem.name = "activeadmin-dropzone"
|
18
|
-
gem.homepage = "http://
|
18
|
+
gem.homepage = "http://maximgladkov.com/blog/activeadmin-dropzone-gem"
|
19
19
|
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{
|
21
|
-
gem.email = "
|
20
|
+
gem.summary = %Q{Easy to use integration of drag&drop files upload via dropzone.js for ActiveAdmin}
|
21
|
+
gem.email = "contact@maximgladkov.com"
|
22
22
|
gem.authors = ["Maxim Gladkov"]
|
23
23
|
# dependencies defined in Gemfile
|
24
24
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.1
|
@@ -5,15 +5,15 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "activeadmin-dropzone"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Maxim Gladkov"]
|
12
|
-
s.date = "2014-
|
13
|
-
s.email = "
|
12
|
+
s.date = "2014-02-25"
|
13
|
+
s.email = "contact@maximgladkov.com"
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
16
|
-
"README.
|
16
|
+
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
19
|
".DS_Store",
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
"Gemfile",
|
22
22
|
"Gemfile.lock",
|
23
23
|
"LICENSE.txt",
|
24
|
-
"README.
|
24
|
+
"README.md",
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"activeadmin-dropzone.gemspec",
|
@@ -36,18 +36,21 @@ Gem::Specification.new do |s|
|
|
36
36
|
"app/helpers/active_admin/views_helper.rb",
|
37
37
|
"app/inputs/dropzone_input.rb",
|
38
38
|
"app/views/application/_dropzone.html.erb",
|
39
|
+
"config/locales/en.yml",
|
40
|
+
"config/locales/ru.yml",
|
39
41
|
"config/routes.rb",
|
42
|
+
"lib/.DS_Store",
|
40
43
|
"lib/activeadmin-dropzone.rb",
|
41
44
|
"lib/activeadmin-dropzone/active_record/dropzone.rb",
|
42
45
|
"lib/activeadmin-dropzone/engine.rb",
|
43
46
|
"test/helper.rb",
|
44
47
|
"test/test_activeadmin-dropzone.rb"
|
45
48
|
]
|
46
|
-
s.homepage = "http://
|
49
|
+
s.homepage = "http://maximgladkov.com/blog/activeadmin-dropzone-gem"
|
47
50
|
s.licenses = ["MIT"]
|
48
51
|
s.require_paths = ["lib"]
|
49
52
|
s.rubygems_version = "2.0.3"
|
50
|
-
s.summary = "
|
53
|
+
s.summary = "Easy to use integration of drag&drop files upload via dropzone.js for ActiveAdmin"
|
51
54
|
|
52
55
|
if s.respond_to? :specification_version then
|
53
56
|
s.specification_version = 4
|
@@ -1,6 +1,9 @@
|
|
1
1
|
//= require dropzone
|
2
2
|
|
3
3
|
.dropzone {
|
4
|
+
margin: 10px 20px;
|
5
|
+
border: 1px solid #ccc;
|
6
|
+
|
4
7
|
a {
|
5
8
|
text-decoration: none;
|
6
9
|
font-size: 13px;
|
@@ -26,6 +29,13 @@
|
|
26
29
|
}
|
27
30
|
}
|
28
31
|
|
32
|
+
.dropzone-hint {
|
33
|
+
margin: 0 0 0 20px;
|
34
|
+
font-size: 0.95em;
|
35
|
+
font-style: italic;
|
36
|
+
color: #666;
|
37
|
+
}
|
38
|
+
|
29
39
|
.sortable-placeholder {
|
30
40
|
position: relative;
|
31
41
|
display: inline-block;
|
@@ -3,7 +3,8 @@ class DropzoneController < ApplicationController
|
|
3
3
|
def upload
|
4
4
|
dropzone_class = params[:dropzone_class].constantize
|
5
5
|
dropzone_object = dropzone_class.new
|
6
|
-
dropzone_object.send "#{ dropzone_class.dropzone_field }=", params[:
|
6
|
+
dropzone_object.send "#{ dropzone_class.dropzone_field(:type) }=", params[:dropzonable_class] if dropzone_class.dropzone_field?(:type)
|
7
|
+
dropzone_object.send "#{ dropzone_class.dropzone_field(:data) }=", params[:file]
|
7
8
|
|
8
9
|
if dropzone_object.save
|
9
10
|
render json: dropzone_object.to_json
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ActiveAdmin::ViewsHelper
|
2
2
|
|
3
3
|
def render_mock_dropzone_files(dropzone_objects)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
dropzone_objects.map do |dropzone_object|
|
5
|
+
{
|
6
|
+
id: dropzone_object.id,
|
7
|
+
name: dropzone_object.send(dropzone_object.class.dropzone_field(:title)),
|
8
|
+
size: dropzone_object.send(dropzone_object.class.dropzone_field(:file_size)),
|
9
|
+
url: dropzone_object.send(dropzone_object.class.dropzone_field(:url))
|
10
|
+
}
|
11
|
+
end.map do |hash|
|
12
|
+
hash.map{ |(k, v)| "#{ k }: '#{ v }'" }.join(',')
|
13
|
+
end.map do |string|
|
14
|
+
"{#{ string }}"
|
15
|
+
end.join(', ').html_safe
|
9
16
|
end
|
10
17
|
|
11
18
|
end
|
@@ -1,38 +1,39 @@
|
|
1
|
-
<div id="dropzone_<%= method %>_<%= cycle(*(1..999).to_a, name: method) %>" class="dropzone"
|
2
|
-
<span class="notice"
|
3
|
-
|
1
|
+
<div id="dropzone_<%= method %>_<%= cycle(*(1..999).to_a, name: method) %>" class="dropzone">
|
2
|
+
<span class="notice"><%=t 'dropzone.drag_or_click' %></span>
|
3
|
+
<%= hidden_field_tag "#{ object.class.model_name.singular }[#{ method }_attributes][-1]", "" %>
|
4
4
|
<% object.send(method).each_with_index do |dropzone_object, index| %>
|
5
|
-
|
5
|
+
<%= hidden_field_tag "#{ object.class.model_name.singular }[#{ method }_attributes][#{ dropzone_object.id }][#{ object.class.send("dropzone_#{ method }_field", :title) }]", dropzone_object.send(object.class.send("dropzone_#{ method }_field", :title)) %>
|
6
6
|
<% end %>
|
7
7
|
</div>
|
8
8
|
|
9
9
|
<% unless options[:hint].blank? %>
|
10
|
-
<p class="inline-hints
|
10
|
+
<p class="inline-hints dropzone-hint"><%= options[:hint] %></p>
|
11
11
|
<% end %>
|
12
12
|
|
13
13
|
<script>
|
14
14
|
(function() {
|
15
|
-
var mockFiles = [<%= render_mock_dropzone_files(object.send(method)) %>];
|
16
15
|
Dropzone.autoDiscover = false;
|
16
|
+
|
17
|
+
var mockFiles = [<%= render_mock_dropzone_files(object.send(method)) %>];
|
17
18
|
var dropzone_id = "#dropzone_<%= method %>_<%= current_cycle(method) %>";
|
18
19
|
var dropzone = new Dropzone(dropzone_id, {
|
19
|
-
url: '<%= upload_dropzone_path(dropzone_class:
|
20
|
+
url: '<%= upload_dropzone_path(dropzonable_class: object.class, dropzone_class: object.class.send("dropzone_#{ method }_class")) %>',
|
20
21
|
addRemoveLinks: true,
|
21
|
-
dictCancelUpload: '
|
22
|
-
dictRemoveFile: '
|
22
|
+
dictCancelUpload: '<%=t "dropzone.cancel" %>',
|
23
|
+
dictRemoveFile: '<%=t "dropzone.remove" %>',
|
23
24
|
maxFiles: <%= defined?(max_files) ? '1' : 'null' %>,
|
24
25
|
sending: function(file, xhr, formData) {
|
25
26
|
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').prop('content'));
|
26
27
|
},
|
27
28
|
success: function(file, data) {
|
28
|
-
$(dropzone_id).append('<input type="hidden" name="<%= object.class.
|
29
|
+
$(dropzone_id).append('<input type="hidden" name="<%= object.class.model_name.singular %>[<%= method %>_attributes][' + data.id + '][<%= object.class.send("dropzone_#{ method }_field", :title) %>]" value="" />');
|
29
30
|
$(file.previewElement).attr('data-id', data.id);
|
30
31
|
$(file.previewElement).attr('data-url', data.url);
|
31
32
|
return file.previewElement.classList.add("dz-success");
|
32
33
|
},
|
33
34
|
removedfile: function(file) {
|
34
|
-
$(dropzone_id + ' input[name="<%= object.class.
|
35
|
-
$(dropzone_id + ' input[name="<%= object.class.
|
35
|
+
$(dropzone_id + ' input[name="<%= object.class.model_name.singular %>[images_attributes][' + file.id + '][<%= object.class.send("dropzone_#{ method }_field", :title) %>]"]').remove();
|
36
|
+
$(dropzone_id + ' input[name="<%= object.class.model_name.singular %>[images_attributes][' + file.id + '][<%= object.class.send("dropzone_#{ method }_field", :position) %>]"]').remove();
|
36
37
|
$(file.previewElement).remove();
|
37
38
|
$(dropzone_id).sortable('refresh');
|
38
39
|
}
|
@@ -48,8 +49,9 @@
|
|
48
49
|
$(file.previewElement).attr('data-id', file.id);
|
49
50
|
|
50
51
|
$(file.previewElement).find('.dz-filename, img').on('click', function() {
|
51
|
-
var
|
52
|
-
var
|
52
|
+
var id = $(this).parents('.dz-preview:first').attr('data-id');
|
53
|
+
var input = $(dropzone_id + ' input[name="<%= object.class.model_name.singular %>[<%= method %>_attributes][' + id + '][<%= object.class.send("dropzone_#{ method }_field", :title) %>]"]');
|
54
|
+
var title = prompt("<%=t 'dropzone.title' %>: ", $(file.previewElement).find('.dz-filename span').text());
|
53
55
|
$(file.previewElement).find('.dz-filename span').text(title);
|
54
56
|
input.val(title);
|
55
57
|
});
|
@@ -59,7 +61,7 @@
|
|
59
61
|
var position = 0;
|
60
62
|
$(dropzone_id + ' .dz-preview').each(function() {
|
61
63
|
var id = $(this).attr('data-id');
|
62
|
-
$(dropzone_id).append('<input type="hidden" name="<%= object.class.
|
64
|
+
$(dropzone_id).append('<input type="hidden" name="<%= object.class.model_name.singular %>[<%= method %>_attributes][' + id + '][<%= object.class.send("dropzone_#{ method }_field", :position) %>]" value="' + (position++) + '" />');
|
63
65
|
});
|
64
66
|
};
|
65
67
|
|
@@ -76,7 +78,7 @@
|
|
76
78
|
|
77
79
|
$('form').submit(function(e) {
|
78
80
|
if (dropzone.getQueuedFiles().length > 0 || dropzone.getUploadingFiles().length > 0) {
|
79
|
-
if (confirm("
|
81
|
+
if (confirm("<%=t 'dropzone.are_you_sure' %>") == true) {
|
80
82
|
generate_dropzone_position_elements();
|
81
83
|
} else {
|
82
84
|
e.preventDefault();
|
data/config/routes.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# temporary fix double route error
|
2
|
+
unless defined?(Rails.application.routes.url_helpers.upload_dropzone_path)
|
3
|
+
Rails.application.routes.draw do
|
4
|
+
|
5
|
+
post '/dropzone/upload' => 'dropzone#upload', as: :upload_dropzone
|
4
6
|
|
7
|
+
end
|
5
8
|
end
|
data/lib/.DS_Store
ADDED
Binary file
|
@@ -2,42 +2,78 @@ module Activeadmin
|
|
2
2
|
module Dropzone
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
-
included do
|
6
|
-
end
|
7
|
-
|
8
5
|
module ClassMethods
|
9
6
|
def dropzone(association_name)
|
10
7
|
class_eval %Q(
|
8
|
+
def self.dropzone_#{ association_name }_class
|
9
|
+
self.reflect_on_association(:#{ association_name }).class_name.constantize
|
10
|
+
end
|
11
|
+
|
11
12
|
def #{ association_name }_attributes=(attributes)
|
12
|
-
|
13
|
+
original_collection = self.#{ association_name }.to_a
|
14
|
+
|
15
|
+
ActiveRecord::Base.transaction do
|
16
|
+
self.#{ association_name } = self.class.dropzone_#{ association_name }_class.find(attributes.select{ |id, hash| !id.blank? and id != '-1' }.map{ |id, hash| id.to_i })
|
17
|
+
|
18
|
+
self.#{ association_name }.each do |dropzone_object|
|
19
|
+
attribute = attributes[dropzone_object.id.to_s]
|
20
|
+
changes = {}
|
21
|
+
|
22
|
+
title_field = self.class.dropzone_#{ association_name }_class.dropzone_field(:title)
|
23
|
+
if dropzone_object.respond_to?(title_field) and dropzone_object.send(title_field) != attribute['title']
|
24
|
+
changes[title_field] = attribute['title']
|
25
|
+
end
|
26
|
+
|
27
|
+
position_field = self.class.dropzone_#{ association_name }_class.dropzone_field(:position)
|
28
|
+
if dropzone_object.respond_to?(position_field) and dropzone_object.send(position_field) != attribute['position'].to_i
|
29
|
+
changes[position_field] = attribute['position']
|
30
|
+
end
|
13
31
|
|
14
|
-
|
32
|
+
unless changes.empty?
|
33
|
+
dropzone_object.update_attributes changes
|
34
|
+
end
|
35
|
+
end
|
15
36
|
|
16
|
-
|
37
|
+
self.update_attribute :#{ association_name }_count, self.#{ association_name }.size if self.respond_to?(:#{ association_name }_count)
|
17
38
|
|
18
|
-
|
19
|
-
|
20
|
-
dropzone_object.update_attributes title: attributes[dropzone_object.id.to_s]['title'], position: attributes[dropzone_object.id.to_s]['position']
|
39
|
+
(original_collection - self.#{ association_name }).each do |object|
|
40
|
+
object.destroy
|
21
41
|
end
|
22
42
|
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.dropzone_#{ association_name }_field(key)
|
46
|
+
dropzone_#{ association_name }_class.dropzone_field(key)
|
47
|
+
end
|
23
48
|
|
24
|
-
|
49
|
+
def self.dropzone_#{ association_name }_field?(key)
|
50
|
+
dropzone_#{ association_name }_class.dropzone_field?(key)
|
25
51
|
end
|
26
52
|
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def dropzone_item(options = {})
|
56
|
+
options = {
|
57
|
+
title: :title,
|
58
|
+
position: :position,
|
59
|
+
data: :data,
|
60
|
+
file_size: :data_file_size,
|
61
|
+
url: :data_url
|
62
|
+
}.deep_merge(options)
|
27
63
|
|
28
|
-
class_eval
|
29
|
-
def self.
|
30
|
-
|
64
|
+
class_eval %Q(
|
65
|
+
def self.dropzone_field(key)
|
66
|
+
#{ options }[key.to_sym]
|
31
67
|
end
|
32
68
|
|
33
|
-
def self.
|
34
|
-
|
69
|
+
def self.dropzone_field?(key)
|
70
|
+
#{ options }.keys.include? key.to_sym
|
35
71
|
end
|
36
72
|
|
37
|
-
def
|
38
|
-
:
|
73
|
+
def #{ options[:data] }_url
|
74
|
+
#{ options[:data] }.url
|
39
75
|
end
|
40
|
-
|
76
|
+
)
|
41
77
|
end
|
42
78
|
end
|
43
79
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeadmin-dropzone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maxim Gladkov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jeweler
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description:
|
42
|
-
email:
|
42
|
+
email: contact@maximgladkov.com
|
43
43
|
executables: []
|
44
44
|
extensions: []
|
45
45
|
extra_rdoc_files:
|
46
46
|
- LICENSE.txt
|
47
|
-
- README.
|
47
|
+
- README.md
|
48
48
|
files:
|
49
49
|
- .DS_Store
|
50
50
|
- .document
|
51
51
|
- Gemfile
|
52
52
|
- Gemfile.lock
|
53
53
|
- LICENSE.txt
|
54
|
-
- README.
|
54
|
+
- README.md
|
55
55
|
- Rakefile
|
56
56
|
- VERSION
|
57
57
|
- activeadmin-dropzone.gemspec
|
@@ -66,13 +66,16 @@ files:
|
|
66
66
|
- app/helpers/active_admin/views_helper.rb
|
67
67
|
- app/inputs/dropzone_input.rb
|
68
68
|
- app/views/application/_dropzone.html.erb
|
69
|
+
- config/locales/en.yml
|
70
|
+
- config/locales/ru.yml
|
69
71
|
- config/routes.rb
|
72
|
+
- lib/.DS_Store
|
70
73
|
- lib/activeadmin-dropzone.rb
|
71
74
|
- lib/activeadmin-dropzone/active_record/dropzone.rb
|
72
75
|
- lib/activeadmin-dropzone/engine.rb
|
73
76
|
- test/helper.rb
|
74
77
|
- test/test_activeadmin-dropzone.rb
|
75
|
-
homepage: http://
|
78
|
+
homepage: http://maximgladkov.com/blog/activeadmin-dropzone-gem
|
76
79
|
licenses:
|
77
80
|
- MIT
|
78
81
|
metadata: {}
|
@@ -95,5 +98,5 @@ rubyforge_project:
|
|
95
98
|
rubygems_version: 2.0.3
|
96
99
|
signing_key:
|
97
100
|
specification_version: 4
|
98
|
-
summary:
|
101
|
+
summary: Easy to use integration of drag&drop files upload via dropzone.js for ActiveAdmin
|
99
102
|
test_files: []
|
data/README.rdoc
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
= activeadmin-dropzone
|
2
|
-
|
3
|
-
Description goes here.
|
4
|
-
|
5
|
-
== Contributing to activeadmin-dropzone
|
6
|
-
|
7
|
-
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
8
|
-
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
9
|
-
* Fork the project.
|
10
|
-
* Start a feature/bugfix branch.
|
11
|
-
* Commit and push until you are happy with your contribution.
|
12
|
-
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
13
|
-
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
14
|
-
|
15
|
-
== Copyright
|
16
|
-
|
17
|
-
Copyright (c) 2013 Maxim Gladkov. See LICENSE.txt for
|
18
|
-
further details.
|
19
|
-
|