jekyll_picture_tag 1.7.0 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.solargraph.yml +15 -0
- data/.travis.yml +4 -7
- data/Dockerfile +9 -0
- data/docs/Gemfile +4 -0
- data/docs/Gemfile.lock +249 -0
- data/docs/_config.yml +13 -0
- data/docs/_layouts/directory.html +32 -0
- data/docs/assets/style.css +31 -0
- data/{contributing.md → docs/contributing.md} +57 -15
- data/docs/{examples/_data/picture.yml → example_presets.md} +36 -25
- data/docs/global_configuration.md +61 -3
- data/docs/index.md +114 -0
- data/docs/installation.md +36 -21
- data/docs/migration.md +4 -0
- data/docs/notes.md +64 -58
- data/docs/output.md +63 -0
- data/docs/presets.md +175 -221
- data/docs/releases.md +64 -0
- data/docs/usage.md +91 -79
- data/jekyll_picture_tag.gemspec +3 -1
- data/lib/jekyll_picture_tag.rb +27 -10
- data/lib/jekyll_picture_tag/defaults/global.yml +2 -0
- data/lib/jekyll_picture_tag/defaults/presets.yml +2 -0
- data/lib/jekyll_picture_tag/generated_image.rb +105 -19
- data/lib/jekyll_picture_tag/instructions.rb +1 -0
- data/lib/jekyll_picture_tag/instructions/arg_splitter.rb +68 -0
- data/lib/jekyll_picture_tag/instructions/configuration.rb +47 -11
- data/lib/jekyll_picture_tag/instructions/html_attributes.rb +14 -8
- data/lib/jekyll_picture_tag/instructions/preset.rb +34 -14
- data/lib/jekyll_picture_tag/instructions/set.rb +18 -8
- data/lib/jekyll_picture_tag/instructions/tag_parser.rb +59 -69
- data/lib/jekyll_picture_tag/output_formats/basic.rb +35 -6
- data/lib/jekyll_picture_tag/output_formats/data_attributes.rb +4 -1
- data/lib/jekyll_picture_tag/router.rb +16 -0
- data/lib/jekyll_picture_tag/source_image.rb +6 -1
- data/lib/jekyll_picture_tag/srcsets/basic.rb +45 -19
- data/lib/jekyll_picture_tag/srcsets/pixel_ratio.rb +1 -3
- data/lib/jekyll_picture_tag/srcsets/width.rb +1 -1
- data/lib/jekyll_picture_tag/utils.rb +18 -0
- data/lib/jekyll_picture_tag/version.rb +1 -1
- data/readme.md +43 -200
- metadata +49 -13
- data/docs/examples/_config.yml +0 -10
- data/docs/examples/post.md +0 -46
- data/docs/readme.md +0 -23
@@ -69,12 +69,30 @@ module PictureTag
|
|
69
69
|
element.media = srcset.media_attribute if srcset.media
|
70
70
|
end
|
71
71
|
|
72
|
-
#
|
72
|
+
# GeneratedImage class, not HTML
|
73
73
|
def build_fallback_image
|
74
|
+
return fallback_candidate if fallback_candidate.exists?
|
75
|
+
|
76
|
+
build_new_fallback_image
|
77
|
+
end
|
78
|
+
|
79
|
+
def fallback_candidate
|
80
|
+
@fallback_candidate ||= GeneratedImage.new(
|
81
|
+
source_file: PictureTag.source_images.first,
|
82
|
+
format: PictureTag.fallback_format,
|
83
|
+
width: PictureTag.fallback_width,
|
84
|
+
crop: PictureTag.crop,
|
85
|
+
gravity: PictureTag.gravity
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
def build_new_fallback_image
|
74
90
|
GeneratedImage.new(
|
75
91
|
source_file: PictureTag.source_images.first,
|
76
92
|
format: PictureTag.fallback_format,
|
77
|
-
width: checked_fallback_width
|
93
|
+
width: checked_fallback_width,
|
94
|
+
crop: PictureTag.crop,
|
95
|
+
gravity: PictureTag.gravity
|
78
96
|
)
|
79
97
|
end
|
80
98
|
|
@@ -95,15 +113,26 @@ module PictureTag
|
|
95
113
|
content.add_parent anchor
|
96
114
|
end
|
97
115
|
|
116
|
+
def source
|
117
|
+
PictureTag.source_images.first
|
118
|
+
end
|
119
|
+
|
120
|
+
def source_width
|
121
|
+
if PictureTag.crop
|
122
|
+
fallback_candidate.cropped_source_width
|
123
|
+
else
|
124
|
+
source.width
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
98
128
|
def checked_fallback_width
|
99
|
-
source = PictureTag.source_images.first
|
100
129
|
target = PictureTag.fallback_width
|
101
130
|
|
102
|
-
if target >
|
131
|
+
if target > source_width
|
103
132
|
Utils.warning "#{source.shortname} is smaller than the " \
|
104
|
-
"requested fallback width of #{target}px. Using #{
|
133
|
+
"requested fallback width of #{target}px. Using #{source_width}" \
|
105
134
|
' px instead.'
|
106
|
-
|
135
|
+
source_width
|
107
136
|
else
|
108
137
|
target
|
109
138
|
end
|
@@ -18,7 +18,10 @@ module PictureTag
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def add_sizes(element, srcset)
|
21
|
-
|
21
|
+
return unless srcset.sizes
|
22
|
+
|
23
|
+
attribute = PictureTag.preset['data_sizes'] ? 'data-sizes' : 'sizes'
|
24
|
+
element.attributes << { attribute => srcset.sizes }
|
22
25
|
end
|
23
26
|
|
24
27
|
def build_noscript(base_content)
|
@@ -47,6 +47,14 @@ module PictureTag
|
|
47
47
|
@instructions.source_images
|
48
48
|
end
|
49
49
|
|
50
|
+
def crop(media = nil)
|
51
|
+
@instructions.crop(media)
|
52
|
+
end
|
53
|
+
|
54
|
+
def gravity(media = nil)
|
55
|
+
@instructions.gravity(media)
|
56
|
+
end
|
57
|
+
|
50
58
|
# Config Forwarding
|
51
59
|
|
52
60
|
def source_dir
|
@@ -69,6 +77,14 @@ module PictureTag
|
|
69
77
|
config.pconfig
|
70
78
|
end
|
71
79
|
|
80
|
+
def disabled?
|
81
|
+
config.disabled?
|
82
|
+
end
|
83
|
+
|
84
|
+
def fast_build?
|
85
|
+
config.fast_build?
|
86
|
+
end
|
87
|
+
|
72
88
|
# Preset forwarding
|
73
89
|
|
74
90
|
def widths(media)
|
@@ -4,6 +4,7 @@ module PictureTag
|
|
4
4
|
# to be reused by many different generated images.
|
5
5
|
class SourceImage
|
6
6
|
attr_reader :name, :shortname, :missing, :media_preset
|
7
|
+
attr_accessor :digest_guess
|
7
8
|
include MiniMagick
|
8
9
|
|
9
10
|
def initialize(relative_filename, media_preset = nil)
|
@@ -23,12 +24,16 @@ module PictureTag
|
|
23
24
|
def digest
|
24
25
|
@digest ||= if @missing
|
25
26
|
'x' * 6
|
27
|
+
elsif PictureTag.fast_build? && @digest_guess
|
28
|
+
# Digest guess will be handed off to this class by the first
|
29
|
+
# generated image which needs it (via attr_accessor).
|
30
|
+
@digest_guess
|
26
31
|
else
|
27
32
|
Digest::MD5.hexdigest(File.read(@name))[0..5]
|
28
33
|
end
|
29
34
|
end
|
30
35
|
|
31
|
-
# Includes path relative to default
|
36
|
+
# Includes path relative to default source folder and the original filename.
|
32
37
|
def base_name
|
33
38
|
@shortname.delete_suffix File.extname(@shortname)
|
34
39
|
end
|
@@ -24,7 +24,7 @@ module PictureTag
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def files
|
27
|
-
@files ||=
|
27
|
+
@files ||= build_files
|
28
28
|
end
|
29
29
|
|
30
30
|
def to_a
|
@@ -46,15 +46,6 @@ module PictureTag
|
|
46
46
|
nil
|
47
47
|
end
|
48
48
|
|
49
|
-
# Check our source image size vs requested sizes
|
50
|
-
def check_widths(targets)
|
51
|
-
if targets.any? { |t| t > @source_image.width }
|
52
|
-
handle_small_source(targets, @source_image.width)
|
53
|
-
else
|
54
|
-
targets
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
49
|
# Generates an HTML attribute
|
59
50
|
def media_attribute
|
60
51
|
"(#{PictureTag.media_presets[@media]})"
|
@@ -62,24 +53,59 @@ module PictureTag
|
|
62
53
|
|
63
54
|
private
|
64
55
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
56
|
+
def build_files
|
57
|
+
# By 'files', we mean the GeneratedImage class.
|
58
|
+
return target_files if target_files.all?(&:exists?)
|
59
|
+
|
60
|
+
# This triggers GeneratedImage to actually build an image file.
|
61
|
+
files = checked_targets
|
62
|
+
files.each(&:generate)
|
63
|
+
|
64
|
+
files
|
65
|
+
end
|
66
|
+
|
67
|
+
def checked_targets
|
68
|
+
if target_files.any? { |f| f.width > source_width }
|
70
69
|
|
71
|
-
|
70
|
+
small_source_warn
|
72
71
|
|
73
|
-
|
72
|
+
files = target_files.reject { |f| f.width >= source_width }
|
73
|
+
files.push(generate_file(source_width))
|
74
|
+
end
|
75
|
+
|
76
|
+
files || target_files
|
77
|
+
end
|
78
|
+
|
79
|
+
def source_width
|
80
|
+
@source_width ||= if PictureTag.crop(@media)
|
81
|
+
target_files.first.cropped_source_width
|
82
|
+
else
|
83
|
+
@source_image.width
|
84
|
+
end
|
85
|
+
end
|
74
86
|
|
75
|
-
|
87
|
+
def target_files
|
88
|
+
@target_files ||= widths.collect { |w| generate_file(w) }
|
89
|
+
end
|
90
|
+
|
91
|
+
def small_source_warn
|
92
|
+
Utils.warning(
|
93
|
+
<<~HEREDOC
|
94
|
+
#{@source_image.shortname}
|
95
|
+
is #{source_width}px wide (after cropping, if applicable),
|
96
|
+
smaller than at least one size in the set #{widths}.
|
97
|
+
Will not enlarge.
|
98
|
+
HEREDOC
|
99
|
+
)
|
76
100
|
end
|
77
101
|
|
78
102
|
def generate_file(width)
|
79
103
|
GeneratedImage.new(
|
80
104
|
source_file: @source_image,
|
81
105
|
width: width,
|
82
|
-
format: @input_format
|
106
|
+
format: @input_format,
|
107
|
+
crop: PictureTag.crop(@media),
|
108
|
+
gravity: PictureTag.gravity(@media)
|
83
109
|
)
|
84
110
|
end
|
85
111
|
end
|
@@ -6,11 +6,9 @@ module PictureTag
|
|
6
6
|
private
|
7
7
|
|
8
8
|
def widths
|
9
|
-
|
9
|
+
PictureTag.preset['pixel_ratios'].collect do |p|
|
10
10
|
p * PictureTag.preset['base_width']
|
11
11
|
end
|
12
|
-
|
13
|
-
check_widths target
|
14
12
|
end
|
15
13
|
|
16
14
|
def build_srcset_entry(file)
|
@@ -2,6 +2,24 @@ module PictureTag
|
|
2
2
|
# This is a little module to hold logic that doesn't fit other places. If it
|
3
3
|
# starts getting big, refactor.
|
4
4
|
module Utils
|
5
|
+
# These are valid ImageMagick gravity arguments (relevant to our use
|
6
|
+
# case):
|
7
|
+
GRAVITIES =
|
8
|
+
%w[center
|
9
|
+
north
|
10
|
+
northeast
|
11
|
+
east
|
12
|
+
southeast
|
13
|
+
south
|
14
|
+
southwest
|
15
|
+
west
|
16
|
+
northwest].freeze
|
17
|
+
|
18
|
+
# This is an attempt to recognize valid imagemagick geometry arguments
|
19
|
+
# with regex. It only tries to match values which don't preserve aspect
|
20
|
+
# ratio, as they're the ones people might actually need here.
|
21
|
+
GEOMETRY_REGEX = /\A\d*%?[x:]?\d*[%!]?([+-]\d+){,2}\Z/i.freeze
|
22
|
+
|
5
23
|
class << self
|
6
24
|
# Configure Jekyll to keep our generated files
|
7
25
|
def keep_files
|
data/readme.md
CHANGED
@@ -1,216 +1,59 @@
|
|
1
1
|
# Jekyll Picture Tag
|
2
2
|
|
3
|
-
**
|
3
|
+
**Responsive Images done correctly.**
|
4
4
|
|
5
|
-
It's
|
6
|
-
|
7
|
-
automated.
|
5
|
+
It's simple to throw a photo on a page and call it a day, but doing justice to users on all
|
6
|
+
different browsers and devices is tedious and tricky. Tedious, tricky things should be automated.
|
8
7
|
|
9
|
-
Jekyll Picture Tag
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
formats, and can be configured to work with JavaScript libraries such as
|
14
|
-
[LazyLoad](https://github.com/verlok/lazyload).
|
8
|
+
Jekyll Picture Tag automatically builds cropped, resized, and reformatted images, builds several
|
9
|
+
kinds of markup, offers extensive configuration while requiring none, and solves both the art
|
10
|
+
direction and resolution switching problems with a little YAML configuration and a simple template
|
11
|
+
tag.
|
15
12
|
|
16
|
-
##
|
13
|
+
## Why use Responsive Images?
|
17
14
|
|
18
|
-
|
15
|
+
**Performance:** The fastest sites are static sites, but if you plonk a 2mb picture of your dog at
|
16
|
+
the top of a blog post you throw it all away. Responsive images allow you to keep your site fast,
|
17
|
+
without compromising image quality.
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
* [Presets](docs/presets.md)
|
24
|
-
* [Other notes](docs/notes.md)
|
25
|
-
* [Contribute](contributing.md)
|
26
|
-
* [Release History](#release-history)
|
27
|
-
* [License](LICENSE.txt)
|
19
|
+
**Design:** Your desktop image may not work well on mobile, regardless of its resolution. We often
|
20
|
+
want to do more than just resize images for different screen sizes, we want to crop them or use a
|
21
|
+
different image entirely.
|
28
22
|
|
29
23
|
## Why use Jekyll Picture Tag?
|
30
24
|
|
31
|
-
**
|
32
|
-
|
25
|
+
**Developer Sanity:** If you want to serve multiple images in multiple formats and resolutions, you
|
26
|
+
have a litany of markup to write and a big pile of images to generate and organize. Jekyll Picture
|
27
|
+
Tag is your responsive images minion - give it simple instructions and it'll handle the rest.
|
33
28
|
|
34
|
-
|
35
|
-
want to do more than just resize images for different screen sizes, we want to crop them or use a
|
36
|
-
different image entirely.
|
29
|
+
## Features
|
37
30
|
|
38
|
-
|
39
|
-
|
40
|
-
|
31
|
+
* Generate piles of cropped, resized, and converted image files.
|
32
|
+
* Generate corresponding markup in several different formats.
|
33
|
+
* Configure it easily, or not at all.
|
34
|
+
* Make Lighthouse happy.
|
41
35
|
|
42
|
-
|
43
|
-
- Inform the browser about the image itself-- format, size, URI, and the screen sizes where it
|
44
|
-
should be used.
|
45
|
-
- Inform the browser how large the space for that image on the page will be (which also probably
|
46
|
-
has associated media queries).
|
36
|
+
## Documentation:
|
47
37
|
|
48
|
-
|
38
|
+
https://rbuchberger.github.io/jekyll_picture_tag/
|
49
39
|
|
50
|
-
##
|
40
|
+
## Changelog:
|
41
|
+
|
42
|
+
https://rbuchberger.github.io/jekyll_picture_tag/releases
|
43
|
+
|
44
|
+
Latest versions:
|
45
|
+
|
46
|
+
* 1.10.0 May 11, 2020
|
47
|
+
* **Image Cropping support!** access the power of ImageMagick's `crop` function.
|
48
|
+
* Don't issue a warning when `default` preset is not found.
|
49
|
+
* Documentation improvements
|
50
|
+
* 1.10.1 July 2, 2020
|
51
|
+
* Bugfix for erroneously regenerated images
|
52
|
+
|
53
|
+
## Help Wanted
|
51
54
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
tag parameter!
|
58
|
-
|
59
|
-
## Quick start / Demo
|
60
|
-
|
61
|
-
**All configuration is optional.** Here's the simplest possible use case:
|
62
|
-
|
63
|
-
Add j_p_t to your gemfile:
|
64
|
-
|
65
|
-
```ruby
|
66
|
-
group :jekyll_plugins do
|
67
|
-
gem 'jekyll_picture_tag'
|
68
|
-
end
|
69
|
-
```
|
70
|
-
|
71
|
-
Run `bundle install`
|
72
|
-
|
73
|
-
Put this liquid tag somewhere:
|
74
|
-
|
75
|
-
`{% picture test.jpg %}`
|
76
|
-
|
77
|
-
Get this in your generated site:
|
78
|
-
|
79
|
-
```html
|
80
|
-
<!-- Formatted for readability -->
|
81
|
-
|
82
|
-
<img src="/generated/test-800-195f7d.jpg"
|
83
|
-
srcset="
|
84
|
-
/generated/test-400-195f7d.jpg 400w,
|
85
|
-
/generated/test-600-195f7d.jpg 600w,
|
86
|
-
/generated/test-800-195f7d.jpg 800w,
|
87
|
-
/generated/test-1000-195f7d.jpg 1000w
|
88
|
-
">
|
89
|
-
```
|
90
|
-
|
91
|
-
### Look man, that's cool and all but I just want webp.
|
92
|
-
|
93
|
-
Create `_data/picture.yml`, add the following:
|
94
|
-
|
95
|
-
```yml
|
96
|
-
markup_presets:
|
97
|
-
default:
|
98
|
-
formats: [webp, original]
|
99
|
-
```
|
100
|
-
|
101
|
-
If you get errors, make sure you have imagemagick installed with a webp delegate.
|
102
|
-
|
103
|
-
### Here's a more complex example:
|
104
|
-
|
105
|
-
```yml
|
106
|
-
# _data/picture.yml
|
107
|
-
|
108
|
-
media_presets:
|
109
|
-
mobile: 'max-width: 600px'
|
110
|
-
|
111
|
-
markup_presets:
|
112
|
-
default:
|
113
|
-
widths: [600, 900, 1200]
|
114
|
-
formats: [webp, original]
|
115
|
-
sizes:
|
116
|
-
mobile: 80vw
|
117
|
-
size: 500px
|
118
|
-
```
|
119
|
-
|
120
|
-
Write this:
|
121
|
-
|
122
|
-
`{% picture test.jpg mobile: test2.jpg --alt Alternate Text %}`
|
123
|
-
|
124
|
-
Get this:
|
125
|
-
|
126
|
-
```html
|
127
|
-
<!-- Formatted for readability -->
|
128
|
-
|
129
|
-
<picture>
|
130
|
-
<source
|
131
|
-
sizes="(max-width: 600px) 80vw, 600px"
|
132
|
-
media="(max-width: 600px)"
|
133
|
-
srcset="
|
134
|
-
/generated/test2-600-21bb6f.webp 600w,
|
135
|
-
/generated/test2-900-21bb6f.webp 900w,
|
136
|
-
/generated/test2-1200-21bb6f.webp 1200w
|
137
|
-
"
|
138
|
-
type="image/webp">
|
139
|
-
<source
|
140
|
-
sizes="(max-width: 600px) 80vw, 600px"
|
141
|
-
srcset="
|
142
|
-
/generated/test-600-195f7d.webp 600w,
|
143
|
-
/generated/test-900-195f7d.webp 900w,
|
144
|
-
/generated/test-1200-195f7d.webp 1200w
|
145
|
-
"
|
146
|
-
type="image/webp">
|
147
|
-
<source
|
148
|
-
sizes="(max-width: 600px) 80vw, 600px"
|
149
|
-
media="(max-width: 600px)"
|
150
|
-
srcset="
|
151
|
-
/generated/test2-600-21bb6f.jpg 600w,
|
152
|
-
/generated/test2-900-21bb6f.jpg 900w,
|
153
|
-
/generated/test2-1200-21bb6f.jpg 1200w
|
154
|
-
"
|
155
|
-
type="image/jpeg">
|
156
|
-
<source
|
157
|
-
sizes="(max-width: 600px) 80vw, 600px"
|
158
|
-
srcset="
|
159
|
-
/generated/test-600-195f7d.jpg 600w,
|
160
|
-
/generated/test-900-195f7d.jpg 900w,
|
161
|
-
/generated/test-1200-195f7d.jpg 1200w
|
162
|
-
"
|
163
|
-
type="image/jpeg">
|
164
|
-
<img src="/generated/test-800-195f7d.jpg" alt="Alternate Text">
|
165
|
-
</picture>
|
166
|
-
```
|
167
|
-
|
168
|
-
Jekyll Picture Tag ultimately relies on [ImageMagick](https://www.imagemagick.org/script/index.php)
|
169
|
-
for image conversions, so it must be installed on your system. There's a very good chance you
|
170
|
-
already have it. If you want to build webp images, you will need to install a webp delegate for it
|
171
|
-
as well.
|
172
|
-
|
173
|
-
## Release History
|
174
|
-
|
175
|
-
* 1.7.0 Aug 12, 2019
|
176
|
-
* Add support for setting generated image quality, either generally or specific to given
|
177
|
-
formats.
|
178
|
-
* Add support for spaces and other url-encoded characters in filenames
|
179
|
-
* Documentation restructure - Moved it out of the wiki, into the `docs` folder.
|
180
|
-
* Bugfix: Fallback image width will now be checked against source image width.
|
181
|
-
* Bugfix: Minor fix to nomarkdown wrapper output
|
182
|
-
* link_source will now target the base source image, rather than finding the biggest one.
|
183
|
-
* Remove fastimage dependency, add addressable dependency.
|
184
|
-
* Moderately significant refactoring and code cleanup
|
185
|
-
* Decent set of tests added
|
186
|
-
* 1.6.0 Jul 2, 2019:
|
187
|
-
* Missing Preset warning respects `data_dir` setting
|
188
|
-
* Add `continue_on_missing` option
|
189
|
-
* 1.5.0 Jun 26, 2019:
|
190
|
-
* better `{::nomarkdown}` necessity detection
|
191
|
-
* allow user to override `{::nomarkdown}` autodetection
|
192
|
-
* 1.4.0 Jun 26, 2019:
|
193
|
-
* Rename gem from `jekyll-picture-tag` to `jekyll_picture_tag`, allowing us to use rubygems again.
|
194
|
-
* Add new output format: `naked_srcset`.
|
195
|
-
* 1.3.1 Jun 21, 2019: Bugfix
|
196
|
-
* 1.3.0 Jun 7, 2019:
|
197
|
-
* Initial compatibility with Jekyll 4.0
|
198
|
-
* bugfixes
|
199
|
-
* change to generated image naming-- The first build after this update will be longer, and you
|
200
|
-
might want to clear out your generated images.
|
201
|
-
* 1.2.0 Feb 9, 2019:
|
202
|
-
* Add nomarkdown fix
|
203
|
-
* noscript option
|
204
|
-
* relative url option
|
205
|
-
* anchor tag wrappers
|
206
|
-
* 1.1.0 Jan 22, 2019:
|
207
|
-
* Add direct_url markup format,
|
208
|
-
* auto-orient images before stripping metadata
|
209
|
-
* 1.0.2 Jan 18, 2019: Fix ruby version specification
|
210
|
-
* 1.0.1 Jan 13, 2019: Added ruby version checking
|
211
|
-
* **1.0.0** Nov 27, 2018: Rewrite from the ground up. See the [migration guide](docs/migration.md).
|
212
|
-
* 0.2.2 Aug 2, 2013: Bugfixes
|
213
|
-
* 0.2.1 Jul 17, 2013: Refactor again, add Liquid parsing.
|
214
|
-
* 0.2.0 Jul 14, 2013: Rewrite code base, bring in line with Jekyll Image Tag.
|
215
|
-
* 0.1.1 Jul 5, 2013: Quick round of code improvements.
|
216
|
-
* 0.1.0 Jul 5, 2013: Initial release.
|
55
|
+
Writing code is only part of the job; often the harder part is knowing what needs to be changed. Any
|
56
|
+
and all feedback is greatly appreciated, especially in regards to documentation. What are your pain
|
57
|
+
points? See the [contributing
|
58
|
+
guidelines](https://rbuchberger.github.io/jekyll_picture_tag/contributing), or the
|
59
|
+
[issues](https://github.com/rbuchberger/jekyll_picture_tag/issues) page for more.
|