History

Update nodejs to 16.1 and update previous version

Enoc committed 5 years ago

Commit 1ac3dd91 parent 1eaf12b5 files · +147 −86Browse files

Unified · Split

5 files
  1. assets/stylesheets/pages/_node.scss +3 −1
  2. lib/docs/filters/node/clean_html.rb +15 −0
  3. lib/docs/filters/node/entries.rb +12 −78
  4. lib/docs/filters/node/old_entries.rb +104 −0
  5. lib/docs/scrapers/node.rb +13 −7
assets/stylesheets/pages/_node.scss+3−1
@@ -10,6 +10,9 @@ · 9 unmodified lines
1010 > h4 { @extend %block-label; }
1111 > h2 + h2, > h3 + h3 { margin-top: 0; }
1212
13+ h3 { @extend %block-label, %label-blue}
14+ h4 { @extend %block-label }
15+
1316 p > code, li > code, .type {
1417 white-space: normal;
1518 @extend %label;
@@ -24,4 +27,3 @@ · 8 unmodified lines
2427 .srclink { float: right; }
2528 details > table { margin: 0; }
2629 }
27−
lib/docs/filters/node/clean_html.rb+15−0
@@ -15,6 +15,8 @@ module Docs · 14 unmodified lines
1515 end
1616
1717 css('pre').each do |node|
18+ next unless node.at_css('code')
19+
1820 if lang = node.at_css('code')['class']
1921 node['data-language'] = lang.remove(%r{lang(uage)?-})
2022 end
@@ -22,6 +24,19 @@ module Docs · 1 unmodified line
2224 node.content = node.content
2325 end
2426
27+ css('h3 > code, h4 > code, h5 > code').each do |node|
28+ tmp = node.content
29+ has_parethesis = true if tmp =~ /\(/
30+ tmp.gsub!(/\(.*\)/, '')
31+
32+ if has_parethesis
33+ tmp << '()'
34+ end
35+
36+ node.parent['id'] = tmp
37+
38+ end
39+
2540 doc
2641 end
2742 end
lib/docs/filters/node/entries.rb+12−78
@@ -1,104 +1,38 @@
11 module Docs
22 class Node
33 class EntriesFilter < Docs::EntriesFilter
4− REPLACE_NAMES = {
5− 'addons' => 'C/C++ Addons',
6− 'debugger' => 'Debugger',
7− 'deprecations' => 'Deprecated APIs',
8− 'modules' => 'module' }
9−
10− REPLACE_TYPES = {
11− 'C++ Addons' => 'Miscellaneous',
12− 'C/C++ Addons' => 'Miscellaneous',
13− 'Debugger' => 'Miscellaneous',
14− 'Deprecated APIs' => 'Miscellaneous',
15− 'Tracing' => 'Miscellaneous',
16− 'os' => 'OS',
17− 'StringDecoder' => 'String Decoder',
18− 'TLS (SSL)' => 'TLS/SSL',
19− 'UDP / Datagram Sockets' => 'UDP/Datagram',
20− 'VM (Executing JavaScript)' => 'VM',
21− 'Executing JavaScript' => 'VM' }
224
235 def get_name
24− REPLACE_NAMES[slug] || slug
6+ type
257 end
268
279 def get_type
28− type = at_css('h1').content.strip
29− type.remove! %r{\[.*\]}
30− REPLACE_TYPES[type] || "#{type.first.upcase}#{type[1..-1]}"
10+ at_css('h2').content.strip
3111 end
3212
3313 def additional_entries
34− return [] if type == 'Miscellaneous'
35−
36− klass = nil
3714 entries = []
3815
39− css('> [id]').each do |node|
40− next if node.name == 'h1'
41−
42− klass = nil if node.name == 'h2'
43− name = node.content.strip
44− name.remove! %r{\s*\[src\]}
45−
46− # Skip constructors
47− if name.start_with? 'new '
48− next
49− end
50−
51− # Ignore most global objects (found elsewhere)
52− if type == 'Global Objects'
53− entries << [name, node['id']] if name.start_with?('_') || name == 'global'
54− next
55− end
16+ css('h3 > code, h4 > code, h5 > code').each do |node|
5617
57− # Classes
58− if name.gsub! 'Class: ', ''
59− name.remove! 'events.' # EventEmitter
60− klass = name
61− entries << [name, node['id']]
62− next
18+ case node.parent.child.content
19+ when /Class/
20+ entries << ["Class #{node.parent['id']}", node.parent['id'], type]
21+ when /Event/
22+ entries << ["Event #{node.parent['id']}", node.parent['id'], type]
6323 end
6424
65− # Events
66− if name.sub! %r{\AEvent: '(.+)'\z}, '\1'
67− name << " event (#{klass || type})"
68− entries << [name, node['id']]
25+ if node.parent.child.is_a?(Nokogiri::XML::Text)
6926 next
27+ else
28+ entries << [node.parent['id'], node.parent['id'], type]
7029 end
7130
72− name.gsub! %r{\(.*?\);?}, '()'
73− name.gsub! %r{\[.+?\]}, '[]'
74− name.remove! 'assert(), ' # assert/assert.ok
75−
76− # Skip all that start with an uppercase letter ("Example") or include a space ("exports alias")
77− next unless (name.first.upcase! && !name.include?(' ')) || name.start_with?('Class Method')
78−
79− # Differentiate server classes (http, https, net, etc.)
80− name.sub!('server.') { "#{(klass || 'https').sub('.', '_').downcase}." }
81− # Differentiate socket classes (net, dgram, etc.)
82− name.sub!('socket.') { "#{klass.sub('.', '_').downcase}." }
83−
84− name.remove! 'Class Method:'
85− name.sub! 'buf.', 'buffer.'
86− name.sub! 'buf[', 'buffer['
87− name.sub! 'child.', 'childprocess.'
88− name.sub! 'decoder.', 'stringdecoder.'
89− name.sub! 'emitter.', 'eventemitter.'
90− name.sub! %r{\Arl\.}, 'interface.'
91− name.sub! 'rs.', 'readstream.'
92− name.sub! 'ws.', 'writestream.'
93−
94− # Skip duplicates (listen, connect, etc.)
95− unless name == entries[-1].try(:first) || name == entries[-2].try(:first)
96− entries << [name, node['id']]
97− end
9831 end
9932
10033 entries
10134 end
35+
10236 end
10337 end
10438 end
lib/docs/filters/node/old_entries.rb+104−0
@@ -0,0 +1,104 @@
1+module Docs
2+ class Node
3+ class OldEntriesFilter < Docs::EntriesFilter
4+ REPLACE_NAMES = {
5+ 'addons' => 'C/C++ Addons',
6+ 'debugger' => 'Debugger',
7+ 'deprecations' => 'Deprecated APIs',
8+ 'modules' => 'module' }
9+
10+ REPLACE_TYPES = {
11+ 'C++ Addons' => 'Miscellaneous',
12+ 'C/C++ Addons' => 'Miscellaneous',
13+ 'Debugger' => 'Miscellaneous',
14+ 'Deprecated APIs' => 'Miscellaneous',
15+ 'Tracing' => 'Miscellaneous',
16+ 'os' => 'OS',
17+ 'StringDecoder' => 'String Decoder',
18+ 'TLS (SSL)' => 'TLS/SSL',
19+ 'UDP / Datagram Sockets' => 'UDP/Datagram',
20+ 'VM (Executing JavaScript)' => 'VM',
21+ 'Executing JavaScript' => 'VM' }
22+
23+ def get_name
24+ REPLACE_NAMES[slug] || slug
25+ end
26+
27+ def get_type
28+ type = at_css('h1').content.strip
29+ type.remove! %r{\[.*\]}
30+ REPLACE_TYPES[type] || "#{type.first.upcase}#{type[1..-1]}"
31+ end
32+
33+ def additional_entries
34+ return [] if type == 'Miscellaneous'
35+
36+ klass = nil
37+ entries = []
38+
39+ css('> [id]').each do |node|
40+ next if node.name == 'h1'
41+
42+ klass = nil if node.name == 'h2'
43+ name = node.content.strip
44+ name.remove! %r{\s*\[src\]}
45+
46+ # Skip constructors
47+ if name.start_with? 'new '
48+ next
49+ end
50+
51+ # Ignore most global objects (found elsewhere)
52+ if type == 'Global Objects'
53+ entries << [name, node['id']] if name.start_with?('_') || name == 'global'
54+ next
55+ end
56+
57+ # Classes
58+ if name.gsub! 'Class: ', ''
59+ name.remove! 'events.' # EventEmitter
60+ klass = name
61+ entries << [name, node['id']]
62+ next
63+ end
64+
65+ # Events
66+ if name.sub! %r{\AEvent: '(.+)'\z}, '\1'
67+ name << " event (#{klass || type})"
68+ entries << [name, node['id']]
69+ next
70+ end
71+
72+ name.gsub! %r{\(.*?\);?}, '()'
73+ name.gsub! %r{\[.+?\]}, '[]'
74+ name.remove! 'assert(), ' # assert/assert.ok
75+
76+ # Skip all that start with an uppercase letter ("Example") or include a space ("exports alias")
77+ next unless (name.first.upcase! && !name.include?(' ')) || name.start_with?('Class Method')
78+
79+ # Differentiate server classes (http, https, net, etc.)
80+ name.sub!('server.') { "#{(klass || 'https').sub('.', '_').downcase}." }
81+ # Differentiate socket classes (net, dgram, etc.)
82+ name.sub!('socket.') { "#{klass.sub('.', '_').downcase}." }
83+
84+ name.remove! 'Class Method:'
85+ name.sub! 'buf.', 'buffer.'
86+ name.sub! 'buf[', 'buffer['
87+ name.sub! 'child.', 'childprocess.'
88+ name.sub! 'decoder.', 'stringdecoder.'
89+ name.sub! 'emitter.', 'eventemitter.'
90+ name.sub! %r{\Arl\.}, 'interface.'
91+ name.sub! 'rs.', 'readstream.'
92+ name.sub! 'ws.', 'writestream.'
93+
94+ # Skip duplicates (listen, connect, etc.)
95+ unless name == entries[-1].try(:first) || name == entries[-2].try(:first)
96+ entries << [name, node['id']]
97+ end
98+ end
99+
100+ entries
101+ end
102+ end
103+ end
104+end
lib/docs/scrapers/node.rb+13−7
@@ -14,6 +14,7 @@ module Docs · 13 unmodified lines
1414 options[:root_title] = 'Node.js'
1515 options[:container] = '#apicontent'
1616 options[:skip] = %w(index.html all.html documentation.html synopsis.html)
17+ # options[:only] = ['addons.html']
1718
1819 options[:attribution] = <<-HTML
1920 &copy; Joyent, Inc. and other Node contributors<br>
@@ -23,38 +24,43 @@ module Docs · 3 unmodified lines
2324 HTML
2425
2526 version do
26− self.release = '15.5.0'
27− self.base_url = 'https://nodejs.org/dist/latest-v15.x/docs/api/'
27+ self.release = '16.1.0'
28+ self.base_url = 'https://nodejs.org/api/'
2829 end
2930
3031 version '14 LTS' do
31− self.release = '14.15.3'
32+ self.release = '14.17.0'
3233 self.base_url = 'https://nodejs.org/dist/latest-v14.x/docs/api/'
3334 end
3435
3536 version '12 LTS' do
36− self.release = '12.19.0'
37+ self.release = '12.22.1'
3738 self.base_url = 'https://nodejs.org/dist/latest-v12.x/docs/api/'
39+ html_filters.replace('node/entries', 'node/old_entries')
3840 end
3941
4042 version '10 LTS' do
41− self.release = '10.16.3'
43+ self.release = '10.24.1'
4244 self.base_url = 'https://nodejs.org/dist/latest-v10.x/docs/api/'
45+ html_filters.replace('node/entries', 'node/old_entries')
4346 end
4447
4548 version '8 LTS' do
46− self.release = '8.16.1'
49+ self.release = '8.17.0'
4750 self.base_url = 'https://nodejs.org/dist/latest-v8.x/docs/api/'
51+ html_filters.replace('node/entries', 'node/old_entries')
4852 end
4953
5054 version '6 LTS' do
51− self.release = '6.14.4'
55+ self.release = '6.17.1'
5256 self.base_url = 'https://nodejs.org/dist/latest-v6.x/docs/api/'
57+ html_filters.replace('node/entries', 'node/old_entries')
5358 end
5459
5560 version '4 LTS' do
5661 self.release = '4.9.1'
5762 self.base_url = 'https://nodejs.org/dist/latest-v4.x/docs/api/'
63+ html_filters.replace('node/entries', 'node/old_entries')
5864 end
5965
6066 def get_latest_version(opts)