hancock_cms_gallery 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
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
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
data/Gemfile
ADDED
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,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
|