git.iko.soy/typeable/pandoc
on master help sign in
Extended --offline to s5.

S5 default is now to include links, rather than a full copy of scripts and stylesheets.

commitda52412455707656e7738d110c32be2decee2dcd authorJohn MacFarlane <jgm@berkeley.edu> dateThu 22 Jul 2010, 22:23 (16 years ago) parentc5ed016
4 files changed+19−517
src/Text/Pandoc/Writers/S5.hs+1 src/pandoc.hs+4−1 tests/s5.basic.html+7−258 tests/s5.fancy.html+7−258
src/Text/Pandoc/Writers/S5.hs+1
@@ -31,6 +31,7 @@ Definitions for creation of S5 powerpoint-like HTML.
3131module Text.Pandoc.Writers.S5 (
3232 -- * Header includes
3333 s5HeaderIncludes,
34+ s5Meta,
3435 s5Links,
3536 -- * Functions
3637 writeS5,
src/pandoc.hs+4−1
@@ -30,7 +30,7 @@ writers.
3030-}
3131module Main where
3232import Text.Pandoc
33−import Text.Pandoc.Writers.S5 (s5HeaderIncludes)
33+import Text.Pandoc.Writers.S5 (s5HeaderIncludes, s5Links, s5Meta)
3434import Text.Pandoc.Shared ( tabFilter, ObfuscationMethod (..), readDataFile,
3535 headerShift )
3636#ifdef _HIGHLIGHTING
@@ -747,6 +747,9 @@ main = do
747747 ("s5", True, True) -> do
748748 inc <- s5HeaderIncludes datadir
749749 return $ ("header-includes", inc) : variables
750+ ("s5", True, False) ->
751+ return $ ("header-includes", s5Meta ++ s5Links) :
752+ variables
750753 ("slidy", True, True) -> do
751754 slidyJs <- readDataFile datadir $
752755 "slidy" </> "slidy.min.js"
tests/s5.basic.html+7−258
@@ -10,264 +10,13 @@
1010 <!-- configuration parameters -->
1111 <meta name="defaultView" content="slideshow" />
1212 <meta name="controlVis" content="hidden" />
13− <style type="text/css" media="projection" id="slideProj">
14− /* Do not edit or override these styles! The system will likely break if you do. */
15−
16− div#header, div#footer, div#controls, .slide {position: absolute;}
17− html>body div#header, html>body div#footer,
18− html>body div#controls, html>body .slide {position: fixed;}
19− .handout {display: none;}
20− .layout {display: block;}
21− .slide, .hideme, .incremental {visibility: hidden;}
22− #slide0 {visibility: visible;}
23−
24− /* The following styles size, place, and layer the slide components.
25− Edit these if you want to change the overall slide layout.
26− The commented lines can be uncommented (and modified, if necessary)
27− to help you with the rearrangement process. */
28−
29− /* target = 1024x768 */
30−
31− div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
32− div#header {top: 0; height: 3em; z-index: 1;}
33− div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
34− .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
35− div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
36− div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
37− margin: 0;}
38− #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
39− html>body #currentSlide {position: fixed;}
40−
41− /*
42− div#header {background: #FCC;}
43− div#footer {background: #CCF;}
44− div#controls {background: #BBD;}
45− div#currentSlide {background: #FFC;}
46− */
47−
48− /* Following are the presentation styles -- edit away! */
49−
50− body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
51− :link, :visited {text-decoration: none; color: #00C;}
52− #controls :active {color: #88A !important;}
53− #controls :focus {outline: 1px dotted #227;}
54− h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
55− ul, pre {margin: 0; line-height: 1em;}
56− html, body {margin: 0; padding: 0;}
57−
58− blockquote, q {font-style: italic;}
59− blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
60− blockquote p {margin: 0;}
61− blockquote i {font-style: normal;}
62− blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
63− blockquote b i {font-style: italic;}
64−
65− kbd {font-weight: bold; font-size: 1em;}
66− sup {font-size: smaller; line-height: 1px;}
67−
68− .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
69− .slide code.bad, code del {color: red;}
70− .slide code.old {color: silver;}
71− .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
72− .slide pre code {display: block;}
73− .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
74− .slide li {margin-top: 0.75em; margin-right: 0;}
75− .slide ul ul {line-height: 1;}
76− .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
77− .slide img.leader {display: block; margin: 0 auto;}
78−
79− div#header, div#footer {background: #005; color: #AAB;
80− font-family: Verdana, Helvetica, sans-serif;}
81− div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
82− line-height: 1px;}
83− div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
84− #footer h1, #footer h2 {display: block; padding: 0 1em;}
85− #footer h2 {font-style: italic;}
86−
87− div.long {font-size: 0.75em;}
88− .slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
89− margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
90− font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
91− color: #DDE; background: #005;}
92− .slide h3 {font-size: 130%;}
93− h1 abbr {font-variant: small-caps;}
94−
95− div#controls {position: absolute; left: 50%; bottom: 0;
96− width: 50%;
97− text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}
98− html>body div#controls {position: fixed; padding: 0 0 1em 0;
99− top: auto;}
100− div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
101− margin: 0; padding: 0;}
102− #controls #navLinks a {padding: 0; margin: 0 0.5em;
103− background: #005; border: none; color: #779;
104− cursor: pointer;}
105− #controls #navList {height: 1em;}
106− #controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}
107−
108− #currentSlide {text-align: center; font-size: 0.5em; color: #449;}
109−
110− #slide0 {padding-top: 3.5em; font-size: 90%;}
111− #slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
112− font: bold 2em Helvetica, sans-serif; white-space: normal;
113− color: #000; background: transparent;}
114− #slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}
115− #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
116− #slide0 h4 {margin-top: 0; font-size: 1em;}
117−
118− ul.urls {list-style: none; display: inline; margin: 0;}
119− .urls li {display: inline; margin: 0;}
120− .note {display: none;}
121− .external {border-bottom: 1px dotted gray;}
122− html>body .external {border-bottom: none;}
123− .external:after {content: " \274F"; font-size: smaller; color: #77B;}
124−
125− .incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
126− img.incremental {visibility: hidden;}
127− .slide .current {color: #B02;}
128−
129−
130− /* diagnostics
131−
132− li:after {content: " [" attr(class) "]"; color: #F88;}
133− */
134−
135− </style>
136− <style type="text/css" media="projection" id="operaFix">
137− /* DO NOT CHANGE THESE unless you really want to break Opera Show */
138− .slide {
139− visibility: visible !important;
140− position: static !important;
141− page-break-before: always;
142− }
143− #slide0 {page-break-before: avoid;}
144−
145− </style>
146− <style type="text/css" media="screen" id="outlineStyle">
147− /* don't change this unless you want the layout stuff to show up in the outline view! */
148−
149− .layout div, #footer *, #controlForm * {display: none;}
150− #footer, #controls, #controlForm, #navLinks, #toggle {
151− display: block; visibility: visible; margin: 0; padding: 0;}
152− #toggle {float: right; padding: 0.5em;}
153− html>body #toggle {position: fixed; top: 0; right: 0;}
154−
155− /* making the outline look pretty-ish */
156−
157− #slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
158− #slide0 h1 {padding-top: 1.5em;}
159− .slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
160− border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
161− #toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
162−
163− </style>
164− <style type="text/css" media="print" id="slidePrint">
165− /* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
166− .slide, ul {page-break-inside: avoid; visibility: visible !important;}
167− h1 {page-break-after: avoid;}
168−
169− body {font-size: 12pt; background: white;}
170− * {color: black;}
171−
172− #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;}
173− #slide0 h3 {margin: 0; padding: 0;}
174− #slide0 h4 {margin: 0 0 0.5em; padding: 0;}
175− #slide0 {margin-bottom: 3em;}
176−
177− h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;}
178− .extra {background: transparent !important;}
179− div.extra, pre.extra, .example {font-size: 10pt; color: #333;}
180− ul.extra a {font-weight: bold;}
181− p.example {display: none;}
182−
183− #header {display: none;}
184− #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;}
185− #footer h2, #controls {display: none;}
186−
187− /* The following rule keeps the layout stuff out of print. Remove at your own risk! */
188− .layout, .layout * {display: none !important;}
189−
190− </style>
191− <script type="text/javascript">
192− // S5 v1.1 slides.js -- released into the Public Domain
193− //
194− // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
195− // about all the wonderful and talented contributors to this code!
196− var undef;var slideCSS='';var snum=0;var smax=1;var incpos=0;var number=undef;var s5mode=true;var defaultView='slideshow';var controlVis='visible';var isIE=navigator.appName=='Microsoft Internet Explorer'&&navigator.userAgent.indexOf('Opera')<1?1:0;var isOp=navigator.userAgent.indexOf('Opera')>-1?1:0;var isGe=navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('Safari')<1?1:0;function hasClass(object,className){if(!object.className)return false;return(object.className.search('(^|\\s)'+className+'(\\s|$)')!=-1);}
197− function hasValue(object,value){if(!object)return false;return(object.search('(^|\\s)'+value+'(\\s|$)')!=-1);}
198− function removeClass(object,className){if(!object)return;object.className=object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'),RegExp.$1+RegExp.$2);}
199− function addClass(object,className){if(!object||hasClass(object,className))return;if(object.className){object.className+=' '+className;}else{object.className=className;}}
200− function GetElementsWithClassName(elementName,className){var allElements=document.getElementsByTagName(elementName);var elemColl=new Array();for(var i=0;i<allElements.length;i++){if(hasClass(allElements[i],className)){elemColl[elemColl.length]=allElements[i];}}
201− return elemColl;}
202− function isParentOrSelf(element,id){if(element==null||element.nodeName=='BODY')return false;else if(element.id==id)return true;else return isParentOrSelf(element.parentNode,id);}
203− function nodeValue(node){var result="";if(node.nodeType==1){var children=node.childNodes;for(var i=0;i<children.length;++i){result+=nodeValue(children[i]);}}
204− else if(node.nodeType==3){result=node.nodeValue;}
205− return(result);}
206− function slideLabel(){var slideColl=GetElementsWithClassName('*','slide');var list=document.getElementById('jumplist');smax=slideColl.length;for(var n=0;n<smax;n++){var obj=slideColl[n];var did='slide'+n.toString();obj.setAttribute('id',did);if(isOp)continue;var otext='';var menu=obj.firstChild;if(!menu)continue;while(menu&&menu.nodeType==3){menu=menu.nextSibling;}
207− if(!menu)continue;var menunodes=menu.childNodes;for(var o=0;o<menunodes.length;o++){otext+=nodeValue(menunodes[o]);}
208− list.options[list.length]=new Option(n+' : '+otext,n);}}
209− function currentSlide(){var cs;if(document.getElementById){cs=document.getElementById('currentSlide');}else{cs=document.currentSlide;}
210− cs.innerHTML='<span id="csHere">'+snum+'<\/span> '+'<span id="csSep">\/<\/span> '+'<span id="csTotal">'+(smax-1)+'<\/span>';if(snum==0){cs.style.visibility='hidden';}else{cs.style.visibility='visible';}}
211− function go(step){if(document.getElementById('slideProj').disabled||step==0)return;var jl=document.getElementById('jumplist');var cid='slide'+snum;var ce=document.getElementById(cid);if(incrementals[snum].length>0){for(var i=0;i<incrementals[snum].length;i++){removeClass(incrementals[snum][i],'current');removeClass(incrementals[snum][i],'incremental');}}
212− if(step!='j'){snum+=step;lmax=smax-1;if(snum>lmax)snum=lmax;if(snum<0)snum=0;}else
213− snum=parseInt(jl.value);var nid='slide'+snum;var ne=document.getElementById(nid);if(!ne){ne=document.getElementById('slide0');snum=0;}
214− if(step<0){incpos=incrementals[snum].length}else{incpos=0;}
215− if(incrementals[snum].length>0&&incpos==0){for(var i=0;i<incrementals[snum].length;i++){if(hasClass(incrementals[snum][i],'current'))
216− incpos=i+1;else
217− addClass(incrementals[snum][i],'incremental');}}
218− if(incrementals[snum].length>0&&incpos>0)
219− addClass(incrementals[snum][incpos-1],'current');ce.style.visibility='hidden';ne.style.visibility='visible';jl.selectedIndex=snum;currentSlide();number=0;}
220− function goTo(target){if(target>=smax||target==snum)return;go(target-snum);}
221− function subgo(step){if(step>0){removeClass(incrementals[snum][incpos-1],'current');removeClass(incrementals[snum][incpos],'incremental');addClass(incrementals[snum][incpos],'current');incpos++;}else{incpos--;removeClass(incrementals[snum][incpos],'current');addClass(incrementals[snum][incpos],'incremental');addClass(incrementals[snum][incpos-1],'current');}}
222− function toggle(){var slideColl=GetElementsWithClassName('*','slide');var slides=document.getElementById('slideProj');var outline=document.getElementById('outlineStyle');if(!slides.disabled){slides.disabled=true;outline.disabled=false;s5mode=false;fontSize('1em');for(var n=0;n<smax;n++){var slide=slideColl[n];slide.style.visibility='visible';}}else{slides.disabled=false;outline.disabled=true;s5mode=true;fontScale();for(var n=0;n<smax;n++){var slide=slideColl[n];slide.style.visibility='hidden';}
223− slideColl[snum].style.visibility='visible';}}
224− function showHide(action){var obj=GetElementsWithClassName('*','hideme')[0];switch(action){case's':obj.style.visibility='visible';break;case'h':obj.style.visibility='hidden';break;case'k':if(obj.style.visibility!='visible'){obj.style.visibility='visible';}else{obj.style.visibility='hidden';}
225− break;}}
226− function keys(key){if(!key){key=event;key.which=key.keyCode;}
227− if(key.which==84){toggle();return;}
228− if(s5mode){switch(key.which){case 10:case 13:if(window.event&&isParentOrSelf(window.event.srcElement,'controls'))return;if(key.target&&isParentOrSelf(key.target,'controls'))return;if(number!=undef){goTo(number);break;}
229− case 32:case 34:case 39:case 40:if(number!=undef){go(number);}else if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1);}else{subgo(1);}
230− break;case 33:case 37:case 38:if(number!=undef){go(-1*number);}else if(!incrementals[snum]||incpos<=0){go(-1);}else{subgo(-1);}
231− break;case 36:goTo(0);break;case 35:goTo(smax-1);break;case 67:showHide('k');break;}
232− if(key.which<48||key.which>57){number=undef;}else{if(window.event&&isParentOrSelf(window.event.srcElement,'controls'))return;if(key.target&&isParentOrSelf(key.target,'controls'))return;number=(((number!=undef)?number:0)*10)+(key.which-48);}}
233− return false;}
234− function clicker(e){number=undef;var target;if(window.event){target=window.event.srcElement;e=window.event;}else target=e.target;if(target.getAttribute('href')!=null||hasValue(target.rel,'external')||isParentOrSelf(target,'controls')||isParentOrSelf(target,'embed')||isParentOrSelf(target,'object'))return true;if(!e.which||e.which==1){if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1);}else{subgo(1);}}}
235− function findSlide(hash){var target=null;var slides=GetElementsWithClassName('*','slide');for(var i=0;i<slides.length;i++){var targetSlide=slides[i];if((targetSlide.name&&targetSlide.name==hash)||(targetSlide.id&&targetSlide.id==hash)){target=targetSlide;break;}}
236− while(target!=null&&target.nodeName!='BODY'){if(hasClass(target,'slide')){return parseInt(target.id.slice(5));}
237− target=target.parentNode;}
238− return null;}
239− function slideJump(){if(window.location.hash==null)return;var sregex=/^#slide(\d+)$/;var matches=sregex.exec(window.location.hash);var dest=null;if(matches!=null){dest=parseInt(matches[1]);}else{dest=findSlide(window.location.hash.slice(1));}
240− if(dest!=null)
241− go(dest-snum);}
242− function fixLinks(){var thisUri=window.location.href;thisUri=thisUri.slice(0,thisUri.length-window.location.hash.length);var aelements=document.getElementsByTagName('A');for(var i=0;i<aelements.length;i++){var a=aelements[i].href;var slideID=a.match('\#slide[0-9]{1,2}');if((slideID)&&(slideID[0].slice(0,1)=='#')){var dest=findSlide(slideID[0].slice(1));if(dest!=null){if(aelements[i].addEventListener){aelements[i].addEventListener("click",new Function("e","if (document.getElementById('slideProj').disabled) return;"+"go("+dest+" - snum); "+"if (e.preventDefault) e.preventDefault();"),true);}else if(aelements[i].attachEvent){aelements[i].attachEvent("onclick",new Function("","if (document.getElementById('slideProj').disabled) return;"+"go("+dest+" - snum); "+"event.returnValue = false;"));}}}}}
243− function externalLinks(){if(!document.getElementsByTagName)return;var anchors=document.getElementsByTagName('a');for(var i=0;i<anchors.length;i++){var anchor=anchors[i];if(anchor.getAttribute('href')&&hasValue(anchor.rel,'external')){anchor.target='_blank';addClass(anchor,'external');}}}
244− function createControls(){var controlsDiv=document.getElementById("controls");if(!controlsDiv)return;var hider=' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';var hideDiv,hideList='';if(controlVis=='hidden'){hideDiv=hider;}else{hideList=hider;}
245− controlsDiv.innerHTML='<form action="#" id="controlForm"'+hideDiv+'>'+'<div id="navLinks">'+'<a accesskey="t" id="toggle" href="javascript:toggle();">&#216;<\/a>'+'<a accesskey="z" id="prev" href="javascript:go(-1);">&laquo;<\/a>'+'<a accesskey="x" id="next" href="javascript:go(1);">&raquo;<\/a>'+'<div id="navList"'+hideList+'><select id="jumplist" onchange="go(\'j\');"><\/select><\/div>'+'<\/div><\/form>';if(controlVis=='hidden'){var hidden=document.getElementById('navLinks');}else{var hidden=document.getElementById('jumplist');}
246− addClass(hidden,'hideme');}
247− function fontScale(){if(!s5mode)return false;var vScale=22;var hScale=32;if(window.innerHeight){var vSize=window.innerHeight;var hSize=window.innerWidth;}else if(document.documentElement.clientHeight){var vSize=document.documentElement.clientHeight;var hSize=document.documentElement.clientWidth;}else if(document.body.clientHeight){var vSize=document.body.clientHeight;var hSize=document.body.clientWidth;}else{var vSize=700;var hSize=1024;}
248− var newSize=Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));fontSize(newSize+'px');if(isGe){var obj=document.getElementsByTagName('body')[0];obj.style.display='none';obj.style.display='block';}}
249− function fontSize(value){if(!(s5ss=document.getElementById('s5ss'))){if(!isIE){document.getElementsByTagName('head')[0].appendChild(s5ss=document.createElement('style'));s5ss.setAttribute('media','screen, projection');s5ss.setAttribute('id','s5ss');}else{document.createStyleSheet();document.s5ss=document.styleSheets[document.styleSheets.length-1];}}
250− if(!isIE){while(s5ss.lastChild)s5ss.removeChild(s5ss.lastChild);s5ss.appendChild(document.createTextNode('body {font-size: '+value+' !important;}'));}else{document.s5ss.addRule('body','font-size: '+value+' !important;');}}
251− function notOperaFix(){slideCSS=document.getElementById('slideProj').href;var slides=document.getElementById('slideProj');var outline=document.getElementById('outlineStyle');slides.setAttribute('media','screen');outline.disabled=true;if(isGe){slides.setAttribute('href','null');slides.setAttribute('href',slideCSS);}
252− 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)');}}
253− function getIncrementals(obj){var incrementals=new Array();if(!obj)
254− return incrementals;var children=obj.childNodes;for(var i=0;i<children.length;i++){var child=children[i];if(hasClass(child,'incremental')){if(child.nodeName=='OL'||child.nodeName=='UL'){removeClass(child,'incremental');for(var j=0;j<child.childNodes.length;j++){if(child.childNodes[j].nodeType==1){addClass(child.childNodes[j],'incremental');}}}else{incrementals[incrementals.length]=child;removeClass(child,'incremental');}}
255− if(hasClass(child,'show-first')){if(child.nodeName=='OL'||child.nodeName=='UL'){removeClass(child,'show-first');if(child.childNodes[isGe].nodeType==1){removeClass(child.childNodes[isGe],'incremental');}}else{incrementals[incrementals.length]=child;}}
256− incrementals=incrementals.concat(getIncrementals(child));}
257− return incrementals;}
258− function createIncrementals(){var incrementals=new Array();for(var i=0;i<smax;i++){incrementals[i]=getIncrementals(document.getElementById('slide'+i));}
259− return incrementals;}
260− function defaultCheck(){var allMetas=document.getElementsByTagName('meta');for(var i=0;i<allMetas.length;i++){if(allMetas[i].name=='defaultView'){defaultView=allMetas[i].content;}
261− if(allMetas[i].name=='controlVis'){controlVis=allMetas[i].content;}}}
262− function trap(e){if(!e){e=event;e.which=e.keyCode;}
263− try{modifierKey=e.ctrlKey||e.altKey||e.metaKey;}
264− catch(e){modifierKey=false;}
265− return modifierKey||e.which==0;}
266− function startup(){defaultCheck();if(!isOp)
267− createControls();slideLabel();fixLinks();externalLinks();fontScale();if(!isOp){notOperaFix();incrementals=createIncrementals();slideJump();if(defaultView=='outline'){toggle();}
268− document.onkeyup=keys;document.onkeypress=trap;document.onclick=clicker;}}
269− window.onload=startup;window.onresize=function(){setTimeout('fontScale()',50);}
270− </script>
13+ <!-- style sheet links -->
14+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
15+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
16+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
17+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
18+ <!-- S5 JS -->
19+ <script src="ui/default/slides.js" type="text/javascript"></script>
27120</head>
27221<body>
27322<h1 class="title">My S5 Document</h1>
tests/s5.fancy.html+7−258
@@ -211,264 +211,13 @@
211211 <!-- configuration parameters -->
212212 <meta name="defaultView" content="slideshow" />
213213 <meta name="controlVis" content="hidden" />
214− <style type="text/css" media="projection" id="slideProj">
215− /* Do not edit or override these styles! The system will likely break if you do. */
216−
217− div#header, div#footer, div#controls, .slide {position: absolute;}
218− html>body div#header, html>body div#footer,
219− html>body div#controls, html>body .slide {position: fixed;}
220− .handout {display: none;}
221− .layout {display: block;}
222− .slide, .hideme, .incremental {visibility: hidden;}
223− #slide0 {visibility: visible;}
224−
225− /* The following styles size, place, and layer the slide components.
226− Edit these if you want to change the overall slide layout.
227− The commented lines can be uncommented (and modified, if necessary)
228− to help you with the rearrangement process. */
229−
230− /* target = 1024x768 */
231−
232− div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
233− div#header {top: 0; height: 3em; z-index: 1;}
234− div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
235− .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
236− div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
237− div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
238− margin: 0;}
239− #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
240− html>body #currentSlide {position: fixed;}
241−
242− /*
243− div#header {background: #FCC;}
244− div#footer {background: #CCF;}
245− div#controls {background: #BBD;}
246− div#currentSlide {background: #FFC;}
247− */
248−
249− /* Following are the presentation styles -- edit away! */
250−
251− body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
252− :link, :visited {text-decoration: none; color: #00C;}
253− #controls :active {color: #88A !important;}
254− #controls :focus {outline: 1px dotted #227;}
255− h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
256− ul, pre {margin: 0; line-height: 1em;}
257− html, body {margin: 0; padding: 0;}
258−
259− blockquote, q {font-style: italic;}
260− blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
261− blockquote p {margin: 0;}
262− blockquote i {font-style: normal;}
263− blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
264− blockquote b i {font-style: italic;}
265−
266− kbd {font-weight: bold; font-size: 1em;}
267− sup {font-size: smaller; line-height: 1px;}
268−
269− .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
270− .slide code.bad, code del {color: red;}
271− .slide code.old {color: silver;}
272− .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
273− .slide pre code {display: block;}
274− .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
275− .slide li {margin-top: 0.75em; margin-right: 0;}
276− .slide ul ul {line-height: 1;}
277− .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
278− .slide img.leader {display: block; margin: 0 auto;}
279−
280− div#header, div#footer {background: #005; color: #AAB;
281− font-family: Verdana, Helvetica, sans-serif;}
282− div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
283− line-height: 1px;}
284− div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
285− #footer h1, #footer h2 {display: block; padding: 0 1em;}
286− #footer h2 {font-style: italic;}
287−
288− div.long {font-size: 0.75em;}
289− .slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
290− margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
291− font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
292− color: #DDE; background: #005;}
293− .slide h3 {font-size: 130%;}
294− h1 abbr {font-variant: small-caps;}
295−
296− div#controls {position: absolute; left: 50%; bottom: 0;
297− width: 50%;
298− text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}
299− html>body div#controls {position: fixed; padding: 0 0 1em 0;
300− top: auto;}
301− div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
302− margin: 0; padding: 0;}
303− #controls #navLinks a {padding: 0; margin: 0 0.5em;
304− background: #005; border: none; color: #779;
305− cursor: pointer;}
306− #controls #navList {height: 1em;}
307− #controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}
308−
309− #currentSlide {text-align: center; font-size: 0.5em; color: #449;}
310−
311− #slide0 {padding-top: 3.5em; font-size: 90%;}
312− #slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
313− font: bold 2em Helvetica, sans-serif; white-space: normal;
314− color: #000; background: transparent;}
315− #slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}
316− #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
317− #slide0 h4 {margin-top: 0; font-size: 1em;}
318−
319− ul.urls {list-style: none; display: inline; margin: 0;}
320− .urls li {display: inline; margin: 0;}
321− .note {display: none;}
322− .external {border-bottom: 1px dotted gray;}
323− html>body .external {border-bottom: none;}
324− .external:after {content: " \274F"; font-size: smaller; color: #77B;}
325−
326− .incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
327− img.incremental {visibility: hidden;}
328− .slide .current {color: #B02;}
329−
330−
331− /* diagnostics
332−
333− li:after {content: " [" attr(class) "]"; color: #F88;}
334− */
335−
336− </style>
337− <style type="text/css" media="projection" id="operaFix">
338− /* DO NOT CHANGE THESE unless you really want to break Opera Show */
339− .slide {
340− visibility: visible !important;
341− position: static !important;
342− page-break-before: always;
343− }
344− #slide0 {page-break-before: avoid;}
345−
346− </style>
347− <style type="text/css" media="screen" id="outlineStyle">
348− /* don't change this unless you want the layout stuff to show up in the outline view! */
349−
350− .layout div, #footer *, #controlForm * {display: none;}
351− #footer, #controls, #controlForm, #navLinks, #toggle {
352− display: block; visibility: visible; margin: 0; padding: 0;}
353− #toggle {float: right; padding: 0.5em;}
354− html>body #toggle {position: fixed; top: 0; right: 0;}
355−
356− /* making the outline look pretty-ish */
357−
358− #slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
359− #slide0 h1 {padding-top: 1.5em;}
360− .slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
361− border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
362− #toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
363−
364− </style>
365− <style type="text/css" media="print" id="slidePrint">
366− /* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
367− .slide, ul {page-break-inside: avoid; visibility: visible !important;}
368− h1 {page-break-after: avoid;}
369−
370− body {font-size: 12pt; background: white;}
371− * {color: black;}
372−
373− #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;}
374− #slide0 h3 {margin: 0; padding: 0;}
375− #slide0 h4 {margin: 0 0 0.5em; padding: 0;}
376− #slide0 {margin-bottom: 3em;}
377−
378− h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;}
379− .extra {background: transparent !important;}
380− div.extra, pre.extra, .example {font-size: 10pt; color: #333;}
381− ul.extra a {font-weight: bold;}
382− p.example {display: none;}
383−
384− #header {display: none;}
385− #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;}
386− #footer h2, #controls {display: none;}
387−
388− /* The following rule keeps the layout stuff out of print. Remove at your own risk! */
389− .layout, .layout * {display: none !important;}
390−
391− </style>
392− <script type="text/javascript">
393− // S5 v1.1 slides.js -- released into the Public Domain
394− //
395− // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
396− // about all the wonderful and talented contributors to this code!
397− var undef;var slideCSS='';var snum=0;var smax=1;var incpos=0;var number=undef;var s5mode=true;var defaultView='slideshow';var controlVis='visible';var isIE=navigator.appName=='Microsoft Internet Explorer'&&navigator.userAgent.indexOf('Opera')<1?1:0;var isOp=navigator.userAgent.indexOf('Opera')>-1?1:0;var isGe=navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('Safari')<1?1:0;function hasClass(object,className){if(!object.className)return false;return(object.className.search('(^|\\s)'+className+'(\\s|$)')!=-1);}
398− function hasValue(object,value){if(!object)return false;return(object.search('(^|\\s)'+value+'(\\s|$)')!=-1);}
399− function removeClass(object,className){if(!object)return;object.className=object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'),RegExp.$1+RegExp.$2);}
400− function addClass(object,className){if(!object||hasClass(object,className))return;if(object.className){object.className+=' '+className;}else{object.className=className;}}
401− function GetElementsWithClassName(elementName,className){var allElements=document.getElementsByTagName(elementName);var elemColl=new Array();for(var i=0;i<allElements.length;i++){if(hasClass(allElements[i],className)){elemColl[elemColl.length]=allElements[i];}}
402− return elemColl;}
403− function isParentOrSelf(element,id){if(element==null||element.nodeName=='BODY')return false;else if(element.id==id)return true;else return isParentOrSelf(element.parentNode,id);}
404− function nodeValue(node){var result="";if(node.nodeType==1){var children=node.childNodes;for(var i=0;i<children.length;++i){result+=nodeValue(children[i]);}}
405− else if(node.nodeType==3){result=node.nodeValue;}
406− return(result);}
407− function slideLabel(){var slideColl=GetElementsWithClassName('*','slide');var list=document.getElementById('jumplist');smax=slideColl.length;for(var n=0;n<smax;n++){var obj=slideColl[n];var did='slide'+n.toString();obj.setAttribute('id',did);if(isOp)continue;var otext='';var menu=obj.firstChild;if(!menu)continue;while(menu&&menu.nodeType==3){menu=menu.nextSibling;}
408− if(!menu)continue;var menunodes=menu.childNodes;for(var o=0;o<menunodes.length;o++){otext+=nodeValue(menunodes[o]);}
409− list.options[list.length]=new Option(n+' : '+otext,n);}}
410− function currentSlide(){var cs;if(document.getElementById){cs=document.getElementById('currentSlide');}else{cs=document.currentSlide;}
411− cs.innerHTML='<span id="csHere">'+snum+'<\/span> '+'<span id="csSep">\/<\/span> '+'<span id="csTotal">'+(smax-1)+'<\/span>';if(snum==0){cs.style.visibility='hidden';}else{cs.style.visibility='visible';}}
412− function go(step){if(document.getElementById('slideProj').disabled||step==0)return;var jl=document.getElementById('jumplist');var cid='slide'+snum;var ce=document.getElementById(cid);if(incrementals[snum].length>0){for(var i=0;i<incrementals[snum].length;i++){removeClass(incrementals[snum][i],'current');removeClass(incrementals[snum][i],'incremental');}}
413− if(step!='j'){snum+=step;lmax=smax-1;if(snum>lmax)snum=lmax;if(snum<0)snum=0;}else
414− snum=parseInt(jl.value);var nid='slide'+snum;var ne=document.getElementById(nid);if(!ne){ne=document.getElementById('slide0');snum=0;}
415− if(step<0){incpos=incrementals[snum].length}else{incpos=0;}
416− if(incrementals[snum].length>0&&incpos==0){for(var i=0;i<incrementals[snum].length;i++){if(hasClass(incrementals[snum][i],'current'))
417− incpos=i+1;else
418− addClass(incrementals[snum][i],'incremental');}}
419− if(incrementals[snum].length>0&&incpos>0)
420− addClass(incrementals[snum][incpos-1],'current');ce.style.visibility='hidden';ne.style.visibility='visible';jl.selectedIndex=snum;currentSlide();number=0;}
421− function goTo(target){if(target>=smax||target==snum)return;go(target-snum);}
422− function subgo(step){if(step>0){removeClass(incrementals[snum][incpos-1],'current');removeClass(incrementals[snum][incpos],'incremental');addClass(incrementals[snum][incpos],'current');incpos++;}else{incpos--;removeClass(incrementals[snum][incpos],'current');addClass(incrementals[snum][incpos],'incremental');addClass(incrementals[snum][incpos-1],'current');}}
423− function toggle(){var slideColl=GetElementsWithClassName('*','slide');var slides=document.getElementById('slideProj');var outline=document.getElementById('outlineStyle');if(!slides.disabled){slides.disabled=true;outline.disabled=false;s5mode=false;fontSize('1em');for(var n=0;n<smax;n++){var slide=slideColl[n];slide.style.visibility='visible';}}else{slides.disabled=false;outline.disabled=true;s5mode=true;fontScale();for(var n=0;n<smax;n++){var slide=slideColl[n];slide.style.visibility='hidden';}
424− slideColl[snum].style.visibility='visible';}}
425− function showHide(action){var obj=GetElementsWithClassName('*','hideme')[0];switch(action){case's':obj.style.visibility='visible';break;case'h':obj.style.visibility='hidden';break;case'k':if(obj.style.visibility!='visible'){obj.style.visibility='visible';}else{obj.style.visibility='hidden';}
426− break;}}
427− function keys(key){if(!key){key=event;key.which=key.keyCode;}
428− if(key.which==84){toggle();return;}
429− if(s5mode){switch(key.which){case 10:case 13:if(window.event&&isParentOrSelf(window.event.srcElement,'controls'))return;if(key.target&&isParentOrSelf(key.target,'controls'))return;if(number!=undef){goTo(number);break;}
430− case 32:case 34:case 39:case 40:if(number!=undef){go(number);}else if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1);}else{subgo(1);}
431− break;case 33:case 37:case 38:if(number!=undef){go(-1*number);}else if(!incrementals[snum]||incpos<=0){go(-1);}else{subgo(-1);}
432− break;case 36:goTo(0);break;case 35:goTo(smax-1);break;case 67:showHide('k');break;}
433− if(key.which<48||key.which>57){number=undef;}else{if(window.event&&isParentOrSelf(window.event.srcElement,'controls'))return;if(key.target&&isParentOrSelf(key.target,'controls'))return;number=(((number!=undef)?number:0)*10)+(key.which-48);}}
434− return false;}
435− function clicker(e){number=undef;var target;if(window.event){target=window.event.srcElement;e=window.event;}else target=e.target;if(target.getAttribute('href')!=null||hasValue(target.rel,'external')||isParentOrSelf(target,'controls')||isParentOrSelf(target,'embed')||isParentOrSelf(target,'object'))return true;if(!e.which||e.which==1){if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1);}else{subgo(1);}}}
436− function findSlide(hash){var target=null;var slides=GetElementsWithClassName('*','slide');for(var i=0;i<slides.length;i++){var targetSlide=slides[i];if((targetSlide.name&&targetSlide.name==hash)||(targetSlide.id&&targetSlide.id==hash)){target=targetSlide;break;}}
437− while(target!=null&&target.nodeName!='BODY'){if(hasClass(target,'slide')){return parseInt(target.id.slice(5));}
438− target=target.parentNode;}
439− return null;}
440− function slideJump(){if(window.location.hash==null)return;var sregex=/^#slide(\d+)$/;var matches=sregex.exec(window.location.hash);var dest=null;if(matches!=null){dest=parseInt(matches[1]);}else{dest=findSlide(window.location.hash.slice(1));}
441− if(dest!=null)
442− go(dest-snum);}
443− function fixLinks(){var thisUri=window.location.href;thisUri=thisUri.slice(0,thisUri.length-window.location.hash.length);var aelements=document.getElementsByTagName('A');for(var i=0;i<aelements.length;i++){var a=aelements[i].href;var slideID=a.match('\#slide[0-9]{1,2}');if((slideID)&&(slideID[0].slice(0,1)=='#')){var dest=findSlide(slideID[0].slice(1));if(dest!=null){if(aelements[i].addEventListener){aelements[i].addEventListener("click",new Function("e","if (document.getElementById('slideProj').disabled) return;"+"go("+dest+" - snum); "+"if (e.preventDefault) e.preventDefault();"),true);}else if(aelements[i].attachEvent){aelements[i].attachEvent("onclick",new Function("","if (document.getElementById('slideProj').disabled) return;"+"go("+dest+" - snum); "+"event.returnValue = false;"));}}}}}
444− function externalLinks(){if(!document.getElementsByTagName)return;var anchors=document.getElementsByTagName('a');for(var i=0;i<anchors.length;i++){var anchor=anchors[i];if(anchor.getAttribute('href')&&hasValue(anchor.rel,'external')){anchor.target='_blank';addClass(anchor,'external');}}}
445− function createControls(){var controlsDiv=document.getElementById("controls");if(!controlsDiv)return;var hider=' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';var hideDiv,hideList='';if(controlVis=='hidden'){hideDiv=hider;}else{hideList=hider;}
446− controlsDiv.innerHTML='<form action="#" id="controlForm"'+hideDiv+'>'+'<div id="navLinks">'+'<a accesskey="t" id="toggle" href="javascript:toggle();">&#216;<\/a>'+'<a accesskey="z" id="prev" href="javascript:go(-1);">&laquo;<\/a>'+'<a accesskey="x" id="next" href="javascript:go(1);">&raquo;<\/a>'+'<div id="navList"'+hideList+'><select id="jumplist" onchange="go(\'j\');"><\/select><\/div>'+'<\/div><\/form>';if(controlVis=='hidden'){var hidden=document.getElementById('navLinks');}else{var hidden=document.getElementById('jumplist');}
447− addClass(hidden,'hideme');}
448− function fontScale(){if(!s5mode)return false;var vScale=22;var hScale=32;if(window.innerHeight){var vSize=window.innerHeight;var hSize=window.innerWidth;}else if(document.documentElement.clientHeight){var vSize=document.documentElement.clientHeight;var hSize=document.documentElement.clientWidth;}else if(document.body.clientHeight){var vSize=document.body.clientHeight;var hSize=document.body.clientWidth;}else{var vSize=700;var hSize=1024;}
449− var newSize=Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));fontSize(newSize+'px');if(isGe){var obj=document.getElementsByTagName('body')[0];obj.style.display='none';obj.style.display='block';}}
450− function fontSize(value){if(!(s5ss=document.getElementById('s5ss'))){if(!isIE){document.getElementsByTagName('head')[0].appendChild(s5ss=document.createElement('style'));s5ss.setAttribute('media','screen, projection');s5ss.setAttribute('id','s5ss');}else{document.createStyleSheet();document.s5ss=document.styleSheets[document.styleSheets.length-1];}}
451− if(!isIE){while(s5ss.lastChild)s5ss.removeChild(s5ss.lastChild);s5ss.appendChild(document.createTextNode('body {font-size: '+value+' !important;}'));}else{document.s5ss.addRule('body','font-size: '+value+' !important;');}}
452− function notOperaFix(){slideCSS=document.getElementById('slideProj').href;var slides=document.getElementById('slideProj');var outline=document.getElementById('outlineStyle');slides.setAttribute('media','screen');outline.disabled=true;if(isGe){slides.setAttribute('href','null');slides.setAttribute('href',slideCSS);}
453− 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)');}}
454− function getIncrementals(obj){var incrementals=new Array();if(!obj)
455− return incrementals;var children=obj.childNodes;for(var i=0;i<children.length;i++){var child=children[i];if(hasClass(child,'incremental')){if(child.nodeName=='OL'||child.nodeName=='UL'){removeClass(child,'incremental');for(var j=0;j<child.childNodes.length;j++){if(child.childNodes[j].nodeType==1){addClass(child.childNodes[j],'incremental');}}}else{incrementals[incrementals.length]=child;removeClass(child,'incremental');}}
456− if(hasClass(child,'show-first')){if(child.nodeName=='OL'||child.nodeName=='UL'){removeClass(child,'show-first');if(child.childNodes[isGe].nodeType==1){removeClass(child.childNodes[isGe],'incremental');}}else{incrementals[incrementals.length]=child;}}
457− incrementals=incrementals.concat(getIncrementals(child));}
458− return incrementals;}
459− function createIncrementals(){var incrementals=new Array();for(var i=0;i<smax;i++){incrementals[i]=getIncrementals(document.getElementById('slide'+i));}
460− return incrementals;}
461− function defaultCheck(){var allMetas=document.getElementsByTagName('meta');for(var i=0;i<allMetas.length;i++){if(allMetas[i].name=='defaultView'){defaultView=allMetas[i].content;}
462− if(allMetas[i].name=='controlVis'){controlVis=allMetas[i].content;}}}
463− function trap(e){if(!e){e=event;e.which=e.keyCode;}
464− try{modifierKey=e.ctrlKey||e.altKey||e.metaKey;}
465− catch(e){modifierKey=false;}
466− return modifierKey||e.which==0;}
467− function startup(){defaultCheck();if(!isOp)
468− createControls();slideLabel();fixLinks();externalLinks();fontScale();if(!isOp){notOperaFix();incrementals=createIncrementals();slideJump();if(defaultView=='outline'){toggle();}
469− document.onkeyup=keys;document.onkeypress=trap;document.onclick=clicker;}}
470− window.onload=startup;window.onresize=function(){setTimeout('fontScale()',50);}
471− </script>
214+ <!-- style sheet links -->
215+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
216+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
217+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
218+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
219+ <!-- S5 JS -->
220+ <script src="ui/default/slides.js" type="text/javascript"></script>
472221</head>
473222<body>
474223<h1 class="title">My S5 Document</h1>