jekyll-assets 2.4.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +21 -17
  3. data/LICENSE +1 -1
  4. data/README.md +365 -297
  5. data/Rakefile +13 -2
  6. data/lib/jekyll/assets.rb +15 -11
  7. data/lib/jekyll/assets/config.rb +91 -55
  8. data/lib/jekyll/assets/context.rb +32 -0
  9. data/lib/jekyll/assets/default.rb +98 -0
  10. data/lib/jekyll/assets/drop.rb +62 -0
  11. data/lib/jekyll/assets/env.rb +135 -278
  12. data/lib/jekyll/assets/extensible.rb +86 -0
  13. data/lib/jekyll/assets/filters.rb +22 -0
  14. data/lib/jekyll/assets/hook.rb +115 -48
  15. data/lib/jekyll/assets/html.rb +88 -0
  16. data/lib/jekyll/assets/logger.rb +17 -59
  17. data/lib/jekyll/assets/manifest.rb +15 -126
  18. data/lib/jekyll/assets/map.rb +57 -0
  19. data/lib/jekyll/assets/map/css.rb +43 -0
  20. data/lib/jekyll/assets/map/javascript.rb +43 -0
  21. data/lib/jekyll/assets/map/writer.rb +192 -0
  22. data/lib/jekyll/assets/patches/cached_env.rb +79 -0
  23. data/lib/jekyll/assets/patches/functions.rb +31 -0
  24. data/lib/jekyll/assets/patches/obsolete_files.rb +42 -0
  25. data/lib/jekyll/assets/patches/sprockets.rb +9 -0
  26. data/lib/jekyll/assets/patches/sprockets_data_uri.rb +12 -0
  27. data/lib/jekyll/assets/plugins.rb +9 -0
  28. data/lib/jekyll/assets/plugins/bootstrap.rb +5 -0
  29. data/lib/jekyll/assets/plugins/font-awesome.rb +8 -0
  30. data/lib/jekyll/assets/plugins/frontmatter.rb +28 -0
  31. data/lib/jekyll/assets/plugins/html/audio.rb +32 -0
  32. data/lib/jekyll/assets/plugins/html/css.rb +24 -0
  33. data/lib/jekyll/assets/plugins/html/defaults/audio.rb +69 -0
  34. data/lib/jekyll/assets/plugins/html/defaults/css.rb +48 -0
  35. data/lib/jekyll/assets/plugins/html/defaults/img.rb +54 -0
  36. data/lib/jekyll/assets/plugins/html/defaults/js.rb +48 -0
  37. data/lib/jekyll/assets/plugins/html/defaults/vid.rb +63 -0
  38. data/lib/jekyll/assets/plugins/html/img.rb +76 -0
  39. data/lib/jekyll/assets/plugins/html/js.rb +30 -0
  40. data/lib/jekyll/assets/plugins/html/pic.rb +125 -0
  41. data/lib/jekyll/assets/plugins/html/svg.rb +37 -0
  42. data/lib/jekyll/assets/plugins/html/vid.rb +26 -0
  43. data/lib/jekyll/assets/plugins/liquid.rb +57 -0
  44. data/lib/jekyll/assets/plugins/magick.rb +7 -0
  45. data/lib/jekyll/assets/plugins/optim.rb +7 -0
  46. data/lib/jekyll/assets/plugins/prefixer.rb +28 -0
  47. data/lib/jekyll/assets/plugins/proxy/magick.rb +131 -0
  48. data/lib/jekyll/assets/plugins/proxy/optim.rb +64 -0
  49. data/lib/jekyll/assets/plugins/searcher.rb +72 -0
  50. data/lib/jekyll/assets/proxy.rb +109 -0
  51. data/lib/jekyll/assets/tag.rb +176 -0
  52. data/lib/jekyll/assets/url.rb +23 -0
  53. data/lib/jekyll/assets/utils.rb +348 -0
  54. data/lib/jekyll/assets/version.rb +2 -2
  55. data/lib/jekyll/assets/writer.rb +36 -0
  56. metadata +102 -81
  57. data/lib/jekyll-assets.rb +0 -7
  58. data/lib/jekyll/assets/addons/autoprefixer.rb +0 -11
  59. data/lib/jekyll/assets/addons/bootstrap.rb +0 -9
  60. data/lib/jekyll/assets/addons/fontawesome.rb +0 -9
  61. data/lib/jekyll/assets/addons/javascript.rb +0 -11
  62. data/lib/jekyll/assets/cached.rb +0 -30
  63. data/lib/jekyll/assets/helpers.rb +0 -74
  64. data/lib/jekyll/assets/hooks/cache.rb +0 -21
  65. data/lib/jekyll/assets/hooks/compression.rb +0 -25
  66. data/lib/jekyll/assets/hooks/config.rb +0 -12
  67. data/lib/jekyll/assets/hooks/erb.rb +0 -15
  68. data/lib/jekyll/assets/hooks/jekyll/drops.rb +0 -9
  69. data/lib/jekyll/assets/hooks/jekyll/setup.rb +0 -11
  70. data/lib/jekyll/assets/hooks/jekyll/write.rb +0 -11
  71. data/lib/jekyll/assets/hooks/logger.rb +0 -11
  72. data/lib/jekyll/assets/hooks/sources.rb +0 -13
  73. data/lib/jekyll/assets/hooks/sprockets.rb +0 -9
  74. data/lib/jekyll/assets/hooks/version.rb +0 -11
  75. data/lib/jekyll/assets/liquid/context.rb +0 -19
  76. data/lib/jekyll/assets/liquid/drop.rb +0 -81
  77. data/lib/jekyll/assets/liquid/filters.rb +0 -49
  78. data/lib/jekyll/assets/liquid/tag.rb +0 -244
  79. data/lib/jekyll/assets/liquid/tag/defaults.rb +0 -27
  80. data/lib/jekyll/assets/liquid/tag/defaults/image.rb +0 -81
  81. data/lib/jekyll/assets/liquid/tag/defaults/sha.rb +0 -58
  82. data/lib/jekyll/assets/liquid/tag/parser.rb +0 -202
  83. data/lib/jekyll/assets/liquid/tag/proxied_asset.rb +0 -166
  84. data/lib/jekyll/assets/liquid/tag/proxies.rb +0 -130
  85. data/lib/jekyll/assets/patches/jekyll/cleaner.rb +0 -15
  86. data/lib/jekyll/assets/patches/jekyll/site.rb +0 -5
  87. data/lib/jekyll/assets/patches/kernel.rb +0 -29
  88. data/lib/jekyll/assets/patches/sprockets/asset.rb +0 -28
  89. data/lib/jekyll/assets/processors/less.rb +0 -70
  90. data/lib/jekyll/assets/processors/liquid.rb +0 -46
  91. data/lib/jekyll/assets/proxies/image_optim.rb +0 -80
  92. data/lib/jekyll/assets/proxies/magick.rb +0 -194
@@ -1,46 +0,0 @@
1
- module Jekyll
2
- module Assets
3
- module Processors
4
- class Liquid
5
- FOR = %W(
6
- text/css text/sass text/less application/javascript
7
- text/scss text/coffeescript text/javascript).freeze
8
- EXT = %W(.liquid .js.liquid .css.liquid .scss.liquid).freeze
9
-
10
- # --------------------------------------------------------------------
11
-
12
- def self.call(context, jekyll = context[:environment].jekyll)
13
- if context[:environment].parent.asset_config["features"]["liquid"] ||
14
- File.extname(context[:filename]) == ".liquid"
15
-
16
- payload_ = jekyll.site_payload
17
- renderer = jekyll.liquid_renderer.file(context[:filename])
18
- context[:data] = renderer.parse(context[:data]).render! payload_, \
19
- :filters => [Jekyll::Filters],
20
- :registers => {
21
- :site => jekyll
22
- }
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
29
-
30
- # ----------------------------------------------------------------------------
31
- # There might be a few missing, if there is please do let me know.
32
- # ----------------------------------------------------------------------------
33
-
34
- Jekyll::Assets::Processors::Liquid::EXT.each do |ext|
35
- Sprockets.register_engine(ext, Jekyll::Assets::Processors::Liquid, {
36
- :silence_deprecation => true
37
- })
38
- end
39
-
40
- # ----------------------------------------------------------------------------
41
-
42
- Jekyll::Assets::Processors::Liquid::FOR.each do |val|
43
- Sprockets.register_preprocessor(
44
- val, Jekyll::Assets::Processors::Liquid
45
- )
46
- end
@@ -1,80 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- # Frozen-string-literal: true
3
- # Copyright: 2017 - MIT License
4
- # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
-
7
- try_require "image_optim" do
8
- IMAGE_OPTIM_ARGS = %W(preset).freeze
9
- IMAGE_OPTIM_PRESETS = %W(@default).freeze
10
-
11
- class JekyllAssetsImageOptim
12
-
13
- class UnknownPresetError < RuntimeError
14
- def initialize(presetName)
15
- "Unknown image_optim preset '#{ presetName }'"
16
- end
17
- end
18
-
19
- # ------------------------------------------------------------------------
20
-
21
- class PresetAlreadySpecifiedError < RuntimeError
22
- def initialize
23
- "Specifying pre-defined preset and preset-by-name at the same time is not supported"
24
- end
25
- end
26
-
27
- # ------------------------------------------------------------------------
28
-
29
- class MultiplePredefinedPresetsSpecifiedError < RuntimeError
30
- def initialize
31
- "Specifying multiple pre-defined presets at the same time is not supported"
32
- end
33
- end
34
-
35
- # ------------------------------------------------------------------------
36
-
37
- def initialize(asset, opts, args)
38
- @asset = asset
39
- @opts = opts
40
- @args = args
41
- end
42
-
43
- # ------------------------------------------------------------------------
44
-
45
- def process
46
- asset_config = @asset.env.asset_config || {}
47
- image_optim_config = asset_config["image_optim"] || {}
48
-
49
- predefinedPresets = (@opts.keys - IMAGE_OPTIM_ARGS.map(&:to_sym))
50
-
51
- raise PresetAlreadySpecifiedError if @opts.key?(:preset) && predefinedPresets.any?
52
- raise MultiplePredefinedPresetsSpecifiedError if predefinedPresets.count > 1
53
-
54
- presetName = @opts[:preset]
55
- presetName = predefinedPresets.first.to_s unless presetName || !predefinedPresets.any?
56
-
57
- if presetName != "default" && !image_optim_config.key?(presetName)
58
- raise UnknownPresetError, presetName
59
- end
60
- config = image_optim_config[presetName] || {}
61
-
62
- image_optim = ::ImageOptim.new(config)
63
- image_optim.optimize_image!(@asset.filename)
64
- end
65
-
66
- end
67
-
68
- Jekyll::Assets::Env.liquid_proxies.add :image_optim, [:img, :asset_path], *(IMAGE_OPTIM_ARGS + IMAGE_OPTIM_PRESETS) do
69
- def initialize(asset, opts, args)
70
- @imageOptim = JekyllAssetsImageOptim.new(asset, opts, args)
71
- end
72
-
73
- # ------------------------------------------------------------------------
74
-
75
- def process
76
- @imageOptim.process
77
- end
78
-
79
- end
80
- end
@@ -1,194 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- # Frozen-string-literal: true
3
- # Copyright: 2012 - 2016 - MIT License
4
- # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
-
7
- try_require "mini_magick" do
8
- MINI_MAGICK_ARGS = %W(resize quality rotate crop flip format gravity strip).freeze
9
- MINI_MAGICK_PRESETS = %W(@2x @4x @1/2 @1/3 @2/3 @1/4 @2/4 @3/4
10
- @double @quadruple @half @one-third @two-thirds @one-fourth
11
- @two-fourths @three-fourths).freeze
12
-
13
- class JekyllAssetsMiniMagic
14
-
15
- class DoubleResizeError < RuntimeError
16
- def initialize
17
- "Both resize and @*x provided, this is not supported."
18
- end
19
- end
20
-
21
- # ------------------------------------------------------------------------
22
- # @see https://github.com/minimagick/minimagick#usage -- All but
23
- # the boolean @ options are provided by Minimagick.
24
- # ------------------------------------------------------------------------
25
-
26
- def initialize(asset, opts, args)
27
- @asset = asset
28
- @opts = opts
29
- @args = args
30
- end
31
-
32
- # ------------------------------------------------------------------------
33
-
34
- def process
35
- img = MiniMagick::Image.open(@asset.filename)
36
- methods = private_methods(true).select { |v| v.to_s.start_with?("magick_") }
37
- if img.respond_to?(:combine_options)
38
- then img.combine_options do |cmd|
39
- methods.each do |method|
40
- send(
41
- method, img, cmd
42
- )
43
- end
44
- end
45
-
46
- else
47
- methods.each do |method|
48
- send(
49
- method, img, img
50
- )
51
- end
52
- end
53
-
54
- img.write(
55
- @asset.filename
56
- )
57
- ensure
58
- img.destroy!
59
- end
60
-
61
- # ------------------------------------------------------------------------
62
-
63
- private
64
- def any_preset?(*keys)
65
- @opts.keys.any? do |key|
66
- keys.include?(key)
67
- end
68
- end
69
-
70
- # ------------------------------------------------------------------------
71
-
72
- private
73
- def preset?
74
- (@opts.keys - MINI_MAGICK_ARGS.map(&:to_sym)).any?
75
- end
76
-
77
- # ------------------------------------------------------------------------
78
-
79
- private
80
- def magick_quality(_, cmd)
81
- if @opts.key?(:quality)
82
- then cmd.quality @opts[:quality]
83
- end
84
- end
85
-
86
- # ------------------------------------------------------------------------
87
-
88
- private
89
- def magick_resize(_, cmd)
90
- raise DoubleResizeError if @opts.key?(:resize) && preset?
91
- if @opts.key?(:resize)
92
- then cmd.resize @opts[:resize]
93
- end
94
- end
95
-
96
- # ------------------------------------------------------------------------
97
-
98
- private
99
- def magick_rotate(_, cmd)
100
- if @opts.key?(:rotate)
101
- then cmd.rotate @opts[:rotate]
102
- end
103
- end
104
-
105
- # ------------------------------------------------------------------------
106
-
107
- private
108
- def magick_flip(_, cmd)
109
- if @opts.key?(:flip)
110
- then cmd.flip @opts[:flip]
111
- end
112
- end
113
-
114
- # ------------------------------------------------------------------------
115
-
116
- private
117
- def magick_format(img, _)
118
- if @opts.key?(:format)
119
- img.format @opts[:format]
120
- @asset.content_type = img.mime_type
121
- end
122
- end
123
- # ------------------------------------------------------------------------
124
-
125
- private
126
- def magick_crop(_, cmd)
127
- if @opts.key?(:crop)
128
- then cmd.crop @opts[:crop]
129
- end
130
- end
131
-
132
- # ------------------------------------------------------------------------
133
-
134
- private
135
- def magick_gravity(_, cmd)
136
- if @opts.key?(:gravity)
137
- then cmd.gravity @opts[:gravity]
138
- end
139
- end
140
-
141
- # ------------------------------------------------------------------------
142
-
143
- private
144
- def magick_strip(_, cmd)
145
- cmd.strip
146
- end
147
-
148
- # ------------------------------------------------------------------------
149
- # I just want you to know, we don't even care if you do multiple
150
- # resizes or try to, we don't attempt to even attempt to attempt to care
151
- # we expect you to be logical and if you aren't we will comply.
152
- # ------------------------------------------------------------------------
153
- # rubocop:disable Metrics/PerceivedComplexity
154
- # rubocop:disable Metrics/CyclomaticComplexity
155
- # rubocop:disable Style/ParallelAssignment
156
- # rubocop:disable Metrics/AbcSize
157
- # ------------------------------------------------------------------------
158
-
159
- private
160
- def magick_preset_resize(img, cmd)
161
- return unless preset?
162
- width, height = img.width * 4, img.height * 4 if any_preset?(:"4x", :quadruple)
163
- width, height = img.width * 2, img.height * 2 if any_preset?(:"2x", :double)
164
- width, height = img.width / 2, img.height / 2 if any_preset?(:"1/2", :half)
165
- width, height = img.width / 3, img.height / 3 if any_preset?(:"1/3", :"one-third")
166
- width, height = img.width / 4, img.height / 4 if any_preset?(:"1/4", :"one-fourth")
167
- width, height = img.width / 3 * 2, img.height / 3 * 2 if any_preset?(:"2/3", :"two-thirds")
168
- width, height = img.width / 4 * 2, img.height / 4 * 2 if any_preset?(:"2/4", :"two-fourths")
169
- width, height = img.width / 4 * 3, img.height / 4 * 3 if any_preset?(:"3/4", :"three-fourths")
170
- cmd.resize "#{width}x#{height}"
171
- end
172
-
173
- # ------------------------------------------------------------------------
174
- # rubocop:enable Metrics/PerceivedComplexity
175
- # rubocop:enable Metrics/CyclomaticComplexity
176
- # rubocop:enable Style/ParallelAssignment
177
- # rubocop:enable Metrics/AbcSize
178
- # ------------------------------------------------------------------------
179
-
180
- end
181
-
182
- Jekyll::Assets::Env.liquid_proxies.add :magick, [:img, :asset_path], *(MINI_MAGICK_ARGS + MINI_MAGICK_PRESETS) do
183
- def initialize(asset, opts, args)
184
- @miniMagick = JekyllAssetsMiniMagic.new(asset, opts, args)
185
- end
186
-
187
- # ------------------------------------------------------------------------
188
-
189
- def process
190
- @miniMagick.process
191
- end
192
-
193
- end
194
- end