glebtv-rails-uploader 0.1.3 → 0.2.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 +7 -0
- data/README.md +17 -10
- data/{vendor → app}/assets/images/uploader/but_del_tag2.png +0 -0
- data/{vendor → app}/assets/images/uploader/ico_attach.png +0 -0
- data/{vendor → app}/assets/images/uploader/preloader.gif +0 -0
- data/{vendor → app}/assets/images/uploader/progressBarFillBg.png +0 -0
- data/app/assets/javascripts/uploader/application.js +2 -2
- data/app/assets/javascripts/uploader/canvas-to-blob.js +95 -0
- data/app/assets/javascripts/uploader/jquery.fileupload-angular.js +348 -0
- data/app/assets/javascripts/uploader/jquery.fileupload-process.js +158 -0
- data/app/assets/javascripts/uploader/jquery.fileupload-resize.js +212 -0
- data/{vendor → app}/assets/javascripts/uploader/jquery.fileupload-ui.js +265 -269
- data/app/assets/javascripts/uploader/jquery.fileupload-validate.js +116 -0
- data/{vendor → app}/assets/javascripts/uploader/jquery.fileupload.js +655 -258
- data/{vendor → app}/assets/javascripts/uploader/jquery.iframe-transport.js +29 -9
- data/app/assets/javascripts/uploader/jquery.ui.widget.js +530 -0
- data/app/assets/javascripts/uploader/load-image.js +381 -0
- data/{vendor → app}/assets/javascripts/uploader/locales/en.js +0 -0
- data/{vendor → app}/assets/javascripts/uploader/locales/ru.js +0 -0
- data/{vendor → app}/assets/javascripts/uploader/locales/uk.js +0 -0
- data/app/assets/javascripts/uploader/rails_admin.js +26 -24
- data/app/assets/javascripts/uploader/tmpl.js +86 -0
- data/{vendor → app}/assets/stylesheets/uploader/default.css +0 -0
- data/{vendor → app}/assets/stylesheets/uploader/jquery.fileupload-ui.css +0 -0
- data/app/controllers/uploader/attachments_controller.rb +13 -10
- data/app/views/rails_admin/main/_form_rails_uploader.haml +9 -9
- data/app/views/uploader/default/_container.html.erb +1 -2
- data/app/views/uploader/default/_download.html.erb +1 -1
- data/lib/uploader/asset.rb +2 -2
- data/lib/uploader/engine.rb +4 -4
- data/lib/uploader/fileuploads.rb +18 -18
- data/lib/uploader/helpers/field_tag.rb +16 -17
- data/lib/uploader/helpers/form_builder.rb +1 -1
- data/lib/uploader/helpers/form_tag_helper.rb +1 -1
- data/lib/uploader/hooks/formtastic.rb +1 -2
- data/lib/uploader/rails_admin/field.rb +27 -27
- data/lib/uploader/version.rb +1 -1
- metadata +115 -131
- data/vendor/assets/javascripts/uploader/jquery.fileupload-ip.js +0 -160
- data/vendor/assets/javascripts/uploader/jquery.ui.widget.js +0 -282
- data/vendor/assets/javascripts/uploader/load-image.min.js +0 -1
- data/vendor/assets/javascripts/uploader/tmpl.min.js +0 -1
File without changes
|
File without changes
|
@@ -2,17 +2,21 @@
|
|
2
2
|
module Uploader
|
3
3
|
class AttachmentsController < ActionController::Metal
|
4
4
|
include AbstractController::Callbacks
|
5
|
-
|
5
|
+
|
6
6
|
before_filter :find_klass
|
7
|
-
|
7
|
+
|
8
8
|
def create
|
9
9
|
@asset = @klass.new(params[:asset])
|
10
10
|
@asset.uploader_create(params, request)
|
11
11
|
render_resourse(@asset, 201)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def destroy
|
15
|
-
|
15
|
+
begin
|
16
|
+
@asset = @klass.find(params[:id])
|
17
|
+
rescue
|
18
|
+
@asset = @klass.where(guid: params[:guid])
|
19
|
+
end
|
16
20
|
@asset.uploader_destroy(params, request)
|
17
21
|
render_resourse(@asset, 200)
|
18
22
|
end
|
@@ -38,7 +42,7 @@ module Uploader
|
|
38
42
|
self.content_type = "application/json"
|
39
43
|
self.response_body = '{"ok": true}'
|
40
44
|
end
|
41
|
-
|
45
|
+
|
42
46
|
protected
|
43
47
|
|
44
48
|
|
@@ -53,20 +57,19 @@ module Uploader
|
|
53
57
|
@klass = params[:klass].blank? ? nil : params[:klass].safe_constantize
|
54
58
|
raise ActionController::RoutingError.new("Class not found #{params[:klass]}") if @klass.nil?
|
55
59
|
end
|
56
|
-
|
60
|
+
|
57
61
|
def render_resourse(record, status = 200)
|
58
62
|
if record.errors.empty?
|
59
63
|
if record.respond_to?(:to_jq_upload)
|
60
|
-
render_json(record.to_jq_upload.to_json
|
64
|
+
render_json({'files' => Array.wrap(record.to_jq_upload)}.to_json, status)
|
61
65
|
else
|
62
|
-
render_json(
|
66
|
+
render_json({'files' => Array.wrap(record)}.to_json, status)
|
63
67
|
end
|
64
|
-
|
65
68
|
else
|
66
69
|
render_json([record.errors].to_json, 422)
|
67
70
|
end
|
68
71
|
end
|
69
|
-
|
72
|
+
|
70
73
|
def render_json(body, status = 200)
|
71
74
|
self.status = status
|
72
75
|
self.content_type = "application/json"
|
@@ -1,10 +1,10 @@
|
|
1
|
-
= stylesheet_link_tag "uploader/application.css"
|
2
|
-
= form.send 'uploader_field', field.method_name, field.html_attributes
|
3
|
-
:javascript
|
4
|
-
(function(d, s, id) {
|
5
|
-
var js, fjs = d.getElementsByTagName(s)[0];
|
6
|
-
if (d.getElementById(id)) return;
|
7
|
-
js = d.createElement(s); js.id = id;
|
8
|
-
js.src = "/assets/uploader/rails_admin.js";
|
9
|
-
fjs.parentNode.appendChild(js);
|
1
|
+
= stylesheet_link_tag "uploader/application.css"
|
2
|
+
= form.send 'uploader_field', field.method_name, field.html_attributes
|
3
|
+
:javascript
|
4
|
+
(function(d, s, id) {
|
5
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
6
|
+
if (d.getElementById(id)) return;
|
7
|
+
js = d.createElement(s); js.id = id;
|
8
|
+
js.src = "/assets/uploader/rails_admin.js";
|
9
|
+
fjs.parentNode.appendChild(js);
|
10
10
|
}(document, 'script', 'uploader-jssdk'));
|
@@ -37,7 +37,6 @@
|
|
37
37
|
|
38
38
|
$('#<%= field.id %> input[type="file"]').attr('name', 'uploader_field').bind("init.uploader", function (e) {
|
39
39
|
if (!$.fn.fileupload) {
|
40
|
-
// not yet loaded
|
41
40
|
return false;
|
42
41
|
}
|
43
42
|
|
@@ -56,7 +55,7 @@
|
|
56
55
|
});
|
57
56
|
|
58
57
|
<% if field.exists? -%>
|
59
|
-
<% fv = field.values.map { |v| v.respond_to?(:to_jq_upload) ? v.to_jq_upload
|
58
|
+
<% fv = field.values.map { |v| v.respond_to?(:to_jq_upload) ? v.to_jq_upload : v } %>
|
60
59
|
$(this).data("fileupload")
|
61
60
|
._renderDownload(<%=raw fv.to_json(:root => false) %>)
|
62
61
|
.appendTo(container);
|
@@ -3,7 +3,7 @@
|
|
3
3
|
{% for (var i=0, file; file=o.files[i]; i++) { %}
|
4
4
|
<div class="attach_item template-download" data-id="{%=file.id%}">
|
5
5
|
<div class="delete">
|
6
|
-
|
6
|
+
<a href="/" class="del_btn delete" data-type="DELETE" data-url="/uploader/attachments/{%=file.id%}?guid={%= file.guid %}&klass=<%= field.klass %>"></a>
|
7
7
|
</div>
|
8
8
|
<div class="thumbnail preview">
|
9
9
|
<a href="{%=file.url%}"><img src="{%=file.thumb_url%}" title="{%=file.filename%}" rel="gallery"></a>
|
data/lib/uploader/asset.rb
CHANGED
@@ -5,7 +5,7 @@ module Uploader
|
|
5
5
|
#
|
6
6
|
# class Asset < ActiveRecord::Base
|
7
7
|
# include Uploader::Asset
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# def uploader_create(params, request = nil)
|
10
10
|
# self.user = request.env['warden'].user
|
11
11
|
# super
|
@@ -29,7 +29,7 @@ module Uploader
|
|
29
29
|
#
|
30
30
|
# class Asset < ActiveRecord::Base
|
31
31
|
# include Uploader::Asset
|
32
|
-
#
|
32
|
+
#
|
33
33
|
# def uploader_destroy(params, request = nil)
|
34
34
|
# ability = Ability.new(request.env['warden'].user)
|
35
35
|
# if ability.can? :delete, self
|
data/lib/uploader/engine.rb
CHANGED
@@ -4,18 +4,18 @@ require 'uploader'
|
|
4
4
|
module Uploader
|
5
5
|
class Engine < ::Rails::Engine
|
6
6
|
isolate_namespace Uploader
|
7
|
-
|
7
|
+
|
8
8
|
initializer "uploader.assets_precompile" do |app|
|
9
9
|
app.config.assets.precompile += Uploader.assets
|
10
10
|
end
|
11
|
-
|
12
|
-
initializer "uploader.helpers" do
|
11
|
+
|
12
|
+
initializer "uploader.helpers" do
|
13
13
|
ActiveSupport.on_load :action_view do
|
14
14
|
ActionView::Base.send(:include, Uploader::Helpers::FormTagHelper)
|
15
15
|
ActionView::Helpers::FormBuilder.send(:include, Uploader::Helpers::FormBuilder)
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
initializer "uploader.hooks" do
|
20
20
|
require "uploader/hooks/active_record" if Object.const_defined?("ActiveRecord")
|
21
21
|
require "uploader/hooks/formtastic" if Object.const_defined?("Formtastic")
|
data/lib/uploader/fileuploads.rb
CHANGED
@@ -3,11 +3,11 @@ module Uploader
|
|
3
3
|
def self.included(base)
|
4
4
|
base.send :extend, SingletonMethods
|
5
5
|
end
|
6
|
-
|
6
|
+
|
7
7
|
module SingletonMethods
|
8
8
|
# Join ActiveRecord object with uploaded file
|
9
9
|
# Usage:
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# class Article < ActiveRecord::Base
|
12
12
|
# has_one :picture, :as => :assetable, :dependent => :destroy
|
13
13
|
#
|
@@ -17,37 +17,38 @@ module Uploader
|
|
17
17
|
#
|
18
18
|
def fileuploads(*args)
|
19
19
|
options = args.extract_options!
|
20
|
-
|
20
|
+
|
21
21
|
class_attribute :fileuploads_options, :instance_writer => false
|
22
22
|
self.fileuploads_options = options
|
23
|
-
|
23
|
+
|
24
24
|
class_attribute :fileuploads_columns, :instance_writer => false
|
25
25
|
self.fileuploads_columns = args.map(&:to_sym)
|
26
|
-
|
26
|
+
|
27
27
|
unless self.is_a?(ClassMethods)
|
28
28
|
include InstanceMethods
|
29
29
|
extend ClassMethods
|
30
30
|
|
31
31
|
after_save :fileuploads_update, :if => :fileupload_changed?
|
32
|
-
|
32
|
+
|
33
33
|
fileuploads_columns.each { |asset| accepts_nested_attributes_for asset, :allow_destroy => true }
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
module ClassMethods
|
39
39
|
# Update reflection klass by guid
|
40
40
|
def fileupload_update(record_id, guid, method)
|
41
41
|
query = fileupload_klass(method).where(:guid => guid, :assetable_type => base_class.name.to_s)
|
42
|
+
record_id = Moped::BSON::ObjectId.from_string(record_id) unless record_id.class.name == "Moped::BSON::ObjectId"
|
42
43
|
query.update_all(:assetable_id => record_id, :guid => nil)
|
43
44
|
end
|
44
|
-
|
45
|
+
|
45
46
|
# Find asset by guid
|
46
47
|
def fileupload_find(method, guid)
|
47
48
|
klass = fileupload_klass(method)
|
48
|
-
klass.where(:guid => guid)
|
49
|
+
klass.where(:guid => guid)
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
# Find class by reflection
|
52
53
|
def fileupload_klass(method)
|
53
54
|
reflect_on_association(method.to_sym).klass
|
@@ -59,22 +60,22 @@ module Uploader
|
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
62
|
-
|
63
|
+
|
63
64
|
module InstanceMethods
|
64
65
|
# Generate unique key
|
65
66
|
def fileupload_guid
|
66
67
|
@fileupload_guid ||= Uploader.guid
|
67
68
|
end
|
68
|
-
|
69
|
+
|
69
70
|
def fileupload_guid=(value)
|
70
71
|
@fileupload_changed = true unless value.blank?
|
71
72
|
@fileupload_guid = value.blank? ? nil : value
|
72
73
|
end
|
73
|
-
|
74
|
+
|
74
75
|
def fileupload_changed?
|
75
76
|
@fileupload_changed === true
|
76
77
|
end
|
77
|
-
|
78
|
+
|
78
79
|
def fileupload_multiple?(method)
|
79
80
|
association = self.class.reflect_on_association(method.to_sym)
|
80
81
|
if association.respond_to?(:collection?)
|
@@ -83,8 +84,8 @@ module Uploader
|
|
83
84
|
association.macro == :has_many
|
84
85
|
end
|
85
86
|
end
|
86
|
-
|
87
87
|
# Find or build new asset object
|
88
|
+
|
88
89
|
def fileupload_asset(method)
|
89
90
|
if fileuploads_columns.include?(method.to_sym)
|
90
91
|
asset = new_record? ? self.class.fileupload_find(method, fileupload_guid) : send(method)
|
@@ -92,13 +93,12 @@ module Uploader
|
|
92
93
|
asset
|
93
94
|
end
|
94
95
|
end
|
95
|
-
|
96
|
+
|
96
97
|
def fileuploads_columns
|
97
98
|
self.class.fileuploads_columns
|
98
99
|
end
|
99
|
-
|
100
|
+
|
100
101
|
protected
|
101
|
-
|
102
102
|
def fileuploads_update
|
103
103
|
fileuploads_columns.each do |method|
|
104
104
|
self.class.fileupload_update(id, fileupload_guid, method)
|
@@ -3,8 +3,8 @@ module Uploader
|
|
3
3
|
class FieldTag
|
4
4
|
attr_reader :template, :object, :theme
|
5
5
|
|
6
|
-
delegate :uploader, :to => :template
|
7
|
-
|
6
|
+
delegate :uploader, :to => :template
|
7
|
+
|
8
8
|
# Wrapper for render uploader field
|
9
9
|
# Usage:
|
10
10
|
#
|
@@ -13,12 +13,11 @@ module Uploader
|
|
13
13
|
#
|
14
14
|
def initialize(object_name, method_name, template, options = {}) #:nodoc:
|
15
15
|
options = { :object_name => object_name, :method_name => method_name }.merge(options)
|
16
|
-
|
17
16
|
@template, @options = template, options.dup
|
18
|
-
|
17
|
+
|
19
18
|
@theme = (@options.delete(:theme) || "default")
|
20
19
|
@value = @options.delete(:value) if @options.key?(:value)
|
21
|
-
|
20
|
+
|
22
21
|
@object = @options.delete(:object) if @options.key?(:object)
|
23
22
|
@object ||= @template.instance_variable_get("@#{object_name}")
|
24
23
|
end
|
@@ -27,27 +26,27 @@ module Uploader
|
|
27
26
|
locals = { :field => self }.merge(locals)
|
28
27
|
@template.render :partial => "uploader/#{@theme}/container", :locals => locals
|
29
28
|
end
|
30
|
-
|
29
|
+
|
31
30
|
def id
|
32
31
|
@id ||= @template.dom_id(@object, [method_name, 'uploader', @object.fileupload_guid].join('_'))
|
33
32
|
end
|
34
|
-
|
33
|
+
|
35
34
|
def method_name
|
36
35
|
@options[:method_name]
|
37
36
|
end
|
38
|
-
|
37
|
+
|
39
38
|
def object_name
|
40
39
|
@options[:object_name]
|
41
40
|
end
|
42
|
-
|
41
|
+
|
43
42
|
def multiple?
|
44
43
|
@object.fileupload_multiple?(method_name)
|
45
44
|
end
|
46
|
-
|
45
|
+
|
47
46
|
def value
|
48
47
|
@value ||= @object.fileupload_asset(method_name)
|
49
48
|
end
|
50
|
-
|
49
|
+
|
51
50
|
def values
|
52
51
|
if !value.nil? && value.respond_to?(:first) && value.first.respond_to?(:sort)
|
53
52
|
Array.wrap(value).sort_by(&:sort)
|
@@ -55,24 +54,24 @@ module Uploader
|
|
55
54
|
Array.wrap(value)
|
56
55
|
end
|
57
56
|
end
|
58
|
-
|
57
|
+
|
59
58
|
def exists?
|
60
59
|
values.map(&:persisted?).any?
|
61
60
|
end
|
62
|
-
|
61
|
+
|
63
62
|
def klass
|
64
63
|
@klass ||= @object.class.fileupload_klass(method_name)
|
65
64
|
end
|
66
|
-
|
65
|
+
|
67
66
|
def attachments_path(options = {})
|
68
67
|
options = {
|
69
68
|
:guid => @object.fileupload_guid,
|
70
69
|
:assetable_type => @object.class.base_class.name.to_s,
|
71
70
|
:klass => klass.to_s
|
72
71
|
}.merge(options)
|
73
|
-
|
72
|
+
|
74
73
|
options[:assetable_id] = @object.id if @object.persisted?
|
75
|
-
|
74
|
+
|
76
75
|
uploader.attachments_path(options)
|
77
76
|
end
|
78
77
|
|
@@ -87,7 +86,7 @@ module Uploader
|
|
87
86
|
|
88
87
|
uploader.sort_attachments_path(options)
|
89
88
|
end
|
90
|
-
|
89
|
+
|
91
90
|
def input_html
|
92
91
|
@input_html ||= {
|
93
92
|
:"data-url" => attachments_path,
|
@@ -1,28 +1,28 @@
|
|
1
|
-
#require 'rails_admin/config/fields/base'
|
2
|
-
module RailsAdmin::Config::Fields::Types
|
3
|
-
class Uploader < RailsAdmin::Config::Fields::Types::Text
|
4
|
-
RailsAdmin::Config::Fields::Types::register(:rails_uploader, self)
|
5
|
-
|
6
|
-
register_instance_option(:config) do
|
7
|
-
{}
|
8
|
-
end
|
9
|
-
|
10
|
-
register_instance_option(:partial) do
|
11
|
-
:form_rails_uploader
|
12
|
-
end
|
13
|
-
|
14
|
-
def scope_type
|
15
|
-
# Use association name if existent
|
16
|
-
if bindings[:form].object_name.scan(/.*\[(.*)_attributes\]/).nil?
|
17
|
-
bindings[:form].object_name
|
18
|
-
else
|
19
|
-
bindings[:form].object_name.scan(/.*\[(.*)_attributes\]/).to_s
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def scope_id
|
24
|
-
bindings[:object].id
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
1
|
+
#require 'rails_admin/config/fields/base'
|
2
|
+
module RailsAdmin::Config::Fields::Types
|
3
|
+
class Uploader < RailsAdmin::Config::Fields::Types::Text
|
4
|
+
RailsAdmin::Config::Fields::Types::register(:rails_uploader, self)
|
5
|
+
|
6
|
+
register_instance_option(:config) do
|
7
|
+
{}
|
8
|
+
end
|
9
|
+
|
10
|
+
register_instance_option(:partial) do
|
11
|
+
:form_rails_uploader
|
12
|
+
end
|
13
|
+
|
14
|
+
def scope_type
|
15
|
+
# Use association name if existent
|
16
|
+
if bindings[:form].object_name.scan(/.*\[(.*)_attributes\]/).nil?
|
17
|
+
bindings[:form].object_name
|
18
|
+
else
|
19
|
+
bindings[:form].object_name.scan(/.*\[(.*)_attributes\]/).to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def scope_id
|
24
|
+
bindings[:object].id
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
28
|
end
|