rails-uploader 0.5.1 → 0.5.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: 3b1554bed2e981630207e781e2cb75015f00fedc24d3e539cde1f00ae4b6d1c9
4
- data.tar.gz: 6b01480fbfdd9cba2721a1a082a61c2ea4c15f3faea2c2f4b30d6ee8161dfd6c
3
+ metadata.gz: 288f1b049430d69fe720b17b8db0888f196987f632c366150cb25b9ebada7081
4
+ data.tar.gz: 9dba7c65c0dab4ccebde808be6e867470c8c879133cf65461373c8f235311521
5
5
  SHA512:
6
- metadata.gz: 3002afb2276e1261e757eb099145470af8e0363151bb4381c0154ec4c7940f49d19fc6b712bed1799a248743cb49468d960e229720b458bffc2845e93d4a44d9
7
- data.tar.gz: d6f0918940ec2c5b66634398542a1c63854628416c3f506d04282b83869c1046a9221becf34e6677b47d4e486de917afbcb3e230f29bb7abaab17b2333ca7935
6
+ metadata.gz: 25ae58b3c31a0c2d9144b0c201bc5357ed42abef4e5cf3dad8323c1a11cbff3ba519f467efc7bf79754a4d978f39264d350e897458956be373e9db454238236b
7
+ data.tar.gz: 67e803051409302b8c64b81ed8a020dbd75373d19ab7432292a9b38d0e808b8f35d1a2e210a1c20225d8f32d206bf7dcdb7a8d5a2b5629d12cf3ac0f3c96af29
data/README.md CHANGED
@@ -41,6 +41,23 @@ class Picture < Asset
41
41
  url(:thumb)
42
42
  end
43
43
  end
44
+
45
+ class PictureUploader < CarrierWave::Uploader::Base
46
+ include CarrierWave::MiniMagick
47
+
48
+ # Choose what kind of storage to use for this uploader:
49
+ storage :file
50
+
51
+ EXTENSION_WHITELIST = %w[jpg jpeg gif png].freeze
52
+
53
+ version :thumb do
54
+ process resize_to_fill: [100, 100]
55
+ end
56
+
57
+ def extension_whitelist
58
+ EXTENSION_WHITELIST
59
+ end
60
+ end
44
61
  ```
45
62
 
46
63
  For example user has one picture:
@@ -0,0 +1,87 @@
1
+ (function() {
2
+ var $, UploaderWidget;
3
+
4
+ $ = jQuery;
5
+
6
+ $.fn.uploaderWidget = function(options) {
7
+ if (options == null) {
8
+ options = {};
9
+ }
10
+ return this.each(function() {
11
+ var $this, data;
12
+ $this = $(this);
13
+ data = $this.data('uploaderWidget');
14
+ if (!data) {
15
+ $this.data('uploaderWidget', new UploaderWidget(this, options));
16
+ }
17
+ if (typeof options === 'string') {
18
+ return data[options]();
19
+ }
20
+ });
21
+ };
22
+
23
+ UploaderWidget = (function() {
24
+ function UploaderWidget(dom_id, options) {
25
+ var defaults;
26
+ this.dom_id = dom_id;
27
+ if (options == null) {
28
+ options = {};
29
+ }
30
+ defaults = {
31
+ dataType: 'json',
32
+ autoUpload: true,
33
+ paramName: 'asset[data]',
34
+ formData: function(form) {
35
+ return [];
36
+ },
37
+ namespace: 'uploader',
38
+ uploadTemplateId: 'template-upload-',
39
+ downloadTemplateId: 'template-download-'
40
+ };
41
+ this.options = $.extend(defaults, options);
42
+ this._setup();
43
+ }
44
+
45
+ UploaderWidget.prototype._setup = function() {
46
+ this.element = $(this.dom_id);
47
+ this.container = this.element.find('.uploader-files');
48
+ this.template = this.element.data('tpml');
49
+ this.input = this.element.find('input[type="file"]:eq(0)');
50
+ this.options['dropZone'] = this.element;
51
+ this.options['filesContainer'] = this.container;
52
+ this.options['uploadTemplateId'] += this.template;
53
+ this.options['downloadTemplateId'] += this.template;
54
+ this.options.singular = !this.input.prop('multiple');
55
+ return this._initFileupload();
56
+ };
57
+
58
+ UploaderWidget.prototype._initFileupload = function() {
59
+ this.input.fileupload(this.options);
60
+ this.uploader = this.input.data('blueimp-fileupload') || this.input.data('fileupload');
61
+ if (this.element.data('exists')) {
62
+ return this._load();
63
+ }
64
+ };
65
+
66
+ UploaderWidget.prototype._load = function() {
67
+ return $.ajax({
68
+ url: this.input.data('url'),
69
+ dataType: 'json',
70
+ method: 'GET',
71
+ success: (function(_this) {
72
+ return function(data) {
73
+ if (data['files'] != null) {
74
+ return _this.render(data['files']);
75
+ }
76
+ };
77
+ })(this)
78
+ });
79
+ };
80
+
81
+ UploaderWidget.prototype.render = function(files) {
82
+ return this.uploader._renderDownload(files).appendTo(this.container);
83
+ };
84
+
85
+ return UploaderWidget;
86
+ })();
87
+ }).call(this);
@@ -1,6 +1,7 @@
1
1
  <%= content_tag(:div, id: field.id, class: 'uploader-dnd-area', data: { tpml: field.klass.to_s, exists: field.exists? }) do -%>
2
2
  <%= hidden_field(field.object_name, :fileupload_guid, object: field.object) if field.object.new_record? %>
3
3
 
4
+ <p class='uploader-errors'></p>
4
5
  <div class="uploader-files"></div>
5
6
 
6
7
  <div class="uploader-dnd-hints">
@@ -76,12 +76,21 @@ module Uploader
76
76
  @input_html ||= { multiple: multiple?, class: 'uploader' }.merge(input_html_options)
77
77
  @input_html[:data] ||= {}
78
78
  @input_html[:data][:url] ||= attachments_path(singular: !multiple?)
79
+ @input_html[:accept] ||= extract_extension_whitelist
79
80
  @input_html
80
81
  end
81
82
 
82
83
  def input_html_options
83
84
  @options.reject { |key, _value| RESERVED_OPTIONS_KEYS.include?(key.to_s) }
84
85
  end
86
+
87
+ def extract_extension_whitelist
88
+ return unless klass.respond_to?(:uploaders)
89
+ return unless klass.uploaders[:data].try(:const_defined?, :EXTENSION_WHITELIST)
90
+
91
+ exts = klass.uploaders[:data]::EXTENSION_WHITELIST
92
+ ".#{exts.join(', .')}" if exts.any?
93
+ end
85
94
  end
86
95
  end
87
96
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uploader
4
- VERSION = '0.5.1'
4
+ VERSION = '0.5.5'
5
5
  end
@@ -1,7 +1,6 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class PictureUploader < CarrierWave::Uploader::Base
4
-
5
4
  # Include RMagick or MiniMagick support:
6
5
  # include CarrierWave::RMagick
7
6
  include CarrierWave::MiniMagick
@@ -51,5 +50,4 @@ class PictureUploader < CarrierWave::Uploader::Base
51
50
  # def filename
52
51
  # "something.jpg" if original_filename
53
52
  # end
54
-
55
53
  end
@@ -173,6 +173,7 @@
173
173
  deferred;
174
174
  var options = that.options;
175
175
  if (options.singular) { options.filesContainer.html(data.context || '') };
176
+ options.dropZone.find('.uploader-errors').text('');
176
177
  if (data.context) {
177
178
  data.context.each(function (index) {
178
179
  var file = files[index] ||
@@ -220,6 +221,9 @@
220
221
  $(this).data('fileupload'),
221
222
  template,
222
223
  deferred;
224
+ try { var errors = data._response.jqXHR.responseJSON.files[0].error || ''}
225
+ catch (e) { var errors = '' }
226
+ that.options.dropZone.find('.uploader-errors').text(errors);
223
227
  if (data.context) {
224
228
  data.context.each(function (index) {
225
229
  if (data.errorThrown !== 'abort') {
@@ -239,6 +243,7 @@
239
243
  that._trigger('failed', e, data);
240
244
  that._trigger('finished', e, data);
241
245
  deferred.resolve();
246
+ data.context.remove();
242
247
  }
243
248
  );
244
249
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-uploader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Galeta
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-11-24 00:00:00.000000000 Z
12
+ date: 2022-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: carrierwave
@@ -64,7 +64,7 @@ files:
64
64
  - README.md
65
65
  - Rakefile
66
66
  - app/assets/javascripts/uploader/application.js
67
- - app/assets/javascripts/uploader/jquery.uploader.js.coffee
67
+ - app/assets/javascripts/uploader/jquery.uploader.js
68
68
  - app/assets/stylesheets/uploader/application.css
69
69
  - app/controllers/uploader/attachments_controller.rb
70
70
  - app/views/uploader/default/_container.html.erb
@@ -1,59 +0,0 @@
1
- $ = jQuery
2
-
3
- $.fn.uploaderWidget = (options = {}) ->
4
- @each ->
5
- $this = $(this)
6
- data = $this.data('uploaderWidget')
7
- if (!data)
8
- $this.data('uploaderWidget', new UploaderWidget(this, options))
9
- if (typeof options is 'string')
10
- data[options]()
11
-
12
- class UploaderWidget
13
- constructor: (@dom_id, options = {}) ->
14
- defaults =
15
- dataType: 'json'
16
- autoUpload: true
17
- paramName: 'asset[data]'
18
- formData: (form) -> return []
19
- namespace: 'uploader'
20
- uploadTemplateId: 'template-upload-'
21
- downloadTemplateId: 'template-download-'
22
-
23
- @options = $.extend defaults, options
24
-
25
- this._setup()
26
-
27
- _setup: ->
28
- @element = $(@dom_id)
29
- @container = @element.find('.uploader-files')
30
- @template = @element.data('tpml')
31
- @input = @element.find('input[type="file"]:eq(0)')
32
-
33
- @options['dropZone'] = @element
34
- @options['filesContainer'] = @container
35
- @options['uploadTemplateId'] += @template
36
- @options['downloadTemplateId'] += @template
37
- @options.singular = !@input.prop('multiple')
38
-
39
- this._initFileupload()
40
-
41
- _initFileupload: ->
42
- @input.fileupload(@options)
43
-
44
- @uploader = (@input.data('blueimp-fileupload') || @input.data('fileupload'))
45
-
46
- this._load() if @element.data('exists')
47
-
48
- _load: ->
49
- $.ajax(
50
- url: @input.data('url')
51
- dataType: 'json'
52
- method: 'GET'
53
- success: (data) =>
54
- if data['files']?
55
- this.render(data['files'])
56
- )
57
-
58
- render: (files) ->
59
- @uploader._renderDownload(files).appendTo(@container)