hancock_cms_gallery 1.0.0 → 1.0.2

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/hancock/gallery/load_gallery.rb +9 -1
  3. data/app/controllers/concerns/hancock/gallery/load_gallery_images.rb +9 -1
  4. data/app/controllers/{concerns/rails_admin → rails_admin}/jcrop_controller.rb +34 -1
  5. data/app/models/concerns/hancock/gallery/active_record_paperclip.rb +59 -17
  6. data/app/models/concerns/hancock/gallery/auto_crop.rb +6 -2
  7. data/app/models/concerns/hancock/gallery/decorators/gallery.rb +7 -0
  8. data/app/models/concerns/hancock/gallery/decorators/image.rb +7 -0
  9. data/app/models/concerns/hancock/gallery/mongoid_paperclip.rb +62 -18
  10. data/app/models/concerns/hancock/gallery/watermarkable.rb +113 -34
  11. data/app/views/rails_admin/jcrop/edit.html.slim +9 -0
  12. data/app/views/rails_admin/main/_form_hancock_image.html.slim +56 -0
  13. data/config/initializers/hancock_gallery.rb +0 -20
  14. data/hancock_cms_gallery.gemspec +2 -2
  15. data/lib/generators/hancock/gallery/config/{install_generator.rb → config_generator.rb} +0 -0
  16. data/lib/generators/hancock/gallery/config/templates/hancock_gallery.erb +6 -0
  17. data/lib/generators/hancock/gallery/migrations/{migration_generator.rb → migrations_generator.rb} +1 -1
  18. data/lib/generators/hancock/gallery/models/gallery_generator.rb +1 -1
  19. data/lib/generators/hancock/gallery/models/templates/embedded_image.erb +5 -5
  20. data/lib/generators/hancock/gallery/models/templates/gallery.erb +12 -5
  21. data/lib/generators/hancock/gallery/models/templates/image.erb +12 -5
  22. data/lib/generators/hancock/gallery/models/templates/original_image.erb +5 -5
  23. data/lib/hancock/gallery/admin.rb +26 -5
  24. data/lib/hancock/gallery/admin/gallery.rb +5 -0
  25. data/lib/hancock/gallery/admin/image.rb +4 -1
  26. data/lib/hancock/gallery/admin/original_image.rb +7 -0
  27. data/lib/hancock/gallery/configuration.rb +12 -0
  28. data/lib/hancock/gallery/models/gallery.rb +15 -3
  29. data/lib/hancock/gallery/models/image.rb +14 -3
  30. data/lib/hancock/gallery/models/mongoid/gallery.rb +3 -0
  31. data/lib/hancock/gallery/models/mongoid/image.rb +3 -0
  32. data/lib/hancock/gallery/models/mongoid/original_image.rb +7 -0
  33. data/lib/hancock/gallery/models/original_image.rb +55 -5
  34. data/lib/hancock/gallery/paperclip_patch.rb +34 -0
  35. data/lib/hancock/gallery/rails_admin_ext/hancock_image.rb +41 -1
  36. data/lib/hancock/gallery/version.rb +1 -1
  37. data/lib/hancock_cms_gallery.rb +7 -10
  38. metadata +13 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c0f7db85fb9be1c12a8016104a2cc11813af011
4
- data.tar.gz: f5fe4b2a2c9bc6716dd99d5a08c2686c08989963
3
+ metadata.gz: 217745205e47c842bde5680420df5862059b7fc6
4
+ data.tar.gz: 28373af543958270bcca2cb752a6e589e0ae1850
5
5
  SHA512:
6
- metadata.gz: ed47a304c6ab2305013a033a2020683f9506fcf34c8886fd7ed6299e747d939fc760243d89c353797323b941a922926147ac6a97d943bc098dd48827388fe18f
7
- data.tar.gz: dac044323b0fa221019099313f8da29829d077e2427c7f9c131cba39d01ef2fa0edcf5543e47084d49fc476e2305fa0d51466ed47122aaced65f140c4caba2ba
6
+ metadata.gz: 1447c26606da3b523312a9364d585d36a8302e92dff37ba5a23cf86aaccb30cc2284a67f6e26f7a02c72cba4248c3bebba4ae440662b87799901bdcf63e98b22
7
+ data.tar.gz: a6fbf407dcda493c007fc4a3c944d4bb73bc80ebd0201722a4c2d9748b1b90383a30fd5392e99b967ee726dbf609c4e130febe4c2bea697b0bebf0c7b0086960
@@ -61,7 +61,11 @@ module Hancock::Gallery::LoadGallery
61
61
 
62
62
  def hancock_gallery_gallery_load_images
63
63
  if @gallery
64
- hancock_gallery_gallery_images_scope.page(params[:page]).per(hancock_gallery_render_gallery_images_per_page)
64
+ if hancock_gallery_render_gallery_images_load_all_the_rest and params[:page].to_i > 1
65
+ hancock_gallery_gallery_images_scope.page.skip(hancock_gallery_render_gallery_images_per_page).all
66
+ else
67
+ hancock_gallery_gallery_images_scope.page(params[:page]).per(hancock_gallery_render_gallery_images_per_page)
68
+ end
65
69
  else
66
70
  []
67
71
  end
@@ -71,4 +75,8 @@ module Hancock::Gallery::LoadGallery
71
75
  4
72
76
  end
73
77
 
78
+ def hancock_gallery_render_gallery_images_load_all_the_rest
79
+ false
80
+ end
81
+
74
82
  end
@@ -47,12 +47,20 @@ module Hancock::Gallery::LoadGalleryImages
47
47
  end
48
48
 
49
49
  def hancock_gallery_load_gallery_images
50
- hancock_gallery_gallery_image_scope.page(params[:page]).per(hancock_gallery_gallery_images_per_page)
50
+ if hancock_gallery_gallery_images_load_all_the_rest and params[:page].to_i > 1
51
+ hancock_gallery_gallery_image_scope.page.skip(hancock_gallery_gallery_images_per_page).all
52
+ else
53
+ hancock_gallery_gallery_image_scope.page(params[:page]).per(hancock_gallery_gallery_images_per_page)
54
+ end
51
55
  end
52
56
 
53
57
  def hancock_gallery_gallery_images_per_page
54
58
  4
55
59
  end
56
60
 
61
+ def hancock_gallery_gallery_images_load_all_the_rest
62
+ false
63
+ end
64
+
57
65
 
58
66
  end
@@ -3,7 +3,7 @@ require 'mini_magick'
3
3
  module RailsAdmin
4
4
 
5
5
  class JcropController < RailsAdmin::ApplicationController
6
- skip_before_action :get_model
6
+ skip_before_action :get_model rescue nil # prevent undefined method error
7
7
  before_action :get_model, :get_object, :get_field, :get_fit_image
8
8
 
9
9
  helper_method :abstract_model, :geometry
@@ -48,6 +48,21 @@ module RailsAdmin
48
48
  @image_tag_options[:style] << "border: 1px solid #AAA !important;"
49
49
  end
50
50
 
51
+ # original file in object`s original_image as file
52
+ elsif @object.try("original_#{@field}_data") and !@object.send("original_#{@field}_data").image.blank?
53
+ @image_tag_options[:'data-geometry'] = geometry(@object.send("original_#{@field}_data").image.path).join(",")
54
+
55
+ if @fit_image_geometry
56
+ fit_image_geometry = fit_image_geometry(@object.send("original_#{@field}_data").image.path)
57
+
58
+ @form_options[:'style'] = "margin-left: #{375 - (fit_image_geometry[0]/2) - 15}px;"
59
+
60
+ @image_tag_options[:style] = ""
61
+ @image_tag_options[:style] << "width: #{fit_image_geometry[0]}px !important;"
62
+ @image_tag_options[:style] << "height: #{fit_image_geometry[1]}px !important;"
63
+ @image_tag_options[:style] << "border: 1px solid #AAA !important;"
64
+ end
65
+
51
66
  elsif @object.respond_to?("original_#{@field}")
52
67
  _data = @object.send("original_#{@field}")
53
68
  if _data
@@ -64,9 +79,24 @@ module RailsAdmin
64
79
  end
65
80
 
66
81
  def update
82
+ @object.try("process_watermark_#{params[:crop_field]}=", params["process_watermark_#{params[:crop_field]}".to_sym])
83
+
67
84
  if File.exists?(@object.send(params[:crop_field]).path)
68
85
  @object.rails_admin_crop! params.merge(crop_process_before: '+repage', crop_process_after: '+repage')
69
86
 
87
+ # original file in object`s original_image as file
88
+ elsif @object.try("original_#{params[:crop_field]}_data") and !@object.send("original_#{params[:crop_field]}_data").image.blank?
89
+ _dir = File.dirname(@object.send(params[:crop_field]).path)
90
+ FileUtils.mkdir_p(_dir) unless File.exists?(_dir)
91
+ File.unlink(@object.send(params[:crop_field]).path) if File.symlink?(@object.send(params[:crop_field]).path)
92
+ File.symlink(@object.send("original_#{params[:crop_field]}_data").image.path, @object.send(params[:crop_field]).path)
93
+ @object.class.skip_callback(:save, :after, "save_original_#{params[:crop_field]}".to_sym)
94
+ @object.save
95
+ @object.class.set_callback(:save, :after, "save_original_#{params[:crop_field]}".to_sym)
96
+ @object.send("#{params[:crop_field]}_autocropped=", true)
97
+ @object.rails_admin_crop! params.merge(crop_process_before: '+repage', crop_process_after: '+repage')
98
+ File.unlink(@object.send(params[:crop_field]).path) if File.exists?(@object.send(params[:crop_field]).path)
99
+
70
100
  elsif @object.try("original_#{params[:crop_field]}")
71
101
  _old_filename = @object.send("#{params[:crop_field]}_file_name")
72
102
  _data = @object.send("original_#{params[:crop_field]}")
@@ -75,6 +105,8 @@ module RailsAdmin
75
105
  _temp = Tempfile.new(_old_filename)
76
106
  _temp.binmode
77
107
  _temp.write _data
108
+ _dir = File.dirname(@object.send(params[:crop_field]).path)
109
+ FileUtils.mkdir_p(_dir) unless File.exists?(_dir)
78
110
  File.unlink(@object.send(params[:crop_field]).path) if File.symlink?(@object.send(params[:crop_field]).path)
79
111
  File.symlink(_temp.path, @object.send(params[:crop_field]).path)
80
112
  # @object.send("#{params[:crop_field]}=", _temp)
@@ -82,6 +114,7 @@ module RailsAdmin
82
114
  @object.class.skip_callback(:save, :after, "original_#{params[:crop_field]}_to_db".to_sym)
83
115
  @object.save
84
116
  @object.class.set_callback(:save, :after, "original_#{params[:crop_field]}_to_db".to_sym)
117
+ @object.send("#{params[:crop_field]}_autocropped=", true)
85
118
  @object.rails_admin_crop! params.merge(crop_process_before: '+repage', crop_process_after: '+repage')
86
119
  _temp.unlink
87
120
  end
@@ -19,14 +19,25 @@ if Hancock.active_record?
19
19
  end
20
20
 
21
21
  if is_image
22
- if defined?(::PaperclipOptimizer)
23
- opts[:processors] ||= []
24
- opts[:processors] << :paperclip_optimizer
25
- opts[:processors].flatten!
26
- opts[:processors].uniq!
22
+ cattr_accessor "#{name}_default_processors".to_sym
23
+ instance_eval <<-RUBY
24
+ self.#{name}_default_processors = []
25
+ if defined?(::PaperclipOptimizer)
26
+ self.#{name}_default_processors << :paperclip_optimizer
27
+ self.#{name}_default_processors.flatten!
28
+ self.#{name}_default_processors.uniq!
29
+ end
30
+ RUBY
31
+ unless opts[:processors].is_a?(Proc)
32
+ if defined?(::PaperclipOptimizer)
33
+ opts[:processors] ||= []
34
+ opts[:processors] << :paperclip_optimizer
35
+ opts[:processors].flatten!
36
+ opts[:processors].uniq!
37
+ end
27
38
  end
28
39
 
29
- opts[:convert_options] = {all: "-quality 75 -strip"} if opts[:convert_options].blank?
40
+ opts[:convert_options] = Hancock::Gallery.config.default_convert_options if opts[:convert_options].blank?
30
41
 
31
42
  if opts[:styles].blank?
32
43
  styles_method_name = "#{name}_styles"
@@ -40,56 +51,87 @@ if Hancock.active_record?
40
51
  # validates_attachment name, content_type: content_type unless content_type.blank?
41
52
  validates_attachment_content_type name, content_type: /\Aimage\/.*\Z/ if is_image
42
53
 
43
- class_eval <<-EVAL
54
+ class_eval <<-RUBY
44
55
  def #{name}_file_name=(val)
45
56
  return self[:#{name}_file_name] = "" if val == ""
46
57
  return self[:#{name}_file_name] = nil if val == nil
47
58
  val = val.to_s
48
59
  extension = File.extname(val)[1..-1]
60
+ if extension.blank?
61
+ mime_type = MIME::Types[self.#{name}.content_type].first
62
+ extension = mime_type.extensions.first if mime_type
63
+ val = [val, extension].join(".") unless extension.blank?
64
+ end
49
65
  file_name = val[0..val.size-extension.size-1]
50
66
  self[:#{name}_file_name] = "\#{file_name.filename_to_slug}.\#{extension.filename_to_slug}"
51
67
  end
52
68
 
53
69
  def #{name}_svg?
54
- #{name}_content_type =~ /svg/
70
+ # !!(#{name}_content_type =~ /svg/)
71
+ #{name}.svg?
55
72
  end
56
73
 
57
- def #{name}_url(opts)
74
+ def #{name}_url(style=:original, opts = {})
58
75
  if #{name}_svg?
59
76
  #{name}.url
60
77
  else
61
- #{name}.url(opts)
78
+ #{name}.url(style, opts)
62
79
  end
63
80
  end
64
- EVAL
81
+
82
+ def reprocess_#{name}
83
+ return if self.#{name}.blank?
84
+ self.#{name}.reprocess! if File.exists?(self.#{name}.path)
85
+ end
86
+
87
+ def self.reprocess_all_#{name.to_s.pluralize}
88
+ self.all.map(&:reprocess_#{name})
89
+ end
90
+ RUBY
65
91
  if defined?(::PaperclipOptimizer)
66
- class_eval <<-EVAL
92
+ class_eval <<-RUBY
67
93
  before_#{name}_post_process do
68
94
  p_o = self.#{name}.processors.delete :paperclip_optimizer
69
95
  self.#{name}.processors << p_o if p_o
70
96
  true
71
97
  end
72
- EVAL
98
+ RUBY
73
99
  end
74
100
  jcrop_options ||= {}
75
101
  if jcrop_options
76
- class_eval <<-EVAL
102
+ class_eval <<-RUBY
77
103
  def #{name}_jcrop_options
78
104
  #{jcrop_options}
79
105
  end
80
- EVAL
106
+ RUBY
81
107
  end
82
108
  if styles_method_name
83
- class_eval <<-EVAL
109
+ class_eval <<-RUBY
84
110
  def #{styles_method_name}
85
111
  {
86
112
  thumb: '128x128'
87
113
  }
88
114
  end
89
- EVAL
115
+ RUBY
90
116
  end
91
117
 
92
118
  end
119
+
120
+ def paperclip_style_aliases_for(name, opts = {})
121
+ name = name.to_sym
122
+ _styles = opts[:styles]
123
+ _styles ||= self.send("#{name}_styles") if self.respond_to?("#{name}_styles")
124
+ _styles = _styles.keys if _styles.is_a?(Hash)
125
+ _styles.each do |_style|
126
+ class_eval <<-RUBY
127
+ def #{name}_url_#{_style}
128
+ #{name}.url(#{_style.to_sym})
129
+ end
130
+ RUBY
131
+ end
132
+
133
+ end
134
+
93
135
  end
94
136
  end
95
137
  end
@@ -8,13 +8,17 @@ module Hancock::Gallery::AutoCrop
8
8
  crop_area = [_width, _height].compact
9
9
  _default_method = opts.delete(:default_method) || :default_crop_params_for_center
10
10
 
11
+ attr_accessor "#{field}_autocropped".to_sym
11
12
  cattr_accessor "#{field}_default_max_crop_area".to_sym, "#{field}_default_auto_crop_method".to_sym
12
13
  self.send("#{field}_default_max_crop_area=".to_sym, crop_area)
13
14
  self.send("#{field}_default_auto_crop_method=".to_sym, _default_method.to_sym)
14
15
 
15
- class_eval <<-EVAL
16
+ class_eval <<-RUBY
16
17
  after_save :#{field}_auto_rails_admin_jcrop
17
18
  def #{field}_auto_rails_admin_jcrop
19
+ self.#{field}_autocropped = false if self.#{field}_autocropped == "0"
20
+ return if self.#{field}.blank? or !self.#{field}_updated_at_changed? or self.#{field}_autocropped
21
+ self.#{field}_autocropped = true
18
22
  auto_rails_admin_jcrop(:#{field})
19
23
  end
20
24
 
@@ -79,7 +83,7 @@ module Hancock::Gallery::AutoCrop
79
83
  end
80
84
  end
81
85
  end
82
- EVAL
86
+ RUBY
83
87
  end
84
88
 
85
89
  end
@@ -17,6 +17,13 @@ module Hancock::Gallery::Decorators
17
17
  # end
18
18
 
19
19
  ############# rails_admin ##############
20
+ # def self.rails_admin_name_synonyms
21
+ # ''.freeze #super
22
+ # end
23
+ # def self.rails_admin_navigation_icon
24
+ # ''.freeze
25
+ # end
26
+ #
20
27
  # def self.rails_admin_add_fields
21
28
  # [] #super
22
29
  # end
@@ -22,6 +22,13 @@ module Hancock::Gallery::Decorators
22
22
  # end
23
23
 
24
24
  ############# rails_admin ##############
25
+ # def self.rails_admin_name_synonyms
26
+ # "Photo Картинки Картинка Изображение Изображения".freeze
27
+ # end
28
+ # def self.rails_admin_navigation_icon
29
+ # 'icon-picture'.freeze
30
+ # end
31
+ #
25
32
  # def self.rails_admin_add_fields
26
33
  # [] #super
27
34
  # end
@@ -19,15 +19,27 @@ if Hancock.mongoid?
19
19
  end
20
20
 
21
21
  if is_image
22
- opts[:processors] ||= []
23
- opts[:processors] << :rails_admin_jcropper
24
- if defined?(::PaperclipOptimizer)
25
- opts[:processors] << :paperclip_optimizer
26
- opts[:processors].flatten!
27
- opts[:processors].uniq!
22
+ cattr_accessor "#{name}_default_processors".to_sym
23
+ instance_eval <<-RUBY
24
+ self.#{name}_default_processors = []
25
+ #{name}_default_processors << :rails_admin_jcropper
26
+ if defined?(::PaperclipOptimizer)
27
+ self.#{name}_default_processors << :paperclip_optimizer
28
+ self.#{name}_default_processors.flatten!
29
+ self.#{name}_default_processors.uniq!
30
+ end
31
+ RUBY
32
+ unless opts[:processors].is_a?(Proc)
33
+ opts[:processors] ||= []
34
+ opts[:processors] << :rails_admin_jcropper
35
+ if defined?(::PaperclipOptimizer)
36
+ opts[:processors] << :paperclip_optimizer
37
+ opts[:processors].flatten!
38
+ opts[:processors].uniq!
39
+ end
28
40
  end
29
41
 
30
- opts[:convert_options] = {all: "-quality 75 -strip"} if opts[:convert_options].blank?
42
+ opts[:convert_options] = Hancock::Gallery.config.default_convert_options if opts[:convert_options].blank?
31
43
 
32
44
  if opts[:styles].blank?
33
45
  styles_method_name = "#{name}_styles"
@@ -41,56 +53,88 @@ if Hancock.mongoid?
41
53
  # validates_attachment name, content_type: content_type unless content_type.blank?
42
54
  validates_attachment_content_type name, content_type: /\Aimage\/.*\Z/ if is_image
43
55
 
44
- class_eval <<-EVAL
56
+ class_eval <<-RUBY
45
57
  def #{name}_file_name=(val)
46
58
  return self[:#{name}_file_name] = "" if val == ""
47
59
  return self[:#{name}_file_name] = nil if val == nil
48
60
  val = val.to_s
49
61
  extension = File.extname(val)[1..-1]
62
+ if extension.blank?
63
+ mime_type = MIME::Types[self.#{name}.content_type].first
64
+ extension = mime_type.extensions.first if mime_type
65
+ val = [val, extension].join(".") unless extension.blank?
66
+ end
50
67
  file_name = val[0..val.size-extension.size-1]
51
68
  self[:#{name}_file_name] = "\#{file_name.filename_to_slug}.\#{extension.filename_to_slug}"
52
69
  end
53
70
 
54
71
  def #{name}_svg?
55
- #{name}_content_type =~ /svg/
72
+ # !!(#{name}_content_type =~ /svg/)
73
+ #{name}.svg?
56
74
  end
57
75
 
58
- def #{name}_url(opts)
76
+ def #{name}_url(style=:original, opts = {})
59
77
  if #{name}_svg?
60
78
  #{name}.url
61
79
  else
62
- #{name}.url(opts)
80
+ #{name}.url(style, opts)
63
81
  end
64
82
  end
65
- EVAL
83
+
84
+ def reprocess_#{name}
85
+ return if self.#{name}.blank?
86
+ self.#{name}.reprocess! if File.exists?(self.#{name}.path)
87
+ end
88
+
89
+ def self.reprocess_all_#{name.to_s.pluralize}
90
+ self.all.map(&:reprocess_#{name})
91
+ end
92
+ RUBY
66
93
  if defined?(::PaperclipOptimizer)
67
- class_eval <<-EVAL
94
+ class_eval <<-RUBY
68
95
  before_#{name}_post_process do
69
96
  p_o = self.#{name}.processors.delete :paperclip_optimizer
70
97
  self.#{name}.processors << p_o if p_o
71
98
  true
72
99
  end
73
- EVAL
100
+ RUBY
74
101
  end
75
102
  jcrop_options ||= {}
76
103
  if jcrop_options
77
- class_eval <<-EVAL
104
+ class_eval <<-RUBY
78
105
  def #{name}_jcrop_options
79
106
  #{jcrop_options}
80
107
  end
81
- EVAL
108
+ RUBY
82
109
  end
83
110
  if styles_method_name
84
- class_eval <<-EVAL
111
+ class_eval <<-RUBY
85
112
  def #{styles_method_name}
86
113
  {
87
114
  thumb: '128x128'
88
115
  }
89
116
  end
90
- EVAL
117
+ RUBY
91
118
  end
92
119
 
93
120
  end
121
+
122
+
123
+ def paperclip_style_aliases_for(name, opts = {})
124
+ name = name.to_sym
125
+ _styles = opts[:styles]
126
+ _styles ||= self.send("#{name}_styles") if self.respond_to?("#{name}_styles")
127
+ _styles = _styles.keys if _styles.is_a?(Hash)
128
+ _styles.each do |_style|
129
+ class_eval <<-RUBY
130
+ def #{name}_url_#{_style}
131
+ #{name}.url(#{_style.to_sym})
132
+ end
133
+ RUBY
134
+ end
135
+
136
+ end
137
+
94
138
  end
95
139
  end
96
140
  end