mirror of https://github.com/freeCodeCamp/devdocs
parent
81abc5af62
commit
2e33ebcd45
@ -1,89 +1,53 @@
|
||||
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'
|
||||
return 'Syntax' if slug.include?('syntax')
|
||||
return 'Style rules' if slug.include?('style')
|
||||
return 'At-Rules' if slug.include?('at')
|
||||
return 'Values' if slug.include?('values')
|
||||
return 'Operators' if slug.include?('operators')
|
||||
return 'Command line' if slug.include?('cli')
|
||||
return 'Modules' if slug.include?('modules')
|
||||
'Misc'
|
||||
end
|
||||
|
||||
def additional_entries
|
||||
root_page? ? root_entries : function_entries
|
||||
end
|
||||
|
||||
def root_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)
|
||||
|
||||
name = node.content.strip
|
||||
name.remove! %r{\A.+?: }
|
||||
name.remove! %r{\s#.*}
|
||||
signatureElement = css('.signature')
|
||||
|
||||
node['id'] = name.parameterize
|
||||
if signatureElement
|
||||
|
||||
next if SKIP_NAMES.include?(name)
|
||||
signatureElement.each do |node|
|
||||
|
||||
name = REPLACE_NAMES[name] if REPLACE_NAMES[name]
|
||||
name.gsub!(/ [A-Z]/) { |str| str.downcase! }
|
||||
entry_name = node.content
|
||||
|
||||
if type == '@-Rules and Directives'
|
||||
next unless name =~ /\A@[\w\-]+\z/ || name == '!optional'
|
||||
if entry_name.match(/\(/)
|
||||
entry_name = entry_name.scan(/.+\(/)[0].chop
|
||||
end
|
||||
|
||||
entries << [name, node['id'], type]
|
||||
end
|
||||
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
|
||||
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
|
||||
|
Loading…
Reference in new issue