diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index ca8fce67..b8511c86 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -708,7 +708,7 @@ credits = [ 'https://raw.githubusercontent.com/saltstack/salt/develop/LICENSE' ], [ 'Sass', - '2006-2016 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein', + '2006-2020 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein', 'MIT', 'https://raw.githubusercontent.com/sass/sass/stable/MIT-LICENSE' ], [ diff --git a/lib/docs/filters/sass/clean_html.rb b/lib/docs/filters/sass/clean_html.rb index 8c13564c..db5c11ab 100644 --- a/lib/docs/filters/sass/clean_html.rb +++ b/lib/docs/filters/sass/clean_html.rb @@ -2,62 +2,99 @@ module Docs class Sass class CleanHtmlFilter < Filter def call - css('tt').each do |node| - node.name = 'code' + + css('.sl-c-alert').remove + + css('.sl-l-medium-holy-grail__navigation').remove + + css('.sl-r-banner').remove + + css('.site-footer').remove + + # Add id to code blocks + css('pre.signature').each do |node| + + id = node.content + + if id.match(/\(/) + id = id.scan(/.+\(/)[0].chop + end + + if id.include?('$pi') + node.set_attribute('id', 'pi') + elsif id.include?('$e') + node.set_attribute('id', 'e') + else + node.set_attribute('id', id) + end + end - css('pre').each do |node| - node.content = node.content + # Remove duplicate ids + css('.sl-c-callout--function').each do |node| + node.remove_attribute('id') end - root_page? ? root : other + # Hidden title links + css('.visuallyhidden').remove - doc - end + ### Syntax Highlight ### + css('.kt').each do |node| + node.remove_attribute('class') + node.add_class('token constant') + end - def root - at_css('h1 + ul').remove - end + css('.k, .kn, .kc, .cp, .ow').each do |node| + node.remove_attribute('class') + node.add_class('token keyword') + end - def other - at_css('h2').remove + css('.nv, .no').each do |node| + node.remove_attribute('class') + node.add_class('token variable') + end - css('.showSource', '.source_code').remove + css('.nb, .n').each do |node| + node.remove_attribute('class') + node.add_class('token string') + end - css('div.docstring', 'div.discussion').each do |node| - node.before(node.children).remove + css('.p').each do |node| + node.remove_attribute('class') + node.add_class('token punctuation') end - # Remove "See Also" - css('.see').each do |node| - node.previous_element.remove - node.remove + css('.nf').each do |node| + node.remove_attribute('class') + node.add_class('token function') end - # Remove "- ([...])" before method names - css('.signature', 'span.overload', 'span.signature').each do |node| - next if node.at_css('.overload') - node.child.remove while node.child.name != 'strong' + css('.o').each do |node| + node.remove_attribute('class') + node.add_class('token operator') end - # Clean up .inline divs - css('div.inline').each do |node| - node.content = node.content - node.name = 'span' + css('.c1, .cm, .c').each do |node| + node.remove_attribute('class') + node.add_class('token comment') end - # Remove links to type classes (e.g. Number) - css('.type > code').each do |node| - node.before(node.content.remove('Sass::Script::Value::').remove('Sass::Script::')).remove + css('.mh, .m, .mi').each do |node| + node.remove_attribute('class') + node.add_class('token number') end - css('li > span.signature').each do |node| - node.name = 'p' + css('.nc, .nt').each do |node| + node.remove_attribute('class') + node.add_class('token selector') end - css('h3 strong', 'span.overload').each do |node| - node.before(node.children).remove + css('.nl').each do |node| + node.remove_attribute('class') + node.add_class('token property') end + + doc end end end diff --git a/lib/docs/filters/sass/entries.rb b/lib/docs/filters/sass/entries.rb index bec811bd..47aa7ac7 100644 --- a/lib/docs/filters/sass/entries.rb +++ b/lib/docs/filters/sass/entries.rb @@ -1,89 +1,65 @@ module Docs class Sass class EntriesFilter < Docs::EntriesFilter - TYPES = ['CSS Extensions', 'SassScript', '@-Rules and Directives', - 'Output Styles'] - - SKIP_NAMES = ['Interactive Shell', 'Data Types', 'Operations', - 'Division and /', 'Keyword Arguments'] - - REPLACE_NAMES = { - '%foo' => '%placeholder selector', - '&' => '& parent selector', - '$' => '$ variables', - '`' => '#{} interpolation', - 'The !optional Flag' => '!optional' - } def get_name - 'Functions' + at_css('#main-content > h1').content end def get_type - 'Functions' - end - def additional_entries - root_page? ? root_entries : function_entries + case slug + when /syntax/ + 'Syntax' + when /style/ + 'Style rules' + when /at/ + 'At-Rules' + when /values/ + 'Values' + when /operators/ + 'Operators' + when /cli/ + 'Command line' + when /modules/ + 'Modules' + else + 'Misc' + end + end - def root_entries + def additional_entries entries = [] - type = '' - - css('*').each do |node| - if node.name == 'h2' - type = node.content.strip - type.remove! %r{\s#.*} - node['id'] = type.parameterize - - if type == 'Function Directives' - entries << ['@function', node['id'], '@-Rules and Directives'] - end - if type.include? 'Directives' - type = '@-Rules and Directives' - elsif type == 'Output Style' - type = 'Output Styles' - end - - next - elsif node.name == 'h3' || node.name == 'h4' - next unless TYPES.include?(type) + signatureElement = css('.signature') - name = node.content.strip - name.remove! %r{\A.+?: } - name.remove! %r{\s#.*} + if signatureElement - node['id'] = name.parameterize + signatureElement.each do |node| - next if SKIP_NAMES.include?(name) + entry_name = node.content - name = REPLACE_NAMES[name] if REPLACE_NAMES[name] - name.gsub!(/ [A-Z]/) { |str| str.downcase! } + if entry_name.match(/\(/) + entry_name = entry_name.scan(/.+\(/)[0].chop + end - if type == '@-Rules and Directives' - next unless name =~ /\A@[\w\-]+\z/ || name == '!optional' + if entry_name.include?('$pi') + entries << [entry_name, 'pi', 'Variable'] + elsif entry_name.include?('$e') + entries << [entry_name, 'e', 'Variable'] + else + entries << [entry_name, entry_name, 'Functions'] end - entries << [name, node['id'], type] end + end entries - end - def function_entries - css('.method_details > .signature').inject [] do |entries, node| - name = node.content.strip.remove(%r{\(.*}) - - unless name == entries.last.try(:first) - entries << [name, node['id'], 'Functions'] - end - - entries - end end + end end end diff --git a/lib/docs/scrapers/sass.rb b/lib/docs/scrapers/sass.rb index c9774cdf..84b3c47e 100644 --- a/lib/docs/scrapers/sass.rb +++ b/lib/docs/scrapers/sass.rb @@ -1,9 +1,9 @@ module Docs class Sass < UrlScraper self.type = 'yard' - self.release = '3.5.3' - self.base_url = 'http://sass-lang.com/documentation/' - self.root_path = 'file.SASS_REFERENCE.html' + self.release = '3.6.4' + self.base_url = 'https://sass-lang.com/documentation' + self.root_path = 'index.html' self.links = { home: 'http://sass-lang.com/', code: 'https://github.com/sass/sass' @@ -11,21 +11,21 @@ module Docs html_filters.push 'sass/clean_html', 'sass/entries', 'title' - options[:only] = %w(Sass/Script/Functions.html) options[:root_title] = false options[:title] = 'Sass Functions' - options[:container] = ->(filter) do - filter.root_page? ? '#filecontents' : '#instance_method_details' - end + options[:skip_patterns] = [/breaking-changes/] + + # options[:container] = '#main-content' options[:attribution] = <<-HTML - © 2006–2016 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
+ © 2006–2020 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
Licensed under the MIT License. HTML def get_latest_version(opts) get_latest_github_release('sass', 'libsass', opts) end + end end