rails_responsive_images 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -5
- data/app/controllers/rails_responsive_images/assets_controller.rb +2 -19
- data/app/models/rails_responsive_images/image.rb +20 -0
- data/config/routes.rb +1 -1
- data/lib/rails_responsive_images/version.rb +1 -1
- data/lib/tasks/rails_responsive_images.rake +38 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 843b8ec2d4b097ea84360d505d967f80bc26eed4
|
4
|
+
data.tar.gz: 00becd925cc066477f201671c119c0566e29fdb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb312fc7220ea6e51af9d00f1e56dc3e54e1ad5b8b934ac833089cb6a26e20eff66d2506fa50388de44c0c1cc6f79ab0d5259e2e8b613c80688e4e559508bca1
|
7
|
+
data.tar.gz: 07507cd44debe7ded4894ccffd313cc75758f26f788007d19de0700c790a4cf8f81e521f3cf064fbe6373df9bb5a5e2f64b1e456cbca49e8bbff3a6cb5a95b9f
|
data/README.md
CHANGED
@@ -1,12 +1,17 @@
|
|
1
|
-
#
|
1
|
+
# Rails responsive images
|
2
2
|
|
3
|
-
A Rails image_tag() extension to generate HTML5 <picture> tag markup from the W3C HTML Responsive Images Extension Proposal.
|
3
|
+
A Rails image_tag() extension to generate HTML5 <picture> tag markup from the W3C HTML Responsive Images Extension Proposal. Dont't care about image resizing, the gem will do the work for you - on the fly ;-) or just use the rake task "rake rails_responsive_images".
|
4
4
|
|
5
|
+
The following image_tag
|
5
6
|
```ruby
|
7
|
+
= image_tag 'awesome/picture.jpeg', alt: 'awesome', responsive: true
|
8
|
+
```
|
9
|
+
will generate this output:
|
10
|
+
```html
|
6
11
|
<picture>
|
7
|
-
<source media="(max-width:
|
8
|
-
<source media="(max-width:
|
9
|
-
<source media="(max-width:
|
12
|
+
<source media="(max-width: 767px)" srcset="/assets/responsive_images_767/picture.jpg">
|
13
|
+
<source media="(max-width: 991px)" srcset="/assets/responsive_images_991/picture.jpg">
|
14
|
+
<source media="(max-width: 1999px)" srcset="/assets/responsive_images_1999/picture.jpg">
|
10
15
|
<img width="2568" height="878" alt="awesome" src="/assets/picture.jpg">
|
11
16
|
</picture>
|
12
17
|
```
|
@@ -44,6 +49,10 @@ Require jquery-picture for cross browser support
|
|
44
49
|
```ruby
|
45
50
|
= image_tag 'awesome/picture.jpeg', alt: 'awesome', responsive: true
|
46
51
|
```
|
52
|
+
## TODO
|
53
|
+
- write tests
|
54
|
+
- write docs
|
55
|
+
- review & cleanup the code
|
47
56
|
|
48
57
|
## Contributing
|
49
58
|
|
@@ -1,6 +1,4 @@
|
|
1
1
|
module RailsResponsiveImages
|
2
|
-
require 'RMagick'
|
3
|
-
require 'fileutils'
|
4
2
|
class AssetsController < ActionController::Base
|
5
3
|
def responsive_image
|
6
4
|
filepath = params[:filepath]
|
@@ -18,29 +16,14 @@ module RailsResponsiveImages
|
|
18
16
|
full_original_filepath = Rails.root.join('app', 'assets', 'images', original_filepath, image_filename)
|
19
17
|
full_responsive_filepath = Rails.root.join('app', 'assets', 'images', filepath, image_filename)
|
20
18
|
|
21
|
-
create_responsive_folder!(full_responsive_filepath)
|
19
|
+
Image.instance.create_responsive_folder!(full_responsive_filepath)
|
22
20
|
|
23
21
|
fail ActionController::RoutingError.new('Not found') unless File.exist?(full_original_filepath)
|
24
22
|
|
25
|
-
generate_responsive_image!(full_original_filepath, requested_image_size, full_responsive_filepath)
|
23
|
+
Image.instance.generate_responsive_image!(full_original_filepath, requested_image_size, full_responsive_filepath)
|
26
24
|
|
27
25
|
mime_type = MIME::Types.type_for("#{full_responsive_filepath}").first.content_type
|
28
26
|
send_file full_responsive_filepath, type: mime_type, disposition: :inline
|
29
27
|
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def create_responsive_folder!(path)
|
34
|
-
dirname = File.dirname(path)
|
35
|
-
unless File.directory?(dirname)
|
36
|
-
FileUtils.mkdir_p(dirname)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def generate_responsive_image!(original_image, size, output_path)
|
41
|
-
img = ::Magick::Image.read(original_image).first
|
42
|
-
img = img.resize_to_fit(size, size)
|
43
|
-
img.write(output_path)
|
44
|
-
end
|
45
28
|
end
|
46
29
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RailsResponsiveImages
|
2
|
+
require 'RMagick'
|
3
|
+
require 'fileutils'
|
4
|
+
class Image
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
def create_responsive_folder!(path)
|
8
|
+
dirname = File.dirname(path)
|
9
|
+
unless File.directory?(dirname)
|
10
|
+
FileUtils.mkdir_p(dirname)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate_responsive_image!(original_image, size, output_path)
|
15
|
+
img = ::Magick::Image.read(original_image).first
|
16
|
+
img = img.resize_to_fit(size, size)
|
17
|
+
img.write(output_path)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
require "rails_responsive_images"
|
2
|
+
|
3
|
+
desc "Rails responsive images builds different sized versions from your images inside of the asset folder"
|
4
|
+
task rails_responsive_images: [ 'rails_responsive_images:check_requirements', 'rails_responsive_images:resize' ]
|
5
|
+
|
6
|
+
namespace :rails_responsive_images do
|
7
|
+
desc "Check for required programms"
|
8
|
+
task :check_requirements do
|
9
|
+
RakeFileUtils.verbose(false)
|
10
|
+
tools = %w[convert] # imagemagick
|
11
|
+
puts "\nResize images with the following tools:"
|
12
|
+
tools.delete_if { |tool| sh('which', tool) rescue false }
|
13
|
+
raise "The following tools must be installed and accessible from the execution path: #{ tools.join(', ') }\n\n" if tools.size > 0
|
14
|
+
end
|
15
|
+
|
16
|
+
task :resize do
|
17
|
+
RakeFileUtils.verbose(false)
|
18
|
+
start_time = Time.now
|
19
|
+
|
20
|
+
file_list = FileList.new(Rails.root.join('app', 'assets', 'images/**/*.{gif,jpeg,jpg,png}').to_s) do |f|
|
21
|
+
f.exclude(/(responsive_images_)\d+/)
|
22
|
+
end
|
23
|
+
|
24
|
+
puts "\nResize #{ file_list.size } image files."
|
25
|
+
|
26
|
+
::RailsResponsiveImages.configuration.image_sizes.each do |size|
|
27
|
+
file_list.split(' ').first.each do |original_filepath|
|
28
|
+
filepath = original_filepath.gsub(Rails.root.join('app', 'assets', 'images').to_s, '')
|
29
|
+
responsive_filepath = Rails.root.join('app', 'assets', 'images', "responsive_images_#{size}", filepath.sub(/\A\//, ''))
|
30
|
+
::RailsResponsiveImages::Image.instance.create_responsive_folder!(responsive_filepath)
|
31
|
+
::RailsResponsiveImages::Image.instance.generate_responsive_image!(original_filepath, size, responsive_filepath)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
minutes, seconds = (Time.now - start_time).divmod 60
|
36
|
+
puts "\nTotal run time: #{minutes}m #{seconds.round}s\n"
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_responsive_images
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christoph Chilian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -95,12 +95,14 @@ files:
|
|
95
95
|
- README.md
|
96
96
|
- Rakefile
|
97
97
|
- app/controllers/rails_responsive_images/assets_controller.rb
|
98
|
+
- app/models/rails_responsive_images/image.rb
|
98
99
|
- config/routes.rb
|
99
100
|
- lib/assets/javascripts/jquery-picture.js
|
100
101
|
- lib/rails_responsive_images.rb
|
101
102
|
- lib/rails_responsive_images/configuration.rb
|
102
103
|
- lib/rails_responsive_images/engine.rb
|
103
104
|
- lib/rails_responsive_images/version.rb
|
105
|
+
- lib/tasks/rails_responsive_images.rake
|
104
106
|
- rails_responsive_images.gemspec
|
105
107
|
- spec/spec_helper.rb
|
106
108
|
homepage: https://chilian.de
|