From a3b9a5aa5fe344cf33a47ccbf1d26a95fbe4e255 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Mon, 27 Oct 2008 11:08:29 +0000 Subject: [PATCH] Makes wiki text formatter pluggable. Original patch #2025 by Yuki Sonoda slightly edited. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@1955 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/wiki_controller.rb | 9 +- app/helpers/application_helper.rb | 28 ++- app/views/layouts/base.rhtml | 2 +- app/views/mailer/layout.text.html.rhtml | 2 +- app/views/settings/_general.rhtml | 2 +- lib/redmine.rb | 5 + lib/redmine/plugin.rb | 10 + lib/redmine/wiki_formatting.rb | 193 ++++------------- .../wiki_formatting/textile/formatter.rb | 183 ++++++++++++++++ lib/redmine/wiki_formatting/textile/helper.rb | 43 ++++ public/javascripts/jstoolbar/jstoolbar.js | 179 ---------------- public/javascripts/jstoolbar/textile.js | 200 ++++++++++++++++++ test/unit/helpers/application_helper_test.rb | 7 + 13 files changed, 513 insertions(+), 350 deletions(-) create mode 100644 lib/redmine/wiki_formatting/textile/formatter.rb create mode 100644 lib/redmine/wiki_formatting/textile/helper.rb create mode 100644 public/javascripts/jstoolbar/textile.js diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 114010dff..04bc33a82 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -63,7 +63,7 @@ class WikiController < ApplicationController @page.content = WikiContent.new(:page => @page) if @page.new_record? @content = @page.content_for_version(params[:version]) - @content.text = "h1. #{@page.pretty_title}" if @content.text.blank? + @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @content.comments = nil if request.get? @@ -208,4 +208,11 @@ private def editable?(page = @page) page.editable_by?(User.current) end + + # Returns the default content of a new wiki page + def initial_page_content(page) + helper = Redmine::WikiFormatting.helper_for(Setting.text_formatting) + extend helper unless self.instance_of?(helper) + helper.instance_method(:initial_page_content).bind(self).call(page) + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index c72763dbb..aad2c5bec 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -17,10 +17,14 @@ require 'coderay' require 'coderay/helpers/file_type' +require 'forwardable' module ApplicationHelper include Redmine::WikiFormatting::Macros::Definitions + extend Forwardable + def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter + def current_role @current_role ||= User.current.role_for_project(@project) end @@ -259,9 +263,7 @@ module ApplicationHelper end end - text = (Setting.text_formatting == 'textile') ? - Redmine::WikiFormatting.to_html(text) { |macro, args| exec_macro(macro, obj, args) } : - simple_format(auto_link(h(text))) + text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text) { |macro, args| exec_macro(macro, obj, args) } # different methods for formatting wiki links case options[:wiki_links] @@ -549,18 +551,6 @@ module ApplicationHelper end end - def wikitoolbar_for(field_id) - return '' unless Setting.text_formatting == 'textile' - - help_link = l(:setting_text_formatting) + ': ' + - link_to(l(:label_help), compute_public_path('wiki_syntax', 'help', 'html'), - :onclick => "window.open(\"#{ compute_public_path('wiki_syntax', 'help', 'html') }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;") - - javascript_include_tag('jstoolbar/jstoolbar') + - javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language}") + - javascript_tag("var toolbar = new jsToolBar($('#{field_id}')); toolbar.setHelpLink('#{help_link}'); toolbar.draw();") - end - def content_for(name, content = nil, &block) @has_content ||= {} @has_content[name] = true @@ -570,4 +560,12 @@ module ApplicationHelper def has_content?(name) (@has_content && @has_content[name]) || false end + + private + + def wiki_helper + helper = Redmine::WikiFormatting.helper_for(Setting.text_formatting) + extend helper + return self + end end diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml index 86d23d62f..8cdfcb8e6 100644 --- a/app/views/layouts/base.rhtml +++ b/app/views/layouts/base.rhtml @@ -7,7 +7,7 @@ <%= stylesheet_link_tag 'application', :media => 'all' %> <%= javascript_include_tag :defaults %> -<%= stylesheet_link_tag 'jstoolbar' %> +<%= heads_for_wiki_formatter %>