--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">\r
+<head>\r
+<title>2.8 Update</title>\r
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
+<meta name="generator" content="AsciiDoc 8.6.9" />\r
+<style type="text/css">\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+ font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
+h1, h2, h3, h4, h5, h6,\r
+div.title, caption.title,\r
+thead, p.table.header,\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
+ font-family: Arial,Helvetica,sans-serif;\r
+}\r
+\r
+body {\r
+ margin: 1em 5% 1em 5%;\r
+}\r
+\r
+a {\r
+ color: blue;\r
+ text-decoration: underline;\r
+}\r
+a:visited {\r
+ color: fuchsia;\r
+}\r
+\r
+em {\r
+ font-style: italic;\r
+ color: navy;\r
+}\r
+\r
+strong {\r
+ font-weight: bold;\r
+ color: #083194;\r
+}\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+ color: #527bbd;\r
+ margin-top: 1.2em;\r
+ margin-bottom: 0.5em;\r
+ line-height: 1.3;\r
+}\r
+\r
+h1, h2, h3 {\r
+ border-bottom: 2px solid silver;\r
+}\r
+h2 {\r
+ padding-top: 0.5em;\r
+}\r
+h3 {\r
+ float: left;\r
+}\r
+h3 + * {\r
+ clear: left;\r
+}\r
+h5 {\r
+ font-size: 1.0em;\r
+}\r
+\r
+div.sectionbody {\r
+ margin-left: 0;\r
+}\r
+\r
+hr {\r
+ border: 1px solid silver;\r
+}\r
+\r
+p {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+ul, ol, li > p {\r
+ margin-top: 0;\r
+}\r
+ul > li { color: #aaa; }\r
+ul > li > * { color: black; }\r
+\r
+.monospaced, code, pre {\r
+ font-family: "Courier New", Courier, monospace;\r
+ font-size: inherit;\r
+ color: navy;\r
+ padding: 0;\r
+ margin: 0;\r
+}\r
+pre {\r
+ white-space: pre-wrap;\r
+}\r
+\r
+#author {\r
+ color: #527bbd;\r
+ font-weight: bold;\r
+ font-size: 1.1em;\r
+}\r
+#email {\r
+}\r
+#revnumber, #revdate, #revremark {\r
+}\r
+\r
+#footer {\r
+ font-size: small;\r
+ border-top: 2px solid silver;\r
+ padding-top: 0.5em;\r
+ margin-top: 4.0em;\r
+}\r
+#footer-text {\r
+ float: left;\r
+ padding-bottom: 0.5em;\r
+}\r
+#footer-badges {\r
+ float: right;\r
+ padding-bottom: 0.5em;\r
+}\r
+\r
+#preamble {\r
+ margin-top: 1.5em;\r
+ margin-bottom: 1.5em;\r
+}\r
+div.imageblock, div.exampleblock, div.verseblock,\r
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
+div.admonitionblock {\r
+ margin-top: 1.0em;\r
+ margin-bottom: 1.5em;\r
+}\r
+div.admonitionblock {\r
+ margin-top: 2.0em;\r
+ margin-bottom: 2.0em;\r
+ margin-right: 10%;\r
+ color: #606060;\r
+}\r
+\r
+div.content { /* Block element content. */\r
+ padding: 0;\r
+}\r
+\r
+/* Block element titles. */\r
+div.title, caption.title {\r
+ color: #527bbd;\r
+ font-weight: bold;\r
+ text-align: left;\r
+ margin-top: 1.0em;\r
+ margin-bottom: 0.5em;\r
+}\r
+div.title + * {\r
+ margin-top: 0;\r
+}\r
+\r
+td div.title:first-child {\r
+ margin-top: 0.0em;\r
+}\r
+div.content div.title:first-child {\r
+ margin-top: 0.0em;\r
+}\r
+div.content + div.title {\r
+ margin-top: 0.0em;\r
+}\r
+\r
+div.sidebarblock > div.content {\r
+ background: #ffffee;\r
+ border: 1px solid #dddddd;\r
+ border-left: 4px solid #f0f0f0;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.listingblock > div.content {\r
+ border: 1px solid #dddddd;\r
+ border-left: 5px solid #f0f0f0;\r
+ background: #f8f8f8;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.quoteblock, div.verseblock {\r
+ padding-left: 1.0em;\r
+ margin-left: 1.0em;\r
+ margin-right: 10%;\r
+ border-left: 5px solid #f0f0f0;\r
+ color: #888;\r
+}\r
+\r
+div.quoteblock > div.attribution {\r
+ padding-top: 0.5em;\r
+ text-align: right;\r
+}\r
+\r
+div.verseblock > pre.content {\r
+ font-family: inherit;\r
+ font-size: inherit;\r
+}\r
+div.verseblock > div.attribution {\r
+ padding-top: 0.75em;\r
+ text-align: left;\r
+}\r
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */\r
+div.verseblock + div.attribution {\r
+ text-align: left;\r
+}\r
+\r
+div.admonitionblock .icon {\r
+ vertical-align: top;\r
+ font-size: 1.1em;\r
+ font-weight: bold;\r
+ text-decoration: underline;\r
+ color: #527bbd;\r
+ padding-right: 0.5em;\r
+}\r
+div.admonitionblock td.content {\r
+ padding-left: 0.5em;\r
+ border-left: 3px solid #dddddd;\r
+}\r
+\r
+div.exampleblock > div.content {\r
+ border-left: 3px solid #dddddd;\r
+ padding-left: 0.5em;\r
+}\r
+\r
+div.imageblock div.content { padding-left: 0; }\r
+span.image img { border-style: none; vertical-align: text-bottom; }\r
+a.image:visited { color: white; }\r
+\r
+dl {\r
+ margin-top: 0.8em;\r
+ margin-bottom: 0.8em;\r
+}\r
+dt {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0;\r
+ font-style: normal;\r
+ color: navy;\r
+}\r
+dd > *:first-child {\r
+ margin-top: 0.1em;\r
+}\r
+\r
+ul, ol {\r
+ list-style-position: outside;\r
+}\r
+ol.arabic {\r
+ list-style-type: decimal;\r
+}\r
+ol.loweralpha {\r
+ list-style-type: lower-alpha;\r
+}\r
+ol.upperalpha {\r
+ list-style-type: upper-alpha;\r
+}\r
+ol.lowerroman {\r
+ list-style-type: lower-roman;\r
+}\r
+ol.upperroman {\r
+ list-style-type: upper-roman;\r
+}\r
+\r
+div.compact ul, div.compact ol,\r
+div.compact p, div.compact p,\r
+div.compact div, div.compact div {\r
+ margin-top: 0.1em;\r
+ margin-bottom: 0.1em;\r
+}\r
+\r
+tfoot {\r
+ font-weight: bold;\r
+}\r
+td > div.verse {\r
+ white-space: pre;\r
+}\r
+\r
+div.hdlist {\r
+ margin-top: 0.8em;\r
+ margin-bottom: 0.8em;\r
+}\r
+div.hdlist tr {\r
+ padding-bottom: 15px;\r
+}\r
+dt.hdlist1.strong, td.hdlist1.strong {\r
+ font-weight: bold;\r
+}\r
+td.hdlist1 {\r
+ vertical-align: top;\r
+ font-style: normal;\r
+ padding-right: 0.8em;\r
+ color: navy;\r
+}\r
+td.hdlist2 {\r
+ vertical-align: top;\r
+}\r
+div.hdlist.compact tr {\r
+ margin: 0;\r
+ padding-bottom: 0;\r
+}\r
+\r
+.comment {\r
+ background: yellow;\r
+}\r
+\r
+.footnote, .footnoteref {\r
+ font-size: 0.8em;\r
+}\r
+\r
+span.footnote, span.footnoteref {\r
+ vertical-align: super;\r
+}\r
+\r
+#footnotes {\r
+ margin: 20px 0 20px 0;\r
+ padding: 7px 0 0 0;\r
+}\r
+\r
+#footnotes div.footnote {\r
+ margin: 0 0 5px 0;\r
+}\r
+\r
+#footnotes hr {\r
+ border: none;\r
+ border-top: 1px solid silver;\r
+ height: 1px;\r
+ text-align: left;\r
+ margin-left: 0;\r
+ width: 20%;\r
+ min-width: 100px;\r
+}\r
+\r
+div.colist td {\r
+ padding-right: 0.5em;\r
+ padding-bottom: 0.3em;\r
+ vertical-align: top;\r
+}\r
+div.colist td img {\r
+ margin-top: 0.3em;\r
+}\r
+\r
+@media print {\r
+ #footer-badges { display: none; }\r
+}\r
+\r
+#toc {\r
+ margin-bottom: 2.5em;\r
+}\r
+\r
+#toctitle {\r
+ color: #527bbd;\r
+ font-size: 1.1em;\r
+ font-weight: bold;\r
+ margin-top: 1.0em;\r
+ margin-bottom: 0.1em;\r
+}\r
+\r
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {\r
+ margin-top: 0;\r
+ margin-bottom: 0;\r
+}\r
+div.toclevel2 {\r
+ margin-left: 2em;\r
+ font-size: 0.9em;\r
+}\r
+div.toclevel3 {\r
+ margin-left: 4em;\r
+ font-size: 0.9em;\r
+}\r
+div.toclevel4 {\r
+ margin-left: 6em;\r
+ font-size: 0.9em;\r
+}\r
+\r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+div.unbreakable { page-break-inside: avoid; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+div.tableblock {\r
+ margin-top: 1.0em;\r
+ margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+ border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+ font-weight: bold;\r
+ color: #527bbd;\r
+}\r
+p.table {\r
+ margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+ border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+ border-left-style: none;\r
+ border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+ border-top-style: none;\r
+ border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+table.tableblock {\r
+ margin-top: 1.0em;\r
+ margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+ font-weight: bold;\r
+ color: #527bbd;\r
+}\r
+p.tableblock {\r
+ margin-top: 0;\r
+}\r
+table.tableblock {\r
+ border-width: 3px;\r
+ border-spacing: 0px;\r
+ border-style: solid;\r
+ border-color: #527bbd;\r
+ border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+ border-width: 1px;\r
+ padding: 4px;\r
+ border-style: solid;\r
+ border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+ border-left-style: hidden;\r
+ border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+ border-top-style: hidden;\r
+ border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+ border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+ text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+ text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+ text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+ vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+ vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+ vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+ padding-top: 0.5em;\r
+ padding-bottom: 0.5em;\r
+ border-top: 2px solid silver;\r
+ border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+ border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+ margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+ body.manpage div#toc { display: none; }\r
+}\r
+/* slidy.css\r
+\r
+ Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.\r
+ W3C liability, trademark, document use and software licensing\r
+ rules apply, see:\r
+\r
+ http://www.w3.org/Consortium/Legal/copyright-documents\r
+ http://www.w3.org/Consortium/Legal/copyright-software\r
+*/\r
+\r
+/*\r
+ SJR: 2010-09-29: Modified for AsciiDoc slidy backend.\r
+ Mostly just commented out stuff that is handled by AsciiDoc's CSS files.\r
+*/\r
+\r
+body\r
+{\r
+ margin: 0 0 0 0;\r
+ padding: 0 0 0 0;\r
+ width: 100%;\r
+ height: 100%;\r
+ color: black;\r
+ background-color: white;\r
+/*\r
+ font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif;\r
+*/\r
+ font-size: 14pt;\r
+}\r
+\r
+div.toolbar {\r
+ position: fixed; z-index: 200;\r
+ top: auto; bottom: 0; left: 0; right: 0;\r
+ height: 1.2em; text-align: right;\r
+ padding-left: 1em;\r
+ padding-right: 1em;\r
+ font-size: 60%;\r
+ color: red;\r
+ background-color: rgb(240,240,240);\r
+ border-top: solid 1px rgb(180,180,180);\r
+}\r
+\r
+div.toolbar span.copyright {\r
+ color: black;\r
+ margin-left: 0.5em;\r
+}\r
+\r
+div.initial_prompt {\r
+ position: absolute;\r
+ z-index: 1000;\r
+ bottom: 1.2em;\r
+ width: 90%;\r
+ background-color: rgb(200,200,200);\r
+ opacity: 0.35;\r
+ background-color: rgb(200,200,200, 0.35);\r
+ cursor: pointer;\r
+}\r
+\r
+div.initial_prompt p.help {\r
+ text-align: center;\r
+}\r
+\r
+div.initial_prompt p.close {\r
+ text-align: right;\r
+ font-style: italic;\r
+}\r
+\r
+div.slidy_toc {\r
+ position: absolute;\r
+ z-index: 300;\r
+ width: 60%;\r
+ max-width: 30em;\r
+ height: 30em;\r
+ overflow: auto;\r
+ top: auto;\r
+ right: auto;\r
+ left: 4em;\r
+ bottom: 4em;\r
+ padding: 1em;\r
+ background: rgb(240,240,240);\r
+ border-style: solid;\r
+ border-width: 2px;\r
+ font-size: 60%;\r
+}\r
+\r
+div.slidy_toc .toc_heading {\r
+ text-align: center;\r
+ width: 100%;\r
+ margin: 0;\r
+ margin-bottom: 1em;\r
+ border-bottom-style: solid;\r
+ border-bottom-color: rgb(180,180,180);\r
+ border-bottom-width: 1px;\r
+}\r
+\r
+div.slide {\r
+ z-index: 20;\r
+ margin: 0 0 0 0;\r
+ padding-top: 0;\r
+ padding-bottom: 0;\r
+ padding-left: 20px;\r
+ padding-right: 20px;\r
+ border-width: 0;\r
+ clear: both;\r
+ top: 0;\r
+ bottom: 0;\r
+ left: 0;\r
+ right: 0;\r
+ line-height: 120%;\r
+ background-color: transparent;\r
+}\r
+\r
+div.background {\r
+ display: none;\r
+}\r
+\r
+div.handout {\r
+ margin-left: 20px;\r
+ margin-right: 20px;\r
+}\r
+\r
+div.slide.titlepage {\r
+ text-align: center;\r
+}\r
+\r
+div.slide.titlepage.h1 {\r
+ padding-top: 10%;\r
+}\r
+\r
+div.slide h1 {\r
+ padding-left: 0;\r
+ padding-right: 20pt;\r
+ padding-top: 4pt;\r
+ padding-bottom: 4pt;\r
+ margin-top: 0;\r
+ margin-left: 0;\r
+ margin-right: 60pt;\r
+ margin-bottom: 0.5em;\r
+ display: block;\r
+ font-size: 160%;\r
+ line-height: 1.2em;\r
+ background: transparent;\r
+}\r
+\r
+div.toc {\r
+ position: absolute;\r
+ top: auto;\r
+ bottom: 4em;\r
+ left: 4em;\r
+ right: auto;\r
+ width: 60%;\r
+ max-width: 30em;\r
+ height: 30em;\r
+ border: solid thin black;\r
+ padding: 1em;\r
+ background: rgb(240,240,240);\r
+ color: black;\r
+ z-index: 300;\r
+ overflow: auto;\r
+ display: block;\r
+ visibility: visible;\r
+}\r
+\r
+div.toc-heading {\r
+ width: 100%;\r
+ border-bottom: solid 1px rgb(180,180,180);\r
+ margin-bottom: 1em;\r
+ text-align: center;\r
+}\r
+\r
+/*\r
+pre {\r
+ font-size: 80%;\r
+ font-weight: bold;\r
+ line-height: 120%;\r
+ padding-top: 0.2em;\r
+ padding-bottom: 0.2em;\r
+ padding-left: 1em;\r
+ padding-right: 1em;\r
+ border-style: solid;\r
+ border-left-width: 1em;\r
+ border-top-width: thin;\r
+ border-right-width: thin;\r
+ border-bottom-width: thin;\r
+ border-color: #95ABD0;\r
+ color: #00428C;\r
+ background-color: #E4E5E7;\r
+}\r
+*/\r
+\r
+/*\r
+li pre { margin-left: 0; }\r
+\r
+blockquote { font-style: italic }\r
+\r
+img { background-color: transparent }\r
+\r
+p.copyright { font-size: smaller }\r
+*/\r
+\r
+.center { text-align: center }\r
+.footnote { font-size: smaller; margin-left: 2em; }\r
+\r
+/*\r
+a img { border-width: 0; border-style: none }\r
+*/\r
+\r
+a:visited { color: navy }\r
+a:link { color: navy }\r
+a:hover { color: red; text-decoration: underline }\r
+a:active { color: red; text-decoration: underline }\r
+\r
+a {text-decoration: none}\r
+.navbar a:link {color: white}\r
+.navbar a:visited {color: yellow}\r
+.navbar a:active {color: red}\r
+.navbar a:hover {color: red}\r
+\r
+/*\r
+ul { list-style-type: square; }\r
+ul ul { list-style-type: disc; }\r
+ul ul ul { list-style-type: circle; }\r
+ul ul ul ul { list-style-type: disc; }\r
+li { margin-left: 0.5em; margin-top: 0.5em; }\r
+li li { font-size: 85%; font-style: italic }\r
+li li li { font-size: 85%; font-style: normal }\r
+*/\r
+\r
+div dt\r
+{\r
+ margin-left: 0;\r
+ margin-top: 1em;\r
+ margin-bottom: 0.5em;\r
+ font-weight: bold;\r
+}\r
+div dd\r
+{\r
+ margin-left: 2em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+\r
+/*\r
+p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {\r
+ margin-left: 1em;\r
+ margin-right: 1em;\r
+}\r
+*/\r
+\r
+p.subhead { font-weight: bold; margin-top: 2em; }\r
+\r
+.smaller { font-size: smaller }\r
+.bigger { font-size: 130% }\r
+\r
+/*\r
+td,th { padding: 0.2em }\r
+*/\r
+\r
+ul {\r
+ margin: 0.5em 1.5em 0.5em 1.5em;\r
+ padding: 0;\r
+}\r
+\r
+ol {\r
+ margin: 0.5em 1.5em 0.5em 1.5em;\r
+ padding: 0;\r
+}\r
+\r
+ul { list-style-type: square; }\r
+ul ul { list-style-type: disc; }\r
+ul ul ul { list-style-type: circle; }\r
+ul ul ul ul { list-style-type: disc; }\r
+\r
+/*\r
+ul li {\r
+ list-style: square;\r
+ margin: 0.1em 0em 0.6em 0;\r
+ padding: 0 0 0 0;\r
+ line-height: 140%;\r
+}\r
+\r
+ol li {\r
+ margin: 0.1em 0em 0.6em 1.5em;\r
+ padding: 0 0 0 0px;\r
+ line-height: 140%;\r
+ list-style-type: decimal;\r
+}\r
+\r
+li ul li {\r
+ font-size: 85%;\r
+ font-style: italic;\r
+ list-style-type: disc;\r
+ background: transparent;\r
+ padding: 0 0 0 0;\r
+}\r
+li li ul li {\r
+ font-size: 85%;\r
+ font-style: normal;\r
+ list-style-type: circle;\r
+ background: transparent;\r
+ padding: 0 0 0 0;\r
+}\r
+li li li ul li {\r
+ list-style-type: disc;\r
+ background: transparent;\r
+ padding: 0 0 0 0;\r
+}\r
+\r
+li ol li {\r
+ list-style-type: decimal;\r
+}\r
+\r
+\r
+li li ol li {\r
+ list-style-type: decimal;\r
+}\r
+*/\r
+\r
+/*\r
+ setting class="outline" on ol or ul makes it behave as an\r
+ ouline list where blocklevel content in li elements is\r
+ hidden by default and can be expanded or collapsed with\r
+ mouse click. Set class="expand" on li to override default\r
+*/\r
+\r
+ol.outline li:hover { cursor: pointer }\r
+ol.outline li.nofold:hover { cursor: default }\r
+\r
+ul.outline li:hover { cursor: pointer }\r
+ul.outline li.nofold:hover { cursor: default }\r
+\r
+ol.outline { list-style:decimal; }\r
+ol.outline ol { list-style-type:lower-alpha }\r
+\r
+ol.outline li.nofold {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.unfolded {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.folded {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.unfolded:hover {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.folded:hover {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\r
+}\r
+\r
+ul.outline li.nofold {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.unfolded {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.folded {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.unfolded:hover {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.folded:hover {\r
+ padding: 0 0 0 20px;\r
+ background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\r
+}\r
+\r
+/* for slides with class "title" in table of contents */\r
+a.titleslide { font-weight: bold; font-style: italic }\r
+\r
+/*\r
+ hide images for work around for save as bug\r
+ where browsers fail to save images used by CSS\r
+*/\r
+img.hidden { display: none; visibility: hidden }\r
+div.initial_prompt { display: none; visibility: hidden }\r
+\r
+ div.slide {\r
+ visibility: visible;\r
+ position: inherit;\r
+ }\r
+ div.handout {\r
+ border-top-style: solid;\r
+ border-top-width: thin;\r
+ border-top-color: black;\r
+ }\r
+\r
+@media screen {\r
+ .hidden { display: none; visibility: visible }\r
+\r
+ div.slide.hidden { display: block; visibility: visible }\r
+ div.handout.hidden { display: block; visibility: visible }\r
+ div.background { display: none; visibility: hidden }\r
+ body.single_slide div.initial_prompt { display: block; visibility: visible }\r
+ body.single_slide div.background { display: block; visibility: visible }\r
+ body.single_slide div.background.hidden { display: none; visibility: hidden }\r
+ body.single_slide .invisible { visibility: hidden }\r
+ body.single_slide .hidden { display: none; visibility: hidden }\r
+ body.single_slide div.slide { position: absolute }\r
+ body.single_slide div.handout { display: none; visibility: hidden }\r
+}\r
+\r
+@media print {\r
+ .hidden { display: block; visibility: visible }\r
+\r
+/*\r
+ div.slide pre { font-size: 60%; padding-left: 0.5em; }\r
+*/\r
+ div.toolbar { display: none; visibility: hidden; }\r
+ div.slidy_toc { display: none; visibility: hidden; }\r
+ div.background { display: none; visibility: hidden; }\r
+ div.slide { page-break-before: always }\r
+ /* :first-child isn't reliable for print media */\r
+ div.slide.first-slide { page-break-before: avoid }\r
+}\r
+\r
+\r
+/* SJR: AsciiDoc slidy backend tweaks */\r
+\r
+ol, ul {\r
+ margin: 0.8em 1.5em 0.8em 1.8em;\r
+}\r
+li > ul, li > ol {\r
+ margin-top: 0.5em;\r
+}\r
+\r
+.outline > li.folded,\r
+.outline > li.unfolded {\r
+ color: #527bbd;\r
+}\r
+ul > li{ color: #aaa; }\r
+ul > li > *, ol > li > * { color: black; }\r
+\r
+li {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+\r
+</style>\r
+<script type="text/javascript">\r
+/*<![CDATA[*/\r
+/* slidy.js\r
+\r
+ Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.\r
+ W3C liability, trademark, document use and software licensing\r
+ rules apply, see:\r
+\r
+ http://www.w3.org/Consortium/Legal/copyright-documents\r
+ http://www.w3.org/Consortium/Legal/copyright-software\r
+*/\r
+\r
+// the slidy object implementation\r
+var w3c_slidy = {\r
+ // classify which kind of browser we're running under\r
+ ns_pos: (typeof window.pageYOffset!='undefined'),\r
+ khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false),\r
+ opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false),\r
+ ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false),\r
+ iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false),\r
+ ie: (typeof document.all != "undefined" && !this.opera),\r
+ ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1),\r
+ ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1),\r
+ ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1),\r
+ ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1),\r
+ keyboardless: (this.ipad || this.iphone),\r
+\r
+ // are we running as XHTML? (doesn't work on Opera)\r
+ is_xhtml: /xml/.test(document.contentType),\r
+\r
+ slide_number: 0, // integer slide count: 0, 1, 2, ...\r
+ slide_number_element: null, // element containing slide number\r
+ slides: [], // set to array of slide div's\r
+ notes: [], // set to array of handout div's\r
+ backgrounds: [], // set to array of background div's\r
+ toolbar: null, // element containing toolbar\r
+ title: null, // document title\r
+ last_shown: null, // last incrementally shown item\r
+ eos: null, // span element for end of slide indicator\r
+ toc: null, // table of contents\r
+ outline: null, // outline element with the focus\r
+ selected_text_len: 0, // length of drag selection on document\r
+ view_all: 0, // 1 to view all slides + handouts\r
+ want_toolbar: true, // user preference to show/hide toolbar\r
+ mouse_click_enabled: true, // enables left click for next slide\r
+ scroll_hack: 0, // IE work around for position: fixed\r
+ disable_slide_click: false, // used by clicked anchors\r
+\r
+ lang: "en", // updated to language specified by html file\r
+\r
+ help_anchor: null, // used for keyboard focus hack in showToolbar()\r
+ help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html",\r
+ help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " +\r
+ "or Pg Up and Pg Dn. Use S and B to change font size.",\r
+\r
+ size_index: 0,\r
+ size_adjustment: 0,\r
+ sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",\r
+ "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"),\r
+\r
+ // needed for efficient resizing\r
+ last_width: 0,\r
+ last_height: 0,\r
+\r
+\r
+ // Needed for cross browser support for relative width/height on\r
+ // object elements. The work around is to save width/height attributes\r
+ // and then to recompute absolute width/height dimensions on resizing\r
+ objects: [],\r
+\r
+ // attach initialiation event handlers\r
+ set_up: function () {\r
+ var init = function() { w3c_slidy.init(); };\r
+ if (typeof window.addEventListener != "undefined")\r
+ window.addEventListener("load", init, false);\r
+ else\r
+ window.attachEvent("onload", init);\r
+ },\r
+\r
+ hide_slides: function () {\r
+ if (document.body && !w3c_slidy.initialized)\r
+ document.body.style.visibility = "hidden";\r
+ else\r
+ setTimeout(w3c_slidy.hide_slides, 50);\r
+ },\r
+\r
+ // hack to persuade IE to compute correct document height\r
+ // as needed for simulating fixed positioning of toolbar\r
+ ie_hack: function () {\r
+ window.resizeBy(0,-1);\r
+ window.resizeBy(0, 1);\r
+ },\r
+\r
+ init: function () {\r
+ //alert("slidy starting test 10");\r
+ document.body.style.visibility = "visible";\r
+ w3c_slidy_i18n.init();\r
+ this.add_toolbar();\r
+ this.wrap_implicit_slides();\r
+ this.collect_slides();\r
+ this.collect_notes();\r
+ this.collect_backgrounds();\r
+ this.objects = document.body.getElementsByTagName("object");\r
+ this.patch_anchors();\r
+ this.slide_number = this.find_slide_number(location.href);\r
+ window.offscreenbuffering = true;\r
+ this.size_adjustment = this.find_size_adjust();\r
+ this.time_left = this.find_duration();\r
+ this.hide_image_toolbar(); // suppress IE image toolbar popup\r
+ this.init_outliner(); // activate fold/unfold support\r
+ this.title = document.title;\r
+\r
+ // work around for opera bug\r
+ this.is_xhtml = (document.body.tagName == "BODY" ? false : true);\r
+\r
+ if (this.slides.length > 0)\r
+ {\r
+ var slide = this.slides[this.slide_number];\r
+\r
+ if (this.slide_number > 0)\r
+ {\r
+ this.set_visibility_all_incremental("visible");\r
+ this.last_shown = this.previous_incremental_item(null);\r
+ this.set_eos_status(true);\r
+ }\r
+ else\r
+ {\r
+ this.last_shown = null;\r
+ this.set_visibility_all_incremental("hidden");\r
+ this.set_eos_status(!this.next_incremental_item(this.last_shown));\r
+ }\r
+\r
+ this.set_location();\r
+ this.add_class(this.slides[0], "first-slide");\r
+ w3c_slidy.show_slide(slide);\r
+ }\r
+\r
+ this.toc = this.table_of_contents();\r
+\r
+ this.add_initial_prompt();\r
+\r
+ // bind event handlers without interfering with custom page scripts\r
+ // Tap events behave too weirdly to support clicks reliably on\r
+ // iPhone and iPad, so exclude these from click handler\r
+\r
+ if (!this.keyboardless)\r
+ this.add_listener(document.body, "click", this.mouse_button_click);\r
+\r
+ this.add_listener(document, "keydown", this.key_down);\r
+ this.add_listener(document, "keypress", this.key_press);\r
+ this.add_listener(window, "resize", this.resized);\r
+ this.add_listener(window, "scroll", this.scrolled);\r
+ this.add_listener(window, "unload", this.unloaded);\r
+\r
+ if (!document.body.onclick)\r
+ document.body.onclick = function () { };\r
+\r
+ this.single_slide_view();\r
+\r
+ //this.set_location();\r
+\r
+ this.resized();\r
+\r
+ if (this.ie7)\r
+ setTimeout(w3c_slidy.ie_hack, 100);\r
+\r
+ this.show_toolbar();\r
+\r
+ // for back button detection\r
+ setInterval(function () { w3c_slidy.check_location(); }, 200);\r
+ w3c_slidy.initialized = true;\r
+ },\r
+\r
+ // create div element with links to each slide\r
+ table_of_contents: function () {\r
+ var toc = this.create_element("div");\r
+ this.add_class(toc, "slidy_toc hidden");\r
+ //toc.setAttribute("tabindex", "0");\r
+\r
+ var heading = this.create_element("div");\r
+ this.add_class(heading, "toc-heading");\r
+ heading.innerHTML = "Table of Contents".localize();\r
+\r
+ toc.appendChild(heading);\r
+ var previous = null;\r
+\r
+ for (var i = 0; i < this.slides.length; ++i)\r
+ {\r
+ var title = this.has_class(this.slides[i], "title");\r
+ var num = document.createTextNode((i + 1) + ". ");\r
+\r
+ toc.appendChild(num);\r
+\r
+ var a = this.create_element("a");\r
+ a.setAttribute("href", "#(" + (i+1) + ")");\r
+\r
+ if (title)\r
+ this.add_class(a, "titleslide");\r
+\r
+ var name = document.createTextNode(this.slide_name(i));\r
+ a.appendChild(name);\r
+ a.onclick = w3c_slidy.toc_click;\r
+ a.onkeydown = w3c_slidy.toc_keydown;\r
+ a.previous = previous;\r
+\r
+ if (previous)\r
+ previous.next = a;\r
+\r
+ toc.appendChild(a);\r
+\r
+ if (i == 0)\r
+ toc.first = a;\r
+\r
+ if (i < this.slides.length - 1)\r
+ {\r
+ var br = this.create_element("br");\r
+ toc.appendChild(br);\r
+ }\r
+\r
+ previous = a;\r
+ }\r
+\r
+ toc.focus = function () {\r
+ if (this.first)\r
+ this.first.focus();\r
+ }\r
+\r
+ toc.onmouseup = w3c_slidy.mouse_button_up;\r
+\r
+ toc.onclick = function (e) {\r
+ e||(e=window.event);\r
+\r
+ if (w3c_slidy.selected_text_len <= 0)\r
+ w3c_slidy.hide_table_of_contents();\r
+\r
+ w3c_slidy.stop_propagation(e);\r
+\r
+ if (e.cancel != undefined)\r
+ e.cancel = true;\r
+\r
+ if (e.returnValue != undefined)\r
+ e.returnValue = false;\r
+\r
+ return false;\r
+ };\r
+\r
+ document.body.insertBefore(toc, document.body.firstChild);\r
+ return toc;\r
+ },\r
+\r
+ is_shown_toc: function () {\r
+ return !w3c_slidy.has_class(w3c_slidy.toc, "hidden");\r
+ },\r
+\r
+ show_table_of_contents: function () {\r
+ w3c_slidy.remove_class(w3c_slidy.toc, "hidden");\r
+ var toc = w3c_slidy.toc;\r
+ toc.focus();\r
+\r
+ if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0)\r
+ setTimeout(w3c_slidy.ie_hack, 100);\r
+ },\r
+\r
+ hide_table_of_contents: function () {\r
+ w3c_slidy.add_class(w3c_slidy.toc, "hidden");\r
+\r
+ if (!w3c_slidy.opera)\r
+ w3c_slidy.help_anchor.focus();\r
+ },\r
+\r
+ toggle_table_of_contents: function () {\r
+ if (w3c_slidy.is_shown_toc())\r
+ w3c_slidy.hide_table_of_contents();\r
+ else\r
+ w3c_slidy.show_table_of_contents();\r
+ },\r
+\r
+ // called on clicking toc entry\r
+ toc_click: function (e) {\r
+ if (!e)\r
+ e = window.event;\r
+\r
+ var target = w3c_slidy.get_target(e);\r
+\r
+ if (target && target.nodeType == 1)\r
+ {\r
+ var uri = target.getAttribute("href");\r
+\r
+ if (uri)\r
+ {\r
+ //alert("going to " + uri);\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.last_shown = null;\r
+ w3c_slidy.set_location();\r
+ w3c_slidy.set_visibility_all_incremental("hidden");\r
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+ w3c_slidy.show_slide(slide);\r
+ //target.focus();\r
+\r
+ try\r
+ {\r
+ if (!w3c_slidy.opera)\r
+ w3c_slidy.help_anchor.focus();\r
+ }\r
+ catch (e)\r
+ {\r
+ }\r
+ }\r
+ }\r
+\r
+ w3c_slidy.hide_table_of_contents(e);\r
+ if (w3c_slidy.ie7) w3c_slidy.ie_hack();\r
+ w3c_slidy.stop_propagation(e);\r
+ return w3c_slidy.cancel(e);\r
+ },\r
+\r
+ // called onkeydown for toc entry\r
+ toc_keydown: function (event) {\r
+ var key;\r
+\r
+ if (!event)\r
+ var event = window.event;\r
+\r
+ // kludge around NS/IE differences\r
+ if (window.event)\r
+ key = window.event.keyCode;\r
+ else if (event.which)\r
+ key = event.which;\r
+ else\r
+ return true; // Yikes! unknown browser\r
+\r
+ // ignore event if key value is zero\r
+ // as for alt on Opera and Konqueror\r
+ if (!key)\r
+ return true;\r
+\r
+ // check for concurrent control/command/alt key\r
+ // but are these only present on mouse events?\r
+\r
+ if (event.ctrlKey || event.altKey)\r
+ return true;\r
+\r
+ if (key == 13)\r
+ {\r
+ var uri = this.getAttribute("href");\r
+\r
+ if (uri)\r
+ {\r
+ //alert("going to " + uri);\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.last_shown = null;\r
+ w3c_slidy.set_location();\r
+ w3c_slidy.set_visibility_all_incremental("hidden");\r
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+ w3c_slidy.show_slide(slide);\r
+ //target.focus();\r
+\r
+ try\r
+ {\r
+ if (!w3c_slidy.opera)\r
+ w3c_slidy.help_anchor.focus();\r
+ }\r
+ catch (e)\r
+ {\r
+ }\r
+ }\r
+\r
+ w3c_slidy.hide_table_of_contents();\r
+\r
+ if (self.ie7)\r
+ w3c_slidy.ie_hack();\r
+\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+\r
+ if (key == 40 && this.next)\r
+ {\r
+ this.next.focus();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+\r
+ if (key == 38 && this.previous)\r
+ {\r
+ this.previous.focus();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+\r
+ return true;\r
+ },\r
+\r
+\r
+ // ### OBSOLETE ###\r
+ before_print: function () {\r
+ this.show_all_slides();\r
+ this.hide_toolbar();\r
+ alert("before print");\r
+ },\r
+\r
+ // ### OBSOLETE ###\r
+ after_print: function () {\r
+ if (!this.view_all)\r
+ {\r
+ this.single_slide_view();\r
+ this.show_toolbar();\r
+ }\r
+ alert("after print");\r
+ },\r
+\r
+ // ### OBSOLETE ###\r
+ print_slides: function () {\r
+ this.before_print();\r
+ window.print();\r
+ this.after_print();\r
+ },\r
+\r
+ // ### OBSOLETE ?? ###\r
+ toggle_view: function () {\r
+ if (this.view_all)\r
+ {\r
+ this.single_slide_view();\r
+ this.show_toolbar();\r
+ this.view_all = 0;\r
+ }\r
+ else\r
+ {\r
+ this.show_all_slides();\r
+ this.hide_toolbar();\r
+ this.view_all = 1;\r
+ }\r
+ },\r
+\r
+ // prepare for printing ### OBSOLETE ###\r
+ show_all_slides: function () {\r
+ this.remove_class(document.body, "single_slide");\r
+ this.set_visibility_all_incremental("visible");\r
+ },\r
+\r
+ // restore after printing ### OBSOLETE ###\r
+ single_slide_view: function () {\r
+ this.add_class(document.body, "single_slide");\r
+ this.set_visibility_all_incremental("visible");\r
+ this.last_shown = this.previous_incremental_item(null);\r
+ },\r
+\r
+ // suppress IE's image toolbar pop up\r
+ hide_image_toolbar: function () {\r
+ if (!this.ns_pos)\r
+ {\r
+ var images = document.getElementsByTagName("IMG");\r
+\r
+ for (var i = 0; i < images.length; ++i)\r
+ images[i].setAttribute("galleryimg", "no");\r
+ }\r
+ },\r
+\r
+ unloaded: function (e) {\r
+ //alert("unloaded");\r
+ },\r
+\r
+ // Safari and Konqueror don't yet support getComputedStyle()\r
+ // and they always reload page when location.href is updated\r
+ is_KHTML: function () {\r
+ var agent = navigator.userAgent;\r
+ return (agent.indexOf("KHTML") >= 0 ? true : false);\r
+ },\r
+\r
+ // find slide name from first h1 element\r
+ // default to document title + slide number\r
+ slide_name: function (index) {\r
+ var name = null;\r
+ var slide = this.slides[index];\r
+\r
+ var heading = this.find_heading(slide);\r
+\r
+ if (heading)\r
+ name = this.extract_text(heading);\r
+\r
+ if (!name)\r
+ name = this.title + "(" + (index + 1) + ")";\r
+\r
+ name.replace(/\&/g, "&");\r
+ name.replace(/\</g, "<");\r
+ name.replace(/\>/g, ">");\r
+\r
+ return name;\r
+ },\r
+\r
+ // find first h1 element in DOM tree\r
+ find_heading: function (node) {\r
+ if (!node || node.nodeType != 1)\r
+ return null;\r
+\r
+ if (node.nodeName == "H1" || node.nodeName == "h1")\r
+ return node;\r
+\r
+ var child = node.firstChild;\r
+\r
+ while (child)\r
+ {\r
+ node = this.find_heading(child);\r
+\r
+ if (node)\r
+ return node;\r
+\r
+ child = child.nextSibling;\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ // recursively extract text from DOM tree\r
+ extract_text: function (node) {\r
+ if (!node)\r
+ return "";\r
+\r
+ // text nodes\r
+ if (node.nodeType == 3)\r
+ return node.nodeValue;\r
+\r
+ // elements\r
+ if (node.nodeType == 1)\r
+ {\r
+ node = node.firstChild;\r
+ var text = "";\r
+\r
+ while (node)\r
+ {\r
+ text = text + this.extract_text(node);\r
+ node = node.nextSibling;\r
+ }\r
+\r
+ return text;\r
+ }\r
+\r
+ return "";\r
+ },\r
+\r
+ // find copyright text from meta element\r
+ find_copyright: function () {\r
+ var name, content;\r
+ var meta = document.getElementsByTagName("meta");\r
+\r
+ for (var i = 0; i < meta.length; ++i)\r
+ {\r
+ name = meta[i].getAttribute("name");\r
+ content = meta[i].getAttribute("content");\r
+\r
+ if (name == "copyright")\r
+ return content;\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ find_size_adjust: function () {\r
+ var name, content, offset;\r
+ var meta = document.getElementsByTagName("meta");\r
+\r
+ for (var i = 0; i < meta.length; ++i)\r
+ {\r
+ name = meta[i].getAttribute("name");\r
+ content = meta[i].getAttribute("content");\r
+\r
+ if (name == "font-size-adjustment")\r
+ return 1 * content;\r
+ }\r
+\r
+ return 1;\r
+ },\r
+\r
+ // <meta name="duration" content="20" /> for 20 minutes\r
+ find_duration: function () {\r
+ var name, content, offset;\r
+ var meta = document.getElementsByTagName("meta");\r
+\r
+ for (var i = 0; i < meta.length; ++i)\r
+ {\r
+ name = meta[i].getAttribute("name");\r
+ content = meta[i].getAttribute("content");\r
+\r
+ if (name == "duration")\r
+ return 60000 * content;\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ replace_by_non_breaking_space: function (str) {\r
+ for (var i = 0; i < str.length; ++i)\r
+ str[i] = 160;\r
+ },\r
+\r
+ // ### CHECK ME ### is use of "li" okay for text/html?\r
+ // for XHTML do we also need to specify namespace?\r
+ init_outliner: function () {\r
+ var items = document.getElementsByTagName("li");\r
+\r
+ for (var i = 0; i < items.length; ++i)\r
+ {\r
+ var target = items[i];\r
+\r
+ if (!this.has_class(target.parentNode, "outline"))\r
+ continue;\r
+\r
+ target.onclick = this.outline_click;\r
+/* ### more work needed for IE6\r
+ if (!this.ns_pos)\r
+ {\r
+ target.onmouseover = this.hover_outline;\r
+ target.onmouseout = this.unhover_outline;\r
+ }\r
+*/\r
+ if (this.foldable(target))\r
+ {\r
+ target.foldable = true;\r
+ target.onfocus = function () {w3c_slidy.outline = this;};\r
+ target.onblur = function () {w3c_slidy.outline = null;};\r
+\r
+ if (!target.getAttribute("tabindex"))\r
+ target.setAttribute("tabindex", "0");\r
+\r
+ if (this.has_class(target, "expand"))\r
+ this.unfold(target);\r
+ else\r
+ this.fold(target);\r
+ }\r
+ else\r
+ {\r
+ this.add_class(target, "nofold");\r
+ target.visible = true;\r
+ target.foldable = false;\r
+ }\r
+ }\r
+ },\r
+\r
+ foldable: function (item) {\r
+ if (!item || item.nodeType != 1)\r
+ return false;\r
+\r
+ var node = item.firstChild;\r
+\r
+ while (node)\r
+ {\r
+ if (node.nodeType == 1 && this.is_block(node))\r
+ return true;\r
+\r
+ node = node.nextSibling;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ // ### CHECK ME ### switch to add/remove "hidden" class\r
+ fold: function (item) {\r
+ if (item)\r
+ {\r
+ this.remove_class(item, "unfolded");\r
+ this.add_class(item, "folded");\r
+ }\r
+\r
+ var node = item ? item.firstChild : null;\r
+\r
+ while (node)\r
+ {\r
+ if (node.nodeType == 1 && this.is_block(node)) // element\r
+ {\r
+ w3c_slidy.add_class(node, "hidden");\r
+ }\r
+\r
+ node = node.nextSibling;\r
+ }\r
+\r
+ item.visible = false;\r
+ },\r
+\r
+ // ### CHECK ME ### switch to add/remove "hidden" class\r
+ unfold: function (item) {\r
+ if (item)\r
+ {\r
+ this.add_class(item, "unfolded");\r
+ this.remove_class(item, "folded");\r
+ }\r
+\r
+ var node = item ? item.firstChild : null;\r
+\r
+ while (node)\r
+ {\r
+ if (node.nodeType == 1 && this.is_block(node)) // element\r
+ {\r
+ w3c_slidy.remove_class(node, "hidden");\r
+ }\r
+\r
+ node = node.nextSibling;\r
+ }\r
+\r
+ item.visible = true;\r
+ },\r
+\r
+ outline_click: function (e) {\r
+ if (!e)\r
+ e = window.event;\r
+\r
+ var rightclick = false;\r
+ var target = w3c_slidy.get_target(e);\r
+\r
+ while (target && target.visible == undefined)\r
+ target = target.parentNode;\r
+\r
+ if (!target)\r
+ return true;\r
+\r
+ if (e.which)\r
+ rightclick = (e.which == 3);\r
+ else if (e.button)\r
+ rightclick = (e.button == 2);\r
+\r
+ if (!rightclick && target.visible != undefined)\r
+ {\r
+ if (target.foldable)\r
+ {\r
+ if (target.visible)\r
+ w3c_slidy.fold(target);\r
+ else\r
+ w3c_slidy.unfold(target);\r
+ }\r
+\r
+ w3c_slidy.stop_propagation(e);\r
+ e.cancel = true;\r
+ e.returnValue = false;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ add_initial_prompt: function () {\r
+ var prompt = this.create_element("div");\r
+ prompt.setAttribute("class", "initial_prompt");\r
+\r
+ var p1 = this.create_element("p");\r
+ prompt.appendChild(p1);\r
+ p1.setAttribute("class", "help");\r
+\r
+ if (this.keyboardless)\r
+ p1.innerHTML = "Tap footer to move to next slide";\r
+ else\r
+ p1.innerHTML = "Space or Right Arrow to move to next " +\r
+ "slide, click help below for more details";\r
+\r
+ this.add_listener(prompt, "click", function (e) {\r
+ document.body.removeChild(prompt);\r
+ w3c_slidy.stop_propagation(e);\r
+\r
+ if (e.cancel != undefined)\r
+ e.cancel = true;\r
+\r
+ if (e.returnValue != undefined)\r
+ e.returnValue = false;\r
+\r
+ return false;\r
+ });\r
+\r
+ document.body.appendChild(prompt);\r
+ this.initial_prompt = prompt;\r
+ setTimeout(function() {document.body.removeChild(prompt);}, 5000);\r
+ },\r
+\r
+ add_toolbar: function () {\r
+ var counter, page;\r
+\r
+ this.toolbar = this.create_element("div");\r
+ this.toolbar.setAttribute("class", "toolbar");\r
+\r
+ // a reasonably behaved browser\r
+ if (this.ns_pos || !this.ie6)\r
+ {\r
+ var right = this.create_element("div");\r
+ right.setAttribute("style", "float: right; text-align: right");\r
+\r
+ counter = this.create_element("span")\r
+ counter.innerHTML = "slide".localize() + " n/m";\r
+ right.appendChild(counter);\r
+ this.toolbar.appendChild(right);\r
+\r
+ var left = this.create_element("div");\r
+ left.setAttribute("style", "text-align: left");\r
+\r
+ // global end of slide indicator\r
+ this.eos = this.create_element("span");\r
+ this.eos.innerHTML = "* ";\r
+ left.appendChild(this.eos);\r
+\r
+ var help = this.create_element("a");\r
+ help.setAttribute("href", this.help_page);\r
+ help.setAttribute("title", this.help_text.localize());\r
+ help.innerHTML = "help?".localize();\r
+ left.appendChild(help);\r
+ this.help_anchor = help; // save for focus hack\r
+\r
+ var gap1 = document.createTextNode(" ");\r
+ left.appendChild(gap1);\r
+\r
+ var contents = this.create_element("a");\r
+ contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()");\r
+ contents.setAttribute("title", "table of contents".localize());\r
+ contents.innerHTML = "contents?".localize();\r
+ left.appendChild(contents);\r
+\r
+ var gap2 = document.createTextNode(" ");\r
+ left.appendChild(gap2);\r
+\r
+ var copyright = this.find_copyright();\r
+\r
+ if (copyright)\r
+ {\r
+ var span = this.create_element("span");\r
+ span.className = "copyright";\r
+ span.innerHTML = copyright;\r
+ left.appendChild(span);\r
+ }\r
+\r
+ this.toolbar.setAttribute("tabindex", "0");\r
+ this.toolbar.appendChild(left);\r
+ }\r
+ else // IE6 so need to work around its poor CSS support\r
+ {\r
+ this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute");\r
+ this.toolbar.style.zIndex = "200";\r
+ this.toolbar.style.width = "99.9%";\r
+ this.toolbar.style.height = "1.2em";\r
+ this.toolbar.style.top = "auto";\r
+ this.toolbar.style.bottom = "0";\r
+ this.toolbar.style.left = "0";\r
+ this.toolbar.style.right = "0";\r
+ this.toolbar.style.textAlign = "left";\r
+ this.toolbar.style.fontSize = "60%";\r
+ this.toolbar.style.color = "red";\r
+ this.toolbar.borderWidth = 0;\r
+ this.toolbar.className = "toolbar";\r
+ this.toolbar.style.background = "rgb(240,240,240)";\r
+\r
+ // would like to have help text left aligned\r
+ // and page counter right aligned, floating\r
+ // div's don't work, so instead use nested\r
+ // absolutely positioned div's.\r
+\r
+ var sp = this.create_element("span");\r
+ sp.innerHTML = " * ";\r
+ this.toolbar.appendChild(sp);\r
+ this.eos = sp; // end of slide indicator\r
+\r
+ var help = this.create_element("a");\r
+ help.setAttribute("href", this.help_page);\r
+ help.setAttribute("title", this.help_text.localize());\r
+ help.innerHTML = "help?".localize();\r
+ this.toolbar.appendChild(help);\r
+ this.help_anchor = help; // save for focus hack\r
+\r
+ var gap1 = document.createTextNode(" ");\r
+ this.toolbar.appendChild(gap1);\r
+\r
+ var contents = this.create_element("a");\r
+ contents.setAttribute("href", "javascript:toggleTableOfContents()");\r
+ contents.setAttribute("title", "table of contents".localize());\r
+ contents.innerHTML = "contents?".localize();\r
+ this.toolbar.appendChild(contents);\r
+\r
+ var gap2 = document.createTextNode(" ");\r
+ this.toolbar.appendChild(gap2);\r
+\r
+ var copyright = this.find_copyright();\r
+\r
+ if (copyright)\r
+ {\r
+ var span = this.create_element("span");\r
+ span.innerHTML = copyright;\r
+ span.style.color = "black";\r
+ span.style.marginLeft = "0.5em";\r
+ this.toolbar.appendChild(span);\r
+ }\r
+\r
+ counter = this.create_element("div")\r
+ counter.style.position = "absolute";\r
+ counter.style.width = "auto"; //"20%";\r
+ counter.style.height = "1.2em";\r
+ counter.style.top = "auto";\r
+ counter.style.bottom = 0;\r
+ counter.style.right = "0";\r
+ counter.style.textAlign = "right";\r
+ counter.style.color = "red";\r
+ counter.style.background = "rgb(240,240,240)";\r
+\r
+ counter.innerHTML = "slide".localize() + " n/m";\r
+ this.toolbar.appendChild(counter);\r
+ }\r
+\r
+ // ensure that click isn't passed through to the page\r
+ this.toolbar.onclick =\r
+ function (e) {\r
+ if (!e)\r
+ e = window.event;\r
+\r
+ var target = e.target;\r
+\r
+ if (!target && e.srcElement)\r
+ target = e.srcElement;\r
+\r
+ // work around Safari bug\r
+ if (target && target.nodeType == 3)\r
+ target = target.parentNode;\r
+\r
+ w3c_slidy.stop_propagation(e);\r
+\r
+ if (target && target.nodeName.toLowerCase() != "a")\r
+ w3c_slidy.mouse_button_click(e);\r
+ };\r
+\r
+ this.slide_number_element = counter;\r
+ this.set_eos_status(false);\r
+ document.body.appendChild(this.toolbar);\r
+ },\r
+\r
+ // wysiwyg editors make it hard to use div elements\r
+ // e.g. amaya loses the div when you copy and paste\r
+ // this function wraps div elements around implicit\r
+ // slides which start with an h1 element and continue\r
+ // up to the next heading or div element\r
+ wrap_implicit_slides: function () {\r
+ var i, heading, node, next, div;\r
+ var headings = document.getElementsByTagName("h1");\r
+\r
+ if (!headings)\r
+ return;\r
+\r
+ for (i = 0; i < headings.length; ++i)\r
+ {\r
+ heading = headings[i];\r
+\r
+ if (heading.parentNode != document.body)\r
+ continue;\r
+\r
+ node = heading.nextSibling;\r
+\r
+ div = document.createElement("div");\r
+ this.add_class(div, "slide");\r
+ document.body.replaceChild(div, heading);\r
+ div.appendChild(heading);\r
+\r
+ while (node)\r
+ {\r
+ if (node.nodeType == 1 && // an element\r
+ (node.nodeName == "H1" ||\r
+ node.nodeName == "h1" ||\r
+ node.nodeName == "DIV" ||\r
+ node.nodeName == "div"))\r
+ break;\r
+\r
+ next = node.nextSibling;\r
+ node = document.body.removeChild(node);\r
+ div.appendChild(node);\r
+ node = next;\r
+ }\r
+ }\r
+ },\r
+\r
+// return new array of all slides\r
+ collect_slides: function () {\r
+ var slides = new Array();\r
+ var divs = document.body.getElementsByTagName("div");\r
+\r
+ for (var i = 0; i < divs.length; ++i)\r
+ {\r
+ div = divs.item(i);\r
+\r
+ if (this.has_class(div, "slide"))\r
+ {\r
+ // add slide to collection\r
+ slides[slides.length] = div;\r
+\r
+ // hide each slide as it is found\r
+ this.add_class(div, "hidden");\r
+\r
+ // add dummy <br/> at end for scrolling hack\r
+ var node1 = document.createElement("br");\r
+ div.appendChild(node1);\r
+ var node2 = document.createElement("br");\r
+ div.appendChild(node2);\r
+ }\r
+ else if (this.has_class(div, "background"))\r
+ { // work around for Firefox SVG reload bug\r
+ // which otherwise replaces 1st SVG graphic with 2nd\r
+ div.style.display = "block";\r
+ }\r
+ }\r
+\r
+ this.slides = slides;\r
+ },\r
+\r
+ // return new array of all <div class="handout">\r
+ collect_notes: function () {\r
+ var notes = new Array();\r
+ var divs = document.body.getElementsByTagName("div");\r
+\r
+ for (var i = 0; i < divs.length; ++i)\r
+ {\r
+ div = divs.item(i);\r
+\r
+ if (this.has_class(div, "handout"))\r
+ {\r
+ // add note to collection\r
+ notes[notes.length] = div;\r
+\r
+ // and hide it\r
+ this.add_class(div, "hidden");\r
+ }\r
+ }\r
+\r
+ this.notes = notes;\r
+ },\r
+\r
+ // return new array of all <div class="background">\r
+ // including named backgrounds e.g. class="background titlepage"\r
+ collect_backgrounds: function () {\r
+ var backgrounds = new Array();\r
+ var divs = document.body.getElementsByTagName("div");\r
+\r
+ for (var i = 0; i < divs.length; ++i)\r
+ {\r
+ div = divs.item(i);\r
+\r
+ if (this.has_class(div, "background"))\r
+ {\r
+ // add background to collection\r
+ backgrounds[backgrounds.length] = div;\r
+\r
+ // and hide it\r
+ this.add_class(div, "hidden");\r
+ }\r
+ }\r
+\r
+ this.backgrounds = backgrounds;\r
+ },\r
+\r
+ // set click handlers on all anchors\r
+ patch_anchors: function () {\r
+ var self = w3c_slidy;\r
+ var handler = function (event) {\r
+ // compare this.href with location.href\r
+ // for link to another slide in this doc\r
+\r
+ if (self.page_address(this.href) == self.page_address(location.href))\r
+ {\r
+ // yes, so find new slide number\r
+ var newslidenum = self.find_slide_number(this.href);\r
+\r
+ if (newslidenum != self.slide_number)\r
+ {\r
+ var slide = self.slides[self.slide_number];\r
+ self.hide_slide(slide);\r
+ self.slide_number = newslidenum;\r
+ slide = self.slides[self.slide_number];\r
+ self.show_slide(slide);\r
+ self.set_location();\r
+ }\r
+ }\r
+ else if (this.target == null)\r
+ location.href = this.href;\r
+\r
+ this.blur();\r
+ self.disable_slide_click = true;\r
+ };\r
+\r
+ var anchors = document.body.getElementsByTagName("a");\r
+\r
+ for (var i = 0; i < anchors.length; ++i)\r
+ {\r
+ if (window.addEventListener)\r
+ anchors[i].addEventListener("click", handler, false);\r
+ else\r
+ anchors[i].attachEvent("onclick", handler);\r
+ }\r
+ },\r
+\r
+ // ### CHECK ME ### see which functions are invoked via setTimeout\r
+ // either directly or indirectly for use of w3c_slidy vs this\r
+ show_slide_number: function () {\r
+ var timer = w3c_slidy.get_timer();\r
+ w3c_slidy.slide_number_element.innerHTML = timer + "slide".localize() + " " +\r
+ (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length;\r
+ },\r
+\r
+ // every 200mS check if the location has been changed as a\r
+ // result of the user activating the Back button/menu item\r
+ // doesn't work for Opera < 9.5\r
+ check_location: function () {\r
+ var hash = location.hash;\r
+\r
+ if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#"))\r
+ w3c_slidy.goto_slide(0);\r
+ else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")")\r
+ {\r
+ var num = parseInt(location.hash.substr(2));\r
+\r
+ if (!isNaN(num))\r
+ w3c_slidy.goto_slide(num-1);\r
+ }\r
+\r
+ if (w3c_slidy.time_left && w3c_slidy.slide_number > 0)\r
+ {\r
+ w3c_slidy.show_slide_number();\r
+\r
+ if (w3c_slidy.time_left > 0)\r
+ w3c_slidy.time_left -= 200;\r
+ }\r
+ },\r
+\r
+ get_timer: function () {\r
+ var timer = "";\r
+ if (w3c_slidy.time_left)\r
+ {\r
+ var mins, secs;\r
+ secs = Math.floor(w3c_slidy.time_left/1000);\r
+ mins = Math.floor(secs / 60);\r
+ secs = secs % 60;\r
+ timer = (mins ? mins+"m" : "") + secs + "s ";\r
+ }\r
+\r
+ return timer;\r
+ },\r
+\r
+ // this doesn't push location onto history stack for IE\r
+ // for which a hidden iframe hack is needed: load page into\r
+ // the iframe with script that set's parent's location.hash\r
+ // but that won't work for standalone use unless we can\r
+ // create the page dynamically via a javascript: URL\r
+ set_location: function () {\r
+ var uri = w3c_slidy.page_address(location.href);\r
+ var hash = "#(" + (w3c_slidy.slide_number+1) + ")";\r
+\r
+ if (w3c_slidy.slide_number >= 0)\r
+ uri = uri + hash;\r
+\r
+ if (w3c_slidy.ie && !w3c_slidy.ie8)\r
+ w3c_slidy.push_hash(hash);\r
+\r
+ if (uri != location.href) // && !khtml\r
+ location.href = uri;\r
+\r
+ if (this.khtml)\r
+ hash = "(" + (w3c_slidy.slide_number+1) + ")";\r
+\r
+ if (!this.ie && location.hash != hash && location.hash != "")\r
+ location.hash = hash;\r
+\r
+ document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";\r
+ w3c_slidy.show_slide_number();\r
+ },\r
+\r
+ page_address: function (uri) {\r
+ var i = uri.indexOf("#");\r
+\r
+ if (i < 0)\r
+ i = uri.indexOf("%23");\r
+\r
+ // check if anchor is entire page\r
+\r
+ if (i < 0)\r
+ return uri; // yes\r
+\r
+ return uri.substr(0, i);\r
+ },\r
+\r
+ // only used for IE6 and IE7\r
+ on_frame_loaded: function (hash) {\r
+ location.hash = hash;\r
+ var uri = w3c_slidy.page_address(location.href);\r
+ location.href = uri + hash;\r
+ },\r
+\r
+ // history hack with thanks to Bertrand Le Roy\r
+ push_hash: function (hash) {\r
+ if (hash == "") hash = "#(1)";\r
+ window.location.hash = hash;\r
+\r
+ var doc = document.getElementById("historyFrame").contentWindow.document;\r
+ doc.open("javascript:'<html></html>'");\r
+ // PWL modified this string literal to break the close script tag\r
+ // which otherwise gets parsed when incorporated\r
+ doc.write("<html><head><script type=\"text/javascript\">window.parent.w3c_slidy.on_frame_loaded('"+\r
+ (hash) + "');</" + "script></head><body>hello mum</body></html>");\r
+ doc.close();\r
+ },\r
+\r
+ // find current slide based upon location\r
+ // first find target anchor and then look\r
+ // for associated div element enclosing it\r
+ // finally map that to slide number\r
+ find_slide_number: function (uri) {\r
+ // first get anchor from page location\r
+\r
+ var i = uri.indexOf("#");\r
+\r
+ // check if anchor is entire page\r
+ if (i < 0)\r
+ return 0; // yes\r
+\r
+ var anchor = unescape(uri.substr(i+1));\r
+\r
+ // now use anchor as XML ID to find target\r
+ var target = document.getElementById(anchor);\r
+\r
+ if (!target)\r
+ {\r
+ // does anchor look like "(2)" for slide 2 ??\r
+ // where first slide is (1)\r
+ var re = /\((\d)+\)/;\r
+\r
+ if (anchor.match(re))\r
+ {\r
+ var num = parseInt(anchor.substring(1, anchor.length-1));\r
+\r
+ if (num > this.slides.length)\r
+ num = 1;\r
+\r
+ if (--num < 0)\r
+ num = 0;\r
+\r
+ return num;\r
+ }\r
+\r
+ // accept [2] for backwards compatibility\r
+ re = /\[(\d)+\]/;\r
+\r
+ if (anchor.match(re))\r
+ {\r
+ var num = parseInt(anchor.substring(1, anchor.length-1));\r
+\r
+ if (num > this.slides.length)\r
+ num = 1;\r
+\r
+ if (--num < 0)\r
+ num = 0;\r
+\r
+ return num;\r
+ }\r
+\r
+ // oh dear unknown anchor\r
+ return 0;\r
+ }\r
+\r
+ // search for enclosing slide\r
+\r
+ while (true)\r
+ {\r
+ // browser coerces html elements to uppercase!\r
+ if (target.nodeName.toLowerCase() == "div" &&\r
+ this.has_class(target, "slide"))\r
+ {\r
+ // found the slide element\r
+ break;\r
+ }\r
+\r
+ // otherwise try parent element if any\r
+\r
+ target = target.parentNode;\r
+\r
+ if (!target)\r
+ {\r
+ return 0; // no luck!\r
+ }\r
+ };\r
+\r
+ for (i = 0; i < slides.length; ++i)\r
+ {\r
+ if (slides[i] == target)\r
+ return i; // success\r
+ }\r
+\r
+ // oh dear still no luck\r
+ return 0;\r
+ },\r
+\r
+ previous_slide: function (incremental) {\r
+ if (!w3c_slidy.view_all)\r
+ {\r
+ var slide;\r
+\r
+ if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null)\r
+ {\r
+ w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown);\r
+ w3c_slidy.set_eos_status(false);\r
+ }\r
+ else if (w3c_slidy.slide_number > 0)\r
+ {\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+\r
+ w3c_slidy.slide_number = w3c_slidy.slide_number - 1;\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.set_visibility_all_incremental("visible");\r
+ w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\r
+ w3c_slidy.set_eos_status(true);\r
+ w3c_slidy.show_slide(slide);\r
+ }\r
+\r
+ w3c_slidy.set_location();\r
+\r
+ if (!w3c_slidy.ns_pos)\r
+ w3c_slidy.refresh_toolbar(200);\r
+ }\r
+ },\r
+\r
+ next_slide: function (incremental) {\r
+ if (!w3c_slidy.view_all)\r
+ {\r
+ var slide, last = w3c_slidy.last_shown;\r
+\r
+ if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1)\r
+ w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown);\r
+\r
+ if ((!incremental || w3c_slidy.last_shown == null) &&\r
+ w3c_slidy.slide_number < w3c_slidy.slides.length - 1)\r
+ {\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+\r
+ w3c_slidy.slide_number = w3c_slidy.slide_number + 1;\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.last_shown = null;\r
+ w3c_slidy.set_visibility_all_incremental("hidden");\r
+ w3c_slidy.show_slide(slide);\r
+ }\r
+ else if (!w3c_slidy.last_shown)\r
+ {\r
+ if (last && incremental)\r
+ w3c_slidy.last_shown = last;\r
+ }\r
+\r
+ w3c_slidy.set_location();\r
+\r
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+\r
+ if (!w3c_slidy.ns_pos)\r
+ w3c_slidy.refresh_toolbar(200);\r
+ }\r
+ },\r
+\r
+ // to first slide with nothing revealed\r
+ // i.e. state at start of presentation\r
+ first_slide: function () {\r
+ if (!w3c_slidy.view_all)\r
+ {\r
+ var slide;\r
+\r
+ if (w3c_slidy.slide_number != 0)\r
+ {\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+\r
+ w3c_slidy.slide_number = 0;\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.last_shown = null;\r
+ w3c_slidy.set_visibility_all_incremental("hidden");\r
+ w3c_slidy.show_slide(slide);\r
+ }\r
+\r
+ w3c_slidy.set_eos_status(\r
+ !w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+ w3c_slidy.set_location();\r
+ }\r
+ },\r
+\r
+ // goto last slide with everything revealed\r
+ // i.e. state at end of presentation\r
+ last_slide: function () {\r
+ if (!w3c_slidy.view_all)\r
+ {\r
+ var slide;\r
+\r
+ w3c_slidy.last_shown = null; //revealNextItem(lastShown);\r
+\r
+ if (w3c_slidy.last_shown == null &&\r
+ w3c_slidy.slide_number < w3c_slidy.slides.length - 1)\r
+ {\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.slide_number = w3c_slidy.slides.length - 1;\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.set_visibility_all_incremental("visible");\r
+ w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\r
+\r
+ w3c_slidy.show_slide(slide);\r
+ }\r
+ else\r
+ {\r
+ w3c_slidy.set_visibility_all_incremental("visible");\r
+ w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\r
+ }\r
+\r
+ w3c_slidy.set_eos_status(true);\r
+ w3c_slidy.set_location();\r
+ }\r
+ },\r
+\r
+\r
+ // ### check this and consider add/remove class\r
+ set_eos_status: function (state) {\r
+ if (this.eos)\r
+ this.eos.style.color = (state ? "rgb(240,240,240)" : "red");\r
+ },\r
+\r
+ // first slide is 0\r
+ goto_slide: function (num) {\r
+ //alert("going to slide " + (num+1));\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.slide_number = num;\r
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.last_shown = null;\r
+ w3c_slidy.set_visibility_all_incremental("hidden");\r
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+ document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";\r
+ w3c_slidy.show_slide(slide);\r
+ w3c_slidy.show_slide_number();\r
+ },\r
+\r
+\r
+ show_slide: function (slide) {\r
+ this.sync_background(slide);\r
+ window.scrollTo(0,0);\r
+ this.remove_class(slide, "hidden");\r
+ },\r
+\r
+ hide_slide: function (slide) {\r
+ this.add_class(slide, "hidden");\r
+ },\r
+\r
+ // show just the backgrounds pertinent to this slide\r
+ // when slide background-color is transparent\r
+ // this should now work with rgba color values\r
+ sync_background: function (slide) {\r
+ var background;\r
+ var bgColor;\r
+\r
+ if (slide.currentStyle)\r
+ bgColor = slide.currentStyle["backgroundColor"];\r
+ else if (document.defaultView)\r
+ {\r
+ var styles = document.defaultView.getComputedStyle(slide,null);\r
+\r
+ if (styles)\r
+ bgColor = styles.getPropertyValue("background-color");\r
+ else // broken implementation probably due Safari or Konqueror\r
+ {\r
+ //alert("defective implementation of getComputedStyle()");\r
+ bgColor = "transparent";\r
+ }\r
+ }\r
+ else\r
+ bgColor == "transparent";\r
+\r
+ if (bgColor == "transparent" ||\r
+ bgColor.indexOf("rgba") >= 0 ||\r
+ bgColor.indexOf("opacity") >= 0)\r
+ {\r
+ var slideClass = this.get_class_list(slide);\r
+\r
+ for (var i = 0; i < this.backgrounds.length; i++)\r
+ {\r
+ background = this.backgrounds[i];\r
+\r
+ var bgClass = this.get_class_list(background);\r
+\r
+ if (this.matching_background(slideClass, bgClass))\r
+ this.remove_class(background, "hidden");\r
+ else\r
+ this.add_class(background, "hidden");\r
+ }\r
+ }\r
+ else // forcibly hide all backgrounds\r
+ this.hide_backgrounds();\r
+ },\r
+\r
+ hide_backgrounds: function () {\r
+ for (var i = 0; i < this.backgrounds.length; i++)\r
+ {\r
+ background = this.backgrounds[i];\r
+ this.add_class(background, "hidden");\r
+ }\r
+ },\r
+\r
+ // compare classes for slide and background\r
+ matching_background: function (slideClass, bgClass) {\r
+ var i, count, pattern, result;\r
+\r
+ // define pattern as regular expression\r
+ pattern = /\w+/g;\r
+\r
+ // check background class names\r
+ result = bgClass.match(pattern);\r
+\r
+ for (i = count = 0; i < result.length; i++)\r
+ {\r
+ if (result[i] == "hidden")\r
+ continue;\r
+\r
+ if (result[i] == "background")\r
+ continue;\r
+\r
+ ++count;\r
+ }\r
+\r
+ if (count == 0) // default match\r
+ return true;\r
+\r
+ // check for matches and place result in array\r
+ result = slideClass.match(pattern);\r
+\r
+ // now check if desired name is present for background\r
+ for (i = count = 0; i < result.length; i++)\r
+ {\r
+ if (result[i] == "hidden")\r
+ continue;\r
+\r
+ if (this.has_token(bgClass, result[i]))\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ resized: function () {\r
+ var width = 0;\r
+\r
+ if ( typeof( window.innerWidth ) == 'number' )\r
+ width = window.innerWidth; // Non IE browser\r
+ else if (document.documentElement && document.documentElement.clientWidth)\r
+ width = document.documentElement.clientWidth; // IE6\r
+ else if (document.body && document.body.clientWidth)\r
+ width = document.body.clientWidth; // IE4\r
+\r
+ var height = 0;\r
+\r
+ if ( typeof( window.innerHeight ) == 'number' )\r
+ height = window.innerHeight; // Non IE browser\r
+ else if (document.documentElement && document.documentElement.clientHeight)\r
+ height = document.documentElement.clientHeight; // IE6\r
+ else if (document.body && document.body.clientHeight)\r
+ height = document.body.clientHeight; // IE4\r
+\r
+ if (height && (width/height > 1.05*1024/768))\r
+ {\r
+ width = height * 1024.0/768;\r
+ }\r
+\r
+ // IE fires onresize even when only font size is changed!\r
+ // so we do a check to avoid blocking < and > actions\r
+ if (width != w3c_slidy.last_width || height != w3c_slidy.last_height)\r
+ {\r
+ if (width >= 1100)\r
+ w3c_slidy.size_index = 5; // 4\r
+ else if (width >= 1000)\r
+ w3c_slidy.size_index = 4; // 3\r
+ else if (width >= 800)\r
+ w3c_slidy.size_index = 3; // 2\r
+ else if (width >= 600)\r
+ w3c_slidy.size_index = 2; // 1\r
+ else if (width)\r
+ w3c_slidy.size_index = 0;\r
+\r
+ // add in font size adjustment from meta element e.g.\r
+ // <meta name="font-size-adjustment" content="-2" />\r
+ // useful when slides have too much content ;-)\r
+\r
+ if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment &&\r
+ w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length)\r
+ w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment;\r
+\r
+ // enables cross browser use of relative width/height\r
+ // on object elements for use with SVG and Flash media\r
+ w3c_slidy.adjust_object_dimensions(width, height);\r
+\r
+ if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index])\r
+ {\r
+ document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\r
+ }\r
+\r
+ w3c_slidy.last_width = width;\r
+ w3c_slidy.last_height = height;\r
+\r
+ // force reflow to work around Mozilla bug\r
+ if (w3c_slidy.ns_pos)\r
+ {\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.show_slide(slide);\r
+ }\r
+\r
+ // force correct positioning of toolbar\r
+ w3c_slidy.refresh_toolbar(200);\r
+ }\r
+ },\r
+\r
+ scrolled: function () {\r
+ if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7)\r
+ {\r
+ w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset();\r
+ // hide toolbar\r
+ w3c_slidy.toolbar.style.display = "none";\r
+\r
+ // make it reappear later\r
+ if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all)\r
+ {\r
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000);\r
+ w3c_slidy.scrollhack = 1;\r
+ }\r
+ }\r
+ },\r
+\r
+ hide_toolbar: function () {\r
+ w3c_slidy.add_class(w3c_slidy.toolbar, "hidden");\r
+ window.focus();\r
+ },\r
+\r
+ // used to ensure IE refreshes toolbar in correct position\r
+ refresh_toolbar: function (interval) {\r
+ if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)\r
+ {\r
+ w3c_slidy.hide_toolbar();\r
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, interval);\r
+ }\r
+ },\r
+\r
+ // restores toolbar after short delay\r
+ show_toolbar: function () {\r
+ if (w3c_slidy.want_toolbar)\r
+ {\r
+ w3c_slidy.toolbar.style.display = "block";\r
+\r
+ if (!w3c_slidy.ns_pos)\r
+ {\r
+ // adjust position to allow for scrolling\r
+ var xoffset = w3c_slidy.scroll_x_offset();\r
+ w3c_slidy.toolbar.style.left = xoffset;\r
+ w3c_slidy.toolbar.style.right = xoffset;\r
+\r
+ // determine vertical scroll offset\r
+ //var yoffset = scrollYOffset();\r
+\r
+ // bottom is doc height - window height - scroll offset\r
+ //var bottom = documentHeight() - lastHeight - yoffset\r
+\r
+ //if (yoffset > 0 || documentHeight() > lastHeight)\r
+ // bottom += 16; // allow for height of scrollbar\r
+\r
+ w3c_slidy.toolbar.style.bottom = 0; //bottom;\r
+ }\r
+\r
+ w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden");\r
+ }\r
+\r
+ w3c_slidy.scrollhack = 0;\r
+\r
+\r
+ // set the keyboard focus to the help link on the\r
+ // toolbar to ensure that document has the focus\r
+ // IE doesn't always work with window.focus()\r
+ // and this hack has benefit of Enter for help\r
+\r
+ try\r
+ {\r
+ if (!w3c_slidy.opera)\r
+ w3c_slidy.help_anchor.focus();\r
+ }\r
+ catch (e)\r
+ {\r
+ }\r
+ },\r
+\r
+// invoked via F key\r
+ toggle_toolbar: function () {\r
+ if (!w3c_slidy.view_all)\r
+ {\r
+ if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden"))\r
+ {\r
+ w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden")\r
+ w3c_slidy.want_toolbar = 1;\r
+ }\r
+ else\r
+ {\r
+ w3c_slidy.add_class(w3c_slidy.toolbar, "hidden")\r
+ w3c_slidy.want_toolbar = 0;\r
+ }\r
+ }\r
+ },\r
+\r
+ scroll_x_offset: function () {\r
+ if (window.pageXOffset)\r
+ return self.pageXOffset;\r
+\r
+ if (document.documentElement &&\r
+ document.documentElement.scrollLeft)\r
+ return document.documentElement.scrollLeft;\r
+\r
+ if (document.body)\r
+ return document.body.scrollLeft;\r
+\r
+ return 0;\r
+ },\r
+\r
+ scroll_y_offset: function () {\r
+ if (window.pageYOffset)\r
+ return self.pageYOffset;\r
+\r
+ if (document.documentElement &&\r
+ document.documentElement.scrollTop)\r
+ return document.documentElement.scrollTop;\r
+\r
+ if (document.body)\r
+ return document.body.scrollTop;\r
+\r
+ return 0;\r
+ },\r
+\r
+ // looking for a way to determine height of slide content\r
+ // the slide itself is set to the height of the window\r
+ optimize_font_size: function () {\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+\r
+ //var dh = documentHeight(); //getDocHeight(document);\r
+ var dh = slide.scrollHeight;\r
+ var wh = getWindowHeight();\r
+ var u = 100 * dh / wh;\r
+\r
+ alert("window utilization = " + u + "% (doc "\r
+ + dh + " win " + wh + ")");\r
+ },\r
+\r
+ // from document object\r
+ get_doc_height: function (doc) {\r
+ if (!doc)\r
+ doc = document;\r
+\r
+ if (doc && doc.body && doc.body.offsetHeight)\r
+ return doc.body.offsetHeight; // ns/gecko syntax\r
+\r
+ if (doc && doc.body && doc.body.scrollHeight)\r
+ return doc.body.scrollHeight;\r
+\r
+ alert("couldn't determine document height");\r
+ },\r
+\r
+ get_window_height: function () {\r
+ if ( typeof( window.innerHeight ) == 'number' )\r
+ return window.innerHeight; // Non IE browser\r
+\r
+ if (document.documentElement && document.documentElement.clientHeight)\r
+ return document.documentElement.clientHeight; // IE6\r
+\r
+ if (document.body && document.body.clientHeight)\r
+ return document.body.clientHeight; // IE4\r
+ },\r
+\r
+ document_height: function () {\r
+ var sh, oh;\r
+\r
+ sh = document.body.scrollHeight;\r
+ oh = document.body.offsetHeight;\r
+\r
+ if (sh && oh)\r
+ {\r
+ return (sh > oh ? sh : oh);\r
+ }\r
+\r
+ // no idea!\r
+ return 0;\r
+ },\r
+\r
+ smaller: function () {\r
+ if (w3c_slidy.size_index > 0)\r
+ {\r
+ --w3c_slidy.size_index;\r
+ }\r
+\r
+ w3c_slidy.toolbar.style.display = "none";\r
+ document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.show_slide(slide);\r
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);\r
+ },\r
+\r
+ bigger: function () {\r
+ if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1)\r
+ {\r
+ ++w3c_slidy.size_index;\r
+ }\r
+\r
+ w3c_slidy.toolbar.style.display = "none";\r
+ document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+ w3c_slidy.hide_slide(slide);\r
+ w3c_slidy.show_slide(slide);\r
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);\r
+ },\r
+\r
+ // enables cross browser use of relative width/height\r
+ // on object elements for use with SVG and Flash media\r
+ // with thanks to Ivan Herman for the suggestion\r
+ adjust_object_dimensions: function (width, height) {\r
+ for( var i = 0; i < w3c_slidy.objects.length; i++ )\r
+ {\r
+ var obj = this.objects[i];\r
+ var mimeType = obj.getAttribute("type");\r
+\r
+ if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")\r
+ {\r
+ if ( !obj.initialWidth )\r
+ obj.initialWidth = obj.getAttribute("width");\r
+\r
+ if ( !obj.initialHeight )\r
+ obj.initialHeight = obj.getAttribute("height");\r
+\r
+ if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )\r
+ {\r
+ var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));\r
+ var newW = width * (w/100.0);\r
+ obj.setAttribute("width",newW);\r
+ }\r
+\r
+ if ( obj.initialHeight &&\r
+ obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )\r
+ {\r
+ var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));\r
+ var newH = height * (h/100.0);\r
+ obj.setAttribute("height", newH);\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ // needed for Opera to inhibit default behavior\r
+ // since Opera delivers keyPress even if keyDown\r
+ // was cancelled\r
+ key_press: function (event) {\r
+ if (!event)\r
+ event = window.event;\r
+\r
+ if (!w3c_slidy.key_wanted)\r
+ return w3c_slidy.cancel(event);\r
+\r
+ return true;\r
+ },\r
+\r
+ // See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes\r
+ key_down: function (event) {\r
+ var key;\r
+\r
+ w3c_slidy.key_wanted = true;\r
+\r
+ if (!event)\r
+ event = window.event;\r
+\r
+ // kludge around NS/IE differences\r
+ if (window.event)\r
+ key = window.event.keyCode;\r
+ else if (event.which)\r
+ key = event.which;\r
+ else\r
+ return true; // Yikes! unknown browser\r
+\r
+ // ignore event if key value is zero\r
+ // as for alt on Opera and Konqueror\r
+ if (!key)\r
+ return true;\r
+\r
+ // check for concurrent control/command/alt key\r
+ // but are these only present on mouse events?\r
+\r
+ if (event.ctrlKey || event.altKey || event.metaKey)\r
+ return true;\r
+\r
+ // dismiss table of contents if visible\r
+ if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40)\r
+ {\r
+ w3c_slidy.hide_table_of_contents();\r
+\r
+ if (key == 27 || key == 84 || key == 67)\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+\r
+ if (key == 34) // Page Down\r
+ {\r
+ if (w3c_slidy.view_all)\r
+ return true;\r
+\r
+ w3c_slidy.next_slide(false);\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 33) // Page Up\r
+ {\r
+ if (w3c_slidy.view_all)\r
+ return true;\r
+\r
+ w3c_slidy.previous_slide(false);\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 32) // space bar\r
+ {\r
+ w3c_slidy.next_slide(true);\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 37) // Left arrow\r
+ {\r
+ w3c_slidy.previous_slide(!event.shiftKey);\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 36) // Home\r
+ {\r
+ w3c_slidy.first_slide();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 35) // End\r
+ {\r
+ w3c_slidy.last_slide();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 39) // Right arrow\r
+ {\r
+ w3c_slidy.next_slide(!event.shiftKey);\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 13) // Enter\r
+ {\r
+ if (w3c_slidy.outline)\r
+ {\r
+ if (w3c_slidy.outline.visible)\r
+ w3c_slidy.fold(w3c_slidy.outline);\r
+ else\r
+ w3c_slidy.unfold(w3c_slidy.outline);\r
+\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ }\r
+ else if (key == 188) // < for smaller fonts\r
+ {\r
+ w3c_slidy.smaller();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 190) // > for larger fonts\r
+ {\r
+ w3c_slidy.bigger();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 189 || key == 109) // - for smaller fonts\r
+ {\r
+ w3c_slidy.smaller();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 187 || key == 191 || key == 107) // = + for larger fonts\r
+ {\r
+ w3c_slidy.bigger();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 83) // S for smaller fonts\r
+ {\r
+ w3c_slidy.smaller();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 66) // B for larger fonts\r
+ {\r
+ w3c_slidy.bigger();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 90) // Z for last slide\r
+ {\r
+ w3c_slidy.last_slide();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 70) // F for toggle toolbar\r
+ {\r
+ w3c_slidy.toggle_toolbar();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 65) // A for toggle view single/all slides\r
+ {\r
+ w3c_slidy.toggle_view();\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 75) // toggle action of left click for next page\r
+ {\r
+ w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled;\r
+ var alert_msg = (w3c_slidy.mouse_click_enabled ?\r
+ "enabled" : "disabled") + " mouse click advance";\r
+\r
+ alert(alert_msg.localize());\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 84 || key == 67) // T or C for table of contents\r
+ {\r
+ if (w3c_slidy.toc)\r
+ w3c_slidy.toggle_table_of_contents();\r
+\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ else if (key == 72) // H for help\r
+ {\r
+ window.location = w3c_slidy.help_page;\r
+ return w3c_slidy.cancel(event);\r
+ }\r
+ //else alert("key code is "+ key);\r
+\r
+ return true;\r
+ },\r
+\r
+ // safe for both text/html and application/xhtml+xml\r
+ create_element: function (name) {\r
+ if (this.xhtml && (typeof document.createElementNS != 'undefined'))\r
+ return document.createElementNS("http://www.w3.org/1999/xhtml", name)\r
+\r
+ return document.createElement(name);\r
+ },\r
+\r
+ get_element_style: function (elem, IEStyleProp, CSSStyleProp) {\r
+ if (elem.currentStyle)\r
+ {\r
+ return elem.currentStyle[IEStyleProp];\r
+ }\r
+ else if (window.getComputedStyle)\r
+ {\r
+ var compStyle = window.getComputedStyle(elem, "");\r
+ return compStyle.getPropertyValue(CSSStyleProp);\r
+ }\r
+ return "";\r
+ },\r
+\r
+ // the string str is a whitespace separated list of tokens\r
+ // test if str contains a particular token, e.g. "slide"\r
+ has_token: function (str, token) {\r
+ if (str)\r
+ {\r
+ // define pattern as regular expression\r
+ var pattern = /\w+/g;\r
+\r
+ // check for matches\r
+ // place result in array\r
+ var result = str.match(pattern);\r
+\r
+ // now check if desired token is present\r
+ for (var i = 0; i < result.length; i++)\r
+ {\r
+ if (result[i] == token)\r
+ return true;\r
+ }\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ get_class_list: function (element) {\r
+ if (typeof element.className != 'undefined')\r
+ return element.className;\r
+\r
+ return element.getAttribute("class");\r
+ },\r
+\r
+ has_class: function (element, name) {\r
+ if (element.nodeType != 1)\r
+ return false;\r
+\r
+ var regexp = new RegExp("(^| )" + name + "\W*");\r
+\r
+ if (typeof element.className != 'undefined')\r
+ return regexp.test(element.className);\r
+\r
+ return regexp.test(element.getAttribute("class"));\r
+ },\r
+\r
+ remove_class: function (element, name) {\r
+ var regexp = new RegExp("(^| )" + name + "\W*");\r
+ var clsval = "";\r
+\r
+ if (typeof element.className != 'undefined')\r
+ {\r
+ clsval = element.className;\r
+\r
+ if (clsval)\r
+ {\r
+ clsval = clsval.replace(regexp, "");\r
+ element.className = clsval;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ clsval = element.getAttribute("class");\r
+\r
+ if (clsval)\r
+ {\r
+ clsval = clsval.replace(regexp, "");\r
+ element.setAttribute("class", clsval);\r
+ }\r
+ }\r
+ },\r
+\r
+ add_class: function (element, name) {\r
+ if (!this.has_class(element, name))\r
+ {\r
+ if (typeof element.className != 'undefined')\r
+ element.className += " " + name;\r
+ else\r
+ {\r
+ var clsval = element.getAttribute("class");\r
+ clsval = clsval ? clsval + " " + name : name;\r
+ element.setAttribute("class", clsval);\r
+ }\r
+ }\r
+ },\r
+\r
+ // HTML elements that can be used with class="incremental"\r
+ // note that you can also put the class on containers like\r
+ // up, ol, dl, and div to make their contents appear\r
+ // incrementally. Upper case is used since this is what\r
+ // browsers report for HTML node names (text/html).\r
+ incremental_elements: null,\r
+ okay_for_incremental: function (name) {\r
+ if (!this.incremental_elements)\r
+ {\r
+ var inclist = new Array();\r
+ inclist["p"] = true;\r
+ inclist["pre"] = true;\r
+ inclist["li"] = true;\r
+ inclist["blockquote"] = true;\r
+ inclist["dt"] = true;\r
+ inclist["dd"] = true;\r
+ inclist["h2"] = true;\r
+ inclist["h3"] = true;\r
+ inclist["h4"] = true;\r
+ inclist["h5"] = true;\r
+ inclist["h6"] = true;\r
+ inclist["span"] = true;\r
+ inclist["address"] = true;\r
+ inclist["table"] = true;\r
+ inclist["tr"] = true;\r
+ inclist["th"] = true;\r
+ inclist["td"] = true;\r
+ inclist["img"] = true;\r
+ inclist["object"] = true;\r
+ this.incremental_elements = inclist;\r
+ }\r
+ return this.incremental_elements[name.toLowerCase()];\r
+ },\r
+\r
+ next_incremental_item: function (node) {\r
+ var br = this.is_xhtml ? "br" : "BR";\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+\r
+ for (;;)\r
+ {\r
+ node = w3c_slidy.next_node(slide, node);\r
+\r
+ if (node == null || node.parentNode == null)\r
+ break;\r
+\r
+ if (node.nodeType == 1) // ELEMENT\r
+ {\r
+ if (node.nodeName == br)\r
+ continue;\r
+\r
+ if (w3c_slidy.has_class(node, "incremental")\r
+ && w3c_slidy.okay_for_incremental(node.nodeName))\r
+ return node;\r
+\r
+ if (w3c_slidy.has_class(node.parentNode, "incremental")\r
+ && !w3c_slidy.has_class(node, "non-incremental"))\r
+ return node;\r
+ }\r
+ }\r
+\r
+ return node;\r
+ },\r
+\r
+ previous_incremental_item: function (node) {\r
+ var br = this.is_xhtml ? "br" : "BR";\r
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+\r
+ for (;;)\r
+ {\r
+ node = w3c_slidy.previous_node(slide, node);\r
+\r
+ if (node == null || node.parentNode == null)\r
+ break;\r
+\r
+ if (node.nodeType == 1)\r
+ {\r
+ if (node.nodeName == br)\r
+ continue;\r
+\r
+ if (w3c_slidy.has_class(node, "incremental")\r
+ && w3c_slidy.okay_for_incremental(node.nodeName))\r
+ return node;\r
+\r
+ if (w3c_slidy.has_class(node.parentNode, "incremental")\r
+ && !w3c_slidy.has_class(node, "non-incremental"))\r
+ return node;\r
+ }\r
+ }\r
+\r
+ return node;\r
+ },\r
+\r
+ // set visibility for all elements on current slide with\r
+ // a parent element with attribute class="incremental"\r
+ set_visibility_all_incremental: function (value) {\r
+ var node = this.next_incremental_item(null);\r
+\r
+ if (value == "hidden")\r
+ {\r
+ while (node)\r
+ {\r
+ w3c_slidy.add_class(node, "invisible");\r
+ node = w3c_slidy.next_incremental_item(node);\r
+ }\r
+ }\r
+ else // value == "visible"\r
+ {\r
+ while (node)\r
+ {\r
+ w3c_slidy.remove_class(node, "invisible");\r
+ node = w3c_slidy.next_incremental_item(node);\r
+ }\r
+ }\r
+ },\r
+\r
+ // reveal the next hidden item on the slide\r
+ // node is null or the node that was last revealed\r
+ reveal_next_item: function (node) {\r
+ node = w3c_slidy.next_incremental_item(node);\r
+\r
+ if (node && node.nodeType == 1) // an element\r
+ w3c_slidy.remove_class(node, "invisible");\r
+\r
+ return node;\r
+ },\r
+\r
+ // exact inverse of revealNextItem(node)\r
+ hide_previous_item: function (node) {\r
+ if (node && node.nodeType == 1) // an element\r
+ w3c_slidy.add_class(node, "invisible");\r
+\r
+ return this.previous_incremental_item(node);\r
+ },\r
+\r
+ // left to right traversal of root's content\r
+ next_node: function (root, node) {\r
+ if (node == null)\r
+ return root.firstChild;\r
+\r
+ if (node.firstChild)\r
+ return node.firstChild;\r
+\r
+ if (node.nextSibling)\r
+ return node.nextSibling;\r
+\r
+ for (;;)\r
+ {\r
+ node = node.parentNode;\r
+\r
+ if (!node || node == root)\r
+ break;\r
+\r
+ if (node && node.nextSibling)\r
+ return node.nextSibling;\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ // right to left traversal of root's content\r
+ previous_node: function (root, node) {\r
+ if (node == null)\r
+ {\r
+ node = root.lastChild;\r
+\r
+ if (node)\r
+ {\r
+ while (node.lastChild)\r
+ node = node.lastChild;\r
+ }\r
+\r
+ return node;\r
+ }\r
+\r
+ if (node.previousSibling)\r
+ {\r
+ node = node.previousSibling;\r
+\r
+ while (node.lastChild)\r
+ node = node.lastChild;\r
+\r
+ return node;\r
+ }\r
+\r
+ if (node.parentNode != root)\r
+ return node.parentNode;\r
+\r
+ return null;\r
+ },\r
+\r
+ previous_sibling_element: function (el) {\r
+ el = el.previousSibling;\r
+\r
+ while (el && el.nodeType != 1)\r
+ el = el.previousSibling;\r
+\r
+ return el;\r
+ },\r
+\r
+ next_sibling_element: function (el) {\r
+ el = el.nextSibling;\r
+\r
+ while (el && el.nodeType != 1)\r
+ el = el.nextSibling;\r
+\r
+ return el;\r
+ },\r
+\r
+ first_child_element: function (el) {\r
+ var node;\r
+\r
+ for (node = el.firstChild; node; node = node.nextSibling)\r
+ {\r
+ if (node.nodeType == 1)\r
+ break;\r
+ }\r
+\r
+ return node;\r
+ },\r
+\r
+ first_tag: function (element, tag) {\r
+ var node;\r
+\r
+ if (!this.is_xhtml)\r
+ tag = tag.toUpperCase();\r
+\r
+ for (node = element.firstChild; node; node = node.nextSibling)\r
+ {\r
+ if (node.nodeType == 1 && node.nodeName == tag)\r
+ break;\r
+ }\r
+\r
+ return node;\r
+ },\r
+\r
+ hide_selection: function () {\r
+ if (window.getSelection) // Firefox, Chromium, Safari, Opera\r
+ {\r
+ var selection = window.getSelection();\r
+\r
+ if (selection.rangeCount > 0)\r
+ {\r
+ var range = selection.getRangeAt(0);\r
+ range.collapse (false);\r
+ }\r
+ }\r
+ else // Internet Explorer\r
+ {\r
+ var textRange = document.selection.createRange ();\r
+ textRange.collapse (false);\r
+ }\r
+ },\r
+\r
+ get_selected_text: function () {\r
+ try\r
+ {\r
+ if (window.getSelection)\r
+ return window.getSelection().toString();\r
+\r
+ if (document.getSelection)\r
+ return document.getSelection().toString();\r
+\r
+ if (document.selection)\r
+ return document.selection.createRange().text;\r
+ }\r
+ catch (e)\r
+ {\r
+ }\r
+\r
+ return "";\r
+ },\r
+\r
+ // make note of length of selected text\r
+ // as this evaluates to zero in click event\r
+ mouse_button_up: function (e) {\r
+ w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;\r
+ },\r
+\r
+ // right mouse button click is reserved for context menus\r
+ // it is more reliable to detect rightclick than leftclick\r
+ mouse_button_click: function (e) {\r
+ var rightclick = false;\r
+ var leftclick = false;\r
+ var middleclick = false;\r
+ var target;\r
+\r
+ if (!e)\r
+ var e = window.event;\r
+\r
+ if (e.target)\r
+ target = e.target;\r
+ else if (e.srcElement)\r
+ target = e.srcElement;\r
+\r
+ // work around Safari bug\r
+ if (target.nodeType == 3)\r
+ target = target.parentNode;\r
+\r
+ if (e.which) // all browsers except IE\r
+ {\r
+ leftclick = (e.which == 1);\r
+ middleclick = (e.which == 2);\r
+ rightclick = (e.which == 3);\r
+ }\r
+ else if (e.button)\r
+ {\r
+ // Konqueror gives 1 for left, 4 for middle\r
+ // IE6 gives 0 for left and not 1 as I expected\r
+\r
+ if (e.button == 4)\r
+ middleclick = true;\r
+\r
+ // all browsers agree on 2 for right button\r
+ rightclick = (e.button == 2);\r
+ }\r
+ else leftclick = true;\r
+/*\r
+ alert("you clicked over a " + target.nodeName + " element\n" +\r
+ "w3c_slidy.mouse_click_enabled = " + w3c_slidy.mouse_click_enabled + "\n" +\r
+ "leftclick = " + leftclick + "\n" +\r
+ "selected text length = " + w3c_slidy.selected_text_len);\r
+ //alert("selected text length = " + w3c_slidy.selected_text_len);\r
+*/\r
+ if (w3c_slidy.selected_text_len > 0)\r
+ {\r
+ w3c_slidy.stop_propagation(e);\r
+ e.cancel = true;\r
+ e.returnValue = false;\r
+ return false;\r
+ }\r
+\r
+ // dismiss table of contents\r
+ w3c_slidy.hide_table_of_contents();\r
+\r
+ // check if target is something that probably want's clicks\r
+ // e.g. a, embed, object, input, textarea, select, option\r
+ var tag = target.nodeName.toLowerCase();\r
+\r
+ if (w3c_slidy.mouse_click_enabled && leftclick &&\r
+ tag != "a" &&\r
+ tag != "embed" &&\r
+ tag != "object" &&\r
+ tag != "video" &&\r
+ tag != "input" &&\r
+ tag != "textarea" &&\r
+ tag != "select" &&\r
+ tag != "option" &&\r
+ !target.onclick)\r
+ {\r
+ w3c_slidy.next_slide(true);\r
+ w3c_slidy.stop_propagation(e);\r
+ e.cancel = true;\r
+ e.returnValue = false;\r
+ return false;\r
+ }\r
+ },\r
+\r
+ get_key: function (e)\r
+ {\r
+ var key;\r
+\r
+ // kludge around NS/IE differences\r
+ if (typeof window.event != "undefined")\r
+ key = window.event.keyCode;\r
+ else if (e.which)\r
+ key = e.which;\r
+\r
+ return key;\r
+ },\r
+\r
+ get_target: function (e) {\r
+ var target;\r
+\r
+ if (!e)\r
+ e = window.event;\r
+\r
+ if (e.target)\r
+ target = e.target;\r
+ else if (e.srcElement)\r
+ target = e.srcElement;\r
+\r
+ if (target.nodeType != 1)\r
+ target = target.parentNode;\r
+\r
+ return target;\r
+ },\r
+\r
+ // does display property provide correct defaults?\r
+ is_block: function (elem) {\r
+ var tag = elem.nodeName.toLowerCase();\r
+\r
+ return tag == "ol" || tag == "ul" || tag == "p" ||\r
+ tag == "li" || tag == "table" || tag == "pre" ||\r
+ tag == "h1" || tag == "h2" || tag == "h3" ||\r
+ tag == "h4" || tag == "h5" || tag == "h6" ||\r
+ tag == "blockquote" || tag == "address";\r
+ },\r
+\r
+ add_listener: function (element, event, handler) {\r
+ if (window.addEventListener)\r
+ element.addEventListener(event, handler, false);\r
+ else\r
+ element.attachEvent("on"+event, handler);\r
+ },\r
+\r
+ // used to prevent event propagation from field controls\r
+ stop_propagation: function (event) {\r
+ event = event ? event : window.event;\r
+ event.cancelBubble = true; // for IE\r
+\r
+ if (event.stopPropagation)\r
+ event.stopPropagation();\r
+\r
+ return true;\r
+ },\r
+\r
+ cancel: function (event) {\r
+ if (event)\r
+ {\r
+ event.cancel = true;\r
+ event.returnValue = false;\r
+\r
+ if (event.preventDefault)\r
+ event.preventDefault();\r
+ }\r
+\r
+ w3c_slidy.key_wanted = false;\r
+ return false;\r
+ }\r
+};\r
+\r
+// for each language define an associative array\r
+// and also the help text which is longer\r
+\r
+var w3c_slidy_i18n = {\r
+ strings_es: {\r
+ "slide":"pág.",\r
+ "help?":"Ayuda",\r
+ "contents?":"Índice",\r
+ "table of contents":"tabla de contenidos",\r
+ "Table of Contents":"Tabla de Contenidos",\r
+ "restart presentation":"Reiniciar presentación",\r
+ "restart?":"Inicio"\r
+ },\r
+ help_es:\r
+ "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +\r
+ "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",\r
+\r
+ strings_ca: {\r
+ "slide":"pàg..",\r
+ "help?":"Ajuda",\r
+ "contents?":"Índex",\r
+ "table of contents":"taula de continguts",\r
+ "Table of Contents":"Taula de Continguts",\r
+ "restart presentation":"Reiniciar presentació",\r
+ "restart?":"Inici"\r
+ },\r
+ help_ca:\r
+ "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " +\r
+ "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.",\r
+\r
+ strings_cs: {\r
+ "slide":"snímek",\r
+ "help?":"nápověda",\r
+ "contents?":"obsah",\r
+ "table of contents":"obsah prezentace",\r
+ "Table of Contents":"Obsah prezentace",\r
+ "restart presentation":"znovu spustit prezentaci",\r
+ "restart?":"restart"\r
+ },\r
+ help_cs:\r
+ "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " +\r
+ "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " +\r
+ "dá zvětšit a zmenšit pomocí kláves B a S.",\r
+\r
+ strings_nl: {\r
+ "slide":"pagina",\r
+ "help?":"Help?",\r
+ "contents?":"Inhoud?",\r
+ "table of contents":"inhoudsopgave",\r
+ "Table of Contents":"Inhoudsopgave",\r
+ "restart presentation":"herstart presentatie",\r
+ "restart?":"Herstart?"\r
+ },\r
+ help_nl:\r
+ "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " +\r
+ "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.",\r
+\r
+ strings_de: {\r
+ "slide":"Seite",\r
+ "help?":"Hilfe",\r
+ "contents?":"Übersicht",\r
+ "table of contents":"Inhaltsverzeichnis",\r
+ "Table of Contents":"Inhaltsverzeichnis",\r
+ "restart presentation":"Präsentation neu starten",\r
+ "restart?":"Neustart"\r
+ },\r
+ help_de:\r
+ "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " +\r
+ "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.",\r
+\r
+ strings_pl: {\r
+ "slide":"slajd",\r
+ "help?":"pomoc?",\r
+ "contents?":"spis treści?",\r
+ "table of contents":"spis treści",\r
+ "Table of Contents":"Spis Treści",\r
+ "restart presentation":"Restartuj prezentację",\r
+ "restart?":"restart?"\r
+ },\r
+ help_pl:\r
+ "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" +\r
+ "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.",\r
+\r
+ strings_fr: {\r
+ "slide":"page",\r
+ "help?":"Aide",\r
+ "contents?":"Index",\r
+ "table of contents":"table des matières",\r
+ "Table of Contents":"Table des matières",\r
+ "restart presentation":"Recommencer l'exposé",\r
+ "restart?":"Début"\r
+ },\r
+ help_fr:\r
+ "Naviguez avec la souris, la barre d'espace, les flèches " +\r
+ "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " +\r
+ "les touches S et B pour modifier la taille de la police.",\r
+\r
+ strings_hu: {\r
+ "slide":"oldal",\r
+ "help?":"segítség",\r
+ "contents?":"tartalom",\r
+ "table of contents":"tartalomjegyzék",\r
+ "Table of Contents":"Tartalomjegyzék",\r
+ "restart presentation":"bemutató újraindítása",\r
+ "restart?":"újraindítás"\r
+ },\r
+ help_hu:\r
+ "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " +\r
+ "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " +\r
+ "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " +\r
+ "a szöveg méretét.",\r
+\r
+ strings_it: {\r
+ "slide":"pag.",\r
+ "help?":"Aiuto",\r
+ "contents?":"Indice",\r
+ "table of contents":"indice",\r
+ "Table of Contents":"Indice",\r
+ "restart presentation":"Ricominciare la presentazione",\r
+ "restart?":"Inizio"\r
+ },\r
+ help_it:\r
+ "Navigare con mouse, barra spazio, frecce sinistra/destra o " +\r
+ "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.",\r
+\r
+ strings_el: {\r
+ "slide":"σελίδα",\r
+ "help?":"βοήθεια;",\r
+ "contents?":"περιεχόμενα;",\r
+ "table of contents":"πίνακας περιεχομένων",\r
+ "Table of Contents":"Πίνακας Περιεχομένων",\r
+ "restart presentation":"επανεκκίνηση παρουσίασης",\r
+ "restart?":"επανεκκίνηση;"\r
+ },\r
+ help_el:\r
+ "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " +\r
+ "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " +\r
+ "το μέγεθος της γραμματοσειράς.",\r
+\r
+ strings_ja: {\r
+ "slide":"スライド",\r
+ "help?":"ヘルプ",\r
+ "contents?":"目次",\r
+ "table of contents":"目次を表示",\r
+ "Table of Contents":"目次",\r
+ "restart presentation":"最初から再生",\r
+ "restart?":"最初から"\r
+ },\r
+ help_ja:\r
+ "マウス左クリック ・ スペース ・ 左右キー " +\r
+ "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更",\r
+\r
+ strings_zh: {\r
+ "slide":"幻灯片",\r
+ "help?":"帮助?",\r
+ "contents?":"内容?",\r
+ "table of contents":"目录",\r
+ "Table of Contents":"目录",\r
+ "restart presentation":"重新启动展示",\r
+ "restart?":"重新启动?"\r
+ },\r
+ help_zh:\r
+ "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " +\r
+ "用 S, B 改变字体大小.",\r
+\r
+ strings_ru: {\r
+ "slide":"слайд",\r
+ "help?":"помощь?",\r
+ "contents?":"содержание?",\r
+ "table of contents":"оглавление",\r
+ "Table of Contents":"Оглавление",\r
+ "restart presentation":"перезапустить презентацию",\r
+ "restart?":"перезапуск?"\r
+ },\r
+ help_ru:\r
+ "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" +\r
+ "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.",\r
+\r
+ strings_sv: {\r
+ "slide":"sida",\r
+ "help?":"hjälp",\r
+ "contents?":"innehåll",\r
+ "table of contents":"innehållsförteckning",\r
+ "Table of Contents":"Innehållsförteckning",\r
+ "restart presentation":"visa presentationen från början",\r
+ "restart?":"börja om"\r
+ },\r
+ help_sv:\r
+ "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " +\r
+ "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " +\r
+ "Använd tangenterna S och B för att ändra textens storlek.",\r
+\r
+// each such language array is declared in the localize array\r
+// which is set on string prototype and used as in "foo".localize();\r
+ localize: {\r
+ "es":this.strings_es,\r
+ "ca":this.strings_ca,\r
+ "cs":this.strings_cs,\r
+ "nl":this.strings_nl,\r
+ "de":this.strings_de,\r
+ "pl":this.strings_pl,\r
+ "fr":this.strings_fr,\r
+ "hu":this.strings_hu,\r
+ "it":this.strings_it,\r
+ "el":this.strings_el,\r
+ "jp":this.strings_ja,\r
+ "zh":this.strings_zh,\r
+ "ru":this.strings_ru,\r
+ "sv":this.strings_sv\r
+ },\r
+\r
+ init: function () {\r
+ var i18n = w3c_slidy_i18n;\r
+ var help_text = w3c_slidy.help_text;\r
+ i18n.strings_es[help_text] = i18n.help_es;\r
+ i18n.strings_ca[help_text] = i18n.help_ca;\r
+ i18n.strings_cs[help_text] = i18n.help_cs;\r
+ i18n.strings_nl[help_text] = i18n.help_nl;\r
+ i18n.strings_de[help_text] = i18n.help_de;\r
+ i18n.strings_pl[help_text] = i18n.help_pl;\r
+ i18n.strings_fr[help_text] = i18n.help_fr;\r
+ i18n.strings_hu[help_text] = i18n.help_hu;\r
+ i18n.strings_it[help_text] = i18n.help_it;\r
+ i18n.strings_el[help_text] = i18n.help_el;\r
+ i18n.strings_ja[help_text] = i18n.help_ja;\r
+ i18n.strings_zh[help_text] = i18n.help_zh;\r
+ i18n.strings_ru[help_text] = i18n.help_ru;\r
+ i18n.strings_sv[help_text] = i18n.help_sv;\r
+\r
+ w3c_slidy.lang = document.body.parentNode.getAttribute("lang");\r
+\r
+ if (!w3c_slidy.lang)\r
+ w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang");\r
+\r
+ if (!w3c_slidy.lang)\r
+ w3c_slidy.lang = "en";\r
+\r
+ // add localize method to all strings\r
+ // for use as in "contents".localize()\r
+ String.prototype.localize = function() {\r
+ if (this == "")\r
+ return this;\r
+\r
+ // try full language code, e.g. en-US\r
+ var s, lookup = w3c_slidy_i18n.localize[w3c_slidy.lang];\r
+\r
+ if (lookup)\r
+ {\r
+ s = lookup[this];\r
+\r
+ if (s)\r
+ return s;\r
+ }\r
+\r
+ // strip country code suffix, e.g.\r
+ // try en if undefined for en-US\r
+ var lg = w3c_slidy.lang.split("-");\r
+\r
+ if (lg.length > 1)\r
+ {\r
+ lookup = w3c_slidy_i18n.localize[lg[0]];\r
+\r
+ if (lookup)\r
+ {\r
+ s = lookup[this];\r
+\r
+ if (s)\r
+ return s;\r
+ }\r
+ }\r
+\r
+ // otherwise string as is\r
+ return this;\r
+ };\r
+ }\r
+};\r
+\r
+// hack for back button behavior\r
+if (w3c_slidy.ie6 || w3c_slidy.ie7)\r
+{\r
+ document.write("<iframe id='historyFrame' " +\r
+ "src='javascript:\"<html"+"></"+"html>\"' " +\r
+ "height='1' width='1' " +\r
+ "style='position:absolute;left:-800px'></iframe>");\r
+}\r
+\r
+// attach event listeners for initialization\r
+w3c_slidy.set_up();\r
+\r
+// hide the slides as soon as body element is available\r
+// to reduce annoying screen mess before the onload event\r
+setTimeout(w3c_slidy.hide_slides, 50);\r
+\r
+/*]]>*/\r
+</script>\r
+</head>\r
+<body class="article" style="max-width:45em">\r
+<div id="header" class="slide">\r
+<h1>2.8 Update</h1>\r
+</div>\r
+<div class="sect1 slide">\r
+<h1 id="_features">Features</h1>\r
+<div class="sectionbody" style="max-width:45em">\r
+<ul class="">\r
+<li>\r
+<span>\r
+Acquisitions Dupe Order Detection\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Deleting Copy Locations\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+TPAC Show More Details\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Authority Record Matching with MARC Imports\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Avoid Billing on Resolved (Zero-Balance) Transactions\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Patron Message Center\r
+</span>\r
+</li>\r
+</ul>\r
+</div>\r
+</div>\r
+<div class="sect1 slide">\r
+<h1 id="_and_more_features">And More Features</h1>\r
+<div class="sectionbody" style="max-width:45em">\r
+<ul class="">\r
+<li>\r
+<span>\r
+Claims Returned Lost/Long-Overdue Fee Void Options\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+TPAC Discoverability\r
+</span>\r
+<ul class="">\r
+<li>\r
+<span>\r
+Improving search engine indexing\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+More expressive links to related resources (LC, OCLC)\r
+</span>\r
+</li>\r
+</ul>\r
+</li>\r
+<li>\r
+<span>\r
+Staff Place Another Hold on Same Title\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Reporter sanity checks\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+ACQ direct charge improvements\r
+</span>\r
+</li>\r
+</ul>\r
+</div>\r
+</div>\r
+<div class="sect1 slide">\r
+<h1 id="_some_numbers">Some Numbers</h1>\r
+<div class="sectionbody" style="max-width:45em">\r
+<ul class="">\r
+<li>\r
+<span>\r
+2.8\r
+</span>\r
+<ul class="">\r
+<li>\r
+<span>\r
+478 commits\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+34 code & doc authors\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+12 code & doc committers\r
+</span>\r
+</li>\r
+</ul>\r
+</li>\r
+<li>\r
+<span>\r
+2.7\r
+</span>\r
+<ul class="">\r
+<li>\r
+<span>\r
+487 commits\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+47 code & doc authors\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+15 code & doc committers\r
+</span>\r
+</li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</div>\r
+</div>\r
+<div class="sect1 slide">\r
+<h1 id="_security">Security</h1>\r
+<div class="sectionbody" style="max-width:45em">\r
+<ul class="">\r
+<li>\r
+<span>\r
+Published updated process for joining security team\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Team is growing\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+Triage and Prioritazation\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+More Fixes!\r
+</span>\r
+</li>\r
+</ul>\r
+</div>\r
+</div>\r
+</body>\r
+</html>\r