jekyll-embed-urls 0.4.3 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 938576c9cdee4a9b13de0e7d2d17983db2704f7882352d5a88010c66c8ddb122
4
- data.tar.gz: e34c7de8e8d9b4b36d3b995888015362fd1a561db17cd3b4304bca252f12168c
3
+ metadata.gz: 3c93e9e9f911c9988829cddbd88afd919995cfd55fd51a21e917e81f7044ddbf
4
+ data.tar.gz: 748730c8fb90b9f37f02b5cb7461a08df1502a1700a02748837450451ab0627a
5
5
  SHA512:
6
- metadata.gz: 3c4cb82fb1f9accb6250dbe4b0460cde02867b7bf4b1befb93d2ca8c2f1c4bdb7204c9ceb30847bea1b1f7283be4d72f33137fcbc01c08bfce2ae93cda593cb7
7
- data.tar.gz: 0e9f02488eb339c43c33c7a90f0192af3c2e069f038b2b399f6eba991423853589277e88369c0d920e03003957e2d26f3106b487db8b0b300e414abf02394625
6
+ metadata.gz: 2ac2e6bd99303c206cbcbe865d91f39cfc553c3d5f02d36c1ec88760a2fc757b805235f6054ae7f6d7d694d69e4f94af18a4202f635717ae13541cb9e491786c
7
+ data.tar.gz: f85276cd1f18db800686ff00f1cd00a83535c0c16a968b31175e6c4ba8f02492f791fdfd714de7657ac175d78da023f23a716bde46da55497ec2ac6d4a107897
@@ -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.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - f
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-27 00:00:00.000000000 Z
11
+ date: 2022-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.15'
33
+ version: 0.16.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.15'
40
+ version: 0.16.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: loofah
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -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