diff options
Diffstat (limited to 'data')
26 files changed, 2627 insertions, 0 deletions
diff --git a/data/default.csl b/data/default.csl new file mode 100644 index 000000000..dea707114 --- /dev/null +++ b/data/default.csl @@ -0,0 +1,422 @@ +<?xml version="1.0" encoding="utf-8"?> +<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="sort-only"> + <info> + <title>Chicago Manual of Style (Author-Date format)</title> + <id>http://www.zotero.org/styles/chicago-author-date</id> + <link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/> + <author> + <name>Julian Onions</name> + <email>julian.onions@gmail.com</email> + </author> + <contributor> + <name>Sebastian Karcher</name> + </contributor> + <category citation-format="author-date"/> + <category field="generic-base"/> + <updated>2011-11-17T22:01:05+00:00</updated> + <summary>The author-date variant of the Chicago style</summary> + <link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/> + <rights>This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/</rights> + </info> + <macro name="secondary-contributors"> + <choose> + <if type="chapter paper-conference" match="none"> + <group delimiter=". "> + <choose> + <if variable="author"> + <names variable="editor"> + <label form="verb-short" text-case="capitalize-first" suffix=". " strip-periods="true"/> + <name and="text" delimiter=", "/> + </names> + </if> + </choose> + <choose> + <if variable="author editor" match="any"> + <names variable="translator"> + <label form="verb-short" text-case="capitalize-first" suffix=". " strip-periods="true"/> + <name and="text" delimiter=", "/> + </names> + </if> + </choose> + </group> + </if> + </choose> + </macro> + <macro name="container-contributors"> + <choose> + <if type="chapter paper-conference" match="any"> + <group prefix="," delimiter=", "> + <choose> + <if variable="author"> + <names variable="editor"> + <label form="verb-short" prefix=" " text-case="lowercase" suffix=". " strip-periods="true"/> + <name and="text" delimiter=", "/> + </names> + <choose> + <if variable="container-author"> + <group> + <names variable="container-author"> + <label form="verb-short" prefix=" " text-case="lowercase" suffix=" " strip-periods="true"/> + <name and="text" delimiter=", "/> + </names> + </group> + </if> + </choose> + </if> + </choose> + <choose> + <if variable="author editor" match="any"> + <names variable="translator"> + <label form="verb-short" prefix=" " text-case="lowercase" suffix=". " strip-periods="true"/> + <name and="text" delimiter=", "/> + </names> + </if> + </choose> + </group> + </if> + </choose> + </macro> + <macro name="anon"> + <text term="anonymous" form="short" text-case="capitalize-first" suffix="." strip-periods="true"/> + </macro> + <macro name="editor"> + <names variable="editor"> + <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/> + <label form="short" prefix=", " suffix="." strip-periods="true"/> + </names> + </macro> + <macro name="translator"> + <names variable="translator"> + <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/> + <label form="verb-short" prefix=", " suffix="." strip-periods="true"/> + </names> + </macro> + <macro name="recipient"> + <choose> + <if type="personal_communication"> + <choose> + <if variable="genre"> + <text variable="genre" text-case="capitalize-first"/> + </if> + <else> + <text term="letter" text-case="capitalize-first"/> + </else> + </choose> + </if> + </choose> + <names variable="recipient" delimiter=", "> + <label form="verb" prefix=" " text-case="lowercase" suffix=" "/> + <name and="text" delimiter=", "/> + </names> + </macro> + <macro name="contributors"> + <names variable="author"> + <name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/> + <label form="verb-short" prefix=", " suffix="." text-case="lowercase" strip-periods="true"/> + <substitute> + <text macro="editor"/> + <text macro="translator"/> + <text macro="anon"/> + </substitute> + </names> + <text macro="recipient"/> + </macro> + <macro name="contributors-short"> + <names variable="author"> + <name form="short" and="text" delimiter=", " initialize-with=". "/> + <substitute> + <names variable="editor"/> + <names variable="translator"/> + <text macro="anon"/> + </substitute> + </names> + </macro> + <macro name="interviewer"> + <names variable="interviewer" delimiter=", "> + <label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/> + <name and="text" delimiter=", "/> + </names> + </macro> + <macro name="archive"> + <group delimiter=". "> + <text variable="archive_location" text-case="capitalize-first"/> + <text variable="archive"/> + <text variable="archive-place"/> + </group> + </macro> + <macro name="access"> + <group delimiter=". "> + <choose> + <if type="graphic report" match="any"> + <text macro="archive"/> + </if> + <else-if type="bill book graphic legal_case motion_picture report song article-magazine article-newspaper thesis chapter paper-conference" match="none"> + <text macro="archive"/> + </else-if> + </choose> + <text variable="DOI" prefix="doi:"/> + <choose> + <if type="legal_case" match="none"> + <text variable="URL"/> + </if> + </choose> + </group> + </macro> + <macro name="title"> + <choose> + <if variable="title" match="none"> + <choose> + <if type="personal_communication" match="none"> + <text variable="genre" text-case="capitalize-first"/> + </if> + </choose> + </if> + <else-if type="bill book graphic legal_case motion_picture report song" match="any"> + <text variable="title" font-style="italic"/> + </else-if> + <else> + <text variable="title" quotes="true"/> + </else> + </choose> + </macro> + <macro name="edition"> + <choose> + <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any"> + <choose> + <if is-numeric="edition"> + <group delimiter=" "> + <number variable="edition" form="ordinal"/> + <text term="edition" form="short" suffix="." strip-periods="true"/> + </group> + </if> + <else> + <text variable="edition" suffix="."/> + </else> + </choose> + </if> + </choose> + </macro> + <macro name="locators"> + <choose> + <if type="article-journal"> + <text variable="volume" prefix=" "/> + <text variable="issue" prefix=" (" suffix=")"/> + </if> + <else-if type="legal_case"> + <text variable="volume" prefix=", "/> + <text variable="container-title" prefix=" "/> + <text variable="page" prefix=" "/> + </else-if> + <else-if type="bill book graphic legal_case motion_picture report song" match="any"> + <group prefix=". " delimiter=". "> + <group> + <text term="volume" form="short" text-case="capitalize-first" suffix=". " strip-periods="true"/> + <number variable="volume" form="numeric"/> + </group> + <group> + <number variable="number-of-volumes" form="numeric"/> + <text term="volume" form="short" prefix=" " suffix="." plural="true" strip-periods="true"/> + </group> + </group> + </else-if> + <else-if type="chapter paper-conference" match="any"> + <choose> + <if variable="page" match="none"> + <group prefix=". "> + <text term="volume" form="short" text-case="capitalize-first" suffix=". " strip-periods="true"/> + <number variable="volume" form="numeric"/> + </group> + </if> + </choose> + </else-if> + </choose> + </macro> + <macro name="locators-chapter"> + <choose> + <if type="chapter paper-conference" match="any"> + <choose> + <if variable="page"> + <group prefix=", "> + <text variable="volume" suffix=":"/> + <text variable="page"/> + </group> + </if> + </choose> + </if> + </choose> + </macro> + <macro name="locators-article"> + <choose> + <if type="article-newspaper"> + <group prefix=", " delimiter=", "> + <group> + <text variable="edition" suffix=" "/> + <text term="edition" prefix=" "/> + </group> + <group> + <text term="section" form="short" suffix=". " strip-periods="true"/> + <text variable="section"/> + </group> + </group> + </if> + <else-if type="article-journal"> + <text variable="page" prefix=": "/> + </else-if> + </choose> + </macro> + <macro name="point-locators"> + <choose> + <if variable="locator"> + <choose> + <if locator="page" match="none"> + <choose> + <if type="bill book graphic legal_case motion_picture report song" match="any"> + <choose> + <if variable="volume"> + <group> + <text term="volume" form="short" text-case="lowercase" suffix=". " strip-periods="true"/> + <number variable="volume" form="numeric"/> + <label variable="locator" form="short" prefix=", " suffix=" "/> + </group> + </if> + <else> + <label variable="locator" form="short" suffix=" "/> + </else> + </choose> + </if> + </choose> + </if> + <else-if type="bill book graphic legal_case motion_picture report song" match="any"> + <number variable="volume" form="numeric" suffix=":"/> + </else-if> + </choose> + <text variable="locator"/> + </if> + </choose> + </macro> + <macro name="container-prefix"> + <text term="in" text-case="capitalize-first"/> + </macro> + <macro name="container-title"> + <choose> + <if type="chapter paper-conference" match="any"> + <text macro="container-prefix" suffix=" "/> + </if> + </choose> + <choose> + <if type="legal_case" match="none"> + <text variable="container-title" font-style="italic"/> + </if> + </choose> + </macro> + <macro name="publisher"> + <group delimiter=": "> + <text variable="publisher-place"/> + <text variable="publisher"/> + </group> + </macro> + <macro name="date"> + <date variable="issued"> + <date-part name="year"/> + </date> + </macro> + <macro name="day-month"> + <date variable="issued"> + <date-part name="month"/> + <date-part name="day" prefix=" "/> + </date> + </macro> + <macro name="collection-title"> + <text variable="collection-title"/> + <text variable="collection-number" prefix=" "/> + </macro> + <macro name="event"> + <group> + <text term="presented at" suffix=" "/> + <text variable="event"/> + </group> + </macro> + <macro name="description"> + <choose> + <if type="interview"> + <group delimiter=". "> + <text macro="interviewer"/> + <text variable="medium" text-case="capitalize-first"/> + </group> + </if> + <else> + <text variable="medium" text-case="capitalize-first" prefix=". "/> + </else> + </choose> + <choose> + <if variable="title" match="none"/> + <else-if type="thesis"/> + <else> + <text variable="genre" text-case="capitalize-first" prefix=". "/> + </else> + </choose> + </macro> + <macro name="issue"> + <choose> + <if type="article-journal"> + <text macro="day-month" prefix=" (" suffix=")"/> + </if> + <else-if type="legal_case"> + <text variable="authority" prefix=". "/> + </else-if> + <else-if type="speech"> + <group prefix=" " delimiter=", "> + <text macro="event"/> + <text macro="day-month"/> + <text variable="event-place"/> + </group> + </else-if> + <else-if type="article-newspaper article-magazine" match="any"> + <text macro="day-month" prefix=", "/> + </else-if> + <else> + <group prefix=". " delimiter=", "> + <choose> + <if type="thesis"> + <text variable="genre" text-case="capitalize-first"/> + </if> + </choose> + <text macro="publisher"/> + </group> + </else> + </choose> + </macro> + <citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name"> + <layout prefix="(" suffix=")" delimiter="; "> + <group delimiter=", "> + <group delimiter=" "> + <text macro="contributors-short"/> + <text macro="date"/> + </group> + <text macro="point-locators"/> + </group> + </layout> + </citation> + <bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="———" entry-spacing="0"> + <sort> + <key macro="contributors"/> + <key variable="issued"/> + </sort> + <layout suffix="."> + <text macro="contributors" suffix=". "/> + <text macro="date" suffix=". "/> + <text macro="title"/> + <text macro="description"/> + <text macro="secondary-contributors" prefix=". "/> + <text macro="container-title" prefix=". "/> + <text macro="container-contributors"/> + <text macro="locators-chapter"/> + <text macro="edition" prefix=". "/> + <text macro="locators"/> + <text macro="collection-title" prefix=". "/> + <text macro="issue"/> + <text macro="locators-article"/> + <text macro="access" prefix=". "/> + </layout> + </bibliography> +</style>
\ No newline at end of file diff --git a/data/dzslides/template.html b/data/dzslides/template.html new file mode 100644 index 000000000..f2fb64b38 --- /dev/null +++ b/data/dzslides/template.html @@ -0,0 +1,585 @@ +<!DOCTYPE html> + +<meta charset="utf-8"> +<title>The Title Of Your Presentation</title> + +<!-- Your Slides --> +<!-- One section is one slide --> + +<section> + <!-- This is the first slide --> + <h1>My Presentation</h1> + <footer>by John Doe</footer> +</section> + +<section> + <p>Some random text: But I've never been to the moon! You can see how I lived before I met you. Also Zoidberg. + I could if you hadn't turned on the light and shut off my stereo.</p> +</section> + +<section> + <h3>An incremental list</h3> + <ul class="incremental"> + <li>Item 1 + <li>Item 2 + <li>Item 3 + </ul> + <details>Some notes. They are only visible using onstage shell.</details> +</section> + +<section> + <q> + Who's brave enough to fly into something we all keep calling a death sphere? + </q> +</section> + +<section> + <h2>Part two</h2> +</section> + +<section> + <figure> <!-- Figures are used to display images and videos fullpage --> + <img src="http://placekitten.com/g/800/600"> + <figcaption>An image</figcaption> + </figure> + <details>Kittens are so cute!</details> +</section> + +<section> + <figure> <!-- Videos are automatically played --> + <video src="http://videos-cdn.mozilla.net/brand/Mozilla_Firefox_Manifesto_v0.2_640.webm" poster="http://www.mozilla.org/images/about/poster.jpg"></video> + <figcaption>A video</figcaption> + </figure> +</section> + +<section> + <h2>End!</h2> +</section> + +<!-- Your Style --> +<!-- Define the style of your presentation --> + +<!-- Maybe a font from http://www.google.com/webfonts ? --> +<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet'> + +<style> + html { background-color: black; } + body { background-color: white; border-radius: 12px} + /* A section is a slide. It's size is 800x600, and this will never change */ + section { + /* The font from Google */ + font-family: 'Oswald', arial, serif; + font-size: 30px; + } + h1, h2 { + margin-top: 200px; + text-align: center; + font-size: 80px; + } + h3 { + margin: 100px 0 50px 100px; + } + + ul { + margin: 50px 200px; + } + + p { + margin: 75px; + font-size: 50px; + } + + q { + display: block; + width: 100%; + height: 100%; + background-color: black; + color: white; + font-size: 60px; + padding: 50px; + } + + /* Figures are displayed full-page, with the caption + on top of the image/video */ + figure { + background-color: black; + } + figcaption { + margin: 70px; + font-size: 50px; + } + + footer { + position: absolute; + bottom: 0; + width: 100%; + padding: 40px; + text-align: right; + background-color: #F3F4F8; + border-top: 1px solid #CCC; + } + + /* Transition effect */ + /* Feel free to change the transition effect for original + animations. See here: + https://developer.mozilla.org/en/CSS/CSS_transitions + How to use CSS3 Transitions: */ + section { + -moz-transition: left 400ms linear 0s; + -webkit-transition: left 400ms linear 0s; + -ms-transition: left 400ms linear 0s; + transition: left 400ms linear 0s; + } + + /* Before */ + section { left: -150%; } + /* Now */ + section[aria-selected] { left: 0; } + /* After */ + section[aria-selected] ~ section { left: +150%; } + + /* Incremental elements */ + + /* By default, visible */ + .incremental > * { opacity: 1; } + + /* The current item */ + .incremental > *[aria-selected] { opacity: 1; } + + /* The items to-be-selected */ + .incremental > *[aria-selected] ~ * { opacity: 0; } + + /* The progressbar, at the bottom of the slides, show the global + progress of the presentation. */ + #progress-bar { + height: 2px; + background: #AAA; + } +</style> + +<!-- {{{{ dzslides core +# +# +# __ __ __ . __ ___ __ +# | \ / /__` | | | \ |__ /__` +# |__/ /_ .__/ |___ | |__/ |___ .__/ core :€ +# +# +# The following block of code is not supposed to be edited. +# But if you want to change the behavior of these slides, +# feel free to hack it! +# +--> + +<div id="progress-bar"></div> + +<!-- Default Style --> +<style> + * { margin: 0; padding: 0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + details { display: none; } + body { + width: 800px; height: 600px; + margin-left: -400px; margin-top: -300px; + position: absolute; top: 50%; left: 50%; + overflow: hidden; + } + section { + position: absolute; + pointer-events: none; + width: 100%; height: 100%; + } + section[aria-selected] { pointer-events: auto; } + html { overflow: hidden; } + body { display: none; } + body.loaded { display: block; } + .incremental {visibility: hidden; } + .incremental[active] {visibility: visible; } + #progress-bar{ + bottom: 0; + position: absolute; + -moz-transition: width 400ms linear 0s; + -webkit-transition: width 400ms linear 0s; + -ms-transition: width 400ms linear 0s; + transition: width 400ms linear 0s; + } + figure { + width: 100%; + height: 100%; + } + figure > * { + position: absolute; + } + figure > img, figure > video { + width: 100%; height: 100%; + } +</style> + +<script> + var Dz = { + remoteWindows: [], + idx: -1, + step: 0, + slides: null, + progressBar : null, + params: { + autoplay: "1" + } + }; + + Dz.init = function() { + document.body.className = "loaded"; + this.slides = $$("body > section"); + this.progressBar = $("#progress-bar"); + this.setupParams(); + this.onhashchange(); + this.setupTouchEvents(); + this.onresize(); + } + + Dz.setupParams = function() { + var p = window.location.search.substr(1).split('&'); + p.forEach(function(e, i, a) { + var keyVal = e.split('='); + Dz.params[keyVal[0]] = decodeURIComponent(keyVal[1]); + }); + // Specific params handling + if (!+this.params.autoplay) + $$.forEach($$("video"), function(v){ v.controls = true }); + } + + Dz.onkeydown = function(aEvent) { + // Don't intercept keyboard shortcuts + if (aEvent.altKey + || aEvent.ctrlKey + || aEvent.metaKey + || aEvent.shiftKey) { + return; + } + if ( aEvent.keyCode == 37 // left arrow + || aEvent.keyCode == 38 // up arrow + || aEvent.keyCode == 33 // page up + ) { + aEvent.preventDefault(); + this.back(); + } + if ( aEvent.keyCode == 39 // right arrow + || aEvent.keyCode == 40 // down arrow + || aEvent.keyCode == 34 // page down + ) { + aEvent.preventDefault(); + this.forward(); + } + if (aEvent.keyCode == 35) { // end + aEvent.preventDefault(); + this.goEnd(); + } + if (aEvent.keyCode == 36) { // home + aEvent.preventDefault(); + this.goStart(); + } + if (aEvent.keyCode == 32) { // space + aEvent.preventDefault(); + this.toggleContent(); + } + if (aEvent.keyCode == 70) { // f + aEvent.preventDefault(); + this.goFullscreen(); + } + } + + /* Touch Events */ + + Dz.setupTouchEvents = function() { + var orgX, newX; + var tracking = false; + + var db = document.body; + db.addEventListener("touchstart", start.bind(this), false); + db.addEventListener("touchmove", move.bind(this), false); + + function start(aEvent) { + aEvent.preventDefault(); + tracking = true; + orgX = aEvent.changedTouches[0].pageX; + } + + function move(aEvent) { + if (!tracking) return; + newX = aEvent.changedTouches[0].pageX; + if (orgX - newX > 100) { + tracking = false; + this.forward(); + } else { + if (orgX - newX < -100) { + tracking = false; + this.back(); + } + } + } + } + + /* Adapt the size of the slides to the window */ + + Dz.onresize = function() { + var db = document.body; + var sx = db.clientWidth / window.innerWidth; + var sy = db.clientHeight / window.innerHeight; + var transform = "scale(" + (1/Math.max(sx, sy)) + ")"; + + db.style.MozTransform = transform; + db.style.WebkitTransform = transform; + db.style.OTransform = transform; + db.style.msTransform = transform; + db.style.transform = transform; + } + + + Dz.getDetails = function(aIdx) { + var s = $("section:nth-of-type(" + aIdx + ")"); + var d = s.$("details"); + return d ? d.innerHTML : ""; + } + + Dz.onmessage = function(aEvent) { + var argv = aEvent.data.split(" "), argc = argv.length; + argv.forEach(function(e, i, a) { a[i] = decodeURIComponent(e) }); + var win = aEvent.source; + if (argv[0] === "REGISTER" && argc === 1) { + this.remoteWindows.push(win); + this.postMsg(win, "REGISTERED", document.title, this.slides.length); + this.postMsg(win, "CURSOR", this.idx + "." + this.step); + return; + } + if (argv[0] === "BACK" && argc === 1) + this.back(); + if (argv[0] === "FORWARD" && argc === 1) + this.forward(); + if (argv[0] === "START" && argc === 1) + this.goStart(); + if (argv[0] === "END" && argc === 1) + this.goEnd(); + if (argv[0] === "TOGGLE_CONTENT" && argc === 1) + this.toggleContent(); + if (argv[0] === "SET_CURSOR" && argc === 2) + window.location.hash = "#" + argv[1]; + if (argv[0] === "GET_CURSOR" && argc === 1) + this.postMsg(win, "CURSOR", this.idx + "." + this.step); + if (argv[0] === "GET_NOTES" && argc === 1) + this.postMsg(win, "NOTES", this.getDetails(this.idx)); + } + + Dz.toggleContent = function() { + // If a Video is present in this new slide, play it. + // If a Video is present in the previous slide, stop it. + var s = $("section[aria-selected]"); + if (s) { + var video = s.$("video"); + if (video) { + if (video.ended || video.paused) { + video.play(); + } else { + video.pause(); + } + } + } + } + + Dz.setCursor = function(aIdx, aStep) { + // If the user change the slide number in the URL bar, jump + // to this slide. + aStep = (aStep != 0 && typeof aStep !== "undefined") ? "." + aStep : ".0"; + window.location.hash = "#" + aIdx + aStep; + } + + Dz.onhashchange = function() { + var cursor = window.location.hash.split("#"), + newidx = 1, + newstep = 0; + if (cursor.length == 2) { + newidx = ~~cursor[1].split(".")[0]; + newstep = ~~cursor[1].split(".")[1]; + if (newstep > Dz.slides[newidx - 1].$$('.incremental > *').length) { + newstep = 0; + newidx++; + } + } + this.setProgress(newidx, newstep); + if (newidx != this.idx) { + this.setSlide(newidx); + } + if (newstep != this.step) { + this.setIncremental(newstep); + } + for (var i = 0; i < this.remoteWindows.length; i++) { + this.postMsg(this.remoteWindows[i], "CURSOR", this.idx + "." + this.step); + } + } + + Dz.back = function() { + if (this.idx == 1 && this.step == 0) { + return; + } + if (this.step == 0) { + this.setCursor(this.idx - 1, + this.slides[this.idx - 2].$$('.incremental > *').length); + } else { + this.setCursor(this.idx, this.step - 1); + } + } + + Dz.forward = function() { + if (this.idx >= this.slides.length && + this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) { + return; + } + if (this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) { + this.setCursor(this.idx + 1, 0); + } else { + this.setCursor(this.idx, this.step + 1); + } + } + + Dz.goStart = function() { + this.setCursor(1, 0); + } + + Dz.goEnd = function() { + var lastIdx = this.slides.length; + var lastStep = this.slides[lastIdx - 1].$$('.incremental > *').length; + this.setCursor(lastIdx, lastStep); + } + + Dz.setSlide = function(aIdx) { + this.idx = aIdx; + var old = $("section[aria-selected]"); + var next = $("section:nth-of-type("+ this.idx +")"); + if (old) { + old.removeAttribute("aria-selected"); + var video = old.$("video"); + if (video) { + video.pause(); + } + } + if (next) { + next.setAttribute("aria-selected", "true"); + var video = next.$("video"); + if (video && !!+this.params.autoplay) { + video.play(); + } + } else { + // That should not happen + this.idx = -1; + // console.warn("Slide doesn't exist."); + } + } + + Dz.setIncremental = function(aStep) { + this.step = aStep; + var old = this.slides[this.idx - 1].$('.incremental > *[aria-selected]'); + if (old) { + old.removeAttribute('aria-selected'); + } + var incrementals = $$('.incremental'); + if (this.step <= 0) { + $$.forEach(incrementals, function(aNode) { + aNode.removeAttribute('active'); + }); + return; + } + var next = this.slides[this.idx - 1].$$('.incremental > *')[this.step - 1]; + if (next) { + next.setAttribute('aria-selected', true); + next.parentNode.setAttribute('active', true); + var found = false; + $$.forEach(incrementals, function(aNode) { + if (aNode != next.parentNode) + if (found) + aNode.removeAttribute('active'); + else + aNode.setAttribute('active', true); + else + found = true; + }); + } else { + setCursor(this.idx, 0); + } + return next; + } + + Dz.goFullscreen = function() { + var html = $('html'), + requestFullscreen = html.requestFullscreen || html.requestFullScreen || html.mozRequestFullScreen || html.webkitRequestFullScreen; + if (requestFullscreen) { + requestFullscreen.apply(html); + } + } + + Dz.setProgress = function(aIdx, aStep) { + var slide = $("section:nth-of-type("+ aIdx +")"); + if (!slide) + return; + var steps = slide.$$('.incremental > *').length + 1, + slideSize = 100 / (this.slides.length - 1), + stepSize = slideSize / steps; + this.progressBar.style.width = ((aIdx - 1) * slideSize + aStep * stepSize) + '%'; + } + + Dz.postMsg = function(aWin, aMsg) { // [arg0, [arg1...]] + aMsg = [aMsg]; + for (var i = 2; i < arguments.length; i++) + aMsg.push(encodeURIComponent(arguments[i])); + aWin.postMessage(aMsg.join(" "), "*"); + } + + function init() { + Dz.init(); + window.onkeydown = Dz.onkeydown.bind(Dz); + window.onresize = Dz.onresize.bind(Dz); + window.onhashchange = Dz.onhashchange.bind(Dz); + window.onmessage = Dz.onmessage.bind(Dz); + } + + window.onload = init; +</script> + + +<script> // Helpers + if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + + // closest thing possible to the ECMAScript 5 internal IsCallable + // function + if (typeof this !== "function") + throw new TypeError( + "Function.prototype.bind - what is trying to be fBound is not callable" + ); + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply( this instanceof fNOP ? this : oThis || window, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; + } + + var $ = (HTMLElement.prototype.$ = function(aQuery) { + return this.querySelector(aQuery); + }).bind(document); + + var $$ = (HTMLElement.prototype.$$ = function(aQuery) { + return this.querySelectorAll(aQuery); + }).bind(document); + + $$.forEach = function(nodeList, fun) { + Array.prototype.forEach.call(nodeList, fun); + } + +</script> +<!-- vim: set fdm=marker: }}} --> diff --git a/data/epub.css b/data/epub.css new file mode 100644 index 000000000..6737f5cc7 --- /dev/null +++ b/data/epub.css @@ -0,0 +1,31 @@ +/* This defines styles and classes used in the book */ +body { margin-left: 5%; margin-right: 5%; margin-top: 5%; margin-bottom: 5%; text-align: justify; font-size: medium; } +code { font-family: monospace; } +h1 { text-align: center; } +h2 { text-align: center; } +h3 { text-align: center; } +h4 { text-align: center; } +h5 { text-align: center; } +h6 { text-align: center; } +h1.title { } +h2.author { } +h3.date { } +/* For source-code highlighting */ +table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre + { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; } +td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; } +td.sourceCode { padding-left: 5px; } +pre.sourceCode { } +code.sourceCode span.kw { color: #007020; font-weight: bold; } +code.sourceCode span.dt { color: #902000; } +code.sourceCode span.dv { color: #40a070; } +code.sourceCode span.bn { color: #40a070; } +code.sourceCode span.fl { color: #40a070; } +code.sourceCode span.ch { color: #4070a0; } +code.sourceCode span.st { color: #4070a0; } +code.sourceCode span.co { color: #60a0b0; font-style: italic; } +code.sourceCode span.ot { color: #007020; } +code.sourceCode span.al { color: red; font-weight: bold; } +code.sourceCode span.fu { color: #06287e; } +code.sourceCode span.re { } +code.sourceCode span.er { color: red; font-weight: bold; } diff --git a/data/reference.docx b/data/reference.docx Binary files differnew file mode 100644 index 000000000..c321408d1 --- /dev/null +++ b/data/reference.docx diff --git a/data/reference.odt b/data/reference.odt Binary files differnew file mode 100644 index 000000000..6307119d3 --- /dev/null +++ b/data/reference.odt diff --git a/data/s5/default/blank.gif b/data/s5/default/blank.gif Binary files differnew file mode 100644 index 000000000..75b945d25 --- /dev/null +++ b/data/s5/default/blank.gif diff --git a/data/s5/default/bodybg.gif b/data/s5/default/bodybg.gif Binary files differnew file mode 100644 index 000000000..5f448a16f --- /dev/null +++ b/data/s5/default/bodybg.gif diff --git a/data/s5/default/framing.css b/data/s5/default/framing.css new file mode 100644 index 000000000..14d8509e9 --- /dev/null +++ b/data/s5/default/framing.css @@ -0,0 +1,23 @@ +/* The following styles size, place, and layer the slide components. + Edit these if you want to change the overall slide layout. + The commented lines can be uncommented (and modified, if necessary) + to help you with the rearrangement process. */ + +/* target = 1024x768 */ + +div#header, div#footer, .slide {width: 100%; top: 0; left: 0;} +div#header {top: 0; height: 3em; z-index: 1;} +div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;} +.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;} +div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;} +div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; + margin: 0;} +#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;} +html>body #currentSlide {position: fixed;} + +/* +div#header {background: #FCC;} +div#footer {background: #CCF;} +div#controls {background: #BBD;} +div#currentSlide {background: #FFC;} +*/ diff --git a/data/s5/default/iepngfix.htc b/data/s5/default/iepngfix.htc new file mode 100644 index 000000000..bba2db756 --- /dev/null +++ b/data/s5/default/iepngfix.htc @@ -0,0 +1,42 @@ +<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component>
\ No newline at end of file diff --git a/data/s5/default/opera.css b/data/s5/default/opera.css new file mode 100644 index 000000000..9e9d2a3c5 --- /dev/null +++ b/data/s5/default/opera.css @@ -0,0 +1,7 @@ +/* DO NOT CHANGE THESE unless you really want to break Opera Show */ +.slide { + visibility: visible !important; + position: static !important; + page-break-before: always; +} +#slide0 {page-break-before: avoid;} diff --git a/data/s5/default/outline.css b/data/s5/default/outline.css new file mode 100644 index 000000000..62db519ed --- /dev/null +++ b/data/s5/default/outline.css @@ -0,0 +1,15 @@ +/* don't change this unless you want the layout stuff to show up in the outline view! */ + +.layout div, #footer *, #controlForm * {display: none;} +#footer, #controls, #controlForm, #navLinks, #toggle { + display: block; visibility: visible; margin: 0; padding: 0;} +#toggle {float: right; padding: 0.5em;} +html>body #toggle {position: fixed; top: 0; right: 0;} + +/* making the outline look pretty-ish */ + +#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;} +#slide0 h1 {padding-top: 1.5em;} +.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; + border-top: 1px solid #888; border-bottom: 1px solid #AAA;} +#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;} diff --git a/data/s5/default/pretty.css b/data/s5/default/pretty.css new file mode 100644 index 000000000..a87b24375 --- /dev/null +++ b/data/s5/default/pretty.css @@ -0,0 +1,86 @@ +/* Following are the presentation styles -- edit away! */ + +body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;} +:link, :visited {text-decoration: none; color: #00C;} +#controls :active {color: #88A !important;} +#controls :focus {outline: 1px dotted #227;} +h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} +ul, pre {margin: 0; line-height: 1em;} +html, body {margin: 0; padding: 0;} + +blockquote, q {font-style: italic;} +blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} +blockquote p {margin: 0;} +blockquote i {font-style: normal;} +blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} +blockquote b i {font-style: italic;} + +kbd {font-weight: bold; font-size: 1em;} +sup {font-size: smaller; line-height: 1px;} + +.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} +.slide code.bad, code del {color: red;} +.slide code.old {color: silver;} +.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} +.slide pre code {display: block;} +.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} +.slide li {margin-top: 0.75em; margin-right: 0;} +.slide ul ul {line-height: 1;} +.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} +.slide img.leader {display: block; margin: 0 auto;} + +div#header, div#footer {background: #005; color: #AAB; + font-family: Verdana, Helvetica, sans-serif;} +div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat; + line-height: 1px;} +div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;} +#footer h1, #footer h2 {display: block; padding: 0 1em;} +#footer h2 {font-style: italic;} + +div.long {font-size: 0.75em;} +.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1; + margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap; + font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize; + color: #DDE; background: #005;} +.slide h3 {font-size: 130%;} +h1 abbr {font-variant: small-caps;} + +div#controls {position: absolute; left: 50%; bottom: 0; + width: 50%; + text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;} +html>body div#controls {position: fixed; padding: 0 0 1em 0; + top: auto;} +div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; + margin: 0; padding: 0;} +#controls #navLinks a {padding: 0; margin: 0 0.5em; + background: #005; border: none; color: #779; + cursor: pointer;} +#controls #navList {height: 1em;} +#controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;} + +#currentSlide {text-align: center; font-size: 0.5em; color: #449;} + +#slide0 {padding-top: 3.5em; font-size: 90%;} +#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; + font: bold 2em Helvetica, sans-serif; white-space: normal; + color: #000; background: transparent;} +#slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;} +#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} +#slide0 h4 {margin-top: 0; font-size: 1em;} + +ul.urls {list-style: none; display: inline; margin: 0;} +.urls li {display: inline; margin: 0;} +.note {display: none;} +.external {border-bottom: 1px dotted gray;} +html>body .external {border-bottom: none;} +.external:after {content: " \274F"; font-size: smaller; color: #77B;} + +.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;} +img.incremental {visibility: hidden;} +.slide .current {color: #B02;} + + +/* diagnostics + +li:after {content: " [" attr(class) "]"; color: #F88;} +*/ diff --git a/data/s5/default/print.css b/data/s5/default/print.css new file mode 100644 index 000000000..4a3554ddd --- /dev/null +++ b/data/s5/default/print.css @@ -0,0 +1,24 @@ +/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ +.slide, ul {page-break-inside: avoid; visibility: visible !important;} +h1 {page-break-after: avoid;} + +body {font-size: 12pt; background: white;} +* {color: black;} + +#slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} +#slide0 h3 {margin: 0; padding: 0;} +#slide0 h4 {margin: 0 0 0.5em; padding: 0;} +#slide0 {margin-bottom: 3em;} + +h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} +.extra {background: transparent !important;} +div.extra, pre.extra, .example {font-size: 10pt; color: #333;} +ul.extra a {font-weight: bold;} +p.example {display: none;} + +#header {display: none;} +#footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} +#footer h2, #controls {display: none;} + +/* The following rule keeps the layout stuff out of print. Remove at your own risk! */ +.layout, .layout * {display: none !important;} diff --git a/data/s5/default/s5-core.css b/data/s5/default/s5-core.css new file mode 100644 index 000000000..86444e041 --- /dev/null +++ b/data/s5/default/s5-core.css @@ -0,0 +1,9 @@ +/* Do not edit or override these styles! The system will likely break if you do. */ + +div#header, div#footer, div#controls, .slide {position: absolute;} +html>body div#header, html>body div#footer, + html>body div#controls, html>body .slide {position: fixed;} +.handout {display: none;} +.layout {display: block;} +.slide, .hideme, .incremental {visibility: hidden;} +#slide0 {visibility: visible;} diff --git a/data/s5/default/slides.css b/data/s5/default/slides.css new file mode 100644 index 000000000..0786d7dbd --- /dev/null +++ b/data/s5/default/slides.css @@ -0,0 +1,3 @@ +@import url(s5-core.css); /* required to make the slide show run at all */ +@import url(framing.css); /* sets basic placement and size of slide components */ +@import url(pretty.css); /* stuff that makes the slides look better than blah */
\ No newline at end of file diff --git a/data/s5/default/slides.js b/data/s5/default/slides.js new file mode 100644 index 000000000..38fe8531c --- /dev/null +++ b/data/s5/default/slides.js @@ -0,0 +1,553 @@ +// S5 v1.1 slides.js -- released into the Public Domain +// +// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information +// about all the wonderful and talented contributors to this code! + +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); +} + +function hasValue(object, value) { + if (!object) return false; + return (object.search('(^|\\s)' + value + '(\\s|$)') != -1); +} + +function removeClass(object,className) { + if (!object) return; + object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2); +} + +function addClass(object,className) { + if (!object || hasClass(object, className)) return; + if (object.className) { + object.className += ' '+className; + } else { + object.className = className; + } +} + +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]; + } + } + return elemColl; +} + +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); +} + +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]); + } + } + else if (node.nodeType == 3) { + result = node.nodeValue; + } + return(result); +} + +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; // to cope with empty slides + while (menu && menu.nodeType == 3) { + menu = menu.nextSibling; + } + if (!menu) continue; // to cope with slides with only text nodes + + var menunodes = menu.childNodes; + for (var o = 0; o < menunodes.length; o++) { + otext += nodeValue(menunodes[o]); + } + list.options[list.length] = new Option(n + ' : ' + otext, n); + } +} + +function currentSlide() { + var cs; + if (document.getElementById) { + cs = document.getElementById('currentSlide'); + } else { + cs = document.currentSlide; + } + 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'; + } +} + +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'); + } + } + if (step != 'j') { + snum += step; + lmax = smax - 1; + if (snum > lmax) snum = lmax; + if (snum < 0) snum = 0; + } else + snum = parseInt(jl.value); + var nid = 'slide' + snum; + var ne = document.getElementById(nid); + if (!ne) { + ne = document.getElementById('slide0'); + snum = 0; + } + if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;} + if (incrementals[snum].length > 0 && incpos == 0) { + for (var i = 0; i < incrementals[snum].length; i++) { + if (hasClass(incrementals[snum][i], 'current')) + incpos = i + 1; + else + addClass(incrementals[snum][i], 'incremental'); + } + } + if (incrementals[snum].length > 0 && incpos > 0) + addClass(incrementals[snum][incpos - 1], 'current'); + ce.style.visibility = 'hidden'; + ne.style.visibility = 'visible'; + jl.selectedIndex = snum; + currentSlide(); + number = 0; +} + +function goTo(target) { + if (target >= smax || target == snum) return; + go(target - snum); +} + +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'); + } +} + +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'; + } + slideColl[snum].style.visibility = 'visible'; + } +} + +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'; + } + break; + } +} + +// 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/) +function keys(key) { + if (!key) { + key = event; + key.which = key.keyCode; + } + if (key.which == 84) { + toggle(); + return; + } + if (s5mode) { + switch (key.which) { + case 10: // return + case 13: // enter + if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; + if (key.target && isParentOrSelf(key.target, 'controls')) return; + if(number != undef) { + goTo(number); + break; + } + case 32: // spacebar + case 34: // page down + case 39: // rightkey + case 40: // downkey + if(number != undef) { + go(number); + } else if (!incrementals[snum] || incpos >= incrementals[snum].length) { + go(1); + } else { + subgo(1); + } + break; + case 33: // page up + case 37: // leftkey + case 38: // upkey + if(number != undef) { + go(-1 * number); + } else if (!incrementals[snum] || incpos <= 0) { + go(-1); + } else { + subgo(-1); + } + break; + case 36: // home + goTo(0); + break; + case 35: // end + goTo(smax-1); + break; + case 67: // c + showHide('k'); + break; + } + 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); + } + } + return false; +} + +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); + } + } +} + +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; + } + } + while(target != null && target.nodeName != 'BODY') { + if (hasClass(target, 'slide')) { + return parseInt(target.id.slice(5)); + } + target = target.parentNode; + } + return null; +} + +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)); + } + if (dest != null) + go(dest - snum); +} + +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;")); + } + } + } + } +} + +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'); + } + } +} + +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; + } + controlsDiv.innerHTML = '<form action="#" id="controlForm"' + hideDiv + '>' + + '<div id="navLinks">' + + '<a accesskey="t" id="toggle" href="javascript:toggle();">Ø<\/a>' + + '<a accesskey="z" id="prev" href="javascript:go(-1);">«<\/a>' + + '<a accesskey="x" id="next" href="javascript:go(1);">»<\/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'); + } + addClass(hidden,'hideme'); +} + +function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers + if (!s5mode) return false; + var vScale = 22; // both yield 32 (after rounding) at 1024x768 + var hScale = 32; // perhaps should auto-calculate based on theme's declared value? + 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; // assuming 1024x768, minus chrome and such + var hSize = 1024; // these do not account for kiosk mode or Opera Show + } + var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale)); + fontSize(newSize + 'px'); + if (isGe) { // hack to counter incremental reflow bugs + var obj = document.getElementsByTagName('body')[0]; + obj.style.display = 'none'; + obj.style.display = 'block'; + } +} + +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]; + } + } + 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;'); + } +} + +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'); // Gecko fix + 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)'); + } +} + +function getIncrementals(obj) { + var incrementals = new Array(); + if (!obj) + 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'); + } + } + 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; + } + } + incrementals = incrementals.concat(getIncrementals(child)); + } + return incrementals; +} + +function createIncrementals() { + var incrementals = new Array(); + for (var i = 0; i < smax; i++) { + incrementals[i] = getIncrementals(document.getElementById('slide'+i)); + } + return incrementals; +} + +function defaultCheck() { + var allMetas = document.getElementsByTagName('meta'); + for (var i = 0; i< allMetas.length; i++) { + if (allMetas[i].name == 'defaultView') { + defaultView = allMetas[i].content; + } + if (allMetas[i].name == 'controlVis') { + controlVis = allMetas[i].content; + } + } +} + +// Key trap fix, new function body for trap() +function trap(e) { + if (!e) { + e = event; + e.which = e.keyCode; + } + try { + modifierKey = e.ctrlKey || e.altKey || e.metaKey; + } + catch(e) { + modifierKey = false; + } + return modifierKey || e.which == 0; +} + +function startup() { + defaultCheck(); + if (!isOp) + createControls(); + slideLabel(); + fixLinks(); + externalLinks(); + fontScale(); + if (!isOp) { + notOperaFix(); + incrementals = createIncrementals(); + slideJump(); + if (defaultView == 'outline') { + toggle(); + } + document.onkeyup = keys; + document.onkeypress = trap; + document.onclick = clicker; + } +} + +window.onload = startup; +window.onresize = function(){setTimeout('fontScale()', 50);}
\ No newline at end of file diff --git a/data/slideous/slideous.css b/data/slideous/slideous.css new file mode 100644 index 000000000..7d6057069 --- /dev/null +++ b/data/slideous/slideous.css @@ -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 */ diff --git a/data/slideous/slideous.js b/data/slideous/slideous.js new file mode 100644 index 000000000..3e7a63d4a --- /dev/null +++ b/data/slideous/slideous.js @@ -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; diff --git a/data/slidy/graphics/fold-dim.gif b/data/slidy/graphics/fold-dim.gif Binary files differnew file mode 100644 index 000000000..346fcbf3e --- /dev/null +++ b/data/slidy/graphics/fold-dim.gif diff --git a/data/slidy/graphics/fold.gif b/data/slidy/graphics/fold.gif Binary files differnew file mode 100644 index 000000000..133e594fd --- /dev/null +++ b/data/slidy/graphics/fold.gif diff --git a/data/slidy/graphics/nofold-dim.gif b/data/slidy/graphics/nofold-dim.gif Binary files differnew file mode 100644 index 000000000..996fb5eda --- /dev/null +++ b/data/slidy/graphics/nofold-dim.gif diff --git a/data/slidy/graphics/unfold-dim.gif b/data/slidy/graphics/unfold-dim.gif Binary files differnew file mode 100644 index 000000000..bee567117 --- /dev/null +++ b/data/slidy/graphics/unfold-dim.gif diff --git a/data/slidy/graphics/unfold.gif b/data/slidy/graphics/unfold.gif Binary files differnew file mode 100644 index 000000000..0753ae4d2 --- /dev/null +++ b/data/slidy/graphics/unfold.gif diff --git a/data/slidy/scripts/slidy.js.gz b/data/slidy/scripts/slidy.js.gz Binary files differnew file mode 100644 index 000000000..72bbd63d0 --- /dev/null +++ b/data/slidy/scripts/slidy.js.gz diff --git a/data/slidy/styles/slidy.css b/data/slidy/styles/slidy.css new file mode 100644 index 000000000..0197e64d0 --- /dev/null +++ b/data/slidy/styles/slidy.css @@ -0,0 +1,405 @@ +/* slidy.css + + Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body +{ + margin: 0 0 0 0; + padding: 0 0 0 0; + width: 100%; + height: 100%; + color: black; + background-color: white; + font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif; + font-size: 14pt; +} + +div.toolbar { + position: fixed; z-index: 200; + top: auto; bottom: 0; left: 0; right: 0; + height: 1.2em; text-align: right; + padding-left: 1em; + padding-right: 1em; + font-size: 60%; + color: red; + background-color: rgb(240,240,240); + border-top: solid 1px rgb(180,180,180); +} + +div.toolbar span.copyright { + color: black; + margin-left: 0.5em; +} + +div.initial_prompt { + position: absolute; + z-index: 1000; + bottom: 1.2em; + width: 100%; + background-color: rgb(200,200,200); + opacity: 0.35; + background-color: rgb(200,200,200, 0.35); + cursor: pointer; +} + +div.initial_prompt p.help { + text-align: center; +} + +div.initial_prompt p.close { + text-align: right; + font-style: italic; +} + +div.slidy_toc { + position: absolute; + z-index: 300; + width: 60%; + max-width: 30em; + height: 30em; + overflow: auto; + top: auto; + right: auto; + left: 4em; + bottom: 4em; + padding: 1em; + background: rgb(240,240,240); + border-style: solid; + border-width: 2px; + font-size: 60%; +} + +div.slidy_toc .toc_heading { + text-align: center; + width: 100%; + margin: 0; + margin-bottom: 1em; + border-bottom-style: solid; + border-bottom-color: rgb(180,180,180); + border-bottom-width: 1px; +} + +div.slide { + z-index: 20; + margin: 0 0 0 0; + padding-top: 0; + padding-bottom: 0; + padding-left: 20px; + padding-right: 20px; + border-width: 0; + clear: both; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage h1 { + padding-top: 10%; + margin-right: 0; +} + +div.slide h1 { + padding-left: 0; + padding-right: 20pt; + padding-top: 4pt; + padding-bottom: 4pt; + margin-top: 0; + margin-left: 0; + margin-right: 60pt; + margin-bottom: 0.5em; + display: block; + font-size: 160%; + line-height: 1.2em; + background: transparent; +} + +div.toc { + position: absolute; + top: auto; + bottom: 4em; + left: 4em; + right: auto; + width: 60%; + max-width: 30em; + height: 30em; + border: solid thin black; + padding: 1em; + background: rgb(240,240,240); + color: black; + z-index: 300; + overflow: auto; + display: block; + visibility: visible; +} + +div.toc-heading { + width: 100%; + border-bottom: solid 1px rgb(180,180,180); + margin-bottom: 1em; + text-align: center; +} + +img { + image-rendering: optimize-quality; +} + +pre { + font-size: 80%; + font-weight: bold; + line-height: 120%; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-left: 1em; + padding-right: 1em; + border-style: solid; + border-left-width: 1em; + border-top-width: thin; + border-right-width: thin; + border-bottom-width: thin; + border-color: #95ABD0; + color: #00428C; + background-color: #E4E5E7; +} + +li pre { margin-left: 0; } + +blockquote { font-style: italic } + +img { background-color: transparent } + +p.copyright { font-size: smaller } + +.center { text-align: center } +.footnote { font-size: smaller; margin-left: 2em; } + +a img { border-width: 0; border-style: none } + +a:visited { color: navy } +a:link { color: navy } +a:hover { color: red; text-decoration: underline } +a:active { color: red; text-decoration: underline } + +a {text-decoration: none} +.navbar a:link {color: white} +.navbar a:visited {color: yellow} +.navbar a:active {color: red} +.navbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; + margin-bottom: 0.5em; +} + + +p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { + margin-left: 1em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +.smaller { font-size: smaller } +.bigger { font-size: 130% } + +td,th { padding: 0.2em } + +ul { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ol { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } + +ul li { + list-style: square; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 0; + line-height: 140%; +} + +ol li { + margin: 0.1em 0em 0.6em 1.5em; + padding: 0 0 0 0px; + line-height: 140%; + list-style-type: decimal; +} + +li ul li { + font-size: 85%; + font-style: italic; + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} +li li ul li { + font-size: 85%; + font-style: normal; + list-style-type: circle; + background: transparent; + padding: 0 0 0 0; +} +li li li ul li { + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} + +li ol li { + list-style-type: decimal; +} + + +li li ol li { + list-style-type: decimal; +} + +/* + setting class="outline on ol or ul makes it behave as an + ouline list where blocklevel content in li elements is + hidden by default and can be expanded or collapsed with + mouse click. Set class="expand" on li to override default +*/ + +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } + +ol.outline { list-style:decimal; } +ol.outline ol { list-style-type:lower-alpha } + +ol.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +ul.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +/* for slides with class "title" in table of contents */ +a.titleslide { font-weight: bold; font-style: italic } + +/* + hide images for work around for save as bug + where browsers fail to save images used by CSS +*/ +img.hidden { display: none; visibility: hidden } +div.initial_prompt { display: none; visibility: hidden } + + div.slide { + visibility: visible; + position: inherit; + } + div.handout { + border-top-style: solid; + border-top-width: thin; + border-top-color: black; + } + +@media screen { + .hidden { display: none; visibility: visible } + + div.slide.hidden { display: block; visibility: visible } + div.handout.hidden { display: block; visibility: visible } + div.background { display: none; visibility: hidden } + body.single_slide div.initial_prompt { display: block; visibility: visible } + body.single_slide div.background { display: block; visibility: visible } + body.single_slide div.background.hidden { display: none; visibility: hidden } + body.single_slide .invisible { visibility: hidden } + body.single_slide .hidden { display: none; visibility: hidden } + body.single_slide div.slide { position: absolute } + body.single_slide div.handout { display: none; visibility: hidden } +} + +@media print { + .hidden { display: block; visibility: visible } + + div.slide pre { font-size: 60%; padding-left: 0.5em; } + div.toolbar { display: none; visibility: hidden; } + div.slidy_toc { display: none; visibility: hidden; } + div.background { display: none; visibility: hidden; } + div.slide { page-break-before: always } + /* :first-child isn't reliable for print media */ + div.slide.first-slide { page-break-before: avoid } +} + diff --git a/data/templates b/data/templates new file mode 160000 +Subproject 4c1f840c392010309cdb4cc1b8db4f4b24ff642 |