cropimage_riffpad 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/.gitignore +17 -0
  2. data/.gitignore.swp +0 -0
  3. data/Gemfile +13 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/images/Jcrop.gif +0 -0
  8. data/app/assets/images/blank.gif +0 -0
  9. data/app/assets/images/fancy_close.png +0 -0
  10. data/app/assets/images/fancy_loading.png +0 -0
  11. data/app/assets/images/fancy_nav_left.png +0 -0
  12. data/app/assets/images/fancy_nav_right.png +0 -0
  13. data/app/assets/images/fancy_shadow_e.png +0 -0
  14. data/app/assets/images/fancy_shadow_n.png +0 -0
  15. data/app/assets/images/fancy_shadow_ne.png +0 -0
  16. data/app/assets/images/fancy_shadow_nw.png +0 -0
  17. data/app/assets/images/fancy_shadow_s.png +0 -0
  18. data/app/assets/images/fancy_shadow_se.png +0 -0
  19. data/app/assets/images/fancy_shadow_sw.png +0 -0
  20. data/app/assets/images/fancy_shadow_w.png +0 -0
  21. data/app/assets/images/fancy_title_left.png +0 -0
  22. data/app/assets/images/fancy_title_main.png +0 -0
  23. data/app/assets/images/fancy_title_over.png +0 -0
  24. data/app/assets/images/fancy_title_right.png +0 -0
  25. data/app/assets/images/fancybox-x.png +0 -0
  26. data/app/assets/images/fancybox-y.png +0 -0
  27. data/app/assets/images/fancybox.png +0 -0
  28. data/app/assets/javascripts/.DS_Store +0 -0
  29. data/app/assets/javascripts/awesome_gem.js +14 -0
  30. data/app/assets/javascripts/jquery.Jcrop.js +1695 -0
  31. data/app/assets/javascripts/jquery.color.js +123 -0
  32. data/app/assets/javascripts/jquery.easing-1.3.pack.js +72 -0
  33. data/app/assets/javascripts/jquery.fancybox-1.3.4.js +1156 -0
  34. data/app/assets/javascripts/jquery.mousewheel-3.0.4.pack.js +14 -0
  35. data/app/assets/stylesheets/.DS_Store +0 -0
  36. data/app/assets/stylesheets/awesome_gem.css.scss +6 -0
  37. data/app/assets/stylesheets/jquery.Jcrop.css +86 -0
  38. data/app/assets/stylesheets/jquery.Jcrop.min.css +28 -0
  39. data/app/assets/stylesheets/jquery.fancybox-1.3.4.css +359 -0
  40. data/app/assets/stylesheets/style.css +151 -0
  41. data/app/helpers/cropimage_riffpad/crop_image_helper.rb +65 -0
  42. data/cropimage_riffpad.gemspec +19 -0
  43. data/lib/cropimage_riffpad/.DS_Store +0 -0
  44. data/lib/cropimage_riffpad/crop_image_controller.rb +39 -0
  45. data/lib/cropimage_riffpad/crop_image_model.rb +28 -0
  46. data/lib/cropimage_riffpad/paperclip_processors/cropper.rb +27 -0
  47. data/lib/cropimage_riffpad/version.rb +3 -0
  48. data/lib/cropimage_riffpad.rb +14 -0
  49. data/lib/generators/cropimage_riffpad/install_generator.rb +37 -0
  50. 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,3 @@
1
+ module CropimageRiffpad
2
+ VERSION = "0.0.1"
3
+ 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: []