devcenter-parser 2.4.0 → 2.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: 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