devcenter-parser 2.4.0 → 2.5.1

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: a6be89b82bc3dd6e4a40c3b7f1e3871fca55e301c4ff09f934457d84f01dc00b
4
- data.tar.gz: 686278e2a9a08bacd5f17124adaaa0d6a3e728a5701814dc9ef15cedecd8a430
3
+ metadata.gz: c4c53f614ec9479adb0fb78be87cdd30515834c467d1451515ab13abe121f4ac
4
+ data.tar.gz: 055c8a01895dc7b4646feab0727e71506b3caa4a4b6a48ae61f8abf2bffdbd52
5
5
  SHA512:
6
- metadata.gz: 1d2cb1e536549ba20c82e76cee60a42d5394872232a815d4ecb0b10fcb29b3d726ec19cc76862e68df78fbd5763173ed6feaa7a3dc4804883f67d78c486b3e32
7
- data.tar.gz: c3d69be0dedf80b7db4d70c5a0a188e82717207f65d2bd799ba1264a009b2d9c0e25c3ba73d993331927f43b7f64fb35decc85ab33ea65fbb6bb1f46f0108841
6
+ metadata.gz: 38d174aaf87c2b54b14b4b17ad9b4145a86b9eb276b1edcff4ab691aee8acb812adcf692c15365f6f6ca22997fb3807f016254c96191485bf780d3c6c62e3fe4
7
+ data.tar.gz: 6bf94117132dde0e04fa438cf1e0c9fb851ec89db9960b0ffb6db8e3dbd21d0d750cdb7713835c1c0df07657c23e2e1426d3facb892a5d7f10a60501f3cdd5a5
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  pkg/
2
+ .DS_Store
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- devcenter-parser (2.4.0)
5
- nokogiri (>= 1.13.10)
4
+ devcenter-parser (2.5.1)
5
+ nokogiri (~> 1.16)
6
6
  redcarpet (= 3.6.0)
7
7
  sanitize (~> 6.0.2)
8
8
 
@@ -12,11 +12,11 @@ GEM
12
12
  crass (1.0.6)
13
13
  mini_portile2 (2.8.5)
14
14
  minitest (5.19.0)
15
- nokogiri (1.15.5)
15
+ nokogiri (1.16.2)
16
16
  mini_portile2 (~> 2.8.2)
17
17
  racc (~> 1.4)
18
18
  racc (1.7.3)
19
- rake (13.0.6)
19
+ rake (13.1.0)
20
20
  redcarpet (3.6.0)
21
21
  sanitize (6.0.2)
22
22
  crass (~> 1.0.2)
@@ -28,7 +28,7 @@ PLATFORMS
28
28
  DEPENDENCIES
29
29
  devcenter-parser!
30
30
  minitest (~> 5.19.0)
31
- rake
31
+ rake (~> 13.1.0)
32
32
 
33
33
  BUNDLED WITH
34
- 2.2.33
34
+ 2.5.6
@@ -16,10 +16,10 @@ Gem::Specification.new do |gem|
16
16
 
17
17
  gem.required_ruby_version = '>= 3.0.0'
18
18
 
19
- gem.add_runtime_dependency 'nokogiri', '>= 1.13.10'
19
+ gem.add_runtime_dependency 'nokogiri', '~> 1.16'
20
20
  gem.add_runtime_dependency 'redcarpet', '3.6.0'
21
21
  gem.add_runtime_dependency 'sanitize', '~> 6.0.2'
22
22
 
23
23
  gem.add_development_dependency 'minitest', '~> 5.19.0'
24
- gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'rake', '~>13.1.0'
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module DevcenterParser
2
- VERSION = '2.4.0'.freeze
2
+ VERSION = '2.5.1'.freeze
3
3
  end
@@ -33,7 +33,7 @@ module DevcenterParser
33
33
  convert_to_article_links_all_relative_links_with_missing_initial_slashes(doc, options)
34
34
  html = doc.to_html(:encoding => 'utf-8')
35
35
  verify_raw_html(html)
36
- html
36
+ html
37
37
  end
38
38
 
39
39
  def self.normalize_markdown(markdown)
@@ -71,12 +71,12 @@ module DevcenterParser
71
71
  return @@sanitize_config if defined?(@@sanitize_config)
72
72
  frozen_config = Sanitize::Config::RELAXED
73
73
  config = Marshal.load(Marshal.dump(frozen_config))
74
- config[:attributes][:all] += %w{ id class style name width height border align data-next-message data-step-title }
74
+ config[:attributes][:all] += %w{ id class style name width height border align data-next-message data-step-title data-uuid data-type data-v }
75
75
  config[:attributes]['a'] += %w{ target }
76
76
  config[:elements] += %w{ div span hr tt }
77
77
 
78
78
  # embedded videos
79
- config[:attributes][:all] += %w{ value src type allowscriptaccess allowfullscreen webkitallowfullscreen mozallowfullscreen frameborder }
79
+ config[:attributes][:all] += %w{ value src type allowscriptaccess allowfullscreen webkitallowfullscreen mozallowfullscreen frameborder allow }
80
80
  config[:elements] += %w{ object param embed iframe }
81
81
  config[:add_attributes] = {
82
82
  'object' => {'allowscriptaccess' => 'never'},
@@ -121,9 +121,11 @@ module DevcenterParser
121
121
  def self.sanitize_node_with_invalid_src
122
122
  lambda do |env|
123
123
  return unless env[:node].attributes['src']
124
+ # convert youtube.com to youtube-nocookies.com
125
+ env[:node].attributes['src'].value = env[:node].attributes['src'].value.sub('youtube.com', 'youtube-nocookie.com')
124
126
  # disallow javascript in src for all attributes
125
127
  env[:node].unlink if env[:node].attributes['src'].value =~ /\Ajavascript:/i
126
- # allow iframes if they have src that is from vimeo
128
+ # allow iframes only if they have src that is from vimeo, YouTube (no-cookies version)
127
129
  env[:node].unlink if iframe?(env[:node]) && iframe_has_invalid_src?(env[:node])
128
130
  end
129
131
  end
@@ -60,9 +60,15 @@ describe 'DevcenterParser' do
60
60
  assert_parsing_result src, src
61
61
  end
62
62
 
63
- it 'removes youtube videos embedded from the with-cookies domain' do
64
- src = '<iframe width="560" height="315" src="https://www.youtube.com/embed/123456ABCDEF" frameborder="0" allowfullscreen=""></iframe>'
65
- assert_parsing_result src, ''
63
+ it 'allows embedding youtube videos from its no-cookies domain with allow attribute' do
64
+ src = '<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/123456ABCDEF" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>'
65
+ assert_parsing_result src, src
66
+ end
67
+
68
+ it 'converts youtube videos embedded from the with-cookies domain to the no-cookies domain' do
69
+ src = '<iframe width="560" height="315" src="https://www.youtube.com/embed/123456ABCDEF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>'
70
+ src_result = '<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/123456ABCDEF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>'
71
+ assert_parsing_result src, src_result
66
72
  end
67
73
 
68
74
  it 'does not allow embedding vimeo videos when their do-no-track param is set to something different than true' do
@@ -75,6 +81,11 @@ describe 'DevcenterParser' do
75
81
  assert_parsing_result src, ''
76
82
  end
77
83
 
84
+ it 'allows embedding vidyard videos with data attributes' do
85
+ src = '<p><img style="width: 100%; margin: auto; display: block;" class="vidyard-player-embed" src="https://play.vidyard.com/123456ABCDEFG.jpg" data-uuid="123456ABCDEFG" data-v="4" data-type="inline"></p>'
86
+ assert_parsing_result src, src
87
+ end
88
+
78
89
  it 'allows images' do
79
90
  src = '<p><img src="http://nav.heroku.com/images/logos/logo.png" alt="image"></p>'
80
91
  assert_parsing_result src, src
@@ -517,4 +528,8 @@ HTML
517
528
  assert DevcenterParser.to_html(md).include?("<#{header} id=\"#{id}\">"), "GitHub does not generate a #{header} with id #{id}"
518
529
  end
519
530
 
531
+ def assert_contains(md, contains)
532
+ assert DevcenterParser.to_html(md).include?(contains), "Failed when parsing #{md}\n.\n\nDid not contain: #{contains}\n\n"
533
+ end
534
+
520
535
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devcenter-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Heroku
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-16 00:00:00.000000000 Z
11
+ date: 2024-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.13.10
19
+ version: '1.16'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.13.10
26
+ version: '1.16'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: redcarpet
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 13.1.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 13.1.0
83
83
  description: Parser for Heroku Dev Center's content
84
84
  email:
85
85
  - heroku-front-end@salesforce.com
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
124
  requirements: []
125
- rubygems_version: 3.4.10
125
+ rubygems_version: 3.3.7
126
126
  signing_key:
127
127
  specification_version: 4
128
128
  summary: Parser for Heroku Dev Center's content