hancock_cms_gallery 1.0.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/.gitignore +17 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +54 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/hancock/gallery/init.coffee +2 -0
- data/app/assets/javascripts/hancock/gallery/loaders/gallery_images_loader.coffee +29 -0
- data/app/assets/javascripts/hancock/gallery/loaders/gallery_loader.coffee +29 -0
- data/app/assets/javascripts/hancock/gallery/page_selector.coffee +65 -0
- data/app/assets/javascripts/hancock/gallery.coffee +11 -0
- data/app/controllers/concerns/hancock/gallery/load_gallery.rb +74 -0
- data/app/controllers/concerns/hancock/gallery/load_gallery_images.rb +58 -0
- data/app/controllers/concerns/rails_admin/jcrop_controller.rb +138 -0
- data/app/models/concerns/hancock/gallery/active_record_paperclip.rb +95 -0
- data/app/models/concerns/hancock/gallery/auto_crop.rb +86 -0
- data/app/models/concerns/hancock/gallery/decorators/embedded_image.rb +47 -0
- data/app/models/concerns/hancock/gallery/decorators/gallery.rb +47 -0
- data/app/models/concerns/hancock/gallery/decorators/image.rb +52 -0
- data/app/models/concerns/hancock/gallery/decorators/original_image.rb +35 -0
- data/app/models/concerns/hancock/gallery/gallerable.rb +13 -0
- data/app/models/concerns/hancock/gallery/mongoid_paperclip.rb +96 -0
- data/app/models/concerns/hancock/gallery/paperclipable.rb +19 -0
- data/app/models/concerns/hancock/gallery/watermarkable.rb +117 -0
- data/app/models/hancock/gallery/embedded_image.rb +17 -0
- data/app/models/hancock/gallery/gallery.rb +16 -0
- data/app/models/hancock/gallery/image.rb +16 -0
- data/app/models/hancock/gallery/original_image.rb +15 -0
- data/app/views/rails_admin/jcrop/edit.html.slim +18 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/config/initializers/hancock_gallery.rb +29 -0
- data/config/initializers/paperclip_fix.rb +4 -0
- data/config/locales/hancock.gallery.ru.yml +17 -0
- data/hancock_cms_gallery.gemspec +37 -0
- data/lib/generators/hancock/gallery/config/install_generator.rb +13 -0
- data/lib/generators/hancock/gallery/config/templates/hancock_gallery.erb +9 -0
- data/lib/generators/hancock/gallery/migrations/migration_generator.rb +18 -0
- data/lib/generators/hancock/gallery/migrations/templates/migration_gallery.rb +51 -0
- data/lib/generators/hancock/gallery/models/decorators_generator.rb +21 -0
- data/lib/generators/hancock/gallery/models/embedded_image_generator.rb +52 -0
- data/lib/generators/hancock/gallery/models/gallery_generator.rb +55 -0
- data/lib/generators/hancock/gallery/models/image_generator.rb +51 -0
- data/lib/generators/hancock/gallery/models/templates/embedded_image.erb +52 -0
- data/lib/generators/hancock/gallery/models/templates/gallery.erb +48 -0
- data/lib/generators/hancock/gallery/models/templates/image.erb +50 -0
- data/lib/generators/hancock/gallery/models/templates/original_image.erb +34 -0
- data/lib/hancock/gallery/admin/embedded_image.rb +41 -0
- data/lib/hancock/gallery/admin/gallery.rb +52 -0
- data/lib/hancock/gallery/admin/image.rb +45 -0
- data/lib/hancock/gallery/admin/original_image.rb +33 -0
- data/lib/hancock/gallery/admin.rb +26 -0
- data/lib/hancock/gallery/configuration.rb +26 -0
- data/lib/hancock/gallery/engine.rb +5 -0
- data/lib/hancock/gallery/models/active_record/gallery.rb +19 -0
- data/lib/hancock/gallery/models/active_record/image.rb +21 -0
- data/lib/hancock/gallery/models/embedded_image.rb +28 -0
- data/lib/hancock/gallery/models/gallery.rb +62 -0
- data/lib/hancock/gallery/models/image.rb +57 -0
- data/lib/hancock/gallery/models/mongoid/embedded_image.rb +12 -0
- data/lib/hancock/gallery/models/mongoid/gallery.rb +16 -0
- data/lib/hancock/gallery/models/mongoid/image.rb +15 -0
- data/lib/hancock/gallery/models/mongoid/original_image.rb +14 -0
- data/lib/hancock/gallery/models/original_image.rb +30 -0
- data/lib/hancock/gallery/rails_admin_ext/hancock_image.rb +32 -0
- data/lib/hancock/gallery/version.rb +5 -0
- data/lib/hancock_cms_gallery.rb +66 -0
- data/release.sh +6 -0
- metadata +176 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
module Hancock::Gallery::AutoCrop
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
module ClassMethods
|
4
|
+
|
5
|
+
def set_default_auto_crop_params_for(field = :image, opts = {})
|
6
|
+
_width = opts.delete(:width)
|
7
|
+
_height = opts.delete(:height)
|
8
|
+
crop_area = [_width, _height].compact
|
9
|
+
_default_method = opts.delete(:default_method) || :default_crop_params_for_center
|
10
|
+
|
11
|
+
cattr_accessor "#{field}_default_max_crop_area".to_sym, "#{field}_default_auto_crop_method".to_sym
|
12
|
+
self.send("#{field}_default_max_crop_area=".to_sym, crop_area)
|
13
|
+
self.send("#{field}_default_auto_crop_method=".to_sym, _default_method.to_sym)
|
14
|
+
|
15
|
+
class_eval <<-EVAL
|
16
|
+
after_save :#{field}_auto_rails_admin_jcrop
|
17
|
+
def #{field}_auto_rails_admin_jcrop
|
18
|
+
auto_rails_admin_jcrop(:#{field})
|
19
|
+
end
|
20
|
+
|
21
|
+
def #{field}_default_crop_params
|
22
|
+
if self.#{field} and !self.#{field}_file_name.blank?
|
23
|
+
_default_max_crop_area = self.#{field}_default_max_crop_area
|
24
|
+
if _default_max_crop_area or self.respond_to?(:#{field}_styles) and (_#{field}_styles = self.#{field}_styles)
|
25
|
+
if _default_max_crop_area.blank?
|
26
|
+
_methods = [:big, :main, :standard]
|
27
|
+
_#{field}_styles = _#{field}_styles.call(#{field}) if _#{field}_styles.respond_to?(:call)
|
28
|
+
_style = nil
|
29
|
+
_methods.each do |m|
|
30
|
+
_style = _#{field}_styles[m]
|
31
|
+
_style = _style[:geometry] if _style and _style.is_a?(Hash)
|
32
|
+
break if !_style.blank? and _style
|
33
|
+
end
|
34
|
+
if _style
|
35
|
+
# sizes = _style.match(/^(?<width>[\d\.]+)?(x(?<height>[\d\.]+))?/)
|
36
|
+
# need_width = sizes[:width].to_f
|
37
|
+
# need_height = sizes[:height].to_f
|
38
|
+
sizes = Paperclip::Geometry.parse _style
|
39
|
+
need_width = sizes.width.to_f
|
40
|
+
need_height = sizes.height.to_f
|
41
|
+
end
|
42
|
+
|
43
|
+
else
|
44
|
+
if _default_max_crop_area.is_a?(Hash)
|
45
|
+
need_width = _default_max_crop_area[:width].to_f
|
46
|
+
need_height = _default_max_crop_area[:height].to_f
|
47
|
+
else
|
48
|
+
need_width = _default_max_crop_area[0].to_f
|
49
|
+
need_height = _default_max_crop_area[1].to_f
|
50
|
+
end
|
51
|
+
end
|
52
|
+
need_width = need_width.to_f
|
53
|
+
need_height = need_height.to_f
|
54
|
+
|
55
|
+
begin
|
56
|
+
_file = self.#{field}.queued_for_write.blank? ? self.#{field} : self.#{field}.queued_for_write[:original]
|
57
|
+
current_geo = Paperclip::Geometry.from_file(_file)
|
58
|
+
current_width = current_geo.width.to_f
|
59
|
+
current_height = current_geo.height.to_f
|
60
|
+
rescue
|
61
|
+
current_width ||= need_width.to_f
|
62
|
+
current_height ||= need_height.to_f
|
63
|
+
end
|
64
|
+
|
65
|
+
if need_width != 0 and need_height != 0
|
66
|
+
_aspect_ratio = need_width / need_height
|
67
|
+
else
|
68
|
+
_aspect_ratio = current_width / current_height
|
69
|
+
end
|
70
|
+
|
71
|
+
_width = (need_width > current_width ? current_width : need_width)
|
72
|
+
_width = current_width if _width == 0
|
73
|
+
_height = _width / _aspect_ratio
|
74
|
+
_height = (_height > current_width ? current_width : _height)
|
75
|
+
_width = _height * _aspect_ratio
|
76
|
+
_width = (_width > current_width ? current_width : _width)
|
77
|
+
|
78
|
+
self.send(self.#{field}_default_auto_crop_method, :#{field}, _width, _height)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
EVAL
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Hancock::Gallery::Decorators
|
2
|
+
module EmbeddedImage
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
# # after_save :image_auto_rails_admin_jcrop
|
7
|
+
# def image_auto_rails_admin_jcrop
|
8
|
+
# auto_rails_admin_jcrop(:image) # or nil for cancel autocrop
|
9
|
+
# end
|
10
|
+
|
11
|
+
# # hancock_cms_attached_file(:image)
|
12
|
+
# def image_styles
|
13
|
+
# super
|
14
|
+
# end
|
15
|
+
# def image_jcrop_options
|
16
|
+
# super
|
17
|
+
# end
|
18
|
+
|
19
|
+
############# rails_admin ##############
|
20
|
+
# def self.rails_admin_add_fields
|
21
|
+
# [] #super
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# def self.rails_admin_add_config(config)
|
25
|
+
# #super(config)
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# def self.admin_can_user_defined_actions
|
29
|
+
# [].freeze
|
30
|
+
# end
|
31
|
+
# def self.admin_cannot_user_defined_actions
|
32
|
+
# [].freeze
|
33
|
+
# end
|
34
|
+
# def self.manager_can_user_defined_actions
|
35
|
+
# [].freeze
|
36
|
+
# end
|
37
|
+
# def self.manager_cannot_user_defined_actions
|
38
|
+
# [].freeze
|
39
|
+
# end
|
40
|
+
# def self.rails_admin_user_defined_visible_actions
|
41
|
+
# [].freeze
|
42
|
+
# end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Hancock::Gallery::Decorators
|
2
|
+
module Gallery
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
# # after_save :image_auto_rails_admin_jcrop
|
7
|
+
# def image_auto_rails_admin_jcrop
|
8
|
+
# auto_rails_admin_jcrop(:image) # or nil for cancel autocrop
|
9
|
+
# end
|
10
|
+
|
11
|
+
# # hancock_cms_attached_file(:image)
|
12
|
+
# def image_styles
|
13
|
+
# super
|
14
|
+
# end
|
15
|
+
# def image_jcrop_options
|
16
|
+
# super
|
17
|
+
# end
|
18
|
+
|
19
|
+
############# rails_admin ##############
|
20
|
+
# def self.rails_admin_add_fields
|
21
|
+
# [] #super
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# def self.rails_admin_add_config(config)
|
25
|
+
# #super(config)
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# def self.admin_can_user_defined_actions
|
29
|
+
# [].freeze
|
30
|
+
# end
|
31
|
+
# def self.admin_cannot_user_defined_actions
|
32
|
+
# [].freeze
|
33
|
+
# end
|
34
|
+
# def self.manager_can_user_defined_actions
|
35
|
+
# [].freeze
|
36
|
+
# end
|
37
|
+
# def self.manager_cannot_user_defined_actions
|
38
|
+
# [].freeze
|
39
|
+
# end
|
40
|
+
# def self.rails_admin_user_defined_visible_actions
|
41
|
+
# [].freeze
|
42
|
+
# end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Hancock::Gallery::Decorators
|
2
|
+
module Image
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
|
7
|
+
# def self.default_cache_keys
|
8
|
+
# []
|
9
|
+
# end
|
10
|
+
|
11
|
+
# # after_save :image_auto_rails_admin_jcrop
|
12
|
+
# def image_auto_rails_admin_jcrop
|
13
|
+
# auto_rails_admin_jcrop(:image) # or nil for cancel autocrop
|
14
|
+
# end
|
15
|
+
|
16
|
+
# # hancock_cms_attached_file(:image)
|
17
|
+
# def image_styles
|
18
|
+
# super
|
19
|
+
# end
|
20
|
+
# def image_jcrop_options
|
21
|
+
# super
|
22
|
+
# end
|
23
|
+
|
24
|
+
############# rails_admin ##############
|
25
|
+
# def self.rails_admin_add_fields
|
26
|
+
# [] #super
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# def self.rails_admin_add_config(config)
|
30
|
+
# #super(config)
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# def self.admin_can_user_defined_actions
|
34
|
+
# [].freeze
|
35
|
+
# end
|
36
|
+
# def self.admin_cannot_user_defined_actions
|
37
|
+
# [].freeze
|
38
|
+
# end
|
39
|
+
# def self.manager_can_user_defined_actions
|
40
|
+
# [].freeze
|
41
|
+
# end
|
42
|
+
# def self.manager_cannot_user_defined_actions
|
43
|
+
# [].freeze
|
44
|
+
# end
|
45
|
+
# def self.rails_admin_user_defined_visible_actions
|
46
|
+
# [].freeze
|
47
|
+
# end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Hancock::Gallery::Decorators
|
2
|
+
module OriginalImage
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
|
7
|
+
############# rails_admin ##############
|
8
|
+
# def self.rails_admin_add_fields
|
9
|
+
# [] #super
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# def self.rails_admin_add_config(config)
|
13
|
+
# #super(config)
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# def self.admin_can_user_defined_actions
|
17
|
+
# [].freeze
|
18
|
+
# end
|
19
|
+
# def self.admin_cannot_user_defined_actions
|
20
|
+
# [].freeze
|
21
|
+
# end
|
22
|
+
# def self.manager_can_user_defined_actions
|
23
|
+
# [].freeze
|
24
|
+
# end
|
25
|
+
# def self.manager_cannot_user_defined_actions
|
26
|
+
# [].freeze
|
27
|
+
# end
|
28
|
+
# def self.rails_admin_user_defined_visible_actions
|
29
|
+
# [].freeze
|
30
|
+
# end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Hancock::Gallery::Gallerable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
module ClassMethods
|
5
|
+
def hancock_gallerable_field(name = :galleries, opts = {})
|
6
|
+
class_name = opts.delete(:class_name)
|
7
|
+
class_name ||= "Hancock::Gallery::Gallery"
|
8
|
+
|
9
|
+
has_many name, as: :hancock_gallerable, class_name: class_name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
if Hancock.mongoid?
|
2
|
+
module Hancock::Gallery::MongoidPaperclip
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
include ::Mongoid::Paperclip
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def hancock_cms_mongoid_attached_file(name, opts = {})
|
11
|
+
name = name.to_sym
|
12
|
+
is_image = true
|
13
|
+
styles_method_name = nil
|
14
|
+
unless opts.blank?
|
15
|
+
content_type = opts.delete(:content_type)
|
16
|
+
jcrop_options = opts.delete(:jcrop_options)
|
17
|
+
is_image = opts.delete(:is_image)
|
18
|
+
is_image = true if is_image.nil?
|
19
|
+
end
|
20
|
+
|
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!
|
28
|
+
end
|
29
|
+
|
30
|
+
opts[:convert_options] = {all: "-quality 75 -strip"} if opts[:convert_options].blank?
|
31
|
+
|
32
|
+
if opts[:styles].blank?
|
33
|
+
styles_method_name = "#{name}_styles"
|
34
|
+
opts[:styles] = lambda { |attachment| attachment.instance.send(styles_method_name) }
|
35
|
+
end
|
36
|
+
|
37
|
+
set_default_auto_crop_params_for name
|
38
|
+
end
|
39
|
+
|
40
|
+
has_mongoid_attached_file name, opts
|
41
|
+
# validates_attachment name, content_type: content_type unless content_type.blank?
|
42
|
+
validates_attachment_content_type name, content_type: /\Aimage\/.*\Z/ if is_image
|
43
|
+
|
44
|
+
class_eval <<-EVAL
|
45
|
+
def #{name}_file_name=(val)
|
46
|
+
return self[:#{name}_file_name] = "" if val == ""
|
47
|
+
return self[:#{name}_file_name] = nil if val == nil
|
48
|
+
val = val.to_s
|
49
|
+
extension = File.extname(val)[1..-1]
|
50
|
+
file_name = val[0..val.size-extension.size-1]
|
51
|
+
self[:#{name}_file_name] = "\#{file_name.filename_to_slug}.\#{extension.filename_to_slug}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def #{name}_svg?
|
55
|
+
#{name}_content_type =~ /svg/
|
56
|
+
end
|
57
|
+
|
58
|
+
def #{name}_url(opts)
|
59
|
+
if #{name}_svg?
|
60
|
+
#{name}.url
|
61
|
+
else
|
62
|
+
#{name}.url(opts)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
EVAL
|
66
|
+
if defined?(::PaperclipOptimizer)
|
67
|
+
class_eval <<-EVAL
|
68
|
+
before_#{name}_post_process do
|
69
|
+
p_o = self.#{name}.processors.delete :paperclip_optimizer
|
70
|
+
self.#{name}.processors << p_o if p_o
|
71
|
+
true
|
72
|
+
end
|
73
|
+
EVAL
|
74
|
+
end
|
75
|
+
jcrop_options ||= {}
|
76
|
+
if jcrop_options
|
77
|
+
class_eval <<-EVAL
|
78
|
+
def #{name}_jcrop_options
|
79
|
+
#{jcrop_options}
|
80
|
+
end
|
81
|
+
EVAL
|
82
|
+
end
|
83
|
+
if styles_method_name
|
84
|
+
class_eval <<-EVAL
|
85
|
+
def #{styles_method_name}
|
86
|
+
{
|
87
|
+
thumb: '128x128'
|
88
|
+
}
|
89
|
+
end
|
90
|
+
EVAL
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Hancock::Gallery::Paperclipable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
include Hancock::Gallery::AutoCrop
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def hancock_cms_attached_file(name, opts = {})
|
8
|
+
if Hancock.active_record?
|
9
|
+
include Hancock::Gallery::ActiveRecordPaperclip
|
10
|
+
hancock_cms_active_record_attached_file(name, opts)
|
11
|
+
|
12
|
+
elsif Hancock.mongoid?
|
13
|
+
include Hancock::Gallery::MongoidPaperclip
|
14
|
+
hancock_cms_mongoid_attached_file(name, opts)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
module Hancock::Gallery::Watermarkable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
module ClassMethods
|
5
|
+
def paperclip_with_watermark(field = :image, original_image_class_name = "Hancock::Gallery::OriginalImage")
|
6
|
+
|
7
|
+
attr_accessor "#{field}_autocropped".to_sym
|
8
|
+
|
9
|
+
hancock_cms_attached_file field, processors: [:watermark]
|
10
|
+
# field "original_#{field}", type: BSON::Binary
|
11
|
+
has_one "original_#{field}_data", as: :originable, class_name: original_image_class_name
|
12
|
+
|
13
|
+
class_eval %{
|
14
|
+
def #{field}_auto_rails_admin_jcrop
|
15
|
+
return if self.#{field}.blank? or !self.#{field}_updated_at_changed? or self.#{field}_autocropped
|
16
|
+
self.#{field}_autocropped = true
|
17
|
+
|
18
|
+
if File.exists?(self.#{field}.path)
|
19
|
+
auto_rails_admin_jcrop(:#{field})
|
20
|
+
|
21
|
+
elsif (_data = self.original_#{field})
|
22
|
+
_old_filename = self.#{field}_file_name
|
23
|
+
if _data
|
24
|
+
_data = _data.data
|
25
|
+
_temp = Tempfile.new(_old_filename)
|
26
|
+
_temp.binmode
|
27
|
+
_temp.write _data
|
28
|
+
File.unlink(self.#{field}.path) if File.symlink?(self.#{field}.path)
|
29
|
+
File.symlink(_temp.path, self.#{field}.path)
|
30
|
+
# self.#{field} = _temp
|
31
|
+
# self.#{field}.instance_write(:file_name, "\#{SecureRandom.hex}\#{File.extname(_old_filename)}")
|
32
|
+
self.class.skip_callback(:save, :after, "original_#{field}_to_db".to_sym)
|
33
|
+
auto_rails_admin_jcrop(:#{field})
|
34
|
+
self.class.set_callback(:save, :after, "original_#{field}_to_db".to_sym)
|
35
|
+
_temp.unlink
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
before_#{field}_post_process do
|
41
|
+
p_o = self.#{field}.processors.delete :paperclip_optimizer
|
42
|
+
# if p_o
|
43
|
+
# _processors = self.#{field}.processors.dup
|
44
|
+
# self.#{field}.processors.clear
|
45
|
+
# self.#{field}.processors = [:thumbnail, p_o]
|
46
|
+
# _processors.each do |p|
|
47
|
+
# self.#{field}.processors << p
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
|
51
|
+
p_w = self.#{field}.processors.delete :watermark
|
52
|
+
self.#{field}.processors << p_w if p_w
|
53
|
+
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
57
|
+
def original_#{field}
|
58
|
+
original_#{field}_data.original if original_#{field}_data
|
59
|
+
end
|
60
|
+
def original_#{field}_base64
|
61
|
+
_original = self.original_#{field}
|
62
|
+
if _original
|
63
|
+
_data = Base64.encode64(_original.data)
|
64
|
+
_content_type = self.#{field}_content_type
|
65
|
+
else
|
66
|
+
_data = ''
|
67
|
+
_content_type = 'jpg'
|
68
|
+
end
|
69
|
+
"data:\#{_content_type};base64,\#{_data}"
|
70
|
+
end
|
71
|
+
|
72
|
+
after_save :original_#{field}_to_db
|
73
|
+
def original_#{field}_to_db
|
74
|
+
if self.#{field}_file_name
|
75
|
+
if File.exists?(self.#{field}.path)
|
76
|
+
_original = self.original_#{field}_data
|
77
|
+
unless _original
|
78
|
+
_original = #{original_image_class_name}.new
|
79
|
+
_original.originable = self
|
80
|
+
end
|
81
|
+
_original.original = BSON::Binary.new(File.binread(self.#{field}.path))
|
82
|
+
if _original.save
|
83
|
+
File.unlink(self.#{field}.path)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def reprocess_#{field}
|
90
|
+
return if self.#{field}.blank?
|
91
|
+
|
92
|
+
if File.exists?(self.#{field}.path)
|
93
|
+
self.#{field}.reprocess!
|
94
|
+
elsif (_data = self.original_#{field})
|
95
|
+
_old_filename = self.#{field}_file_name
|
96
|
+
if _data
|
97
|
+
_data = _data.data
|
98
|
+
_temp = Tempfile.new(_old_filename)
|
99
|
+
_temp.binmode
|
100
|
+
_temp.write _data
|
101
|
+
File.unlink(self.#{field}.path) if File.symlink?(self.#{field}.path)
|
102
|
+
File.symlink(_temp.path, self.#{field}.path)
|
103
|
+
self.#{field} = _temp
|
104
|
+
self.#{field}.instance_write(:file_name, "\#{SecureRandom.hex}\#{File.extname(_old_filename)}")
|
105
|
+
self.class.skip_callback(:save, :after, "original_#{field}_to_db".to_sym)
|
106
|
+
self.#{field}.reprocess!
|
107
|
+
self.class.set_callback(:save, :after, "original_#{field}_to_db".to_sym)
|
108
|
+
_temp.unlink
|
109
|
+
self.save
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
}
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Hancock::Gallery
|
2
|
+
if Hancock::Gallery.mongoid?
|
3
|
+
class EmbeddedImage < Hancock::EmbeddedElement
|
4
|
+
include Hancock::Gallery::Models::EmbeddedImage
|
5
|
+
|
6
|
+
include Hancock::Gallery::Decorators::EmbeddedImage
|
7
|
+
|
8
|
+
rails_admin(&Hancock::Gallery::Admin::EmbeddedImage.config(rails_admin_add_fields) { |config|
|
9
|
+
rails_admin_add_config(config)
|
10
|
+
})
|
11
|
+
|
12
|
+
# use it in rails_admin in parent model for sort
|
13
|
+
# sort_embedded({fields: [:embedded_field_1, :embedded_field_2...]})
|
14
|
+
# or u need to override rails_admin in inherited model to add sort field
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Hancock::Gallery
|
2
|
+
if Hancock::Gallery.active_record?
|
3
|
+
class Gallery < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Gallery
|
8
|
+
include Hancock::Gallery::Models::Gallery
|
9
|
+
|
10
|
+
include Hancock::Gallery::Decorators::Gallery
|
11
|
+
|
12
|
+
rails_admin(&Hancock::Gallery::Admin::Gallery.config(rails_admin_add_fields) { |config|
|
13
|
+
rails_admin_add_config(config)
|
14
|
+
})
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Hancock::Gallery
|
2
|
+
if Hancock::Gallery.active_record?
|
3
|
+
class Image < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Image
|
8
|
+
include Hancock::Gallery::Models::Image
|
9
|
+
|
10
|
+
include Hancock::Gallery::Decorators::Image
|
11
|
+
|
12
|
+
rails_admin(&Hancock::Gallery::Admin::Image.config(rails_admin_add_fields) { |config|
|
13
|
+
rails_admin_add_config(config)
|
14
|
+
})
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Hancock::Gallery
|
2
|
+
if Hancock::Gallery.mongoid?
|
3
|
+
|
4
|
+
class OriginalImage
|
5
|
+
include Hancock::Gallery::Models::OriginalImage
|
6
|
+
|
7
|
+
include Hancock::Gallery::Decorators::OriginalImage
|
8
|
+
|
9
|
+
rails_admin(&Hancock::Gallery::Admin::OriginalImage.config(rails_admin_add_fields) { |config|
|
10
|
+
rails_admin_add_config(config)
|
11
|
+
})
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
- if params[:img_src]
|
2
|
+
= form_tag nil, @form_options.merge({class: "form-horizontal denser"})
|
3
|
+
= image_tag params[:img_src], @image_tag_options
|
4
|
+
= hidden_field_tag :crop_field, @field
|
5
|
+
= hidden_field_tag :crop_model, @object.class.name
|
6
|
+
- else
|
7
|
+
= form_tag nil, @form_options.merge({class: "form-horizontal denser"}) do
|
8
|
+
- if File.exists?(@object.send(@field).path)
|
9
|
+
= image_tag @object.send(@field).url, @image_tag_options
|
10
|
+
- elsif @object.respond_to?("original_#{@field}_base64".to_sym)
|
11
|
+
= image_tag @object.send("original_#{@field}_base64".to_sym), @image_tag_options
|
12
|
+
|
13
|
+
= hidden_field_tag :crop_x
|
14
|
+
= hidden_field_tag :crop_y
|
15
|
+
= hidden_field_tag :crop_w
|
16
|
+
= hidden_field_tag :crop_h
|
17
|
+
= hidden_field_tag :crop_field, @field
|
18
|
+
= render partial: 'rails_admin/main/submit_buttons'
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "hancock_cms_gallery"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Hancock.rails_admin_configure do |config|
|
2
|
+
config.action_visible_for :nested_set, 'Hancock::Gallery::Gallery'
|
3
|
+
config.action_visible_for :nested_set, 'Hancock::Gallery::Image'
|
4
|
+
|
5
|
+
if defined?(RailsAdminComments)
|
6
|
+
config.action_visible_for :comments, 'Hancock::Gallery::Gallery'
|
7
|
+
config.action_visible_for :comments, 'Hancock::Gallery::Image'
|
8
|
+
|
9
|
+
config.action_visible_for :model_comments, 'Hancock::Gallery::Gallery'
|
10
|
+
config.action_visible_for :model_comments, 'Hancock::Gallery::Image'
|
11
|
+
end
|
12
|
+
|
13
|
+
if defined?(RailsAdminMultipleFileUpload)
|
14
|
+
if true or Hancock::Catalog.active_record?
|
15
|
+
config.action_visible_for :multiple_file_upload, 'Hancock::Gallery::Gallery'
|
16
|
+
config.action_visible_for :multiple_file_upload_collection, 'Hancock::Gallery::Image'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if defined?(RailsAdmin)
|
22
|
+
RailsAdmin.config do |config|
|
23
|
+
config.excluded_models ||= []
|
24
|
+
config.excluded_models << [
|
25
|
+
'Hancock::Gallery::EmbeddedImage'
|
26
|
+
]
|
27
|
+
config.excluded_models.flatten!
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
ru:
|
2
|
+
hancock:
|
3
|
+
gallery: "Галерея"
|
4
|
+
images: "Галерея"
|
5
|
+
|
6
|
+
mongoid: &mongoid
|
7
|
+
models:
|
8
|
+
hancock/gallery/gallery: Фотогалерея
|
9
|
+
hancock/gallery/image: Фото в фотогалерее
|
10
|
+
hancock/gallery/embedded_image: Фото в фотогалерее
|
11
|
+
|
12
|
+
attributes:
|
13
|
+
hancock/gallery/gallery:
|
14
|
+
hancock/gallery/image:
|
15
|
+
gallery: Фотогалерея
|
16
|
+
gallery_id: Фотогалерея
|
17
|
+
hancock/gallery/embedded_image:
|