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'] end
def initialize
def initialize @children = {} end
def render
def render content = "" @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.each do |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 content end
def to_s
def to_s "Sitemap Tree" end