From b8911bc388edce3c48ddd71005b63d686b809bf2 Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Thu, 13 Sep 2007 20:25:20 -0400 Subject: [PATCH] Render S5 slideshows using Instiki's rendering engine framework so that WikiWord links are processed. --- app/controllers/wiki_controller.rb | 21 ++++++++------------ lib/chunks/engines.rb | 32 +++++++++++++++++++++++++----- lib/page_renderer.rb | 7 +++++++ 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 8c71047c..fda344d8 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -293,21 +293,16 @@ class WikiController < ApplicationController end def s5 - if @web.markup == :markdownMML - my_content = Maruku.new(@page.content.delete("\r"), - {:math_enabled => true, :math_numbered => ['\\[','\\begin{equation}'], :content_only => true, - :author => @page.author, :title => @page.plain_name}) - @s5_content = sanitize_xhtml(my_content.to_s5) - @s5_theme = my_content.s5_theme - elsif @web.markup == :markdown - my_content = Maruku.new(@page.content.delete("\r"), - {:math_enabled => false, :content_only => true, - :author => @page.author, :title => @page.plain_name}) - @s5_content = sanitize_xhtml(my_content.to_s5) - @s5_theme = my_content.s5_theme + if @page.revisions.last =~ /^slide_theme:\s*(.+)$/ + @s5_theme = $1 + else + @s5_theme = "default" + end + + if @web.markup == :markdownMML || @web.markup == :markdown + @s5_content = PageRenderer.new(@page.revisions.last).display_s5 else @s5_content = "S5 not supported with this text filter" - @s5_theme = "default" end end diff --git a/lib/chunks/engines.rb b/lib/chunks/engines.rb index d4f583d2..df8957a5 100644 --- a/lib/chunks/engines.rb +++ b/lib/chunks/engines.rb @@ -42,9 +42,19 @@ module Engines def mask require 'maruku' require 'maruku/ext/math' - html = sanitize_rexml(Maruku.new(@content.delete("\r\x01-\x08\x0B\x0C\x0E-\x1F"), - {:math_enabled => false}).to_html_tree) - html.gsub(/\A
\n?(.*?)\n?<\/div>\Z/m, '\1') + + # If the request is for S5, call Maruku accordingly (without math) + if @content.options[:mode] == :s5 + html = Maruku.new(@content.delete("\r"), {:math_enabled => false, + :content_only => true, + :author => @content.options[:engine_opts][:author], + :title => @content.options[:engine_opts][:title]}).to_s5 + sanitize_xhtml(html) + else + html = sanitize_rexml(Maruku.new(@content.delete("\r\x01-\x08\x0B\x0C\x0E-\x1F"), + {:math_enabled => false}).to_html_tree) + end + end end @@ -54,8 +64,20 @@ module Engines def mask require 'maruku' require 'maruku/ext/math' - html = sanitize_rexml(Maruku.new(@content.delete("\r\x01-\x08\x0B\x0C\x0E-\x1F"), - {:math_enabled => true, :math_numbered => ['\\[','\\begin{equation}']}).to_html_tree) + + # If the request is for S5, call Maruku accordingly + if @content.options[:mode] == :s5 + html = Maruku.new(@content.delete("\r"), {:math_enabled => true, + :math_numbered => ['\\[','\\begin{equation}'], + :content_only => true, + :author => @content.options[:engine_opts][:author], + :title => @content.options[:engine_opts][:title]}).to_s5 + sanitize_xhtml(html) + else + html = sanitize_rexml(Maruku.new(@content.delete("\r\x01-\x08\x0B\x0C\x0E-\x1F"), + {:math_enabled => true, :math_numbered => ['\\[','\\begin{equation}']}).to_html_tree) + end + html.gsub(/\A
\n?(.*?)\n?<\/div>\Z/m, '\1') end end diff --git a/lib/page_renderer.rb b/lib/page_renderer.rb index d1d44ffa..3c153fa4 100644 --- a/lib/page_renderer.rb +++ b/lib/page_renderer.rb @@ -63,6 +63,13 @@ class PageRenderer end end + # Renders an S5 slideshow + def display_s5 + @display_s5 ||= render(:mode => :s5, + :engine_opts => { :author => @revision.page.author, + :title => @revision.page.plain_name}) + end + # Returns an array of all the WikiIncludes present in the content of this revision. def wiki_includes unless @wiki_includes_cache