class Middleman::MetaPages::SitemapTree
View class for a sitemap tree
def add_path(path_parts, resource)
def add_path(path_parts, resource) first_part = path_parts.first if path_parts.size == 1 sitemap_class = SitemapResource # Allow special sitemap resources to use custom metadata view calsses sitemap_class = resource.meta_pages_class if resource.respond_to? :meta_pages_class @children[first_part] = sitemap_class.new(resource) else @children[first_part] ||= SitemapTree.new @children[first_part].add_path(path_parts[1..-1], resource) end end
def add_resource(resource)
def add_resource(resource) add_path(resource.path.split('/'), resource) end
def css_classes
def css_classes ['tree'].concat(ignored? ? ['ignored'] : []) end
def ignored?
def ignored? @children.values.all?(&:ignored?) end
def initialize
def initialize @children = {} end
def render
def render sorted_children_keys = @children.keys.sort do |a, b| a_subtree = @children[a] b_subtree = @children[b] if a_subtree.is_a? SitemapResource if b_subtree.is_a? SitemapResource a.downcase <=> b.downcase else 1 end elsif b_subtree.is_a? SitemapResource if a_subtree.is_a? SitemapResource b.downcase <=> a.downcase else -1 end else a.downcase <=> b.downcase end end sorted_children_keys.reduce('') do |content, path_part| subtree = @children[path_part] content << "<details class='#{subtree.css_classes.join(' ')}'>" content << '<summary>' content << "<i class='icon-folder-open'></i>" unless subtree.is_a? SitemapResource content << "#{path_part}</summary>" content << subtree.render content << '</details>' end end
def to_s
def to_s 'Sitemap Tree' end