Sha256: 10d7794b592a13da58debadb19b71e9a1ad6667f48cde1a794e76c1d3eb6edf1

Contents?: true

Size: 1.94 KB

Versions: 16

Compression:

Stored size: 1.94 KB

Contents

require 'middleman-core/meta_pages/sitemap_resource'

module Middleman
  module MetaPages
    # View class for a sitemap tree
    class SitemapTree
      def initialize
        @children = {}
      end

      def add_resource(resource)
        add_path(resource.path.split('/'), resource)
      end

      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 css_classes
        ['tree']
      end

      protected

      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 to_s
        "Sitemap Tree"
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
middleman-core-3.2.1 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.2.0 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.6 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.5 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.4 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.3 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.2 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.1 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.rc.4 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.rc.3 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.rc.2 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.rc.1 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.beta.3 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.beta.2 lib/middleman-core/meta_pages/sitemap_tree.rb
middleman-core-3.1.0.beta.1 lib/middleman-core/meta_pages/sitemap_tree.rb