cropimage_riffpad 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.gitignore.swp +0 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/app/assets/images/Jcrop.gif +0 -0
- data/app/assets/images/blank.gif +0 -0
- data/app/assets/images/fancy_close.png +0 -0
- data/app/assets/images/fancy_loading.png +0 -0
- data/app/assets/images/fancy_nav_left.png +0 -0
- data/app/assets/images/fancy_nav_right.png +0 -0
- data/app/assets/images/fancy_shadow_e.png +0 -0
- data/app/assets/images/fancy_shadow_n.png +0 -0
- data/app/assets/images/fancy_shadow_ne.png +0 -0
- data/app/assets/images/fancy_shadow_nw.png +0 -0
- data/app/assets/images/fancy_shadow_s.png +0 -0
- data/app/assets/images/fancy_shadow_se.png +0 -0
- data/app/assets/images/fancy_shadow_sw.png +0 -0
- data/app/assets/images/fancy_shadow_w.png +0 -0
- data/app/assets/images/fancy_title_left.png +0 -0
- data/app/assets/images/fancy_title_main.png +0 -0
- data/app/assets/images/fancy_title_over.png +0 -0
- data/app/assets/images/fancy_title_right.png +0 -0
- data/app/assets/images/fancybox-x.png +0 -0
- data/app/assets/images/fancybox-y.png +0 -0
- data/app/assets/images/fancybox.png +0 -0
- data/app/assets/javascripts/.DS_Store +0 -0
- data/app/assets/javascripts/awesome_gem.js +14 -0
- data/app/assets/javascripts/jquery.Jcrop.js +1695 -0
- data/app/assets/javascripts/jquery.color.js +123 -0
- data/app/assets/javascripts/jquery.easing-1.3.pack.js +72 -0
- data/app/assets/javascripts/jquery.fancybox-1.3.4.js +1156 -0
- data/app/assets/javascripts/jquery.mousewheel-3.0.4.pack.js +14 -0
- data/app/assets/stylesheets/.DS_Store +0 -0
- data/app/assets/stylesheets/awesome_gem.css.scss +6 -0
- data/app/assets/stylesheets/jquery.Jcrop.css +86 -0
- data/app/assets/stylesheets/jquery.Jcrop.min.css +28 -0
- data/app/assets/stylesheets/jquery.fancybox-1.3.4.css +359 -0
- data/app/assets/stylesheets/style.css +151 -0
- data/app/helpers/cropimage_riffpad/crop_image_helper.rb +65 -0
- data/cropimage_riffpad.gemspec +19 -0
- data/lib/cropimage_riffpad/.DS_Store +0 -0
- data/lib/cropimage_riffpad/crop_image_controller.rb +39 -0
- data/lib/cropimage_riffpad/crop_image_model.rb +28 -0
- data/lib/cropimage_riffpad/paperclip_processors/cropper.rb +27 -0
- data/lib/cropimage_riffpad/version.rb +3 -0
- data/lib/cropimage_riffpad.rb +14 -0
- data/lib/generators/cropimage_riffpad/install_generator.rb +37 -0
- metadata +94 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
module CropImageRiffpad
|
2
|
+
module CropImageHelper
|
3
|
+
def crop_image_helper(model_name, attachment_name, style)
|
4
|
+
@object = ActiveSupport::Inflector.constantize(ActiveSupport::Inflector.classify(model_name)).find(params[:id])
|
5
|
+
html = [javascript_tag(%Q{
|
6
|
+
$(function() {
|
7
|
+
$('#cropbox').Jcrop({
|
8
|
+
onChange: update_crop,
|
9
|
+
onSelect: update_crop,
|
10
|
+
setSelect: [10, 10, 100, 100],
|
11
|
+
aspectRatio: 1
|
12
|
+
});
|
13
|
+
});
|
14
|
+
|
15
|
+
function update_crop(coords) {
|
16
|
+
var rx = 100/coords.w;
|
17
|
+
var ry = 100/coords.h;
|
18
|
+
$('#preview').css({
|
19
|
+
width: Math.round(rx * #{@object.send("#{attachment_name}_geometry", style).width}) + 'px',
|
20
|
+
height: Math.round(ry * #{@object.send("#{attachment_name}_geometry", style).height}) + 'px',
|
21
|
+
marginLeft: '-' + Math.round(rx * coords.x) + 'px',
|
22
|
+
marginTop: '-' + Math.round(ry * coords.y) + 'px'
|
23
|
+
});
|
24
|
+
var ratio = #{@object.send("#{attachment_name}_geometry", :original).width} / #{@object.send("#{attachment_name}_geometry", style).width};
|
25
|
+
$("#crop_x").val(Math.round(coords.x * ratio));
|
26
|
+
$("#crop_y").val(Math.round(coords.y * ratio));
|
27
|
+
$("#crop_w").val(Math.round(coords.w * ratio));
|
28
|
+
$("#crop_h").val(Math.round(coords.h * ratio));
|
29
|
+
}
|
30
|
+
}
|
31
|
+
)]
|
32
|
+
html << content_tag(:div, id: "content") do
|
33
|
+
content_tag(:div, class: "form_show") do
|
34
|
+
[content_tag(:div, class: "fs-header") do
|
35
|
+
content_tag(:p, "Edit Your Profile Photo", class: "fs-title")
|
36
|
+
end,
|
37
|
+
content_tag(:div, class: "fs-content") do
|
38
|
+
[content_tag(:p, "Position or align your photo by resizing the square below.", class: "fs-c-h1"),
|
39
|
+
content_tag(:p, "You can see how these changes will appear in your profile in the image on the right.", class: "fs-c-h2")].join.html_safe
|
40
|
+
end,
|
41
|
+
content_tag(:div, class: "image_2") do
|
42
|
+
image_tag(@object.send("#{attachment_name}").url(style), id: "preview",)
|
43
|
+
end,
|
44
|
+
content_tag(:div, class: "clr") do end,
|
45
|
+
content_tag(:div, class: "border-1") do end,
|
46
|
+
content_tag(:div, class: "image_1") do
|
47
|
+
image_tag(@object.send("#{attachment_name}").url(style), id: "cropbox")
|
48
|
+
end,
|
49
|
+
content_tag(:div, class: "border-1") do end,
|
50
|
+
(form_for @object do |f|
|
51
|
+
fields_array = []
|
52
|
+
fields_array << hidden_field_tag("crop", true)
|
53
|
+
for attribute in [:crop_x, :crop_y, :crop_w, :crop_h]
|
54
|
+
fields_array << f.hidden_field(attribute, :id => attribute)
|
55
|
+
end
|
56
|
+
fields_array << f.submit("Save", class: "button_submit")
|
57
|
+
fields_array.join.html_safe
|
58
|
+
end)].join.html_safe
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
html.join.html_safe
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'cropimage_riffpad/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "cropimage_riffpad"
|
8
|
+
gem.version = CropimageRiffpad::VERSION
|
9
|
+
gem.authors = ["thanh tuan"]
|
10
|
+
gem.email = ["tuan@rubify.com"]
|
11
|
+
gem.description = %q{Crop Image}
|
12
|
+
gem.summary = %q{Crop Image}
|
13
|
+
gem.homepage = ""
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
end
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module CropImageRiffpad
|
2
|
+
module ControllerMethod
|
3
|
+
|
4
|
+
def crop_image(model_name, attachment_name, style) # model_name = "user" => class User | model_name = "user_photo" => UserPhoto
|
5
|
+
[:update, :create].each do |action_name|
|
6
|
+
define_method action_name do # define action update for controller
|
7
|
+
if params[:action].to_s == "update"
|
8
|
+
@object = ActiveSupport::Inflector.constantize(ActiveSupport::Inflector.classify(model_name)).find(params[:id])
|
9
|
+
@object.attributes = params[model_name.to_sym]
|
10
|
+
else
|
11
|
+
@object = ActiveSupport::Inflector.constantize(ActiveSupport::Inflector.classify(model_name)).new(params[model_name.to_sym])
|
12
|
+
end
|
13
|
+
if @object.save
|
14
|
+
params[:id] = @object.id
|
15
|
+
if params[:crop] == "true"
|
16
|
+
redirect_to self.send("#{model_name}_url", @object)
|
17
|
+
else
|
18
|
+
if params[model_name.to_sym] and params[model_name.to_sym][attachment_name.to_sym].blank?
|
19
|
+
responds_to_parent do
|
20
|
+
render :js => "document.location = \"#{escape_javascript(self.send("#{model_name}_url", @object))}\""
|
21
|
+
end
|
22
|
+
else
|
23
|
+
responds_to_parent do
|
24
|
+
crop_action_content = render_to_string :action => :crop
|
25
|
+
render :js => "renderFancyBoxWithContent('#{escape_javascript(crop_action_content)}');"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
edit_action_content = render_to_string :action => params[:action]
|
31
|
+
responds_to_parent do
|
32
|
+
render :js => "$('#container').html('#{escape_javascript(edit_action_content)}');"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CropImageRiffpad
|
2
|
+
module ClassMethods
|
3
|
+
def awesome_crop(attachment_name)
|
4
|
+
# todo - define instance methods
|
5
|
+
attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
|
6
|
+
after_update "preprocess_#{attachment_name}", :if => :cropping?
|
7
|
+
attr_accessible :crop_x, :crop_y, :crop_w, :crop_h
|
8
|
+
self.class_eval do
|
9
|
+
|
10
|
+
def cropping?
|
11
|
+
!crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
|
12
|
+
end
|
13
|
+
|
14
|
+
define_method "#{attachment_name}_geometry" do |style=:original|
|
15
|
+
@geometry ||= {}
|
16
|
+
@geometry[style] ||= Paperclip::Geometry.from_file(self.send(attachment_name).path(style))
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
define_method "preprocess_#{attachment_name}" do
|
22
|
+
self.send(attachment_name).reprocess!
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Paperclip
|
2
|
+
class Cropper < Thumbnail
|
3
|
+
def transformation_command
|
4
|
+
puts "Crop Command command ====> #{crop_command}"
|
5
|
+
if crop_command
|
6
|
+
puts "Super .join ===> #{super.join}"
|
7
|
+
command = crop_command + super.join(' ').sub(/ -crop \S+/, '').split(" ")
|
8
|
+
puts "Transformation command ====> #{command}"
|
9
|
+
target = @attachment.instance
|
10
|
+
target.crop_w=""
|
11
|
+
target.crop_h=""
|
12
|
+
target.crop_x=""
|
13
|
+
target.crop_y=""
|
14
|
+
return command
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def crop_command
|
21
|
+
target = @attachment.instance
|
22
|
+
if target.cropping?
|
23
|
+
["-crop","#{target.crop_w.to_i}x#{target.crop_h.to_i}+#{target.crop_x.to_i}+#{target.crop_y.to_i}"]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'cropimage_riffpad/crop_image_controller'
|
2
|
+
require 'cropimage_riffpad/crop_image_model'
|
3
|
+
require 'cropimage_riffpad/paperclip_processors/cropper'
|
4
|
+
require 'new_responds_to_parent'
|
5
|
+
|
6
|
+
module CropImageRiffpad
|
7
|
+
class Engine < ::Rails::Engine
|
8
|
+
ActiveRecord::Base.extend(AwesomeGem::ClassMethods)
|
9
|
+
ActionController::Base.class_eval do
|
10
|
+
include ActionView::Helpers::JavaScriptHelper
|
11
|
+
end
|
12
|
+
ActionController::Base.extend(AwesomeGem::ControllerMethod)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
|
5
|
+
module CropImageRiffpad
|
6
|
+
module Generators
|
7
|
+
|
8
|
+
class InstallGenerator < Rails::Generators::Base
|
9
|
+
include Rails::Generators::Migration
|
10
|
+
|
11
|
+
source_root File.expand_path("../../templates", __FILE__)
|
12
|
+
|
13
|
+
desc "Creates a Config file and copy locale files to your application."
|
14
|
+
class_option :orm
|
15
|
+
|
16
|
+
def copy_jsfile
|
17
|
+
["awesome_gem.js", "jquery.color.js", "jquery.easing-1.3.pack.js", "jquery.fancybox-1.3.4.js", "jquery.Jcrop.js", "jquery.mousewheel-3.0.4.pack.js"].each do |file|
|
18
|
+
copy_file "../../../app/assets/javascripts/#{file}", "app/assets/javascripts/#{file}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def copy_stylefile
|
23
|
+
["awesome_gem.css.scss", "jquery.fancybox-1.3.4.css", "jquery.Jcrop.css", "jquery.Jcrop.min.css", "style.css"].each do |file|
|
24
|
+
copy_file "../../../app/assets/stylesheets/#{file}", "app/assets/stylesheets/#{file}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def copy_imagesfile
|
29
|
+
["blank.gif", "fancy_close.png", "fancy_loading.png", "fancy_nav_left.png", "fancy_nav_right.png", "fancy_shadow_e.png", "fancy_shadow_e.png", "fancy_shadow_ne.png", "fancy_shadow_nw.png", "fancy_shadow_s.png", "fancy_shadow_se.png", "fancy_shadow_sw.png", "fancy_shadow_w.png", "fancy_title_left.png", "fancy_title_main.png", "fancy_title_over.png", "fancy_title_right.png", "fancybox-x.png", "fancybox-y.png", "fancybox.png", "Jcrop.gif"].each do |file|
|
30
|
+
copy_file "../../../app/assets/images/#{file}", "app/assets/images/#{file}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cropimage_riffpad
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- thanh tuan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-24 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Crop Image
|
15
|
+
email:
|
16
|
+
- tuan@rubify.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- .gitignore.swp
|
23
|
+
- Gemfile
|
24
|
+
- LICENSE.txt
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- app/assets/images/Jcrop.gif
|
28
|
+
- app/assets/images/blank.gif
|
29
|
+
- app/assets/images/fancy_close.png
|
30
|
+
- app/assets/images/fancy_loading.png
|
31
|
+
- app/assets/images/fancy_nav_left.png
|
32
|
+
- app/assets/images/fancy_nav_right.png
|
33
|
+
- app/assets/images/fancy_shadow_e.png
|
34
|
+
- app/assets/images/fancy_shadow_n.png
|
35
|
+
- app/assets/images/fancy_shadow_ne.png
|
36
|
+
- app/assets/images/fancy_shadow_nw.png
|
37
|
+
- app/assets/images/fancy_shadow_s.png
|
38
|
+
- app/assets/images/fancy_shadow_se.png
|
39
|
+
- app/assets/images/fancy_shadow_sw.png
|
40
|
+
- app/assets/images/fancy_shadow_w.png
|
41
|
+
- app/assets/images/fancy_title_left.png
|
42
|
+
- app/assets/images/fancy_title_main.png
|
43
|
+
- app/assets/images/fancy_title_over.png
|
44
|
+
- app/assets/images/fancy_title_right.png
|
45
|
+
- app/assets/images/fancybox-x.png
|
46
|
+
- app/assets/images/fancybox-y.png
|
47
|
+
- app/assets/images/fancybox.png
|
48
|
+
- app/assets/javascripts/.DS_Store
|
49
|
+
- app/assets/javascripts/awesome_gem.js
|
50
|
+
- app/assets/javascripts/jquery.Jcrop.js
|
51
|
+
- app/assets/javascripts/jquery.color.js
|
52
|
+
- app/assets/javascripts/jquery.easing-1.3.pack.js
|
53
|
+
- app/assets/javascripts/jquery.fancybox-1.3.4.js
|
54
|
+
- app/assets/javascripts/jquery.mousewheel-3.0.4.pack.js
|
55
|
+
- app/assets/stylesheets/.DS_Store
|
56
|
+
- app/assets/stylesheets/awesome_gem.css.scss
|
57
|
+
- app/assets/stylesheets/jquery.Jcrop.css
|
58
|
+
- app/assets/stylesheets/jquery.Jcrop.min.css
|
59
|
+
- app/assets/stylesheets/jquery.fancybox-1.3.4.css
|
60
|
+
- app/assets/stylesheets/style.css
|
61
|
+
- app/helpers/cropimage_riffpad/crop_image_helper.rb
|
62
|
+
- cropimage_riffpad.gemspec
|
63
|
+
- lib/cropimage_riffpad.rb
|
64
|
+
- lib/cropimage_riffpad/.DS_Store
|
65
|
+
- lib/cropimage_riffpad/crop_image_controller.rb
|
66
|
+
- lib/cropimage_riffpad/crop_image_model.rb
|
67
|
+
- lib/cropimage_riffpad/paperclip_processors/cropper.rb
|
68
|
+
- lib/cropimage_riffpad/version.rb
|
69
|
+
- lib/generators/cropimage_riffpad/install_generator.rb
|
70
|
+
homepage: ''
|
71
|
+
licenses: []
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 1.8.24
|
91
|
+
signing_key:
|
92
|
+
specification_version: 3
|
93
|
+
summary: Crop Image
|
94
|
+
test_files: []
|