Explorar o código

Fix Erlang lib/ entries and func Types sec

This commit

* Makes lib/ entries get indexed correctly;
* Stops the types associated with functions from being filtered away,
  and orders their "Types" heading under the function heading; and
* Cleans out onmouseover/onmouseout attributes.
Axel Forsman %!s(int64=3) %!d(string=hai) anos
pai
achega
a2ae1b3a3f

+ 6 - 0
assets/stylesheets/pages/_erlang.scss

@@ -6,4 +6,10 @@
   .note { @extend %note; }
   .warning { @extend %note, %note-red; }
   .note .label, .warning .label { font-weight: var(--boldFontWeight); }
+
+  .since {
+	  color: var(--textColorLight);
+	  font-weight: normal;
+	  font-size: small;
+  }
 }

+ 29 - 34
lib/docs/filters/erlang/clean_html.rb

@@ -30,34 +30,47 @@ module Docs
 
         # others
 
+        # Remove JS on-hover highlighting
+        css('h3.title-link', 'h4.data-type-name', 'h4.func-head').each do |node|
+          node.remove_attribute('onmouseover')
+          node.remove_attribute('onmouseout')
+        end
+
         css('a[name]').each do |node|
-          # parent = node.parent
-          # parent = parent.parent while parent.name == 'span'
-          (node.next_element || node.parent)['id'] ||= node['name']
           node.before(node.children).remove
         end
 
         css('h3').each do |node|
-          node.name = 'h2'
           content = node.content
           node.content = content.capitalize if content == content.upcase
         end
 
-        css('p > .bold_code:first-child ~ br:last-child').each do |node|
-          parent = node.parent
-          parent.name = 'h3'
-          parent.css('> br').remove
-          parent.css('> code').each do |code|
-            code.css('*:not(a):not(br)').each { |n| n.before(n.children).remove }
-            code.inner_html = code.inner_html.gsub('<br>', "\n").strip
-          end
+        # Subsume "Types" heading under function head heading
+        css('h4.func-head + .fun-types > h3.func-types-title')
+          .each { |node| node.name = 'h5' }
+
+        css('h3', 'h4', 'h5').each do |node|
+          node.name = node.name.sub(/\d/) { |i| i.to_i - 1 }
         end
 
-        css('pre:not(.REFTYPES) *:not(a)', 'a[href^=javascript]').each do |node|
-          node.before(node.children).remove
+        # Convert <span/> code blocks to <code/> if inline otherwise
+        # <pre><code/></pre>.
+        css('span.bold_code', 'span.code', '.func-head > span.title-name').each do |node|
+          node.remove_attribute('class')
+          node.css('span.bold_code', 'span.code')
+            .each { |n| n.before(n.children).remove }
+          if node.at_css('br') then
+            node.name = 'pre'
+            node.inner_html = "<code>" +
+                              node.inner_html.remove(/\n/).gsub('<br>', "\n").strip +
+                              "</code>"
+          else
+            node.name = 'code'
+            node.inner_html = node.inner_html.strip.gsub(/\s+/, ' ')
+          end
         end
 
-        css('pre:not(.REFTYPES)').each do |node|
+        css('*:not(.REFTYPES) > pre').each do |node|
           node['data-language'] = 'erlang'
           node.inner_html = node.inner_html.strip_heredoc
         end
@@ -70,23 +83,7 @@ module Docs
           end
         end
 
-        css('.REFTYPES').each do |node|
-          next unless node.parent
-          html = "<pre>"
-          while node['class'] == 'REFTYPES'
-            node.inner_html = node.inner_html.remove(/\n/).gsub('<br>', "\n")
-            node.css('*:not(a)').each { |n| n.before(n.children).remove }
-            html << node.inner_html.strip + "\n"
-            node = node.next_element
-            node.previous_element.remove
-          end
-          html.gsub! %r{\n{2,}}, "\n"
-          html.strip!
-          html << "</pre>"
-          node.before(html)
-        end
-
-        css('.REFTYPES').remove
+        css('a[href^=javascript]').each { |n| n.before(n.children).remove }
 
         css('table').each do |node|
           node.remove_attribute('border')
@@ -99,8 +96,6 @@ module Docs
           node.remove_attribute('valign')
         end
 
-        css('.bold_code').remove_attr('class')
-
         doc
       end
     end

+ 2 - 5
lib/docs/filters/erlang/entries.rb

@@ -44,10 +44,9 @@ module Docs
         if subpath.start_with?('lib/')
           names = Set.new
           entry_nodes.each_with_object [] do |node, entries|
-            id = node['name']
+            id = node['id']
             name = id.remove %r{\-\d*\z}
             name << ' (type)' if name.sub!(/\Atype-/, '')
-            name.remove! 'Module:'
             name.prepend "#{self.name}:"
             entries << [name, id] if names.add?(name)
           end
@@ -67,9 +66,7 @@ module Docs
 
       def entry_nodes
         @entry_nodes ||= if subpath.start_with?('lib/')
-          css('p + div.REFBODY').each_with_object [] do |node, result|
-            result.concat(node.previous_element.css('a[name]').to_a)
-          end
+          css('article.func > h4', 'article.data-types-body > h4').entries
         elsif subpath.start_with?('erts')
           link = at_css(".flipMenu a[href='#{File.basename(subpath, '.html')}']")
           list = link.parent.parent

+ 0 - 9
lib/docs/filters/erlang/pre_clean_html.rb

@@ -4,15 +4,6 @@ module Docs
       def call
         css('.flipMenu li[title] > a').remove unless subpath.start_with?('erts') # perf
 
-        css('.REFTYPES').each do |node|
-          node.name = 'pre'
-        end
-
-        css('span.bold_code', 'span.code').each do |node|
-          node.name = 'code'
-          node.inner_html = node.inner_html.strip.gsub(/\s+/, ' ')
-        end
-
         doc
       end
     end