Class: Jekyll::Assets::Tag
- Inherits:
-
Liquid::Tag
- Object
- Liquid::Tag
- Jekyll::Assets::Tag
- Defined in:
- lib/jekyll/assets/tag.rb
Defined Under Namespace
Classes: InvalidExternal, MixedArg
Instance Attribute Summary collapse
-
#args ⇒ Object
readonly
Returns the value of attribute args.
-
#name ⇒ Object
readonly
--.
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
-
#tokens ⇒ Object
readonly
Returns the value of attribute tokens.
Instance Method Summary collapse
-
#external(ctx, args:) ⇒ Url
-- Set's up an external url using
Url--. -
#initialize(tag, args, tokens) ⇒ Tag
constructor
--.
-
#internal(ctx, args:) ⇒ Sprockets::Asset
-- Set's up an internal asset using
Sprockets::Asset--. -
#on_data(args, ctx:, asset:) ⇒ String
-- Returns the data uri of an object.
-
#on_path(args, ctx:, asset:) ⇒ String
-- Returns the path to the asset.
-
#render(ctx) ⇒ String
-- Render the tag, run the proxies, set the defaults.
-
#render_raw(ctx) ⇒ Object
--.
-
#return_or_build(ctx, args:, asset:) ⇒ Object
--.
Constructor Details
#initialize(tag, args, tokens) ⇒ Tag
--
43 44 45 46 47 48 |
# File 'lib/jekyll/assets/tag.rb', line 43 def initialize(tag, args, tokens) @tag = tag.to_sym @tokens = tokens @args = args super end |
Instance Attribute Details
#args ⇒ Object (readonly)
Returns the value of attribute args.
39 40 41 |
# File 'lib/jekyll/assets/tag.rb', line 39 def args @args end |
#name ⇒ Object (readonly)
--
37 38 39 |
# File 'lib/jekyll/assets/tag.rb', line 37 def name @name end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
40 41 42 |
# File 'lib/jekyll/assets/tag.rb', line 40 def tag @tag end |
#tokens ⇒ Object (readonly)
Returns the value of attribute tokens.
38 39 40 |
# File 'lib/jekyll/assets/tag.rb', line 38 def tokens @tokens end |
Instance Method Details
#external(ctx, args:) ⇒ Url
--
Set's up an external url using Url
149 150 151 152 153 154 155 |
# File 'lib/jekyll/assets/tag.rb', line 149 def external(ctx, args:) env = ctx.registers[:site].sprockets out = env.external_asset(args[:argv1], args: args) Default.set(args, ctx: ctx, asset: out) out end |
#internal(ctx, args:) ⇒ Sprockets::Asset
--
Set's up an internal asset using Sprockets::Asset
162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/jekyll/assets/tag.rb', line 162 def internal(ctx, args:) env = ctx.registers[:site].sprockets original = env.find_asset!(args[:argv1]) Default.set(args, ctx: ctx, asset: original) out = Proxy.proxy(original, args: args, ctx: ctx) env.assets_to_write |= [out.logical_path] Default.set(args, { ctx: ctx, asset: out }) out end |
#on_data(args, ctx:, asset:) ⇒ String
--
Returns the data uri of an object.
136 137 138 139 140 141 142 |
# File 'lib/jekyll/assets/tag.rb', line 136 def on_data(args, ctx:, asset:) env = ctx.registers[:site].sprockets return unless args[:data] raise InvalidExternal "@data" if env.external?(args) asset.data_uri end |
#on_path(args, ctx:, asset:) ⇒ String
--
Returns the path to the asset.
122 123 124 125 126 127 128 |
# File 'lib/jekyll/assets/tag.rb', line 122 def on_path(args, ctx:, asset:) env = ctx.registers[:site].sprockets return unless args[:path] raise InvalidExternal, "@path" if env.external?(args) env.prefix_url(asset.digest_path) end |
#render(ctx) ⇒ String
Note:
Defaults are ran twice just incase the content type changes, at that point there might be something that has to change in the new content.
--
Render the tag, run the proxies, set the defaults.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/jekyll/assets/tag.rb', line 69 def render(ctx) env = ctx.registers[:site].sprockets; args, asset = render_raw(ctx) env.logger.debug args.to_h(html: false).inspect return_or_build(ctx, args: args, asset: asset) do HTML.build({ args: args, asset: asset, ctx: ctx, }) end # -- rescue Sprockets::FileNotFound => e e_not_found(e, { ctx: ctx, }) # -- rescue ExecJS::RuntimeError => e e_exjs(e, { args: args, ctx: ctx, }) # -- # @note you can --trace to get this same info # Handle errors that Sass ships because Jekyll finds # error handling hard, and makes it even harder, so we # need to ship debug info to the user, or they'll # never get it. That's not very good. # -- rescue Sass::SyntaxError => e e_sass(e, { args: args, ctx: ctx, }) end |
#render_raw(ctx) ⇒ Object
--
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/jekyll/assets/tag.rb', line 51 def render_raw(ctx) env = ctx.registers[:site].sprockets args = Liquid::Tag::Parser.new(@args) args = env.parse_liquid(args, ctx: ctx) raise_unfound_asset_on(ctx: ctx, with: args) unless args.key?(:argv1) asset = external(ctx, args: args) if env.external?(args) asset ||= internal(ctx, args: args) [args, asset] end |
#return_or_build(ctx, args:, asset:) ⇒ Object
--
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/jekyll/assets/tag.rb', line 106 def return_or_build(ctx, args:, asset:) methods.grep(%r!^on_(?\!or_build$)!).each do |m| out = send(m, args, ctx: ctx, asset: asset) if out return out end end yield end |