Add support for Slideous output.
This commit is contained in:
parent
9552543b96
commit
61f8dd4da8
10 changed files with 463 additions and 23 deletions
1
INSTALL
1
INSTALL
|
@ -119,6 +119,7 @@ you please, and copy the following data files to the same place:
|
|||
data/
|
||||
s5/
|
||||
slidy/
|
||||
slideous/
|
||||
dzslides/
|
||||
pcre-license.txt
|
||||
pcre3.dll
|
||||
|
|
49
README
49
README
|
@ -18,8 +18,8 @@ another, and a command-line tool that uses this library. It can read
|
|||
slide shows), [ConTeXt], [RTF], [DocBook XML], [OpenDocument XML],
|
||||
[ODT], [Word docx], [GNU Texinfo], [MediaWiki markup], [EPUB],
|
||||
[Textile], [groff man] pages, [Emacs Org-Mode], [AsciiDoc], and [Slidy],
|
||||
[DZSlides], or [S5] HTML slide shows. It can also produce [PDF] output
|
||||
on systems where LaTeX is installed.
|
||||
[Slideous], [DZSlides], or [S5] HTML slide shows. It can also produce
|
||||
[PDF] output on systems where LaTeX is installed.
|
||||
|
||||
Pandoc's enhanced version of markdown includes syntax for footnotes,
|
||||
tables, flexible ordered lists, definition lists, delimited code blocks,
|
||||
|
@ -153,6 +153,7 @@ General options
|
|||
`docbook` (DocBook XML), `opendocument` (OpenDocument XML), `odt`
|
||||
(OpenOffice text document), `docx` (Word docx), `epub` (EPUB book),
|
||||
`asciidoc` (AsciiDoc), `slidy` (Slidy HTML and javascript slide show),
|
||||
`slideous` (Slideous HTML and javascript slide show),
|
||||
`dzslides` (HTML5 + javascript slide show), `s5` (S5 HTML and javascript
|
||||
slide show), or `rtf` (rich text format). Note that `odt` and `epub`
|
||||
output will not be directed to *stdout*; an output filename must
|
||||
|
@ -178,8 +179,8 @@ General options
|
|||
C:\Documents And Settings\USERNAME\Application Data\pandoc
|
||||
|
||||
in Windows. A `reference.odt`, `reference.docx`, `default.csl`,
|
||||
`epub.css`, `templates`, `slidy`, or `s5` directory placed in this
|
||||
directory will override pandoc's normal defaults.
|
||||
`epub.css`, `templates`, `slidy`, `slideous`, or `s5` directory
|
||||
placed in this directory will override pandoc's normal defaults.
|
||||
|
||||
`-v`, `--version`
|
||||
: Print version.
|
||||
|
@ -199,7 +200,8 @@ Reader options
|
|||
`-R`, `--parse-raw`
|
||||
: Parse untranslatable HTML codes and LaTeX environments as raw HTML
|
||||
or LaTeX, instead of ignoring them. Affects only HTML and LaTeX
|
||||
input. Raw HTML can be printed in markdown, reStructuredText, HTML, Slidy,
|
||||
input. Raw HTML can be printed in markdown, reStructuredText, HTML,
|
||||
Slidy, Slideous,
|
||||
DZSlides, and S5 output; raw LaTeX can be printed in markdown,
|
||||
reStructuredText, LaTeX, and ConTeXt output. The default is for the
|
||||
readers to omit untranslatable HTML codes and LaTeX environments.
|
||||
|
@ -280,7 +282,7 @@ General writer options
|
|||
: Include an automatically generated table of contents (or, in
|
||||
the case of `latex`, `context`, and `rst`, an instruction to create
|
||||
one) in the output document. This option has no effect on `man`,
|
||||
`docbook`, `slidy`, or `s5` output.
|
||||
`docbook`, `slidy`, `slideous`, or `s5` output.
|
||||
|
||||
`--no-highlight`
|
||||
: Disables syntax highlighting for code blocks and inlines, even when
|
||||
|
@ -323,7 +325,8 @@ Options affecting specific writers
|
|||
in the sense that it needs no external files and no net access to be
|
||||
displayed properly by a browser. This option works only with HTML output
|
||||
formats, including `html`, `html5`, `html+lhs`, `html5+lhs`, `s5`,
|
||||
`slidy`, and `dzslides`. Scripts, images, and stylesheets at absolute URLs
|
||||
`slidy`, `slideous`,
|
||||
and `dzslides`. Scripts, images, and stylesheets at absolute URLs
|
||||
will be downloaded; those at relative URLs will be sought first relative
|
||||
to the working directory, then relative to the user data directory (see
|
||||
`--data-dir`), and finally relative to pandoc's default data directory.
|
||||
|
@ -378,7 +381,7 @@ Options affecting specific writers
|
|||
|
||||
`--slide-level`=*NUMBER*
|
||||
: Specifies that headers with the specified level create
|
||||
slides (for `beamer`, `s5`, `slidy`, `dzslides`). Headers
|
||||
slides (for `beamer`, `s5`, `slidy`, `slideous`, `dzslides`). Headers
|
||||
above this level in the hierarchy are used to divide the
|
||||
slide show into sections; headers below this level create
|
||||
subheads within a slide. The default is to set the slide level
|
||||
|
@ -683,6 +686,8 @@ depending on the output format, but include:
|
|||
`slidy-url`
|
||||
: base URL for Slidy documents (defaults to
|
||||
`http://www.w3.org/Talks/Tools/Slidy2`)
|
||||
`slideous-url`
|
||||
: base URL for Slideous documents (defaults to `default`)
|
||||
`s5-url`
|
||||
: base URL for S5 documents (defaults to `ui/default`)
|
||||
`fontsize`
|
||||
|
@ -1698,7 +1703,7 @@ Docbook
|
|||
Docx
|
||||
~ It will be rendered using OMML math markup.
|
||||
|
||||
HTML, Slidy, DZSlides, S5, EPUB
|
||||
HTML, Slidy, Slideous, DZSlides, S5, EPUB
|
||||
~ The way math is rendered in HTML will depend on the
|
||||
command-line options selected:
|
||||
|
||||
|
@ -1749,7 +1754,8 @@ Markdown allows you to insert raw HTML (or DocBook) anywhere in a document
|
|||
(except verbatim contexts, where `<`, `>`, and `&` are interpreted
|
||||
literally).
|
||||
|
||||
The raw HTML is passed through unchanged in HTML, S5, Slidy, DZSlides, EPUB,
|
||||
The raw HTML is passed through unchanged in HTML, S5, Slidy, Slideous,
|
||||
DZSlides, EPUB,
|
||||
Markdown, and Textile output, and suppressed in other formats.
|
||||
|
||||
*Pandoc extension*.
|
||||
|
@ -2070,9 +2076,9 @@ Producing slide shows with Pandoc
|
|||
=================================
|
||||
|
||||
You can use Pandoc to produce an HTML + javascript slide presentation
|
||||
that can be viewed via a web browser. There are three ways to do this,
|
||||
using [S5], [DZSlides], or [Slidy]. You can also produce a PDF slide
|
||||
show using LaTeX [beamer].
|
||||
that can be viewed via a web browser. There are four ways to do this,
|
||||
using [S5], [DZSlides], [Slidy], or [Slideous]. You can also produce a
|
||||
PDF slide show using LaTeX [beamer].
|
||||
|
||||
Here's the markdown source for a simple slide show, `habits.txt`:
|
||||
|
||||
|
@ -2118,6 +2124,10 @@ for S5,
|
|||
|
||||
for Slidy,
|
||||
|
||||
pandoc -t slideous -s habits.txt -o habits.html
|
||||
|
||||
for Slideous,
|
||||
|
||||
pandoc -t dzslides -s habits.txt -o habits.html
|
||||
|
||||
for DZSlides, or
|
||||
|
@ -2164,11 +2174,14 @@ you can just use level 1 headers for all each slide. (In that case, level 1
|
|||
will be the slide level.) But you can also structure the slide show into
|
||||
sections, as in the example above.
|
||||
|
||||
For Slidy and S5, the file produced by pandoc with the `-s/--standalone`
|
||||
For Slidy, Slideous and S5, the file produced by pandoc with the
|
||||
`-s/--standalone`
|
||||
option embeds a link to javascripts and CSS files, which are assumed to
|
||||
be available at the relative path `s5/default` (for S5) or at the Slidy
|
||||
be available at the relative path `s5/default` (for S5) or `slideous`
|
||||
(for Slideous), or at the Slidy
|
||||
website at `w3.org` (for Slidy). (These paths can be changed by setting
|
||||
the `slidy-url` or `s5-url` variables; see `--variable`, above.) For DZSlides,
|
||||
the `slidy-url`, `slideous-url` or `s5-url` variables; see `--variable`,
|
||||
above.) For DZSlides,
|
||||
the (relatively short) javascript and css are included in the file by default.
|
||||
|
||||
Incremental lists
|
||||
|
@ -2190,7 +2203,8 @@ Styling the slides
|
|||
------------------
|
||||
|
||||
You can change the style of HTML slides by putting customized CSS files
|
||||
in `$DATADIR/s5/default` (for S5) or `$DATADIR/slidy` (for Slidy),
|
||||
in `$DATADIR/s5/default` (for S5), `$DATADIR/slidy` (for Slidy),
|
||||
or `$DATADIR/slideous` (for Slideous),
|
||||
where `$DATADIR` is the user data directory (see `--data-dir`, above).
|
||||
The originals may be found in pandoc's system data directory (generally
|
||||
`$CABALDIR/pandoc-VERSION/s5/default`). Pandoc will look there for any
|
||||
|
@ -2267,6 +2281,7 @@ Latter, Ralf Stephan, Eric Seidel, B. Scott Michel.
|
|||
[reStructuredText]: http://docutils.sourceforge.net/docs/ref/rst/introduction.html
|
||||
[S5]: http://meyerweb.com/eric/tools/s5/
|
||||
[Slidy]: http://www.w3.org/Talks/Tools/Slidy/
|
||||
[Slideous]: http://goessner.net/articles/slideous/
|
||||
[HTML]: http://www.w3.org/TR/html40/
|
||||
[HTML 5]: http://www.w3.org/TR/html5/
|
||||
[XHTML]: http://www.w3.org/TR/xhtml1/
|
||||
|
|
|
@ -20,7 +20,7 @@ Description: Pandoc is a Haskell library for converting from one markup
|
|||
markdown, reStructuredText, HTML, LaTeX, ConTeXt, Docbook,
|
||||
OpenDocument, ODT, Word docx, RTF, MediaWiki, Textile,
|
||||
groff man pages, plain text, Emacs Org-Mode, AsciiDoc, EPUB,
|
||||
and S5 and Slidy HTML slide shows.
|
||||
and S5, Slidy and Slideous HTML slide shows.
|
||||
.
|
||||
Pandoc extends standard markdown syntax with footnotes,
|
||||
embedded LaTeX, definition lists, tables, and other
|
||||
|
@ -45,6 +45,7 @@ Data-Files:
|
|||
templates/default.rst, templates/default.plain,
|
||||
templates/default.mediawiki, templates/default.rtf,
|
||||
templates/default.s5, templates/default.slidy,
|
||||
templates/default.slideous,
|
||||
templates/default.dzslides, templates/default.asciidoc,
|
||||
templates/default.textile, templates/default.org,
|
||||
templates/epub-titlepage.html, templates/epub-page.html,
|
||||
|
@ -78,6 +79,9 @@ Data-Files:
|
|||
slidy/graphics/nofold-dim.gif,
|
||||
slidy/graphics/unfold-dim.gif,
|
||||
slidy/graphics/fold-dim.gif,
|
||||
-- data for slideous writer
|
||||
slideous/slideous.css,
|
||||
slideous/slideous.js,
|
||||
-- data for dzslides writer
|
||||
dzslides/template.html,
|
||||
-- data for citeproc
|
||||
|
|
95
slideous/slideous.css
Normal file
95
slideous/slideous.css
Normal file
|
@ -0,0 +1,95 @@
|
|||
/* This work is licensed under Creative Commons GNU LGPL License.
|
||||
|
||||
License: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
Version: 1.0
|
||||
|
||||
Author: Stefan Goessner/2005
|
||||
Web: http://goessner.net/
|
||||
*/
|
||||
@media screen, projection {
|
||||
body {
|
||||
background-color: #e3eee7;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
color: #132;
|
||||
border-color: #678;
|
||||
font-size: 125%;
|
||||
}
|
||||
#statusbar {
|
||||
display: none;
|
||||
position: absolute; z-index: 10;
|
||||
top: auto; bottom: 0; left: 0; right: 0;
|
||||
height: 2em;
|
||||
background-color: #f0fff8;
|
||||
color: #132;
|
||||
font-size: 75%;
|
||||
padding: 0.5em 0.5em 0 2px;
|
||||
border-top: solid 1px #000;
|
||||
}
|
||||
#statusbar button, #tocbox {
|
||||
cursor: pointer;
|
||||
color: #031;
|
||||
background-color: #e0eee7;
|
||||
margin: 1px;
|
||||
padding: 0 0.5em;
|
||||
border: inset 1px black;
|
||||
}
|
||||
#statusbar button:hover, #tocbox:hover {
|
||||
color: #031;
|
||||
background-color: #c0ccc6;
|
||||
border: outset 1px black;
|
||||
}
|
||||
#tocbox {
|
||||
width: 15em;
|
||||
}
|
||||
#eos {
|
||||
visibility: hidden;
|
||||
color: #021;
|
||||
background-color: #fffafa;
|
||||
border: inset 1px black;
|
||||
font-size: 120%;
|
||||
}
|
||||
div.slide {
|
||||
display: block;
|
||||
margin: 0 0 2em 0;
|
||||
padding: 0 150px;
|
||||
}
|
||||
|
||||
div.slide h1 {
|
||||
background: #a0aaa4;
|
||||
color: #f0fff8;
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
margin: 0 -150px;
|
||||
font-size: 120%;
|
||||
border-bottom: solid 1px black;
|
||||
}
|
||||
|
||||
div.slide h1:before { content: "# "; }
|
||||
div.handout { display: block; }
|
||||
|
||||
body>#statusbar { /* ie6 hack for fixing the statusbar - in quirks mode */
|
||||
position: fixed; /* thanks to Anne van Kesteren and Arthur Steiner */
|
||||
} /* see http://limpid.nl/lab/css/fixed/footer */
|
||||
* html body {
|
||||
overflow: hidden;
|
||||
}
|
||||
* html div.slide {
|
||||
height: 100%;
|
||||
padding-bottom: 2em;
|
||||
overflow: auto;
|
||||
} /* end ie6-hack */
|
||||
|
||||
} /* @media screen, projection */
|
||||
|
||||
@media print {
|
||||
body {
|
||||
color: black;
|
||||
font-family: sans-serif;
|
||||
font-size: 11pt;
|
||||
}
|
||||
|
||||
#statusbar { display: none; }
|
||||
div.slide { page-break-after: always; }
|
||||
div.handout { display: block; }
|
||||
|
||||
} /* @media print */
|
321
slideous/slideous.js
Normal file
321
slideous/slideous.js
Normal file
|
@ -0,0 +1,321 @@
|
|||
/* This work is licensed under Creative Commons GNU LGPL License.
|
||||
|
||||
License: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
|
||||
Author: Stefan Goessner/2005-2006
|
||||
Web: http://goessner.net/
|
||||
*/
|
||||
var Slideous = {
|
||||
version: 1.0,
|
||||
// == user customisable ===
|
||||
clickables: { a: true, button: true, img: true, input: true, object: true, textarea: true, select: true, option: true },
|
||||
incrementables: { blockquote: { filter: "self, parent" },
|
||||
dd: { filter: "self, parent" },
|
||||
dt: { filter: "self, parent" },
|
||||
h2: { filter: "self, parent" },
|
||||
h3: { filter: "self, parent" },
|
||||
h4: { filter: "self, parent" },
|
||||
h5: { filter: "self, parent" },
|
||||
h6: { filter: "self, parent" },
|
||||
li: { filter: "self, parent" },
|
||||
p: { filter: "self" },
|
||||
pre: { filter: "self" },
|
||||
img: { filter: "self, parent" },
|
||||
object: { filter: "self, parent" },
|
||||
table: { filter: "self, parent" },
|
||||
td: { filter: "self, parent" },
|
||||
th: { filter: "self, parent" },
|
||||
tr: { filter: "parent, grandparent" }
|
||||
},
|
||||
autoincrementables: { ol: true, ul: true, dl: true },
|
||||
autoincrement: false,
|
||||
statusbar: true,
|
||||
navbuttons: { incfontbutton: function(){Slideous.changefontsize(+Slideous.fontdelta);},
|
||||
decfontbutton: function(){Slideous.changefontsize(-Slideous.fontdelta);},
|
||||
contentbutton: function(){Slideous.gotoslide(Slideous.tocidx(), true, true);},
|
||||
homebutton: function(){Slideous.gotoslide(1, true, true);},
|
||||
prevslidebutton: function(){Slideous.previous(false);},
|
||||
previtembutton: function(){Slideous.previous(true);},
|
||||
nextitembutton: function(){Slideous.next(true);},
|
||||
nextslidebutton: function(){Slideous.next(false);},
|
||||
endbutton: function(){Slideous.gotoslide(Slideous.count,true,true);} },
|
||||
fontsize: 125, // in percent, corresponding to body.font-size in css file
|
||||
fontdelta: 5, // increase/decrease fontsize by this value
|
||||
mousesensitive: true,
|
||||
tocidx: 0,
|
||||
tocitems: { toc: "<li><a href=\"#s{\$slideidx}\">{\$slidetitle}</a></li>",
|
||||
tocbox: "<option value=\"#s{\$slideidx}\" title=\"{\$slidetitle}\">{\$slidetitle}</option>" },
|
||||
keydown: function(evt) {
|
||||
evt = evt || window.event;
|
||||
var key = evt.keyCode || evt.which;
|
||||
if (key && !evt.ctrlKey && !evt.altKey) {
|
||||
switch (key) {
|
||||
case 33: // page up ... previous slide
|
||||
Slideous.previous(false); evt.cancel = !Slideous.showall; break;
|
||||
case 37: // left arrow ... previous item
|
||||
Slideous.previous(true); evt.cancel = !Slideous.showall; break;
|
||||
case 32: // space bar
|
||||
case 39: // right arrow
|
||||
Slideous.next(true); evt.cancel = !Slideous.showall; break;
|
||||
case 13: // carriage return ... next slide
|
||||
case 34: // page down
|
||||
Slideous.next(false); evt.cancel = !Slideous.showall; break;
|
||||
case 35: // end ... last slide (not recognised by opera)
|
||||
Slideous.gotoslide(Slideous.count, true, true); evt.cancel = !Slideous.showall; break;
|
||||
case 36: // home ... first slide (not recognised by opera)
|
||||
Slideous.gotoslide(1, true, true); evt.cancel = !Slideous.showall; break;
|
||||
case 65: // A ... show All
|
||||
case 80: // P ... Print mode
|
||||
Slideous.toggleshowall(!Slideous.showall); evt.cancel = true; break;
|
||||
case 67: // C ... goto contents
|
||||
Slideous.gotoslide(Slideous.tocidx, true, true); evt.cancel = true; break;
|
||||
case 77: // M ... toggle mouse sensitivity
|
||||
Slideous.mousenavigation(Slideous.mousesensitive = !Slideous.mousesensitive); evt.cancel = true; break;
|
||||
case 83: // S ... toggle statusbar
|
||||
Slideous.togglestatusbar(); evt.cancel = true; break;
|
||||
case 61: // + ... increase fontsize
|
||||
case 107:
|
||||
Slideous.changefontsize(+Slideous.fontdelta); evt.cancel = true; break;
|
||||
case 109: // - ... decrease fontsize
|
||||
Slideous.changefontsize(-Slideous.fontdelta); evt.cancel = true; break;
|
||||
default: break;
|
||||
}
|
||||
if (evt.cancel) evt.returnValue = false;
|
||||
}
|
||||
return !evt.cancel;
|
||||
},
|
||||
|
||||
// == program logic ===
|
||||
count: 0, // # of slides ..
|
||||
curidx: 0, // current slide index ..
|
||||
mousedownpos: null, // last mouse down position ..
|
||||
contentselected: false, // indicates content selection ..
|
||||
showall: true,
|
||||
init: function() {
|
||||
Slideous.curidx = 1;
|
||||
Slideous.importproperties();
|
||||
Slideous.registerslides();
|
||||
document.body.innerHTML = Slideous.injectproperties(document.body.innerHTML);
|
||||
Slideous.buildtocs();
|
||||
Slideous.registeranchors();
|
||||
Slideous.toggleshowall(false);
|
||||
Slideous.updatestatus();
|
||||
document.body.style.fontSize = Slideous.fontsize+"%";
|
||||
document.getElementById("s1").style.display = "block";
|
||||
document.onkeydown = Slideous.keydown;
|
||||
Slideous.mousenavigation(Slideous.mousesensitive);
|
||||
Slideous.registerbuttons();
|
||||
if (window.location.hash)
|
||||
Slideous.gotoslide(window.location.hash.substr(2), true, true);
|
||||
},
|
||||
registerslides: function() {
|
||||
var div = document.getElementsByTagName("div");
|
||||
Slideous.count = 0;
|
||||
for (var i in div)
|
||||
if (Slideous.hasclass(div[i], "slide"))
|
||||
div[i].setAttribute("id", "s"+(++Slideous.count));
|
||||
},
|
||||
registeranchors: function() {
|
||||
var a = document.getElementsByTagName("a"),
|
||||
loc = (window.location.hostname+window.location.pathname).replace(/\\/g, "/");
|
||||
for (var i in a) {
|
||||
if (a[i].href && a[i].href.indexOf(loc) >= 0 && a[i].href.lastIndexOf("#") >= 0) {
|
||||
a[i].href = "javascript:Slideous.gotoslide(" + a[i].href.substr(a[i].href.lastIndexOf("#")+2)+",true,true)";
|
||||
}
|
||||
}
|
||||
},
|
||||
registerbuttons: function() {
|
||||
var button;
|
||||
for (var b in Slideous.navbuttons)
|
||||
if (button = document.getElementById(b))
|
||||
button.onclick = Slideous.navbuttons[b];
|
||||
},
|
||||
importproperties: function() { // from html meta section ..
|
||||
var meta = document.getElementsByTagName("meta"), elem;
|
||||
for (var i in meta)
|
||||
if (meta[i].attributes && meta[i].attributes["name"] && meta[i].attributes["name"].value in Slideous)
|
||||
switch (typeof(Slideous[meta[i].attributes["name"].value])) {
|
||||
case "number": Slideous[meta[i].attributes["name"].value] = parseInt(meta[i].attributes["content"].value); break;
|
||||
case "boolean": Slideous[meta[i].attributes["name"].value] = meta[i].attributes["content"].value == "true" ? true : false; break;
|
||||
default: Slideous[meta[i].attributes["name"].value] = meta[i].attributes["content"].value; break;
|
||||
}
|
||||
},
|
||||
injectproperties: function(str) {
|
||||
var meta = document.getElementsByTagName("meta"), elem;
|
||||
for (var i in meta) {
|
||||
if (meta[i].attributes && meta[i].attributes["name"])
|
||||
str = str.replace(new RegExp("{\\$"+meta[i].attributes["name"].value+"}","g"), meta[i].attributes["content"].value);
|
||||
}
|
||||
return str = str.replace(/{\$generator}/g, "Slideous")
|
||||
.replace(/{\$version}/g, Slideous.version)
|
||||
.replace(/{\$title}/g, document.title)
|
||||
.replace(/{\$slidecount}/g, Slideous.count);
|
||||
},
|
||||
buildtocs: function() {
|
||||
var toc = document.getElementById("toc"), list = "",
|
||||
tocbox = document.getElementById("tocbox");
|
||||
if (toc) {
|
||||
for (var i=0; i<Slideous.count; i++)
|
||||
list += Slideous.tocitems.toc.replace(/{\$slideidx}/g, i+1).replace(/{\$slidetitle}/, document.getElementById("s"+(i+1)).getElementsByTagName("h1")[0].innerHTML);
|
||||
toc.innerHTML = list;
|
||||
while (toc && !Slideous.hasclass(toc, "slide")) toc = toc.parentNode;
|
||||
if (toc) Slideous.tocidx = toc.getAttribute("id").substr(1);
|
||||
}
|
||||
if (tocbox) {
|
||||
tocbox.innerHTML = "";
|
||||
for (var i=0; i<Slideous.count; i++)
|
||||
tocbox.options[tocbox.length] = new Option((i+1)+". "+document.getElementById("s"+(i+1)).getElementsByTagName("h1")[0].innerHTML, "#s"+(i+1));
|
||||
tocbox.onchange = function() { Slideous.gotoslide(this.selectedIndex+1, true, true); };
|
||||
}
|
||||
},
|
||||
next: function(deep) {
|
||||
if (!Slideous.showall) {
|
||||
var slide = document.getElementById("s"+Slideous.curidx),
|
||||
item = Slideous.firstitem(slide, Slideous.isitemhidden);
|
||||
if (deep) { // next item
|
||||
if (item)
|
||||
Slideous.displayitem(item, true);
|
||||
else
|
||||
Slideous.gotoslide(Slideous.curidx+1, false, false);
|
||||
}
|
||||
else if (item) // complete slide ..
|
||||
while (item = Slideous.firstitem(slide, Slideous.isitemhidden))
|
||||
Slideous.displayitem(item, true);
|
||||
else // next slide
|
||||
Slideous.gotoslide(Slideous.curidx+1, true, false);
|
||||
Slideous.updatestatus();
|
||||
}
|
||||
},
|
||||
previous: function(deep) {
|
||||
if (!Slideous.showall) {
|
||||
var slide = document.getElementById("s"+Slideous.curidx);
|
||||
if (deep) {
|
||||
var item = Slideous.lastitem(slide, Slideous.isitemvisible);
|
||||
if (item)
|
||||
Slideous.displayitem(item, false);
|
||||
else
|
||||
Slideous.gotoslide(Slideous.curidx-1, true, false);
|
||||
}
|
||||
else
|
||||
Slideous.gotoslide(Slideous.curidx-1, true, false);
|
||||
Slideous.updatestatus();
|
||||
}
|
||||
},
|
||||
gotoslide: function(i, showitems, updatestatus) {
|
||||
if (!Slideous.showall && i > 0 && i <= Slideous.count && i != Slideous.curidx) {
|
||||
document.getElementById("s"+Slideous.curidx).style.display = "none";
|
||||
var slide = document.getElementById("s"+(Slideous.curidx=i)), item;
|
||||
while (item = Slideous.firstitem(slide, showitems ? Slideous.isitemhidden : Slideous.isitemvisible))
|
||||
Slideous.displayitem(item, showitems);
|
||||
slide.style.display = "block";
|
||||
if (updatestatus)
|
||||
Slideous.updatestatus();
|
||||
}
|
||||
},
|
||||
firstitem: function(root, filter) {
|
||||
var found = filter(root);
|
||||
for (var node=root.firstChild; node!=null && !found; node = node.nextSibling)
|
||||
found = Slideous.firstitem(node, filter);
|
||||
return found;
|
||||
},
|
||||
lastitem: function(root, filter) {
|
||||
var found = null;
|
||||
for (var node=root.lastChild; node!=null && !found; node = node.previousSibling)
|
||||
found = Slideous.lastitem(node, filter);
|
||||
return found || filter(root);
|
||||
},
|
||||
isitem: function(node, visible) {
|
||||
var nodename;
|
||||
return node && node.nodeType == 1 // elements only ..
|
||||
&& (nodename=node.nodeName.toLowerCase()) in Slideous.incrementables
|
||||
&& ( Slideous.incrementables[nodename].filter.match("\\bself\\b") && (Slideous.hasclass(node, "incremental") || (Slideous.autoincrement && nodename in Slideous.autoincrementables))
|
||||
|| Slideous.incrementables[nodename].filter.match("\\bparent\\b") && (Slideous.hasclass(node.parentNode, "incremental") || (Slideous.autoincrement && node.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))
|
||||
|| Slideous.incrementables[nodename].filter.match("\\bgrandparent\\b") && (Slideous.hasclass(node.parentNode.parentNode, "incremental") || (Slideous.autoincrement && node.parentNode.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))
|
||||
)
|
||||
&& (visible ? (node.style.visibility != "hidden")
|
||||
: (node.style.visibility == "hidden"))
|
||||
? node : null;
|
||||
},
|
||||
isitemvisible: function(node) { return Slideous.isitem(node, true); },
|
||||
isitemhidden: function(node) { return Slideous.isitem(node, false); },
|
||||
displayitem: function(item, show) {
|
||||
if (item) item.style.visibility = (show ? "visible" : "hidden");
|
||||
},
|
||||
updatestatus: function() {
|
||||
if (Slideous.statusbar) {
|
||||
var eos = document.getElementById("eos"),
|
||||
idx = document.getElementById("slideidx"),
|
||||
tocbox = document.getElementById("tocbox");
|
||||
if (eos)
|
||||
eos.style.visibility = Slideous.firstitem(document.getElementById("s"+Slideous.curidx), Slideous.isitemhidden) != null
|
||||
? "visible" : "hidden";
|
||||
if (idx)
|
||||
idx.innerHTML = Slideous.curidx;
|
||||
if (tocbox)
|
||||
tocbox.selectedIndex = Slideous.curidx-1;
|
||||
}
|
||||
},
|
||||
changefontsize: function(delta) {
|
||||
document.body.style.fontSize = (Slideous.fontsize+=delta)+"%";
|
||||
},
|
||||
togglestatusbar: function() {
|
||||
document.getElementById("statusbar").style.display = (Slideous.statusbar = !Slideous.statusbar) ? "block" : "none";
|
||||
},
|
||||
toggleshowall: function(showall) {
|
||||
var slide, item;
|
||||
for (var i=0; i<Slideous.count; i++) {
|
||||
slide = document.getElementById("s"+(i+1));
|
||||
slide.style.display = showall ? "block" : "none";
|
||||
while (item = Slideous.firstitem(slide, showall ? Slideous.isitemhidden : Slideous.isitemvisible))
|
||||
Slideous.displayitem(item, showall);
|
||||
var divs = slide.getElementsByTagName("div");
|
||||
for (var j in divs)
|
||||
if (Slideous.hasclass(divs[j], "handout"))
|
||||
divs[j].style.display = showall ? "block" : "none";
|
||||
}
|
||||
if (!showall)
|
||||
document.getElementById("s"+Slideous.curidx).style.display = "block";
|
||||
if (Slideous.statusbar)
|
||||
document.getElementById("statusbar").style.display = showall ? "none" : "block";
|
||||
Slideous.showall = showall;
|
||||
},
|
||||
hasclass: function(elem, classname) {
|
||||
var classattr = null;
|
||||
return (classattr=(elem.attributes && elem.attributes["class"]))
|
||||
&& classattr.nodeValue.match("\\b"+classname+"\\b");
|
||||
},
|
||||
selectedcontent: function() {
|
||||
return window.getSelection ? window.getSelection().toString()
|
||||
: document.getSelection ? document.getSelection()
|
||||
: document.selection ? document.selection.createRange().text
|
||||
: "";
|
||||
},
|
||||
mousenavigation: function(on) {
|
||||
if (on) {
|
||||
document.onmousedown = Slideous.mousedown;
|
||||
document.onmouseup = Slideous.mouseup;
|
||||
}
|
||||
else
|
||||
document.onmousedown = document.onmouseup = null;
|
||||
},
|
||||
mousepos: function(e) {
|
||||
return e.pageX ? {x: e.pageX, y: e.pageY}
|
||||
: {x: e.x+document.body.scrollLeft, y: e.y+document.body.scrollTop};
|
||||
},
|
||||
mousedown: function(evt) {
|
||||
evt = evt||window.event;
|
||||
Slideous.mousedownpos = Slideous.mousepos(evt);
|
||||
Slideous.contentselected = !!Slideous.selectedcontent() || ((evt.target || evt.srcElement).nodeName.toLowerCase() in Slideous.clickables);
|
||||
return true;
|
||||
},
|
||||
mouseup: function(evt) {
|
||||
evt = evt||window.event;
|
||||
var pos = Slideous.mousepos(evt);
|
||||
if (pos.x == Slideous.mousedownpos.x && pos.y == Slideous.mousedownpos.y && !Slideous.contentselected) {
|
||||
Slideous.next(true);
|
||||
return evt.returnValue = !(evt.cancel = true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
window.onload = Slideous.init;
|
|
@ -187,6 +187,7 @@ writers = [("native" , writeNative)
|
|||
writerHtml5 = True })
|
||||
,("s5" , writeHtmlString)
|
||||
,("slidy" , writeHtmlString)
|
||||
,("slideous" , writeHtmlString)
|
||||
,("dzslides" , writeHtmlString)
|
||||
,("docbook" , writeDocbook)
|
||||
,("opendocument" , writeOpenDocument)
|
||||
|
|
|
@ -482,6 +482,7 @@ data ObfuscationMethod = NoObfuscation
|
|||
-- | Varieties of HTML slide shows.
|
||||
data HTMLSlideVariant = S5Slides
|
||||
| SlidySlides
|
||||
| SlideousSlides
|
||||
| DZSlides
|
||||
| NoSlides
|
||||
deriving (Show, Read, Eq)
|
||||
|
@ -494,7 +495,7 @@ data WriterOptions = WriterOptions
|
|||
, writerEPUBMetadata :: String -- ^ Metadata to include in EPUB
|
||||
, writerTabStop :: Int -- ^ Tabstop for conversion btw spaces and tabs
|
||||
, writerTableOfContents :: Bool -- ^ Include table of contents
|
||||
, writerSlideVariant :: HTMLSlideVariant -- ^ Are we writing S5 or Slidy?
|
||||
, writerSlideVariant :: HTMLSlideVariant -- ^ Are we writing S5, Slidy or Slideous?
|
||||
, writerIncremental :: Bool -- ^ True if lists should be incremental
|
||||
, writerXeTeX :: Bool -- ^ Create latex suitable for use by xetex
|
||||
, writerHTMLMathMethod :: HTMLMathMethod -- ^ How to print math in HTML
|
||||
|
|
|
@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
Portability : portable
|
||||
|
||||
Utility functions for splitting documents into slides for slide
|
||||
show formats (dzslides, s5, slidy, beamer).
|
||||
show formats (dzslides, s5, slidy, slideous, beamer).
|
||||
-}
|
||||
module Text.Pandoc.Slides ( getSlideLevel, prepSlides ) where
|
||||
import Text.Pandoc.Definition
|
||||
|
|
|
@ -199,6 +199,7 @@ inTemplate opts tit auths authsMeta date toc body' newvars =
|
|||
, ("date", date')
|
||||
, ("idprefix", writerIdentifierPrefix opts)
|
||||
, ("slidy-url", "http://www.w3.org/Talks/Tools/Slidy2")
|
||||
, ("slideous-url", "slideous")
|
||||
, ("s5-url", "s5/default") ] ++
|
||||
[ ("html5","true") | writerHtml5 opts ] ++
|
||||
(case toc of
|
||||
|
|
|
@ -101,7 +101,7 @@ data Opt = Opt
|
|||
, optOutputFile :: String -- ^ Name of output file
|
||||
, optNumberSections :: Bool -- ^ Number sections in LaTeX
|
||||
, optSectionDivs :: Bool -- ^ Put sections in div tags in HTML
|
||||
, optIncremental :: Bool -- ^ Use incremental lists in Slidy/S5
|
||||
, optIncremental :: Bool -- ^ Use incremental lists in Slidy/Slideous/S5
|
||||
, optSelfContained :: Bool -- ^ Make HTML accessible offline
|
||||
, optSmart :: Bool -- ^ Use smart typography
|
||||
, optOldDashes :: Bool -- ^ Parse dashes like pandoc <=1.8.2.1
|
||||
|
@ -454,7 +454,7 @@ options =
|
|||
, Option "i" ["incremental"]
|
||||
(NoArg
|
||||
(\opt -> return opt { optIncremental = True }))
|
||||
"" -- "Make list items display incrementally in Slidy/S5"
|
||||
"" -- "Make list items display incrementally in Slidy/Slideous/S5"
|
||||
|
||||
, Option "" ["slide-level"]
|
||||
(ReqArg
|
||||
|
@ -887,6 +887,7 @@ main = do
|
|||
let slideVariant = case writerName' of
|
||||
"s5" -> S5Slides
|
||||
"slidy" -> SlidySlides
|
||||
"slideous" -> SlideousSlides
|
||||
"dzslides" -> DZSlides
|
||||
_ -> NoSlides
|
||||
|
||||
|
@ -1052,7 +1053,7 @@ main = do
|
|||
where result = w writerOptions doc2 ++ ['\n' | not standalone']
|
||||
htmlFormat = writerName' `elem`
|
||||
["html","html+lhs","html5","html5+lhs",
|
||||
"s5","slidy","dzslides"]
|
||||
"s5","slidy","slideous","dzslides"]
|
||||
selfcontain = if selfContained && htmlFormat
|
||||
then makeSelfContained datadir
|
||||
else return
|
||||
|
|
Loading…
Add table
Reference in a new issue