diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index d91c0f7b..5c5d8c2d 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -20,7 +20,7 @@ class PagesController < ApplicationController def new @page = Page.new - @page.title = params[:title].capitalize.gsub("-", " ") if params[:title] + @page.title = params[:title].gsub("_", " ") if params[:title] respond_to do |format| format.html # new.html.erb diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index 1dba4482..5c9f594a 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -1,15 +1,7 @@ module PagesHelper - def wikified_body(body) - body = wiki_header(body) - r = RedCloth.new(body) - r.gsub!(/\[\[(.*?)(\|(.*?))?\]\]/) { wiki_link($1, $3) } - sanitize r.to_html - r.to_html - end - def wiki_link(wiki_words, link_text = nil) - permalink = wiki_words.downcase.gsub(' ', '-') + permalink = Page.permalink(wiki_words) if Page.exists?(:permalink => permalink) link_to((link_text || wiki_words), wiki_page_url(permalink)) else @@ -17,27 +9,43 @@ module PagesHelper end end + def build_internal_links(body) + body.gsub(/\[\[(.*?)(\|(.*?))?\]\]/) { wiki_link($1, $3) } + end + + def build_anchors(body) + body.gsub(/((.+)<\/h\d{1}>)/) do + header = $1 + token = $2.downcase.gsub(' ', '-') + " #{header}" + end + end + + def wikified_body(body) + body = Wikitext::Parser.new.parse body + build_anchors(body) + end + def wiki_header(body) - body.gsub(/^(={2,6})\s+(.*)\s+={2,6}$/) { "h#{$1.size}. #{$2}" } + body.gsub(/^(={1,6})\s*(.*)\s*={1,6}$/) { "h#{$1.size}. #{$2}" } end def generate_toc(body) toc = "" - body.gsub(/^\s*h([1-6])\.\s+(.*)/) do - number = $1 + body.gsub(/(.+)<\/h\d{1}>/) do + number = $1.to_i - 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} " + toc << "#" * number + " #{name}\n" + end + logger.debug("TOC: #{toc}") + toc = Wikitext::Parser.new.parse toc + + toc.gsub(/
  • ([^<>\n]*)/) do + name = $1 + token = name.downcase.gsub(' ', '-') + + "
  • #{name}" end end diff --git a/app/models/page.rb b/app/models/page.rb index ca7de36e..8250a0db 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -25,9 +25,13 @@ class Page < ActiveRecord::Base before_validation_on_create :set_permalink + def self.permalink(title) + Wikitext::Parser.new.parse "[[#{title}]]" + end + def set_permalink - if self.permalink.blank? - self.permalink = Page.count == 0 ? "home" : "#{title.downcase.strip.gsub(/ |\.|@/, '-')}" + unless self.permalink.blank? + self.permalink = Page.count == 0 ? "Home" : Page.permalink(title) end end end diff --git a/app/views/pages/_body.html.haml b/app/views/pages/_body.html.haml index dc60c9e7..5f346bd9 100644 --- a/app/views/pages/_body.html.haml +++ b/app/views/pages/_body.html.haml @@ -1,4 +1,5 @@ +- content = wikified_body @page.body #toc %h2 Inhaltsverzeichnis - = generate_toc @page.body -= wikified_body @page.body \ No newline at end of file + = generate_toc content +#wiki_content= content \ No newline at end of file diff --git a/config/environment.rb b/config/environment.rb index fcafaf8a..c0a36f9c 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -68,7 +68,7 @@ Rails::Initializer.run do |config| config.gem "fastercsv" config.gem "prawn" config.gem "haml", :version => '>=2.0.6' - config.gem 'RedCloth', :lib => 'redcloth' + config.gem "wikitext" # The internationalization framework can be changed to have another default locale (standard is :en) or more load paths. # All files from config/locales/*.rb,yml are added automatically. diff --git a/config/routes.rb b/config/routes.rb index 2325dd8b..905692cb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ ActionController::Routing::Routes.draw do |map| map.resources :pages, :collection => { :all => :get }, :member => {:version => :get, :revert => :get} - map.wiki_page "/wiki/:permalink", :controller => 'pages', :action => 'show' + map.wiki_page "/wiki/:permalink", :controller => 'pages', :action => 'show', :permalink => /[\w\._\-\%\d]+/ map.wiki "/wiki", :controller => 'pages', :action => 'show', :permalink => 'home' map.logout '/logout', :controller => 'login', :action => 'logout'