hancock_cms_gallery 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +54 -0
  9. data/Rakefile +1 -0
  10. data/app/assets/javascripts/hancock/gallery/init.coffee +2 -0
  11. data/app/assets/javascripts/hancock/gallery/loaders/gallery_images_loader.coffee +29 -0
  12. data/app/assets/javascripts/hancock/gallery/loaders/gallery_loader.coffee +29 -0
  13. data/app/assets/javascripts/hancock/gallery/page_selector.coffee +65 -0
  14. data/app/assets/javascripts/hancock/gallery.coffee +11 -0
  15. data/app/controllers/concerns/hancock/gallery/load_gallery.rb +74 -0
  16. data/app/controllers/concerns/hancock/gallery/load_gallery_images.rb +58 -0
  17. data/app/controllers/concerns/rails_admin/jcrop_controller.rb +138 -0
  18. data/app/models/concerns/hancock/gallery/active_record_paperclip.rb +95 -0
  19. data/app/models/concerns/hancock/gallery/auto_crop.rb +86 -0
  20. data/app/models/concerns/hancock/gallery/decorators/embedded_image.rb +47 -0
  21. data/app/models/concerns/hancock/gallery/decorators/gallery.rb +47 -0
  22. data/app/models/concerns/hancock/gallery/decorators/image.rb +52 -0
  23. data/app/models/concerns/hancock/gallery/decorators/original_image.rb +35 -0
  24. data/app/models/concerns/hancock/gallery/gallerable.rb +13 -0
  25. data/app/models/concerns/hancock/gallery/mongoid_paperclip.rb +96 -0
  26. data/app/models/concerns/hancock/gallery/paperclipable.rb +19 -0
  27. data/app/models/concerns/hancock/gallery/watermarkable.rb +117 -0
  28. data/app/models/hancock/gallery/embedded_image.rb +17 -0
  29. data/app/models/hancock/gallery/gallery.rb +16 -0
  30. data/app/models/hancock/gallery/image.rb +16 -0
  31. data/app/models/hancock/gallery/original_image.rb +15 -0
  32. data/app/views/rails_admin/jcrop/edit.html.slim +18 -0
  33. data/bin/console +14 -0
  34. data/bin/setup +7 -0
  35. data/config/initializers/hancock_gallery.rb +29 -0
  36. data/config/initializers/paperclip_fix.rb +4 -0
  37. data/config/locales/hancock.gallery.ru.yml +17 -0
  38. data/hancock_cms_gallery.gemspec +37 -0
  39. data/lib/generators/hancock/gallery/config/install_generator.rb +13 -0
  40. data/lib/generators/hancock/gallery/config/templates/hancock_gallery.erb +9 -0
  41. data/lib/generators/hancock/gallery/migrations/migration_generator.rb +18 -0
  42. data/lib/generators/hancock/gallery/migrations/templates/migration_gallery.rb +51 -0
  43. data/lib/generators/hancock/gallery/models/decorators_generator.rb +21 -0
  44. data/lib/generators/hancock/gallery/models/embedded_image_generator.rb +52 -0
  45. data/lib/generators/hancock/gallery/models/gallery_generator.rb +55 -0
  46. data/lib/generators/hancock/gallery/models/image_generator.rb +51 -0
  47. data/lib/generators/hancock/gallery/models/templates/embedded_image.erb +52 -0
  48. data/lib/generators/hancock/gallery/models/templates/gallery.erb +48 -0
  49. data/lib/generators/hancock/gallery/models/templates/image.erb +50 -0
  50. data/lib/generators/hancock/gallery/models/templates/original_image.erb +34 -0
  51. data/lib/hancock/gallery/admin/embedded_image.rb +41 -0
  52. data/lib/hancock/gallery/admin/gallery.rb +52 -0
  53. data/lib/hancock/gallery/admin/image.rb +45 -0
  54. data/lib/hancock/gallery/admin/original_image.rb +33 -0
  55. data/lib/hancock/gallery/admin.rb +26 -0
  56. data/lib/hancock/gallery/configuration.rb +26 -0
  57. data/lib/hancock/gallery/engine.rb +5 -0
  58. data/lib/hancock/gallery/models/active_record/gallery.rb +19 -0
  59. data/lib/hancock/gallery/models/active_record/image.rb +21 -0
  60. data/lib/hancock/gallery/models/embedded_image.rb +28 -0
  61. data/lib/hancock/gallery/models/gallery.rb +62 -0
  62. data/lib/hancock/gallery/models/image.rb +57 -0
  63. data/lib/hancock/gallery/models/mongoid/embedded_image.rb +12 -0
  64. data/lib/hancock/gallery/models/mongoid/gallery.rb +16 -0
  65. data/lib/hancock/gallery/models/mongoid/image.rb +15 -0
  66. data/lib/hancock/gallery/models/mongoid/original_image.rb +14 -0
  67. data/lib/hancock/gallery/models/original_image.rb +30 -0
  68. data/lib/hancock/gallery/rails_admin_ext/hancock_image.rb +32 -0
  69. data/lib/hancock/gallery/version.rb +5 -0
  70. data/lib/hancock_cms_gallery.rb +66 -0
  71. data/release.sh +6 -0
  72. metadata +176 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c0f7db85fb9be1c12a8016104a2cc11813af011
4
+ data.tar.gz: f5fe4b2a2c9bc6716dd99d5a08c2686c08989963
5
+ SHA512:
6
+ metadata.gz: ed47a304c6ab2305013a033a2020683f9506fcf34c8886fd7ed6299e747d939fc760243d89c353797323b941a922926147ac6a97d943bc098dd48827388fe18f
7
+ data.tar.gz: dac044323b0fa221019099313f8da29829d077e2427c7f9c131cba39d01ef2fa0edcf5543e47084d49fc476e2305fa0d51466ed47122aaced65f140c4caba2ba
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ .idea
2
+ .idea/*
3
+
4
+ *.gem
5
+ *.rbc
6
+
7
+ /.bundle/
8
+ .config
9
+ /.yardoc
10
+ InstalledFiles
11
+ /Gemfile.lock
12
+ /_yardoc/
13
+ /coverage/
14
+ /doc/
15
+ /pkg/
16
+ /spec/reports/
17
+ /tmp/
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ hancock_gallery
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hancock_cms_gallery.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Alexander Kiseliev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # HancockCMSGallery
2
+
3
+ Image gallery for [HancockCMS](https://github.com/red-rocks/hancock_cms). Prototypes for image sliders, partners or services lists, etc
4
+
5
+ ### Remaded from [EnjoyCMSGallery](https://github.com/enjoycreative/enjoy_cms_gallery)
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'hancock_cms_gallery'
13
+ ```
14
+
15
+ Then add this
16
+ ```ruby
17
+ gem 'paperclip' # AR
18
+ ```
19
+ or this
20
+ ```ruby
21
+ gem 'glebtv-mongoid-paperclip' # Mongoid
22
+ ```
23
+ or this
24
+ ```ruby
25
+ gem 'mongoid-paperclip' # Mongoid
26
+ ```
27
+ before it.
28
+
29
+ And then execute:
30
+
31
+ $ bundle
32
+
33
+ Or install it yourself as:
34
+
35
+ $ gem install hancock_cms_gallery
36
+
37
+ ## Usage
38
+
39
+ TODO: Write usage instructions here
40
+
41
+ ## Development
42
+
43
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
44
+
45
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
46
+
47
+ ## Contributing
48
+
49
+ Bug reports and pull requests are welcome on GitHub at https://github.com/red-rocks/hancock_cms_gallery.
50
+
51
+
52
+ ## License
53
+
54
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,2 @@
1
+ window.hancock_cms ||= {}
2
+ window.hancock_cms.gallery ||= {}
@@ -0,0 +1,29 @@
1
+ window.hancock_cms.gallery.images_loader = (target = "[data-hancock-gallery-images-loader]")->
2
+ $(document).delegate target, "click", (e)->
3
+ e.preventDefault()
4
+
5
+ link = $(e.currentTarget)
6
+ url = link.attr('href')
7
+ url = link.data("url") if !url or url == ""
8
+ if url and url != ""
9
+ $.get url, (data)->
10
+ _target_selector = link.data("target-selector")
11
+ if _target_selector and _target_selector != ""
12
+ _target = $(_target_selector)
13
+ if _target.length > 0
14
+ if link.data("target-replace") == "true"
15
+ _target.replaceWith(data)
16
+ else
17
+ _target.html(data)
18
+ if link.data("loader-remove") == "true"
19
+ link.remove()
20
+
21
+ else
22
+ if link.data("loader-insert-data") == "true"
23
+ link.html(data)
24
+ else
25
+ link.replaceWith(data)
26
+
27
+ window.hancock_cms.gallery.construct_pages_selector()
28
+
29
+ return false
@@ -0,0 +1,29 @@
1
+ window.hancock_cms.gallery.gallery_loader = (target = "[data-hancock-gallery-gallery-loader]")->
2
+ $(document).delegate target, "click", (e)->
3
+ e.preventDefault()
4
+
5
+ link = $(e.currentTarget)
6
+ url = link.attr('href')
7
+ url = link.data("url") if !url or url == ""
8
+ if url and url != ""
9
+ $.get url, (data)->
10
+ _target_selector = link.data("target-selector")
11
+ if _target_selector and _target_selector != ""
12
+ _target = $(_target_selector)
13
+ if _target.length > 0
14
+ if link.data("target-replace") == "true"
15
+ _target.replaceWith(data)
16
+ else
17
+ _target.html(data)
18
+ if link.data("loader-remove") == "true"
19
+ link.remove()
20
+
21
+ else
22
+ if link.data("loader-insert-data") == "true"
23
+ link.html(data)
24
+ else
25
+ link.replaceWith(data)
26
+
27
+ window.hancock_cms.gallery.construct_pages_selector()
28
+
29
+ return false
@@ -0,0 +1,65 @@
1
+ window.hancock_cms.gallery.construct_pages_selector = (target = "[data-hancock-gallery-page-selector]")->
2
+ pages_selector = $(target)
3
+ pages_array = []
4
+ pages_selector_html = ""
5
+ $(".hancock_gallery_page_title_block").each ->
6
+ pages_array.push(parseInt($(this).data('page')))
7
+
8
+ pages_array.sort (a,b)->
9
+ a - b
10
+
11
+ $(pages_array).each ->
12
+ pages_selector_html += "<a href='#page-" + this + "' class='page_selector_block' title='" + this + "'>" + this + "</a>"
13
+ pages_selector.html(pages_selector_html)
14
+ window.hancock_cms.gallery.format_pages_selector()
15
+
16
+
17
+
18
+ window.hancock_cms.gallery.format_pages_selector = (target = ".hancock_gallery_page_selector")->
19
+ pages_selector = $(target)
20
+ pages_array = []
21
+ $(".hancock_gallery_page_title_block").each ->
22
+ pages_array.push([parseInt($(this).data('page')), $(this), $(this).offset().top])
23
+
24
+ first_window = parseInt(pages_selector.data('first-window')) || 1
25
+ center_window = parseInt(pages_selector.data('window')) || 2
26
+ last_window = parseInt(pages_selector.data('last-window')) || 1
27
+ top_offset = parseInt(pages_selector.data('top-offset')) || 0
28
+ scroll_top = $(window).scrollTop() || 0
29
+
30
+ min_page = 99999999
31
+ max_page = 0
32
+ current_page = null
33
+ min_diff = 99999999
34
+
35
+ $(pages_array).each ->
36
+ if (this[2] - (scroll_top + top_offset) > 0) and min_diff > this[2] - (scroll_top + top_offset)
37
+ current_page = this[0]
38
+ min_diff = this[2] - (scroll_top + top_offset)
39
+ if min_page > this[0]
40
+ min_page = this[0]
41
+ if max_page < this[0]
42
+ max_page = this[0]
43
+
44
+ if current_page
45
+ $(pages_array).each ->
46
+ f_w = this[0] >= min_page and this[0] <= min_page + first_window
47
+ c_w = this[0] >= current_page - center_window and this[0] <= current_page + center_window
48
+ l_w = this[0] >= max_page - last_window and this[0] <= max_page
49
+
50
+ page_selector_block = $(".page_selector_block[href='#page-" + this[0] + "']")
51
+
52
+ if f_w or c_w or l_w
53
+ page_selector_block.addClass("showed").removeClass("hidden")
54
+ else
55
+ page_selector_block.addClass("hidden").removeClass("showed")
56
+
57
+ if this[0] == current_page
58
+ page_selector_block.addClass("current")
59
+ else
60
+ page_selector_block.removeClass("current")
61
+
62
+
63
+
64
+ $(window).scroll ->
65
+ window.hancock_cms.gallery.format_pages_selector()
@@ -0,0 +1,11 @@
1
+ #= require ./gallery/init
2
+
3
+ #= require ./gallery/page_selector
4
+
5
+ #= require ./gallery/loaders/gallery_loader
6
+ #= require ./gallery/loaders/gallery_images_loader
7
+
8
+ #= require_self
9
+
10
+ window.hancock_cms.gallery.images_loader()
11
+ window.hancock_cms.gallery.gallery_loader()
@@ -0,0 +1,74 @@
1
+ module Hancock::Gallery::LoadGallery
2
+ extend ActiveSupport::Concern
3
+
4
+
5
+ def hancock_gallery_render_gallery
6
+ redirected = hancock_gallery_gallery_redirect_to_if_no_xhr unless request.xhr?
7
+
8
+ unless redirected
9
+ @gallery = hancock_gallery_load_gallery
10
+ @gallery_images = hancock_gallery_gallery_load_images
11
+
12
+ @next_page = (params[:page] || 1).to_i + 1
13
+
14
+ render_opts = {
15
+ layout: hancock_gallery_gallery_layout,
16
+ action: hancock_gallery_gallery_action,
17
+ partial: hancock_gallery_gallery_partial
18
+ }
19
+ render render_opts.compact
20
+ end
21
+ end
22
+
23
+
24
+
25
+ private
26
+ def hancock_gallery_gallery_layout
27
+ request.xhr? ? false : 'application'
28
+ end
29
+
30
+ def hancock_gallery_gallery_action
31
+ 'hancock_gallery_render_gallery'
32
+ end
33
+
34
+ def hancock_gallery_gallery_partial
35
+ nil
36
+ end
37
+
38
+ def hancock_gallery_gallery_redirect_to_if_no_xhr
39
+ nil
40
+ end
41
+
42
+ def hancock_gallery_gallery_class
43
+ Hancock::Gallery::Gallery
44
+ end
45
+
46
+ def hancock_gallery_gallery_scope
47
+ hancock_gallery_gallery_class.enabled
48
+ end
49
+
50
+ def hancock_gallery_gallery_images_method
51
+ :images
52
+ end
53
+
54
+ def hancock_gallery_load_gallery
55
+ hancock_gallery_gallery_scope.find(params[:gallery_id])
56
+ end
57
+
58
+ def hancock_gallery_gallery_images_scope
59
+ @gallery.send(hancock_gallery_gallery_images_method).enabled.sorted
60
+ end
61
+
62
+ def hancock_gallery_gallery_load_images
63
+ if @gallery
64
+ hancock_gallery_gallery_images_scope.page(params[:page]).per(hancock_gallery_render_gallery_images_per_page)
65
+ else
66
+ []
67
+ end
68
+ end
69
+
70
+ def hancock_gallery_render_gallery_images_per_page
71
+ 4
72
+ end
73
+
74
+ end
@@ -0,0 +1,58 @@
1
+ module Hancock::Gallery::LoadGalleryImages
2
+ extend ActiveSupport::Concern
3
+
4
+
5
+ def hancock_gallery_render_gallery_images
6
+ redirected = hancock_gallery_gallery_images_redirect_to_if_no_xhr unless request.xhr?
7
+
8
+ unless redirected
9
+ @gallery_images = hancock_gallery_load_gallery_images
10
+
11
+ @next_page = (params[:page] || 1).to_i + 1
12
+
13
+ render_opts = {
14
+ layout: hancock_gallery_gallery_images_layout,
15
+ action: hancock_gallery_gallery_images_action,
16
+ partial: hancock_gallery_gallery_images_partial
17
+ }
18
+ render render_opts.compact
19
+ end
20
+ end
21
+
22
+
23
+
24
+ private
25
+ def hancock_gallery_gallery_images_layout
26
+ request.xhr? ? false : 'application'
27
+ end
28
+
29
+ def hancock_gallery_gallery_images_action
30
+ 'hancock_gallery_render_gallery_images'
31
+ end
32
+
33
+ def hancock_gallery_gallery_images_partial
34
+ nil
35
+ end
36
+
37
+ def hancock_gallery_gallery_images_redirect_to_if_no_xhr
38
+ nil
39
+ end
40
+
41
+ def hancock_gallery_gallery_image_class
42
+ Hancock::Gallery::Image
43
+ end
44
+
45
+ def hancock_gallery_gallery_image_scope
46
+ hancock_gallery_gallery_image_class.enabled.sorted
47
+ end
48
+
49
+ def hancock_gallery_load_gallery_images
50
+ hancock_gallery_gallery_image_scope.page(params[:page]).per(hancock_gallery_gallery_images_per_page)
51
+ end
52
+
53
+ def hancock_gallery_gallery_images_per_page
54
+ 4
55
+ end
56
+
57
+
58
+ end
@@ -0,0 +1,138 @@
1
+ require 'mini_magick'
2
+
3
+ module RailsAdmin
4
+
5
+ class JcropController < RailsAdmin::ApplicationController
6
+ skip_before_action :get_model
7
+ before_action :get_model, :get_object, :get_field, :get_fit_image
8
+
9
+ helper_method :abstract_model, :geometry
10
+
11
+ def edit
12
+ @form_options = {}
13
+ @form_options[:method] = :put
14
+ @form_options[:'data-title'] = "#{I18n.t("admin.actions.crop.menu").capitalize} #{abstract_model.model.human_attribute_name @field}"
15
+
16
+ @image_tag_options = {}
17
+ @image_tag_options[:class] = "jcrop-subject"
18
+ @file_path=''
19
+ #Condition for Carrierwave.
20
+ if @object.send(@field).class.to_s =~ /Uploader/
21
+ if @object.send(@field)._storage.to_s =~ /Fog/
22
+ @file_path=@object.send(@field).url
23
+
24
+ else
25
+ @file_path=@object.send(@field).path
26
+ end
27
+ #Condition for Paperclip.
28
+ elsif @object.send(@field).class.to_s =~ /Paperclip/
29
+ if (@object.send(@field).options[:storage].to_s =='s3')
30
+ @file_path=@object.send(@field).url
31
+
32
+ else
33
+ @file_path=@object.send(@field).path
34
+ end
35
+ end
36
+
37
+ if File.exists?(@file_path)
38
+ @image_tag_options[:'data-geometry'] = geometry(@file_path).join(",")
39
+
40
+ if @fit_image_geometry
41
+ fit_image_geometry = fit_image_geometry(@file_path)
42
+
43
+ @form_options[:'style'] = "margin-left: #{375 - (fit_image_geometry[0]/2) - 15}px;"
44
+
45
+ @image_tag_options[:style] = ""
46
+ @image_tag_options[:style] << "width: #{fit_image_geometry[0]}px !important;"
47
+ @image_tag_options[:style] << "height: #{fit_image_geometry[1]}px !important;"
48
+ @image_tag_options[:style] << "border: 1px solid #AAA !important;"
49
+ end
50
+
51
+ elsif @object.respond_to?("original_#{@field}")
52
+ _data = @object.send("original_#{@field}")
53
+ if _data
54
+ _data = _data.data
55
+ image = MiniMagick::Image.read(_data)
56
+ @image_tag_options[:'data-geometry'] = [image[:width], image[:height]].join(",")
57
+ end
58
+ end
59
+
60
+ respond_to do |format|
61
+ format.html
62
+ format.js { render :edit, :layout => false }
63
+ end
64
+ end
65
+
66
+ def update
67
+ if File.exists?(@object.send(params[:crop_field]).path)
68
+ @object.rails_admin_crop! params.merge(crop_process_before: '+repage', crop_process_after: '+repage')
69
+
70
+ elsif @object.try("original_#{params[:crop_field]}")
71
+ _old_filename = @object.send("#{params[:crop_field]}_file_name")
72
+ _data = @object.send("original_#{params[:crop_field]}")
73
+ if _data
74
+ _data = _data.data
75
+ _temp = Tempfile.new(_old_filename)
76
+ _temp.binmode
77
+ _temp.write _data
78
+ File.unlink(@object.send(params[:crop_field]).path) if File.symlink?(@object.send(params[:crop_field]).path)
79
+ File.symlink(_temp.path, @object.send(params[:crop_field]).path)
80
+ # @object.send("#{params[:crop_field]}=", _temp)
81
+ # @object.send(params[:crop_field]).instance_write(:file_name, _old_filename)#"#{SecureRandom.hex}#{File.extname(_old_filename)}")
82
+ @object.class.skip_callback(:save, :after, "original_#{params[:crop_field]}_to_db".to_sym)
83
+ @object.save
84
+ @object.class.set_callback(:save, :after, "original_#{params[:crop_field]}_to_db".to_sym)
85
+ @object.rails_admin_crop! params.merge(crop_process_before: '+repage', crop_process_after: '+repage')
86
+ _temp.unlink
87
+ end
88
+ end
89
+
90
+ respond_to do |format|
91
+ format.html { redirect_to_on_success }
92
+ format.js do
93
+ asset = @object.send @field
94
+ urls = {:original => asset.url}
95
+ thumbnail_names.each {|name| urls[name] = asset.url(name)}
96
+
97
+ render :json => {
98
+ :id => @object.id,
99
+ :label => @model_config.with(:object => @object).object_label,
100
+ :field => @field,
101
+ :urls => urls
102
+ }
103
+ end
104
+ end
105
+ end
106
+
107
+ private
108
+
109
+ def thumbnail_names
110
+ RailsAdminJcrop::AssetEngine.thumbnail_names(@object, @field)
111
+ end
112
+
113
+ def get_fit_image
114
+ @fit_image = params[:fit_image] == "true" ? true : false
115
+ end
116
+
117
+ def get_field
118
+ @field = params[:field]
119
+ end
120
+
121
+ def geometry(image_path)
122
+ image = MiniMagick::Image.open(image_path)
123
+ [image[:width], image[:height]]
124
+ end
125
+
126
+ def fit_image_geometry(image_path)
127
+ image = MiniMagick::Image.open(image_path)
128
+ # Magic number origin: https://github.com/janx/rails_admin_jcrop/pull/2
129
+ image.resize "720x400"
130
+ [image[:width], image[:height]]
131
+ end
132
+
133
+ def cropping?
134
+ [:crop_x, :crop_y, :crop_w, :crop_h].all? {|c| params[c].present?}
135
+ end
136
+ end
137
+
138
+ end
@@ -0,0 +1,95 @@
1
+ if Hancock.active_record?
2
+ module Hancock::Gallery::ActiveRecordPaperclip
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include ::Paperclip
7
+ end
8
+
9
+ module ClassMethods
10
+ def hancock_cms_active_record_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
+ if defined?(::PaperclipOptimizer)
23
+ opts[:processors] ||= []
24
+ opts[:processors] << :paperclip_optimizer
25
+ opts[:processors].flatten!
26
+ opts[:processors].uniq!
27
+ end
28
+
29
+ opts[:convert_options] = {all: "-quality 75 -strip"} if opts[:convert_options].blank?
30
+
31
+ if opts[:styles].blank?
32
+ styles_method_name = "#{name}_styles"
33
+ opts[:styles] = lambda { |attachment| attachment.instance.send(styles_method_name) }
34
+ end
35
+
36
+ set_default_auto_crop_params_for name
37
+ end
38
+
39
+ has_attached_file name, opts
40
+ # validates_attachment name, content_type: content_type unless content_type.blank?
41
+ validates_attachment_content_type name, content_type: /\Aimage\/.*\Z/ if is_image
42
+
43
+ class_eval <<-EVAL
44
+ def #{name}_file_name=(val)
45
+ return self[:#{name}_file_name] = "" if val == ""
46
+ return self[:#{name}_file_name] = nil if val == nil
47
+ val = val.to_s
48
+ extension = File.extname(val)[1..-1]
49
+ file_name = val[0..val.size-extension.size-1]
50
+ self[:#{name}_file_name] = "\#{file_name.filename_to_slug}.\#{extension.filename_to_slug}"
51
+ end
52
+
53
+ def #{name}_svg?
54
+ #{name}_content_type =~ /svg/
55
+ end
56
+
57
+ def #{name}_url(opts)
58
+ if #{name}_svg?
59
+ #{name}.url
60
+ else
61
+ #{name}.url(opts)
62
+ end
63
+ end
64
+ EVAL
65
+ if defined?(::PaperclipOptimizer)
66
+ class_eval <<-EVAL
67
+ before_#{name}_post_process do
68
+ p_o = self.#{name}.processors.delete :paperclip_optimizer
69
+ self.#{name}.processors << p_o if p_o
70
+ true
71
+ end
72
+ EVAL
73
+ end
74
+ jcrop_options ||= {}
75
+ if jcrop_options
76
+ class_eval <<-EVAL
77
+ def #{name}_jcrop_options
78
+ #{jcrop_options}
79
+ end
80
+ EVAL
81
+ end
82
+ if styles_method_name
83
+ class_eval <<-EVAL
84
+ def #{styles_method_name}
85
+ {
86
+ thumb: '128x128'
87
+ }
88
+ end
89
+ EVAL
90
+ end
91
+
92
+ end
93
+ end
94
+ end
95
+ end