jekyll_picture_tag 1.13.0 → 2.0.2
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/.envrc +4 -0
- data/.github/workflows/code-checks.yml +33 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +29 -76
- data/.ruby-version +1 -1
- data/docs/.envrc +2 -0
- data/docs/devs/contributing/code.md +14 -4
- data/docs/devs/contributing/docs.md +24 -6
- data/docs/devs/contributing/setup.md +21 -1
- data/docs/devs/contributing/testing.md +19 -37
- data/docs/devs/releases.md +45 -4
- data/docs/index.md +43 -18
- data/docs/logo.png +0 -0
- data/docs/logo.svg +880 -0
- data/docs/users/configuration/disable.md +1 -1
- data/docs/users/configuration/ignore_missing.md +1 -1
- data/docs/users/configuration/kramdown_fix.md +1 -1
- data/docs/users/configuration/suppress_warnings.md +1 -1
- data/docs/users/configuration/urls.md +69 -0
- data/docs/users/deployment.md +49 -0
- data/docs/users/getting_started.md +55 -0
- data/docs/users/installation.md +18 -38
- data/docs/users/liquid_tag/argument_reference/crop.md +21 -36
- data/docs/users/liquid_tag/examples.md +13 -25
- data/docs/users/liquid_tag/index.md +1 -1
- data/docs/users/notes/{migration.md → migration_1.md} +1 -1
- data/docs/users/notes/migration_2.md +99 -0
- data/docs/users/presets/cropping.md +21 -22
- data/docs/users/presets/default.md +11 -2
- data/docs/users/presets/examples.md +77 -45
- data/docs/users/presets/fallback_image.md +1 -1
- data/docs/users/presets/html_attributes.md +1 -1
- data/docs/users/presets/image_formats.md +3 -3
- data/docs/users/presets/image_quality.md +71 -56
- data/docs/users/presets/index.md +19 -45
- data/docs/users/presets/link_source.md +1 -1
- data/docs/users/presets/media_queries.md +1 -1
- data/docs/users/presets/nomarkdown_override.md +1 -1
- data/docs/users/presets/pixel_ratio_srcsets.md +1 -1
- data/docs/users/presets/width_height_attributes.md +1 -1
- data/docs/users/presets/width_srcsets.md +61 -23
- data/docs/users/presets/writing_presets.md +65 -0
- data/docs/users/tutorial.md +97 -0
- data/jekyll_picture_tag.gemspec +38 -23
- data/lib/jekyll_picture_tag.rb +8 -5
- data/lib/jekyll_picture_tag/cache.rb +64 -3
- data/lib/jekyll_picture_tag/defaults/global.rb +18 -0
- data/lib/jekyll_picture_tag/defaults/presets.rb +57 -0
- data/lib/jekyll_picture_tag/images.rb +1 -0
- data/lib/jekyll_picture_tag/images/generated_image.rb +25 -60
- data/lib/jekyll_picture_tag/images/image_file.rb +105 -0
- data/lib/jekyll_picture_tag/images/img_uri.rb +3 -10
- data/lib/jekyll_picture_tag/images/source_image.rb +44 -9
- data/lib/jekyll_picture_tag/instructions.rb +70 -6
- data/lib/jekyll_picture_tag/instructions/children/config.rb +128 -0
- data/lib/jekyll_picture_tag/instructions/children/context.rb +24 -0
- data/lib/jekyll_picture_tag/instructions/children/params.rb +90 -0
- data/lib/jekyll_picture_tag/instructions/children/parsers.rb +48 -0
- data/lib/jekyll_picture_tag/instructions/children/preset.rb +182 -0
- data/lib/jekyll_picture_tag/instructions/parents/conditional_instruction.rb +69 -0
- data/lib/jekyll_picture_tag/instructions/parents/env_instruction.rb +29 -0
- data/lib/jekyll_picture_tag/output_formats/basic.rb +5 -17
- data/lib/jekyll_picture_tag/parsers.rb +6 -0
- data/lib/jekyll_picture_tag/{instructions → parsers}/arg_splitter.rb +1 -1
- data/lib/jekyll_picture_tag/parsers/configuration.rb +28 -0
- data/lib/jekyll_picture_tag/{instructions → parsers}/html_attributes.rb +1 -1
- data/lib/jekyll_picture_tag/parsers/image_backend.rb +33 -0
- data/lib/jekyll_picture_tag/parsers/preset.rb +43 -0
- data/lib/jekyll_picture_tag/{instructions → parsers}/tag_parser.rb +15 -12
- data/lib/jekyll_picture_tag/router.rb +35 -93
- data/lib/jekyll_picture_tag/srcsets/basic.rb +4 -10
- data/lib/jekyll_picture_tag/utils.rb +10 -20
- data/lib/jekyll_picture_tag/version.rb +1 -1
- data/readme.md +48 -9
- metadata +161 -80
- data/.travis.yml +0 -8
- data/Dockerfile +0 -9
- data/docs/users/configuration/cdn.md +0 -35
- data/docs/users/configuration/relative_urls.md +0 -15
- data/docs/users/notes/input_checking.md +0 -6
- data/jekyll-picture-tag.gemspec +0 -52
- data/lib/jekyll-picture-tag.rb +0 -25
- data/lib/jekyll_picture_tag/cache/base.rb +0 -59
- data/lib/jekyll_picture_tag/cache/generated.rb +0 -20
- data/lib/jekyll_picture_tag/cache/source.rb +0 -19
- data/lib/jekyll_picture_tag/defaults/global.yml +0 -11
- data/lib/jekyll_picture_tag/defaults/presets.yml +0 -11
- data/lib/jekyll_picture_tag/instructions/configuration.rb +0 -121
- data/lib/jekyll_picture_tag/instructions/preset.rb +0 -122
- data/lib/jekyll_picture_tag/instructions/set.rb +0 -75
@@ -1,22 +1,18 @@
|
|
1
1
|
---
|
2
|
-
sort:
|
2
|
+
sort: 7
|
3
3
|
---
|
4
4
|
|
5
5
|
# Cropping
|
6
6
|
|
7
|
-
**Check the warning in the
|
8
|
-
[installation guide]({{ site.baseurl }}/users/installation)
|
9
|
-
before using this feature.**
|
10
|
-
|
11
7
|
## Crop & Media Crop
|
12
8
|
|
13
9
|
_Format:_
|
14
10
|
|
15
11
|
```yaml
|
16
|
-
crop: (
|
12
|
+
crop: (aspect ratio)
|
17
13
|
media_crop:
|
18
|
-
(media_preset): (
|
19
|
-
(media_preset): (
|
14
|
+
(media_preset): (aspect ratio)
|
15
|
+
(media_preset): (aspect ratio)
|
20
16
|
(...)
|
21
17
|
```
|
22
18
|
|
@@ -29,33 +25,36 @@ _Example:_
|
|
29
25
|
mobile: '1:1'
|
30
26
|
```
|
31
27
|
|
32
|
-
Crop
|
28
|
+
Crop aspect ratio, given either generally or for specific media presets. The
|
33
29
|
hierarchy is: `tag argument` > `media_crop:` > `crop:`.
|
34
30
|
|
35
|
-
This setting accepts the same arguments as the `crop
|
31
|
+
This setting accepts the same arguments as the `crop`
|
36
32
|
[tag parameter]({{ site.baseurl }}/users/liquid_tag/argument_reference/crop).
|
37
33
|
|
38
|
-
##
|
34
|
+
## Keep & Media Keep
|
39
35
|
|
40
36
|
```yaml
|
41
|
-
|
42
|
-
|
43
|
-
(media_preset): (
|
44
|
-
(media_preset): (
|
37
|
+
keep: (measure)
|
38
|
+
media_keep:
|
39
|
+
(media_preset): (measure)
|
40
|
+
(media_preset): (measure)
|
45
41
|
(...)
|
46
42
|
```
|
47
43
|
|
48
44
|
_Example:_
|
49
45
|
|
50
46
|
```yaml
|
51
|
-
|
47
|
+
keep: attention
|
52
48
|
media_gravity:
|
53
|
-
tablet:
|
54
|
-
mobile:
|
49
|
+
tablet: entropy
|
50
|
+
mobile: center
|
55
51
|
```
|
56
52
|
|
57
|
-
|
58
|
-
`tag argument` > `
|
53
|
+
Which part of the image to keep when cropping, given either generally or for specific media presets.
|
54
|
+
The hierarchy is: `tag argument` > `media_keep:` > `keep:` > `attention` (default).
|
59
55
|
|
60
|
-
This setting accepts the same arguments as the `
|
61
|
-
|
56
|
+
This setting accepts the same arguments as the `keep` [tag parameter]({{ site.baseurl
|
57
|
+
}}/users/liquid_tag/argument_reference/crop):
|
58
|
+
* `center` or `centre`
|
59
|
+
* `attention`
|
60
|
+
* `entropy`
|
@@ -1,5 +1,5 @@
|
|
1
1
|
---
|
2
|
-
sort:
|
2
|
+
sort: 14
|
3
3
|
---
|
4
4
|
|
5
5
|
# Default preset
|
@@ -17,7 +17,16 @@ presets:
|
|
17
17
|
noscript: false
|
18
18
|
link_source: false
|
19
19
|
quality: 75
|
20
|
+
format_quality:
|
21
|
+
webp: 50
|
22
|
+
avif: 30
|
23
|
+
jp2: 30
|
24
|
+
strip_metadata: true
|
25
|
+
image_options:
|
26
|
+
avif:
|
27
|
+
compression: av1
|
28
|
+
speed: 8
|
20
29
|
data_sizes: true
|
21
|
-
|
30
|
+
keep: attention
|
22
31
|
dimension_attributes: false
|
23
32
|
```
|
@@ -1,79 +1,111 @@
|
|
1
1
|
---
|
2
|
-
sort:
|
2
|
+
sort: 2
|
3
3
|
---
|
4
|
-
#
|
4
|
+
# Examples
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
The following example media queries & presets (except for `default`) are built-in with a `jpt-`
|
7
|
+
prefix. For example, the `desktop` media query below can be used with `jpt-desktop`, and the `webp`
|
8
|
+
preset below can be used with `jpt-webp`.
|
8
9
|
|
9
10
|
```yaml
|
10
11
|
# _data/picture.yml
|
11
12
|
|
13
|
+
# These are used in several places. You likely want to enter whatever CSS media queries your site
|
14
|
+
# uses here.
|
12
15
|
media_queries:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
mobile: 'max-width: 480px'
|
17
|
+
tablet: 'max-width: 768'
|
18
|
+
laptop: 'max-width: 1024px'
|
19
|
+
desktop: 'max-width: 1200'
|
20
|
+
wide: 'min-width: 1201'
|
18
21
|
|
19
22
|
presets:
|
23
|
+
# This entry is purely an example. It is not the default JPT preset, nor is it available as a
|
24
|
+
# built-in.
|
20
25
|
default:
|
21
|
-
|
22
|
-
|
23
|
-
dimension_attributes: true # Page reflow begone!
|
24
|
-
|
25
|
-
formats: [webp, original] # Must be an array, and order matters.
|
26
|
+
formats: [webp, original] # Order matters!
|
27
|
+
widths: [200, 400, 800, 1200, 1600] # Image widths, in pixels.
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
# The sizes attribute is both important, and impossible to offer good defaults for. You need to
|
30
|
+
# learn about it. Short version: Web browsers parse web pages line-by-line. When they run into
|
31
|
+
# an external asset they must download, they start that process immediately, without waiting to
|
32
|
+
# finish rendering the page. This means that at the point in time when the browser must decide
|
33
|
+
# which image to download, it has no clue how large that image will be on the page. The sizes
|
34
|
+
# attribute is how we tell it.
|
35
|
+
#
|
36
|
+
# If you do not provide this, the web browser will assume the image is 100vw (100% the width of
|
37
|
+
# the viewport.)
|
38
|
+
#
|
39
|
+
# This doesn't have to be pixel-perfect, just close enough for the browser to make a good
|
40
|
+
# choice. Keys are media queries defined above, values are how large the image will be when
|
41
|
+
# that media query is true. You can't use % (percentage width of the parent container) for the
|
42
|
+
# same reason we have to do this at all.
|
43
|
+
sizes:
|
44
|
+
mobile: calc(100vw - 16px)
|
34
45
|
tablet: 80vw
|
46
|
+
|
47
|
+
# Size is unconditional; provided either after all conditional sizes (above) or alone. If you
|
48
|
+
# only have a 'size' (no 'sizes'), and it's a constant (px, em, or rem), you should use a
|
49
|
+
# pixel-ratio srcset.
|
35
50
|
size: 800px
|
36
51
|
|
37
|
-
|
38
|
-
|
52
|
+
link_source: true # wrap images in a link to the original source image.
|
53
|
+
dimension_attributes: true # Page reflow begone!
|
39
54
|
|
55
|
+
# You can add any HTML attribute you like, to any HTML element which JPT creates:
|
40
56
|
attributes:
|
57
|
+
# parent refers to the outermost tag; <picture> if it's present, otherwise the <img>.
|
41
58
|
parent: 'data-downloadable="true"'
|
42
59
|
picture: 'class="awesome" data-volume="11"'
|
43
60
|
img: 'class="some-other-class"'
|
44
61
|
a: 'class="image-link"'
|
45
62
|
|
46
|
-
#
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
63
|
+
# You can use this as jpt-webp. All following presets follow the same pattern.
|
64
|
+
webp:
|
65
|
+
formats: [webp, original]
|
66
|
+
|
67
|
+
# Avif is the new hotness coming down the pipe. Browser support is bad and they are slow to
|
68
|
+
# generate, but you get good file sizes even compared to webp of similar quality.
|
69
|
+
avif:
|
70
|
+
formats: [avif, webp, original]
|
71
|
+
|
72
|
+
# Your build times will suffer, but everyone is happy.
|
73
|
+
loaded:
|
74
|
+
formats: [avif, jp2, webp, original]
|
75
|
+
dimension_attributes: true
|
76
|
+
|
77
|
+
# This is an example of how you would create a 'multiplier' based srcset; useful when an image
|
78
|
+
# will always be the same size on all screens (icons, graphics, thumbnails, etc), but you'd like
|
79
|
+
# to supply higher resolution images to devices with higher pixel ratios.
|
80
|
+
thumbnail:
|
81
|
+
base_width: 250 # How wide the 1x image should be.
|
82
|
+
pixel_ratios: [1, 1.5, 2] # Which multipliers to target.
|
83
|
+
fallback_width: 250 # The default is 800, which is probably too big.
|
84
|
+
formats: [webp, original]
|
54
85
|
attributes:
|
55
|
-
|
86
|
+
picture: 'class="thumbnail"'
|
56
87
|
|
57
|
-
#
|
58
|
-
|
88
|
+
# Another pixel-ratio example.
|
89
|
+
avatar:
|
90
|
+
# Say your layout demands a square:
|
91
|
+
crop: 1:1
|
92
|
+
base_width: 100
|
93
|
+
pixel_ratios: [1, 1.5, 2]
|
94
|
+
fallback_width: 100,
|
95
|
+
|
96
|
+
# Here's an example of how you'd configure JPT to work with something like lazyload:
|
97
|
+
# https://github.com/verlok/lazyload
|
98
|
+
# Remember to add a sizes attribute, unless it's close to 100vw all the time.
|
59
99
|
lazy:
|
60
100
|
markup: data_auto
|
61
101
|
formats: [webp, original]
|
62
|
-
widths: [200, 400, 600, 800]
|
63
102
|
noscript: true # add a fallback image inside a <noscript> tag.
|
64
|
-
attributes:
|
65
|
-
|
103
|
+
attributes:
|
104
|
+
parent: class="lazy"
|
66
105
|
|
67
|
-
# This is an example of how you'd get generated image
|
68
|
-
# else.
|
106
|
+
# This is an example of how you'd get a single generated image, a URL, and nothing else.
|
69
107
|
direct:
|
70
108
|
markup: direct_url
|
71
109
|
fallback_format: webp
|
72
110
|
fallback_width: 600
|
73
|
-
|
74
|
-
# Here's a naked srcset. Doesn't even give you the surrounding quotes.
|
75
|
-
srcset:
|
76
|
-
markup: naked_srcset
|
77
|
-
formats: [webp] # must be an array, even if it only has one item
|
78
|
-
|
79
111
|
```
|
@@ -1,12 +1,12 @@
|
|
1
1
|
---
|
2
|
-
sort:
|
2
|
+
sort: 4
|
3
3
|
---
|
4
4
|
|
5
5
|
# Image Formats
|
6
6
|
|
7
|
-
_Format:_ `
|
7
|
+
_Format:_ `formats: [format1, format2, (...)]`
|
8
8
|
|
9
|
-
_Example:_ `
|
9
|
+
_Example:_ `formats: [webp, original]`
|
10
10
|
|
11
11
|
_Default_: `original`
|
12
12
|
|
@@ -1,46 +1,54 @@
|
|
1
1
|
---
|
2
|
-
sort:
|
2
|
+
sort: 8
|
3
3
|
---
|
4
4
|
|
5
|
-
# Image Quality
|
5
|
+
# Image Quality & Options
|
6
6
|
|
7
|
-
Image quality
|
8
|
-
and output format.
|
7
|
+
Image quality is set per-format, using `format_quality`.
|
9
8
|
|
10
|
-
|
11
|
-
For lossless webp images, set quality to 100.
|
12
|
-
```
|
9
|
+
## Constant Quality
|
13
10
|
|
11
|
+
_Format:_
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
```yaml
|
14
|
+
format_quality:
|
15
|
+
(format): 0 <= integer <= 100
|
16
|
+
(...)
|
17
|
+
```
|
20
18
|
|
21
|
-
_Example:_
|
19
|
+
_Example:_
|
22
20
|
|
23
|
-
|
21
|
+
```yaml
|
22
|
+
format_quality:
|
23
|
+
jpg: 75
|
24
|
+
png: 65
|
25
|
+
webp: 55
|
26
|
+
```
|
24
27
|
|
25
|
-
|
28
|
+
_Defaults:_
|
26
29
|
|
27
|
-
|
30
|
+
- webp - 50
|
31
|
+
- avif - 30
|
32
|
+
- jp2 - 30
|
33
|
+
- all others - 75
|
28
34
|
|
29
|
-
|
35
|
+
## Variable Quality
|
30
36
|
|
31
|
-
```yaml
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
```yaml
|
38
|
+
format_quality:
|
39
|
+
(format):
|
40
|
+
(image width): (quality setting)
|
41
|
+
(image width): (quality setting)
|
42
|
+
```
|
36
43
|
|
37
|
-
_Example:_
|
44
|
+
_Example:_
|
38
45
|
|
39
|
-
```yaml
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
46
|
+
```yaml
|
47
|
+
format_quality:
|
48
|
+
jpg:
|
49
|
+
1000: 65
|
50
|
+
300: 100
|
51
|
+
```
|
44
52
|
|
45
53
|
Set a variable image quality, based on image width. Provide exactly 2 image widths and associated
|
46
54
|
quality settings. Quality will be calculated as follows:
|
@@ -59,47 +67,54 @@ sacrificing image quality for low-density screens. Taking the example settings a
|
|
59
67
|
* A 200px image will use a quality of 100.
|
60
68
|
* A 500px image will use a quality of 90.
|
61
69
|
|
70
|
+
## Strip Metadata
|
62
71
|
|
63
|
-
|
72
|
+
_Format:_ `strip_metadata: (true|false)`
|
73
|
+
|
74
|
+
_Example:_ `strip_metadata: false`
|
75
|
+
|
76
|
+
_Default:_ `true`
|
77
|
+
|
78
|
+
Remove EXIF data, which can save a few tens of kilobytes per image. This is set for all formats.
|
79
|
+
|
80
|
+
## Image Format Options
|
64
81
|
|
65
82
|
_Format:_
|
66
83
|
|
67
84
|
```yaml
|
68
|
-
|
69
|
-
|
85
|
+
image_options:
|
86
|
+
format:
|
87
|
+
setting1: value
|
88
|
+
setting2: value
|
89
|
+
(...)
|
70
90
|
(...)
|
71
91
|
```
|
72
92
|
|
73
|
-
```yaml
|
74
|
-
format_quality:
|
75
|
-
(format):
|
76
|
-
(image width): (quality setting)
|
77
|
-
(image width): (quality setting)
|
78
|
-
```
|
79
|
-
|
80
|
-
|
81
93
|
_Example:_
|
82
94
|
|
83
95
|
```yaml
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
webp: 55
|
96
|
+
image_options:
|
97
|
+
webp:
|
98
|
+
lossless: true
|
88
99
|
```
|
89
100
|
|
101
|
+
_Default:_
|
102
|
+
|
90
103
|
```yaml
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
(...)
|
104
|
+
image_options:
|
105
|
+
avif:
|
106
|
+
compression: av1
|
107
|
+
speed: 8
|
96
108
|
```
|
97
109
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
110
|
+
Control the write options passed to libvips for each image output format. To see a list of options
|
111
|
+
available for a given image format, search for the method `vips_(format)save` in
|
112
|
+
[this](https://libvips.github.io/libvips/API/current/VipsForeignSave.html) API documentation. For
|
113
|
+
example, png options can be found by searching for `vips_pngsave()`, leading
|
114
|
+
[here](https://libvips.github.io/libvips/API/current/VipsForeignSave.html#vips-pngsave). See the
|
115
|
+
optional arguments. `avif`'s options are under `vips_heifsave()`,
|
116
|
+
[here](https://libvips.github.io/libvips/API/current/VipsForeignSave.html#vips-heifsave).
|
117
|
+
|
118
|
+
For all formats, note that
|
119
|
+
- `Q:` (quality) is handled by the settings above.
|
120
|
+
- `strip` is handled by the `strip_metadata` setting documented above.
|