From 142abe027e2e7867bf822685171db5d9898b7b3c Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sat, 13 Oct 2012 14:28:08 -0700 Subject: [PATCH] Switch to using view classes isntead of partials --- .../lib/middleman-core/meta_pages.rb | 23 +++------ .../meta_pages/assets/sitemap.js | 1 + .../meta_pages/sitemap_resource.rb | 14 ++++++ .../middleman-core/meta_pages/sitemap_tree.rb | 48 +++++++++++++++++++ .../templates/partials/sitemap_tree.html.erb | 12 ----- .../meta_pages/templates/sitemap.html.erb | 3 +- 6 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 middleman-core/lib/middleman-core/meta_pages/assets/sitemap.js create mode 100644 middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb create mode 100644 middleman-core/lib/middleman-core/meta_pages/sitemap_tree.rb delete mode 100644 middleman-core/lib/middleman-core/meta_pages/templates/partials/sitemap_tree.html.erb diff --git a/middleman-core/lib/middleman-core/meta_pages.rb b/middleman-core/lib/middleman-core/meta_pages.rb index 340ee626..e6afae1b 100644 --- a/middleman-core/lib/middleman-core/meta_pages.rb +++ b/middleman-core/lib/middleman-core/meta_pages.rb @@ -1,6 +1,7 @@ require 'rack/builder' require 'rack/static' require 'tilt' +require 'middleman-core/meta_pages/sitemap_tree' module Middleman module MetaPages @@ -42,18 +43,13 @@ module Middleman def sitemap(env) resources = @middleman.sitemap.resources(true) - resource_tree = {} + sitemap_tree = SitemapTree.new + resources.each do |resource| - branch = resource_tree - path_parts = resource.path.split('/') - path_parts[0...-1].each do |path_part| - branch[path_part] ||= {} - branch = branch[path_part] - end - branch[path_parts.last] = resource + sitemap_tree.add_resource resource end - template('sitemap.html.erb', :resource_tree => resource_tree) + template('sitemap.html.erb', :sitemap_tree => sitemap_tree) end private @@ -61,7 +57,7 @@ module Middleman # Render a template with the given name and locals def template(template_name, locals={}) template_path = File.join(File.dirname(__FILE__), 'meta_pages', 'templates', template_name) - content = Tilt.new(template_path).render(RenderHelper.new, locals) + content = Tilt.new(template_path).render(nil, locals) response(content) end @@ -69,13 +65,6 @@ module Middleman def response(content) [ 200, {"Content-Type" => "text/html"}, Array(content) ] end - - class RenderHelper - def partial(partial_name, locals={}) - partial_path = File.join(File.dirname(__FILE__), 'meta_pages', 'templates', 'partials', partial_name) - content = Tilt.new(partial_path).render(RenderHelper.new, locals) - end - end end end end diff --git a/middleman-core/lib/middleman-core/meta_pages/assets/sitemap.js b/middleman-core/lib/middleman-core/meta_pages/assets/sitemap.js new file mode 100644 index 00000000..18f7dd1b --- /dev/null +++ b/middleman-core/lib/middleman-core/meta_pages/assets/sitemap.js @@ -0,0 +1 @@ +alert("foo"); \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb b/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb new file mode 100644 index 00000000..769e401f --- /dev/null +++ b/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb @@ -0,0 +1,14 @@ +module Middleman + module MetaPages + # View class for a sitemap resource + class SitemapResource + def initialize(resource) + @resource = resource + end + + def render + "

#{@resource.destination_path}

" + end + end + end +end diff --git a/middleman-core/lib/middleman-core/meta_pages/sitemap_tree.rb b/middleman-core/lib/middleman-core/meta_pages/sitemap_tree.rb new file mode 100644 index 00000000..ddd7f27b --- /dev/null +++ b/middleman-core/lib/middleman-core/meta_pages/sitemap_tree.rb @@ -0,0 +1,48 @@ +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_by(&:downcase).each do |path_part| + content << "
" + content << "" + content << path_part + content << "" + + subtree = @children[path_part] + content << subtree.render + content << "
" + end + content + end + + protected + + def add_path(path_parts, resource) + first_part = path_parts.first + + if path_parts.size == 1 + @children[first_part] = SitemapResource.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 diff --git a/middleman-core/lib/middleman-core/meta_pages/templates/partials/sitemap_tree.html.erb b/middleman-core/lib/middleman-core/meta_pages/templates/partials/sitemap_tree.html.erb deleted file mode 100644 index 8d31ed2d..00000000 --- a/middleman-core/lib/middleman-core/meta_pages/templates/partials/sitemap_tree.html.erb +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/middleman-core/lib/middleman-core/meta_pages/templates/sitemap.html.erb b/middleman-core/lib/middleman-core/meta_pages/templates/sitemap.html.erb index 88a879ba..f2c6da4e 100644 --- a/middleman-core/lib/middleman-core/meta_pages/templates/sitemap.html.erb +++ b/middleman-core/lib/middleman-core/meta_pages/templates/sitemap.html.erb @@ -4,13 +4,14 @@ Middleman Sitemap +

Middleman Sitemap

More meta pages - <%= partial 'sitemap_tree.html.erb', :tree => resource_tree %> + <%= sitemap_tree.render %>