jekyll-embed-urls 0.5.3 → 0.5.7

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: b7618c2e879ce3a3864fe5c6a9beb1d38a0a5407539d40f1ee1ee458c3364e45
4
- data.tar.gz: 42dc8458446cc5dfa8223e18fe4bf8a7734b470c39fb5011c3856bfcbf845730
3
+ metadata.gz: '009ec95cb733855d621b7b063e4922c79873296fdebd99f16ad6f2856854a7af'
4
+ data.tar.gz: e56ca532db963a099a4c4c6950c4382ca25d83c5102703b8bf2d66fd98d8f2a9
5
5
  SHA512:
6
- metadata.gz: 0110ccca37a34d67d8d366b3ee2154cd775274dfbedb47a614e0705841f2a9933ac2715ab6714118d19aeca1e292924f09b593511884ce95a53a2b794cddad90
7
- data.tar.gz: 24970ebc4d97c10afbc24d280c223330ce1cfa75624c9edaaceb330157090bcdf961657fc325c0ed76be4bcc52f9e8956da5fbafe5e6e295c1684cf8fc324abc
6
+ metadata.gz: d60e0cfb3395976201a2b9b4174aaf1b888ef88fede4c802302002787471a0d8268c89d8d1cb447fa24bcebee7ac5f4ce83865b5770e0fe5ca38cd93ebb7e8e4
7
+ data.tar.gz: 4310e1aa4409b2724e8dfc9b68ecc96e4eabe83709a19cb7e5d3745a895b9e7bb32af78dece340f6c4e37807813582cdb07517253a40f739c7206db03db606f3
@@ -6,8 +6,8 @@
6
6
  <img src="{{ page.image | uri_escape }}" class="img-fluid" />
7
7
  {%- endif -%}
8
8
 
9
- <h1>{{ page.title }}</h1>
10
- <p class="lead">{{ page.description }}</p>
9
+ <h1>{{ page.title | escape_once }}</h1>
10
+ <p class="lead">{{ page.description | escape_once }}</p>
11
11
  <p>
12
12
  <small>
13
13
  <a href="{{ page.url | uri_escape }}">{{ page.url }}</a>
data/_includes/ogp.html CHANGED
@@ -9,8 +9,8 @@
9
9
  <audio class="img-fluid" src="{{ page.audio | uri_escape }}"/>
10
10
  {%- endif -%}
11
11
 
12
- <h1>{{ page.title }}</h1>
13
- <p class="lead">{{ page.description }}</p>
12
+ <h1>{{ page.title | escape_once }}</h1>
13
+ <p class="lead">{{ page.description | escape_once }}</p>
14
14
  <p>
15
15
  <small>
16
16
  <a href="{{ page.url | uri_escape }}">{{ page.url }}</a>
@@ -10,7 +10,7 @@ module Jekyll
10
10
 
11
11
  def read(key)
12
12
  self[key]
13
- rescue
13
+ rescue StandardError
14
14
  nil
15
15
  end
16
16
  end
@@ -5,15 +5,22 @@ require 'cgi'
5
5
  module Jekyll
6
6
  class Embed
7
7
  class Content
8
- URL_RE = /(<p[^>]*>[\s\n]*(<a[^>]*>)?[\s\n]*(https?:\/\/[^<\s\n]+)[\s\n]*(<\/a>)?[\s\n]*<\/p>)/m.freeze
8
+ URL_RE = %r{(<p[^>]*>[\s\n]*(<a[^>]*>)?[\s\n]*(https?://[^<\s\n]+)[\s\n]*(</a>)?[\s\n]*</p>)}m.freeze
9
9
 
10
10
  class << self
11
11
  # Find URLs on paragraphs. We do it after rendering because
12
12
  # sometimes we use HTML instead of pure Markdown and this way we
13
13
  # catch both.
14
14
  def embed!(content)
15
- content.gsub!(URL_RE) do |_|
16
- Jekyll::Embed.embed CGI.unescapeHTML($3)
15
+ content.gsub!(URL_RE) do |match|
16
+ url = CGI.unescapeHTML(Regexp.last_match(3))
17
+ embed = Jekyll::Embed.embed url
18
+
19
+ if embed == url
20
+ match
21
+ else
22
+ embed
23
+ end
17
24
  end
18
25
  end
19
26
  end
data/lib/jekyll/embed.rb CHANGED
@@ -13,7 +13,7 @@ require_relative 'embed/cache'
13
13
  if Gem::Version.new(Jekyll::VERSION) >= Gem::Version.new('4.2.0')
14
14
  require_relative 'embed/content'
15
15
  else
16
- Jekyll.logger.warn "Upgrade to Jekyll >= 4.2.0 to embed URLs in content"
16
+ Jekyll.logger.warn 'Upgrade to Jekyll >= 4.2.0 to embed URLs in content'
17
17
  end
18
18
 
19
19
  OEmbed::Providers.register_all
@@ -57,7 +57,8 @@ module Jekyll
57
57
 
58
58
  # Directive from Feature Policy
59
59
  # @see {https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy#directives}
60
- DIRECTIVES = %w[accelerometer ambient-light-sensor autoplay battery camera display-capture document-domain encrypted-media execution-while-not-rendered execution-while-out-of-viewport fullscreen gamepad geolocation gyroscope layout-animations legacy-image-formats magnetometer microphone midi navigation-override oversized-images payment picture-in-picture publickey-credentials-get speaker-selection sync-xhr usb screen-wake-lock web-share xr-spatial-tracking].freeze
60
+ DIRECTIVES = %w[accelerometer ambient-light-sensor autoplay battery camera display-capture document-domain
61
+ encrypted-media execution-while-not-rendered execution-while-out-of-viewport fullscreen gamepad geolocation gyroscope layout-animations legacy-image-formats magnetometer microphone midi navigation-override oversized-images payment picture-in-picture publickey-credentials-get speaker-selection sync-xhr usb screen-wake-lock web-share xr-spatial-tracking].freeze
61
62
 
62
63
  # Templates
63
64
  INCLUDE_OGP = '{% include ogp.html site=site page=page %}'
@@ -84,13 +85,13 @@ module Jekyll
84
85
  'rel' => %w[noopener noreferrer],
85
86
  'target' => '_blank'
86
87
  }
87
- }
88
+ }.freeze
88
89
 
89
90
  class << self
90
91
  def site
91
92
  unless @site
92
93
  raise Jekyll::Errors::InvalidConfigurationError,
93
- "Site is missing, configure with `Jekyll::Embed.site = site`"
94
+ 'Site is missing, configure with `Jekyll::Embed.site = site`'
94
95
  end
95
96
 
96
97
  @site
@@ -101,7 +102,7 @@ module Jekyll
101
102
  # @param [Jekyll::Site]
102
103
  # @return [Jekyll::Site]
103
104
  def site=(site)
104
- raise ArgumentError, "Site must be a Jekyll::Site" unless site.is_a? Jekyll::Site
105
+ raise ArgumentError, 'Site must be a Jekyll::Site' unless site.is_a? Jekyll::Site
105
106
 
106
107
  @site = site
107
108
 
@@ -130,15 +131,15 @@ module Jekyll
130
131
  def reset
131
132
  @allow_same_origin =
132
133
  @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
134
+ @config =
135
+ @fallback_template =
136
+ @get_cache =
137
+ @http_client =
138
+ @info =
139
+ @ogp_template =
140
+ @payload =
141
+ @value_for_attr =
142
+ nil
142
143
  end
143
144
 
144
145
  # Render the URL as HTML
@@ -160,7 +161,7 @@ module Jekyll
160
161
  # TODO: Use Addressable
161
162
  URI.parse url
162
163
 
163
- oembed(url) || ogp(url) || fallback(url)
164
+ oembed(url) || ogp(url) || fallback(url) || url
164
165
  rescue URI::Error
165
166
  Jekyll.logger.warn "#{url.inspect} is not a valid URL"
166
167
 
@@ -170,7 +171,9 @@ module Jekyll
170
171
  # @return [Hash]
171
172
  def config
172
173
  @config ||= Jekyll::Utils.deep_merge_hashes(DEFAULT_CONFIG, (site.config['embed'] || {})).tap do |c|
173
- c['attributes']['allow'].concat (DIRECTIVES - c.dig('attributes', 'allow').join.split(';').map { |s| s.split(' ').first }).join(" 'none';|").split('|')
174
+ c['attributes']['allow'].concat (DIRECTIVES - c.dig('attributes', 'allow').join.split(';').map do |s|
175
+ s.split(' ').first
176
+ end).join(" 'none';|").split('|')
174
177
  end
175
178
  end
176
179
 
@@ -197,8 +200,23 @@ module Jekyll
197
200
  def ogp(url)
198
201
  cache.getset("ogp+#{url}") do
199
202
  ogp = OGP::OpenGraph.new get(url).body
203
+ page = {
204
+ locale: ogp.locales.first,
205
+ title: ogp.title,
206
+ url: ogp.url,
207
+ description: ogp.description,
208
+ type: ogp.type,
209
+ data: ogp.data
210
+ }.transform_keys(&:to_s)
211
+
212
+ %w[image video audio].each do |attr|
213
+ page[attr] = ogp.public_send(:"#{attr}s").find do |a|
214
+ http? a.url
215
+ end&.url
216
+ end
217
+
200
218
  context = info.dup
201
- context[:registers][:page] = payload['page'] = ogp.data
219
+ context[:registers][:page] = payload['page'] = page
202
220
 
203
221
  cleanup ogp_template.render!(payload, context), url
204
222
  end
@@ -328,8 +346,8 @@ module Jekyll
328
346
  @value_for_attr ||= {}
329
347
  @value_for_attr[attr] ||=
330
348
  case (value = config.dig('attributes', attr))
331
- when String then value
332
- when Array then value.join(' ')
349
+ when String then value
350
+ when Array then value.join(' ')
333
351
  end
334
352
  end
335
353
 
@@ -340,7 +358,7 @@ module Jekyll
340
358
  # @return [String]
341
359
  def allow_same_origin(url)
342
360
  unless site.config['url']
343
- Jekyll.logger.warn "Add url to _config.yml to determine if the site can embed itself"
361
+ Jekyll.logger.warn 'Add url to _config.yml to determine if the site can embed itself'
344
362
  return ' allow-same-origin'
345
363
  end
346
364
 
@@ -355,6 +373,16 @@ module Jekyll
355
373
  def payload
356
374
  @payload ||= site.site_payload
357
375
  end
376
+
377
+ # Discover if a string is a valid HTTP URL
378
+ #
379
+ # @param :url [String]
380
+ # @return [Boolean]
381
+ def http?(url)
382
+ url.start_with?('http') && URI.parse(url).is_a?(URI::HTTP)
383
+ rescue URI::Error
384
+ false
385
+ end
358
386
  end
359
387
  end
360
388
  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.5.3
4
+ version: 0.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - f
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-20 00:00:00.000000000 Z
11
+ date: 2022-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -58,14 +58,20 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.4'
61
+ version: 0.5.0
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '0.6'
62
65
  type: :runtime
63
66
  prerelease: false
64
67
  version_requirements: !ruby/object:Gem::Requirement
65
68
  requirements:
66
69
  - - "~>"
67
70
  - !ruby/object:Gem::Version
68
- version: '0.4'
71
+ version: 0.5.0
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.6'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: faraday
71
77
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +128,20 @@ dependencies:
122
128
  - - "~>"
123
129
  - !ruby/object:Gem::Version
124
130
  version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
125
145
  description: Replaces URLs for their previsualization in Jekyll posts
126
146
  email:
127
147
  - f@sutty.nl