History

Update Elixir's scraper

David Chen committed 6 years ago

Commit 83256151 parent 4eb4bfe2 files · +31 −30Browse files

Unified · Split

2 files
  1. lib/docs/filters/elixir/clean_html.rb +22 −25
  2. lib/docs/filters/elixir/entries.rb +9 −5
lib/docs/filters/elixir/clean_html.rb+22−25
@@ -25,41 +25,38 @@ module Docs · 24 unmodified lines
2525 end
2626
2727 def api
28− css('footer', '.view-source', 'h1 .visible-xs').remove
28+ css('.hover-link', '.view-source', 'footer').remove
2929
30− css('section section.docstring h2').each do |node|
31− node.name = 'h4'
30+ css('.summary').each do |node|
31+ node.name = 'dl'
3232 end
3333
34− css('h1 .hover-link', '.detail-link').each do |node|
35− node.parent['id'] = node['href'].remove('#')
36− node.remove
34+ css('.summary h2').each do |node|
35+ node.content = node.inner_text
36+ node.parent.before(node)
3737 end
3838
39− css('.details-list').each do |list|
40− type = list['id'].remove(/s\z/) if list['id']
41− list.css('.detail-header').each do |node|
42− node.name = 'h3'
43− node['class'] += " #{type}" if type
44− end
39+ css('.summary-signature').each do |node|
40+ node.name = 'dt'
4541 end
4642
47− css('.summary h2').each { |node| node.parent.before(node) }
48− css('.summary').each { |node| node.name = 'dl' }
49− css('.summary-signature').each { |node| node.name = 'dt' }
50− css('.summary-synopsis').each { |node| node.name = 'dd' }
51−
52− css('section', 'div:not(.type-detail)', 'h2 a').each do |node|
53− node.before(node.children).remove
43+ css('.summary-synopsis').each do |node|
44+ node.name = 'dd'
5445 end
5546
56− css('.detail-header > pre').each do |node|
57− node.parent.after(node)
58− end
47+ css('section.detail').each do |detail|
48+ id = detail['id']
49+ detail.remove_attribute('id')
5950
60− css('.signature').each do |node|
61− non_text_children = node.xpath('node()[not(self::text())]')
62− non_text_children.to_a.reverse.each { |child| node.parent.add_next_sibling(child) }
51+ detail.css('.detail-header').each do |node|
52+ node.name = 'h3'
53+ node['id'] = id
54+ node.content = node.at_css('.signature').inner_text
55+ end
56+
57+ detail.css('.docstring h2').each do |node|
58+ node.name = 'h4'
59+ end
6360 end
6461
6562 css('pre').each do |node|
lib/docs/filters/elixir/entries.rb+9−5
@@ -41,21 +41,25 @@ module Docs · 40 unmodified lines
4141 end
4242
4343 def additional_entries
44− return [] if type == 'Exceptions' || type == 'Guide'
44+ return [] if type == 'Exceptions' || type == 'Guide' || root_page?
4545
46− css('.detail-header .signature').map do |node|
47− id = node.parent['id']
46+ css('.detail-header').map do |node|
47+ id = node['id']
4848 name = node.content.strip
49+
4950 name.remove! %r{\(.*\)}
5051 name.remove! 'left '
5152 name.remove! ' right'
5253 name.sub! 'sigil_', '~'
5354
54− unless node.parent['class'].end_with?('macro') || self.name.start_with?('Kernel')
55+ if self.name && !self.name.start_with?('Kernel')
5556 name.prepend "#{self.name}."
5657 end
5758
58− name << " (#{id.split('/').last})" if id =~ /\/\d+\z/
59+ if id =~ %r{/\d+\z}
60+ arity = id.split('/').last
61+ name << " (#{arity})"
62+ end
5963
6064 [name, id]
6165 end