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 +4 -4
- data/_includes/fallback.html +16 -16
- data/_includes/ogp.html +8 -12
- data/lib/jekyll/embed.rb +38 -13
- data/lib/jekyll-embed-urls.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c93e9e9f911c9988829cddbd88afd919995cfd55fd51a21e917e81f7044ddbf
|
4
|
+
data.tar.gz: 748730c8fb90b9f37f02b5cb7461a08df1502a1700a02748837450451ab0627a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ac2e6bd99303c206cbcbe865d91f39cfc553c3d5f02d36c1ec88760a2fc757b805235f6054ae7f6d7d694d69e4f94af18a4202f635717ae13541cb9e491786c
|
7
|
+
data.tar.gz: f85276cd1f18db800686ff00f1cd00a83535c0c16a968b31175e6c4ba8f02492f791fdfd714de7657ac175d78da023f23a716bde46da55497ec2ac6d4a107897
|
data/_includes/fallback.html
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
|
2
|
-
{
|
3
|
-
|
4
|
-
{
|
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
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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"
|
3
|
+
<video poster="{{ page.image | uri_escape }}" class="img-fluid" src="{{ page.video | uri_escape }}"/>
|
4
4
|
{%- elsif page.image -%}
|
5
|
-
<img
|
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"
|
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
|
15
|
-
<
|
16
|
-
href="{{ page.url }}"
|
17
|
-
|
18
|
-
|
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
|
-
|
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
|
-
|
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!
|
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!
|
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
|
-
|
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)
|
data/lib/jekyll-embed-urls.rb
CHANGED
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
|
+
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:
|
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:
|
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:
|
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.
|
177
|
+
rubygems_version: 3.1.6
|
178
178
|
signing_key:
|
179
179
|
specification_version: 4
|
180
180
|
summary: Embed URL previsualization in Jekyll posts
|