From 2660d86b89b1fcb953e639d40d4a18e1bcd8b5ff Mon Sep 17 00:00:00 2001 From: Benjamin Meichsner Date: Wed, 20 May 2009 14:06:40 +0200 Subject: [PATCH] Added table of contents to wiki page. --- app/helpers/pages_helper.rb | 23 ++++++++++++++++++++++- app/views/pages/_body.html.haml | 3 +++ app/views/pages/show.html.haml | 2 +- public/stylesheets/main.css | 3 +++ public/stylesheets/print.css | 3 +++ public/stylesheets/sass/main.sass | 4 +++- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index a2e75b51..2b38846d 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -1,7 +1,7 @@ module PagesHelper def wikified_body(body) - r = RedCloth.new(body) + r = RedCloth.new(generate_anchors(body)) r.gsub!(/\[\[(.*?)(\|(.*?))?\]\]/) { wiki_link($1, $3) } sanitize r.to_html r.to_html @@ -15,4 +15,25 @@ module PagesHelper link_to((link_text || wiki_words), wiki_page_url(permalink), :class => "new_wiki_link") end end + + def generate_toc(body) + toc = "" + body.gsub(/^\s*h([1-6])\.\s+(.*)/) do + number = $1 + name = $2 + header = name.downcase.gsub(' ', '-') + toc << '#' * number.to_i + ' "' + name + '":#' + header + "\n" + end + RedCloth.new(toc).to_html + end + + def generate_anchors(body) + body.gsub(/^\s*h([1-6])\.\s+(.*)/) do + number = $1 + name = $2 + header = name.downcase.gsub(' ', '-') + "\nh#{number}. #{name} " + end + end + end diff --git a/app/views/pages/_body.html.haml b/app/views/pages/_body.html.haml index 0c57880b..dc60c9e7 100644 --- a/app/views/pages/_body.html.haml +++ b/app/views/pages/_body.html.haml @@ -1 +1,4 @@ +#toc + %h2 Inhaltsverzeichnis + = generate_toc @page.body = wikified_body @page.body \ No newline at end of file diff --git a/app/views/pages/show.html.haml b/app/views/pages/show.html.haml index 483d055a..e536a3b9 100644 --- a/app/views/pages/show.html.haml +++ b/app/views/pages/show.html.haml @@ -7,7 +7,7 @@ %ul - for version in @page.versions.reverse %li - = link_to format_datetime(version.updated_at), version_page_path(@page, :version => version.version) + = link_to format_time(version.updated_at), version_page_path(@page, :version => version.version) = "(#{User.find(version.updated_by).nick})" diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css index 26461d6b..e5584309 100644 --- a/public/stylesheets/main.css +++ b/public/stylesheets/main.css @@ -444,3 +444,6 @@ a.new_wiki_link { #preview { border: 1px dotted grey; padding: 0 1em; } + +#toc { + float: right; } diff --git a/public/stylesheets/print.css b/public/stylesheets/print.css index 2c81fbcf..beabf270 100644 --- a/public/stylesheets/print.css +++ b/public/stylesheets/print.css @@ -445,6 +445,9 @@ a.new_wiki_link { border: 1px dotted grey; padding: 0 1em; } +#toc { + float: right; } + #logininfo, #header, #footer { display: none; } diff --git a/public/stylesheets/sass/main.sass b/public/stylesheets/sass/main.sass index 67ca6b46..caff3e67 100644 --- a/public/stylesheets/sass/main.sass +++ b/public/stylesheets/sass/main.sass @@ -490,4 +490,6 @@ a.new_wiki_link color: grey #preview border: 1px dotted grey - padding: 0 1em \ No newline at end of file + padding: 0 1em +#toc + float: right \ No newline at end of file