jekyll-embed-urls 0.4.4 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a414c302d33fdb35c35e420ae07e6fc5c8f90e2fba9b4ba2e8b2961fbd94a8f4
4
- data.tar.gz: bf0d28a49c111e48d7f02d6ddc9fc258356b0e1dc3409870bb75206549cab968
3
+ metadata.gz: 214ec59b13ace086962b66c686ed56739a914773df1953f863fadaae1cc637b1
4
+ data.tar.gz: 7ad21fce1c1e5b6bedb59acb74c8454f6c25a9b56edb0c0009d63430e440bc6e
5
5
  SHA512:
6
- metadata.gz: 9df2638f34fcbcee2a9ace50686fff8e22dff2c7168ca60673634032a97cf65fdb4b1e902e517aa81e5c1ffdc95e8a5f8eb4c53e3d160f6f872615b6b94cb7e6
7
- data.tar.gz: eb64bf3fc323c3ec0159de2314aa8165c90a79ed95a21ecf497d8ec7aa2b79f4db3cf4e11c8386f0cf8a38c698e94af2c42b32440c656b044dbf216d780468b2
6
+ metadata.gz: 4cb5c6c3b3c68d64953548a5b15428427d3bffe5065382bbc00536386edf377aaa00154bb008009dca467dcca47e1c16b22e20ecc74af15648683965c3e2d770
7
+ data.tar.gz: cda3db036365ce8c06b942038fe9cd80da91fa330e63521209d1ebcc8c8a351299b5ae1a99df3670b3efdef01210944c4a7d8e12c7120f6d18b16af96a7bfb90
@@ -1,17 +1,17 @@
1
- <article class="fallback">
2
- {%- if page.image -%}
3
- <img referrerpolicy="{{ embed.referrerpolicy }}" loading="{{ embed.loading }}" src="{{ page.image }}" class="img-fluid" />
4
- {%- endif -%}
1
+ {% if page.url contains "//archive.org/" or page.url contains "//www.archive.org/" %}
2
+ <iframe src="{{ page.url | replace: "/details/", "/embed/" | uri_escape }}"></iframe>
3
+ {% else %}
4
+ <article class="fallback" lang="{{ page.locale }}">
5
+ {%- if page.image -%}
6
+ <img src="{{ page.image | uri_escape }}" class="img-fluid" />
7
+ {%- endif -%}
5
8
 
6
- <h1>{{ page.title }}</h1>
7
- <p class="lead">{{ page.description }}</p>
8
- <p><small>
9
- <a
10
- href="{{ page.url }}"
11
- referrerpolicy="{{ embed.referrerpolicy }}"
12
- target="{{ embed.target }}"
13
- rel="{{ embed.rel }}">
14
- {{ page.url }}
15
- </a>
16
- </small><p>
17
- </article>
9
+ <h1>{{ page.title }}</h1>
10
+ <p class="lead">{{ page.description }}</p>
11
+ <p>
12
+ <small>
13
+ <a href="{{ page.url | uri_escape }}">{{ page.url }}</a>
14
+ </small>
15
+ </p>
16
+ </article>
17
+ {% endif %}
data/_includes/ogp.html CHANGED
@@ -1,23 +1,19 @@
1
1
  <article class="ogp" lang="{{ page.locale }}">
2
2
  {%- if page.video -%}
3
- <video poster="{{ page.image }}" class="img-fluid" {{ embed.controls }} src="{{ page.video }}"/>
3
+ <video poster="{{ page.image | uri_escape }}" class="img-fluid" src="{{ page.video | uri_escape }}"/>
4
4
  {%- elsif page.image -%}
5
- <img referrerpolicy="{{ embed.referrerpolicy }}" loading="{{ embed.loading }}" src="{{ page.image }}" class="img-fluid" />
5
+ <img src="{{ page.image | uri_escape }}" class="img-fluid" />
6
6
  {%- endif -%}
7
7
 
8
8
  {%- if page.audio -%}
9
- <audio class="img-fluid" {{ embed.controls }} src="{{ page.audio }}"/>
9
+ <audio class="img-fluid" src="{{ page.audio | uri_escape }}"/>
10
10
  {%- endif -%}
11
11
 
12
12
  <h1>{{ page.title }}</h1>
13
13
  <p class="lead">{{ page.description }}</p>
14
- <p><small>
15
- <a
16
- href="{{ page.url }}"
17
- referrerpolicy="{{ embed.referrerpolicy }}"
18
- target="{{ embed.target }}"
19
- rel="{{ embed.rel }}">
20
- {{ page.url }}
21
- </a>
22
- </small><p>
14
+ <p>
15
+ <small>
16
+ <a href="{{ page.url | uri_escape }}">{{ page.url }}</a>
17
+ </small>
18
+ </p>
23
19
  </article>
data/lib/jekyll/embed.rb CHANGED
@@ -107,10 +107,13 @@ module Jekyll
107
107
 
108
108
  # Add the _includes dir so we can provide default templates that
109
109
  # can be overriden locally or by the theme.
110
- site.includes_load_paths << File.expand_path(File.join(__dir__, '..', '..', '_includes'))
110
+ includes_dir = File.expand_path(File.join(__dir__, '..', '..', '_includes'))
111
+ site.includes_load_paths << includes_dir unless site.includes_load_paths.include? includes_dir
111
112
  # Since we're embedding, we're allowing iframes
112
113
  Loofah::HTML5::SafeList::ALLOWED_ELEMENTS_WITH_LIBXML2 << 'iframe'
113
114
 
115
+ reset
116
+
114
117
  # Other elements that are disallowed
115
118
  config['scrub']&.each do |scrub|
116
119
  Loofah::HTML5::SafeList::ALLOWED_ELEMENTS_WITH_LIBXML2.delete(scrub)
@@ -121,6 +124,23 @@ module Jekyll
121
124
  site
122
125
  end
123
126
 
127
+ # Reset variables
128
+ #
129
+ # @return [nil]
130
+ def reset
131
+ @allow_same_origin =
132
+ @cache =
133
+ @config =
134
+ @fallback_template =
135
+ @get_cache =
136
+ @http_client =
137
+ @info =
138
+ @ogp_template =
139
+ @payload =
140
+ @value_for_attr =
141
+ nil
142
+ end
143
+
124
144
  # Render the URL as HTML
125
145
  #
126
146
  # 1. Try oembed for video and image
@@ -137,6 +157,7 @@ module Jekyll
137
157
  raise URI::Error unless url.start_with? 'http'
138
158
 
139
159
  # Just to verify the URL is valid
160
+ # TODO: Use Addressable
140
161
  URI.parse url
141
162
 
142
163
  oembed(url) || ogp(url) || fallback(url)
@@ -158,15 +179,13 @@ module Jekyll
158
179
  # @param [String] URL
159
180
  # @return [String,NilClass] Sanitized HTML or nil
160
181
  def oembed(url)
161
- cache.getset(url) do
182
+ cache.getset("oembed+#{url}") do
162
183
  oembed = OEmbed::Providers.get url
163
184
 
164
185
  # Prevent caching of nil?
165
186
  raise OEmbed::Error unless oembed.respond_to? :html
166
187
 
167
- # Cleanup. We don't allow running remote scripts locally,
168
- # period.
169
- cleanup(Loofah.fragment(oembed.html).scrub!(:prune), url).to_s
188
+ cleanup oembed.html, url
170
189
  end
171
190
  rescue OEmbed::Error
172
191
  nil
@@ -176,12 +195,12 @@ module Jekyll
176
195
  # @param [String] URL
177
196
  # @return [String,NilClass]
178
197
  def ogp(url)
179
- cache.getset(url) do
198
+ cache.getset("ogp+#{url}") do
180
199
  ogp = OGP::OpenGraph.new get(url).body
181
200
  context = info.dup
182
201
  context[:registers][:page] = payload['page'] = ogp.data
183
202
 
184
- ogp_template.render! payload, context
203
+ cleanup ogp_template.render!(payload, context), url
185
204
  end
186
205
  rescue OGP::MalformedSourceError, OGP::MissingAttributeError, Faraday::Error
187
206
  nil
@@ -189,7 +208,7 @@ module Jekyll
189
208
 
190
209
  # Try something
191
210
  def fallback(url)
192
- cache.getset(url) do
211
+ cache.getset("fallback+#{url}") do
193
212
  html = Nokogiri::HTML.fragment get(url).body
194
213
  element = html.css('article').first
195
214
  element ||= html.css('section').first
@@ -203,10 +222,11 @@ module Jekyll
203
222
  'title' => text(title),
204
223
  'description' => text(description),
205
224
  'url' => url,
206
- 'image' => element&.css('img')&.first&.public_send(:[], 'src')
225
+ 'image' => element&.css('img')&.first&.public_send(:[], 'src'),
226
+ 'locale' => html.css('html')&.first&.public_send(:[], 'lang')
207
227
  }
208
228
 
209
- fallback_template.render! payload, context
229
+ cleanup fallback_template.render!(payload, context), url
210
230
  end
211
231
  rescue Faraday::Error, Nokogiri::SyntaxError
212
232
  nil
@@ -232,7 +252,12 @@ module Jekyll
232
252
  end
233
253
  end
234
254
 
235
- def cleanup(html, url)
255
+ # @params :html_fragment [String]
256
+ # @params :url [String]
257
+ # @return [String]
258
+ def cleanup(html_fragment, url)
259
+ html = Loofah.fragment(html_fragment).scrub!(:prune)
260
+
236
261
  # Add our own attributes
237
262
  html.css('iframe').each do |iframe|
238
263
  IFRAME_ATTRIBUTES.each do |attr|
@@ -271,8 +296,8 @@ module Jekyll
271
296
  element['href'] = CGI.escapeHTML(UrlPrivacy.clean(CGI.unescapeHTML(element['href'])))
272
297
  end
273
298
 
274
- # Return the cleaned up HTML
275
- html
299
+ # Return the cleaned up HTML as a String
300
+ html.to_s
276
301
  end
277
302
 
278
303
  def text(node)
@@ -4,6 +4,6 @@ require_relative 'jekyll/embed'
4
4
  require_relative 'jekyll/embed/filter'
5
5
 
6
6
  # Configure Embed
7
- Jekyll::Hooks.register :site, :after_init do |site|
7
+ Jekyll::Hooks.register :site, :after_reset do |site|
8
8
  Jekyll::Embed.site = site
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-embed-urls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - f
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-08 00:00:00.000000000 Z
11
+ date: 2022-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
176
  requirements: []
177
- rubygems_version: 3.1.2
177
+ rubygems_version: 3.1.6
178
178
  signing_key:
179
179
  specification_version: 4
180
180
  summary: Embed URL previsualization in Jekyll posts