From 02c6ed2fa061a20bfbc2d9a738376f4e85ec17b6 Mon Sep 17 00:00:00 2001 From: Jacques Distler Date: Wed, 28 Feb 2007 18:38:52 -0600 Subject: [PATCH] More progress on S5. Forgot to add gremlin zapping in app/views/wiki/edit.rhtml. --- app/controllers/wiki_controller.rb | 7 ++- app/views/layouts/s5.rhtml | 1 + app/views/wiki/edit.rhtml | 2 +- app/views/wiki/s5.rhtml | 31 ++++++++++ public/s5/ui/default/math.css | 5 ++ public/s5/ui/default/slides.js | 10 +-- .../maruku/lib/maruku/output/s5/to_s5.rb | 61 +++++++++++-------- 7 files changed, 83 insertions(+), 34 deletions(-) create mode 100644 app/views/layouts/s5.rhtml create mode 100644 app/views/wiki/s5.rhtml create mode 100644 public/s5/ui/default/math.css diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index a7e9628d..8b7acb99 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -2,6 +2,7 @@ require 'fileutils' require 'redcloth_for_tex' require 'parsedate' require 'zip/zip' +require 'sanitize' class WikiController < ApplicationController @@ -11,6 +12,8 @@ class WikiController < ApplicationController layout 'default', :except => [:rss_feed, :rss_with_content, :rss_with_headlines, :tex, :pdf, :s5, :export_tex, :export_html] + include Sanitize + def index if @web_name redirect_home @@ -287,7 +290,9 @@ class WikiController < ApplicationController def s5 if @web.markup == :markdownMML or @web.markup == :markdown - @s5_content = Maruku.new(@page.content).to_s5 +# @s5_content = sanitize_html(Maruku.new(@page.content.delete("\r\x01-\x08\x0B\x0C\x0E-\x1F"), {:raw => true}).to_s5) + @s5_content = sanitize_html(Maruku.new(@page.content.delete("\r\x01-\x08\x0B\x0C\x0E-\x1F"), + {:math_enabled => true, :math_numbered => ['\\[','\\begin{equation}'], :content_only => true}).to_s5) end end diff --git a/app/views/layouts/s5.rhtml b/app/views/layouts/s5.rhtml new file mode 100644 index 00000000..36ba17d8 --- /dev/null +++ b/app/views/layouts/s5.rhtml @@ -0,0 +1 @@ +<%= @content_for_layout %> diff --git a/app/views/wiki/edit.rhtml b/app/views/wiki/edit.rhtml index b6e39f15..0ccd87ae 100644 --- a/app/views/wiki/edit.rhtml +++ b/app/views/wiki/edit.rhtml @@ -14,7 +14,7 @@ { 'id' => 'editForm', 'method' => 'post', 'onsubmit' => 'cleanAuthorName()', 'accept-charset' => 'utf-8' }) %> - +
as <%= text_field_tag :author, @author, diff --git a/app/views/wiki/s5.rhtml b/app/views/wiki/s5.rhtml new file mode 100644 index 00000000..a30917aa --- /dev/null +++ b/app/views/wiki/s5.rhtml @@ -0,0 +1,31 @@ + + + + + +<%=@page.plain_name%> + + +" /> + + + + + + + + + + + + + + + + + + +<%= @s5_content %> + + + diff --git a/public/s5/ui/default/math.css b/public/s5/ui/default/math.css new file mode 100644 index 00000000..d46fb6e9 --- /dev/null +++ b/public/s5/ui/default/math.css @@ -0,0 +1,5 @@ +merror {display:inline;font-size:1em;} +math[display=block] {overflow:auto;} +math { white-space: nowrap } +.maruku-eq-number {float:right} +.blockquotesource {margin-left:1em;} diff --git a/public/s5/ui/default/slides.js b/public/s5/ui/default/slides.js index 342ff9f1..3ff8535f 100644 --- a/public/s5/ui/default/slides.js +++ b/public/s5/ui/default/slides.js @@ -530,9 +530,9 @@ function notOperaFix() { slides.setAttribute('href',slideCSS); // Gecko fix } if (isIE && document.styleSheets && document.styleSheets[0]) { - document.styleSheets[0].addRule('img', 'behavior: url(ui/default/iepngfix.htc)'); - document.styleSheets[0].addRule('div', 'behavior: url(ui/default/iepngfix.htc)'); - document.styleSheets[0].addRule('.slide', 'behavior: url(ui/default/iepngfix.htc)'); + document.styleSheets[0].addRule('img', 'behavior: url(/s5/ui/default/iepngfix.htc)'); + document.styleSheets[0].addRule('div', 'behavior: url(/s5/ui/default/iepngfix.htc)'); + document.styleSheets[0].addRule('.slide', 'behavior: url(/s5/ui/default/iepngfix.htc)'); } } @@ -622,7 +622,7 @@ function createNotesWindow() { // creates a window for our notes if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist s5NotesWindowLoaded = false; // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr. - s5NotesWindow = window.open('ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0'); + s5NotesWindow = window.open('/s5/ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0'); } if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded loadNote(); @@ -809,4 +809,4 @@ function startup() { } window.onload = startup; -window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file +window.onresize = function(){setTimeout('windowChange()',5);} diff --git a/vendor/plugins/maruku/lib/maruku/output/s5/to_s5.rb b/vendor/plugins/maruku/lib/maruku/output/s5/to_s5.rb index 555f4653..22f2aac7 100644 --- a/vendor/plugins/maruku/lib/maruku/output/s5/to_s5.rb +++ b/vendor/plugins/maruku/lib/maruku/output/s5/to_s5.rb @@ -7,13 +7,17 @@ module MaRuKu def to_s5(context={}) indent = context[:indent] || -1 ie_hack = context[:ie_hack] ||true + content_only = true #context[:content_only] doc = Document.new(nil,{:respect_whitespace =>:all}) - html = Element.new('html', doc) - html.add_namespace('http://www.w3.org/1999/xhtml') - html.add_namespace('svg', "http://www.w3.org/2000/svg" ) + if (content_only) + body = Element.new('div', doc) + else + html = Element.new('html', doc) + html.add_namespace('http://www.w3.org/1999/xhtml') + html.add_namespace('svg', "http://www.w3.org/2000/svg" ) - head = Element.new('head', html) + head = Element.new('head', html) me = Element.new 'meta', head me.attributes['http-equiv'] = 'Content-type' me.attributes['content'] = 'text/html;charset=utf-8' @@ -25,7 +29,8 @@ module MaRuKu title << Text.new(doc_title) - body = Element.new('body', html) + body = Element.new('body', html) + end slide_header = self.attributes[:slide_header] slide_footer = self.attributes[:slide_footer] @@ -35,16 +40,18 @@ module MaRuKu slide_bottomright = self.attributes[:slide_bottomright] dummy_layout_slide = - "
-
-
- - -
#{slide_topleft}
-
#{slide_topright}
-
#{slide_bottomleft}
-
#{slide_bottomright}
-
" + " +
+
+
+ + +
#{slide_topleft}
+
#{slide_topright}
+
#{slide_bottomleft}
+
#{slide_bottomright}
+
+ " body.add_element Document.new(dummy_layout_slide, {:respect_whitespace =>:all}).root presentation = Element.new 'div', body @@ -82,23 +89,23 @@ module MaRuKu end end - - doc2 = Document.new("
"+S5_external+"
",{:respect_whitespace =>:all}) - doc2.root.children.each{ |child| head << child } - - - add_css_to(head) - xml = "" + if (content_only) + body.write(xml,indent,transitive=true,ie_hack); + else + doc2 = Document.new("
"+S5_external+"
",{:respect_whitespace =>:all}) + doc2.root.children.each{ |child| head << child } - # REXML Bug? if indent!=-1 whitespace is not respected for 'pre' elements - # containing code. - html.write(xml,indent,transitive=true,ie_hack); + add_css_to(head) - Xhtml10strict + xml + # REXML Bug? if indent!=-1 whitespace is not respected for 'pre' elements + # containing code. + html.write(xml,indent,transitive=true,ie_hack); + Xhtml10strict + xml + end end end -end \ No newline at end of file +end