diff --git a/slidy/slidy.min.css b/slidy/slidy.min.css
index 9cb2fab64..866e06771 100644
--- a/slidy/slidy.min.css
+++ b/slidy/slidy.min.css
@@ -1,400 +1,93 @@
-/* slidy.css
- Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
- W3C liability, trademark, document use and software licensing
- rules apply, see:
-
- http://www.w3.org/Consortium/Legal/copyright-documents
- http://www.w3.org/Consortium/Legal/copyright-software
-*/
body
-{
- margin: 0 0 0 0;
- padding: 0 0 0 0;
- width: 100%;
- height: 100%;
- color: black;
- background-color: white;
- font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif;
- font-size: 14pt;
-}
-
-div.toolbar {
- position: fixed; z-index: 200;
- top: auto; bottom: 0; left: 0; right: 0;
- height: 1.2em; text-align: right;
- padding-left: 1em;
- padding-right: 1em;
- font-size: 60%;
- color: red;
- background-color: rgb(240,240,240);
- border-top: solid 1px rgb(180,180,180);
-}
-
-div.toolbar span.copyright {
- color: black;
- margin-left: 0.5em;
-}
-
-div.initial_prompt {
- position: absolute;
- z-index: 1000;
- bottom: 1.2em;
- width: 100%;
- background-color: rgb(200,200,200);
- opacity: 0.35;
- background-color: rgb(200,200,200, 0.35);
- cursor: pointer;
-}
-
-div.initial_prompt p.help {
- text-align: center;
-}
-
-div.initial_prompt p.close {
- text-align: right;
- font-style: italic;
-}
-
-div.slidy_toc {
- position: absolute;
- z-index: 300;
- width: 60%;
- max-width: 30em;
- height: 30em;
- overflow: auto;
- top: auto;
- right: auto;
- left: 4em;
- bottom: 4em;
- padding: 1em;
- background: rgb(240,240,240);
- border-style: solid;
- border-width: 2px;
- font-size: 60%;
-}
-
-div.slidy_toc .toc_heading {
- text-align: center;
- width: 100%;
- margin: 0;
- margin-bottom: 1em;
- border-bottom-style: solid;
- border-bottom-color: rgb(180,180,180);
- border-bottom-width: 1px;
-}
-
-div.slide {
- z-index: 20;
- margin: 0 0 0 0;
- padding-top: 0;
- padding-bottom: 0;
- padding-left: 20px;
- padding-right: 20px;
- border-width: 0;
- clear: both;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- line-height: 120%;
- background-color: transparent;
-}
-
-div.background {
- display: none;
-}
-
-div.handout {
- margin-left: 20px;
- margin-right: 20px;
-}
-
-div.slide.titlepage {
- text-align: center;
-}
-
-div.slide.titlepage.h1 {
- padding-top: 10%;
-}
-
-div.slide h1 {
- padding-left: 0;
- padding-right: 20pt;
- padding-top: 4pt;
- padding-bottom: 4pt;
- margin-top: 0;
- margin-left: 0;
- margin-right: 60pt;
- margin-bottom: 0.5em;
- display: block;
- font-size: 160%;
- line-height: 1.2em;
- background: transparent;
-}
-
-div.toc {
- position: absolute;
- top: auto;
- bottom: 4em;
- left: 4em;
- right: auto;
- width: 60%;
- max-width: 30em;
- height: 30em;
- border: solid thin black;
- padding: 1em;
- background: rgb(240,240,240);
- color: black;
- z-index: 300;
- overflow: auto;
- display: block;
- visibility: visible;
-}
-
-div.toc-heading {
- width: 100%;
- border-bottom: solid 1px rgb(180,180,180);
- margin-bottom: 1em;
- text-align: center;
-}
-
-pre {
- font-size: 80%;
- font-weight: bold;
- line-height: 120%;
- padding-top: 0.2em;
- padding-bottom: 0.2em;
- padding-left: 1em;
- padding-right: 1em;
- border-style: solid;
- border-left-width: 1em;
- border-top-width: thin;
- border-right-width: thin;
- border-bottom-width: thin;
- border-color: #95ABD0;
- color: #00428C;
- background-color: #E4E5E7;
-}
-
-li pre { margin-left: 0; }
-
-blockquote { font-style: italic }
-
-img { background-color: transparent }
-
-p.copyright { font-size: smaller }
-
-.center { text-align: center }
-.footnote { font-size: smaller; margin-left: 2em; }
-
-a img { border-width: 0; border-style: none }
-
-a:visited { color: navy }
-a:link { color: navy }
-a:hover { color: red; text-decoration: underline }
-a:active { color: red; text-decoration: underline }
-
-a {text-decoration: none}
-.navbar a:link {color: white}
-.navbar a:visited {color: yellow}
-.navbar a:active {color: red}
-.navbar a:hover {color: red}
-
-ul { list-style-type: square; }
-ul ul { list-style-type: disc; }
-ul ul ul { list-style-type: circle; }
-ul ul ul ul { list-style-type: disc; }
-li { margin-left: 0.5em; margin-top: 0.5em; }
-li li { font-size: 85%; font-style: italic }
-li li li { font-size: 85%; font-style: normal }
-
+{margin:0 0 0 0;padding:0 0 0 0;width:100%;height:100%;color:black;background-color:white;font-family:"Gill Sans MT","Gill Sans",GillSans,sans-serif;font-size:14pt;}
+div.toolbar{position:fixed;z-index:200;top:auto;bottom:0;left:0;right:0;height:1.2em;text-align:right;padding-left:1em;padding-right:1em;font-size:60%;color:red;background-color:rgb(240,240,240);border-top:solid 1px rgb(180,180,180);}
+div.toolbar span.copyright{color:black;margin-left:0.5em;}
+div.initial_prompt{position:absolute;z-index:1000;bottom:1.2em;width:100%;background-color:rgb(200,200,200);opacity:0.35;background-color:rgb(200,200,200,0.35);cursor:pointer;}
+div.initial_prompt p.help{text-align:center;}
+div.initial_prompt p.close{text-align:right;font-style:italic;}
+div.slidy_toc{position:absolute;z-index:300;width:60%;max-width:30em;height:30em;overflow:auto;top:auto;right:auto;left:4em;bottom:4em;padding:1em;background:rgb(240,240,240);border-style:solid;border-width:2px;font-size:60%;}
+div.slidy_toc.toc_heading{text-align:center;width:100%;margin:0;margin-bottom:1em;border-bottom-style:solid;border-bottom-color:rgb(180,180,180);border-bottom-width:1px;}
+div.slide{z-index:20;margin:0 0 0 0;padding-top:0;padding-bottom:0;padding-left:20px;padding-right:20px;border-width:0;clear:both;top:0;bottom:0;left:0;right:0;line-height:120%;background-color:transparent;}
+div.background{display:none;}
+div.handout{margin-left:20px;margin-right:20px;}
+div.slide.titlepage{text-align:center;}
+div.slide.titlepage.h1{padding-top:10%;}
+div.slide h1{padding-left:0;padding-right:20pt;padding-top:4pt;padding-bottom:4pt;margin-top:0;margin-left:0;margin-right:60pt;margin-bottom:0.5em;display:block;font-size:160%;line-height:1.2em;background:transparent;}
+div.toc{position:absolute;top:auto;bottom:4em;left:4em;right:auto;width:60%;max-width:30em;height:30em;border:solid thin black;padding:1em;background:rgb(240,240,240);color:black;z-index:300;overflow:auto;display:block;visibility:visible;}
+div.toc-heading{width:100%;border-bottom:solid 1px rgb(180,180,180);margin-bottom:1em;text-align:center;}
+pre{font-size:80%;font-weight:bold;line-height:120%;padding-top:0.2em;padding-bottom:0.2em;padding-left:1em;padding-right:1em;border-style:solid;border-left-width:1em;border-top-width:thin;border-right-width:thin;border-bottom-width:thin;border-color:#95ABD0;color:#00428C;background-color:#E4E5E7;}
+li pre{margin-left:0;}
+blockquote{font-style:italic}
+img{background-color:transparent}
+p.copyright{font-size:smaller}.center{text-align:center}.footnote{font-size:smaller;margin-left:2em;}
+a img{border-width:0;border-style:none}
+a:visited{color:navy}
+a:link{color:navy}
+a:hover{color:red;text-decoration:underline}
+a:active{color:red;text-decoration:underline}
+a{text-decoration:none}.navbar a:link{color:white}.navbar a:visited{color:yellow}.navbar a:active{color:red}.navbar a:hover{color:red}
+ul{list-style-type:square;}
+ul ul{list-style-type:disc;}
+ul ul ul{list-style-type:circle;}
+ul ul ul ul{list-style-type:disc;}
+li{margin-left:0.5em;margin-top:0.5em;}
+li li{font-size:85%;font-style:italic}
+li li li{font-size:85%;font-style:normal}
div dt
-{
- margin-left: 0;
- margin-top: 1em;
- margin-bottom: 0.5em;
- font-weight: bold;
-}
+{margin-left:0;margin-top:1em;margin-bottom:0.5em;font-weight:bold;}
div dd
-{
- margin-left: 2em;
- margin-bottom: 0.5em;
-}
-
-
-p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
- margin-left: 1em;
- margin-right: 1em;
-}
-
-p.subhead { font-weight: bold; margin-top: 2em; }
-
-.smaller { font-size: smaller }
-.bigger { font-size: 130% }
-
-td,th { padding: 0.2em }
-
-ul {
- margin: 0.5em 1.5em 0.5em 1.5em;
- padding: 0;
-}
-
-ol {
- margin: 0.5em 1.5em 0.5em 1.5em;
- padding: 0;
-}
-
-ul { list-style-type: square; }
-ul ul { list-style-type: disc; }
-ul ul ul { list-style-type: circle; }
-ul ul ul ul { list-style-type: disc; }
-
-ul li {
- list-style: square;
- margin: 0.1em 0em 0.6em 0;
- padding: 0 0 0 0;
- line-height: 140%;
-}
-
-ol li {
- margin: 0.1em 0em 0.6em 1.5em;
- padding: 0 0 0 0px;
- line-height: 140%;
- list-style-type: decimal;
-}
-
-li ul li {
- font-size: 85%;
- font-style: italic;
- list-style-type: disc;
- background: transparent;
- padding: 0 0 0 0;
-}
-li li ul li {
- font-size: 85%;
- font-style: normal;
- list-style-type: circle;
- background: transparent;
- padding: 0 0 0 0;
-}
-li li li ul li {
- list-style-type: disc;
- background: transparent;
- padding: 0 0 0 0;
-}
-
-li ol li {
- list-style-type: decimal;
-}
-
-
-li li ol li {
- list-style-type: decimal;
-}
-
-/*
- setting class="outline on ol or ul makes it behave as an
- ouline list where blocklevel content in li elements is
- hidden by default and can be expanded or collapsed with
- mouse click. Set class="expand" on li to override default
-*/
-
-ol.outline li:hover { cursor: pointer }
-ol.outline li.nofold:hover { cursor: default }
-
-ul.outline li:hover { cursor: pointer }
-ul.outline li.nofold:hover { cursor: default }
-
-ol.outline { list-style:decimal; }
-ol.outline ol { list-style-type:lower-alpha }
-
-ol.outline li.nofold {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;
-}
-ol.outline li.unfolded {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;
-}
-ol.outline li.folded {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;
-}
-ol.outline li.unfolded:hover {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;
-}
-ol.outline li.folded:hover {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;
-}
-
-ul.outline li.nofold {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;
-}
-ul.outline li.unfolded {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;
-}
-ul.outline li.folded {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;
-}
-ul.outline li.unfolded:hover {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;
-}
-ul.outline li.folded:hover {
- padding: 0 0 0 20px;
- background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;
-}
-
-/* for slides with class "title" in table of contents */
-a.titleslide { font-weight: bold; font-style: italic }
-
-/*
- hide images for work around for save as bug
- where browsers fail to save images used by CSS
-*/
-img.hidden { display: none; visibility: hidden }
-div.initial_prompt { display: none; visibility: hidden }
-
- div.slide {
- visibility: visible;
- position: inherit;
- }
- div.handout {
- border-top-style: solid;
- border-top-width: thin;
- border-top-color: black;
- }
-
-@media screen {
- .hidden { display: none; visibility: visible }
-
- div.slide.hidden { display: block; visibility: visible }
- div.handout.hidden { display: block; visibility: visible }
- div.background { display: none; visibility: hidden }
- body.single_slide div.initial_prompt { display: block; visibility: visible }
- body.single_slide div.background { display: block; visibility: visible }
- body.single_slide div.background.hidden { display: none; visibility: hidden }
- body.single_slide .invisible { visibility: hidden }
- body.single_slide .hidden { display: none; visibility: hidden }
- body.single_slide div.slide { position: absolute }
- body.single_slide div.handout { display: none; visibility: hidden }
-}
-
-@media print {
- .hidden { display: block; visibility: visible }
-
- div.slide pre { font-size: 60%; padding-left: 0.5em; }
- div.toolbar { display: none; visibility: hidden; }
- div.slidy_toc { display: none; visibility: hidden; }
- div.background { display: none; visibility: hidden; }
- div.slide { page-break-before: always }
- /* :first-child isn't reliable for print media */
- div.slide.first-slide { page-break-before: avoid }
-}
-
+{margin-left:2em;margin-bottom:0.5em;}
+p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table{margin-left:1em;margin-right:1em;}
+p.subhead{font-weight:bold;margin-top:2em;}.smaller{font-size:smaller}.bigger{font-size:130%}
+td,th{padding:0.2em}
+ul{margin:0.5em 1.5em 0.5em 1.5em;padding:0;}
+ol{margin:0.5em 1.5em 0.5em 1.5em;padding:0;}
+ul{list-style-type:square;}
+ul ul{list-style-type:disc;}
+ul ul ul{list-style-type:circle;}
+ul ul ul ul{list-style-type:disc;}
+ul li{list-style:square;margin:0.1em 0em 0.6em 0;padding:0 0 0 0;line-height:140%;}
+ol li{margin:0.1em 0em 0.6em 1.5em;padding:0 0 0 0px;line-height:140%;list-style-type:decimal;}
+li ul li{font-size:85%;font-style:italic;list-style-type:disc;background:transparent;padding:0 0 0 0;}
+li li ul li{font-size:85%;font-style:normal;list-style-type:circle;background:transparent;padding:0 0 0 0;}
+li li li ul li{list-style-type:disc;background:transparent;padding:0 0 0 0;}
+li ol li{list-style-type:decimal;}
+li li ol li{list-style-type:decimal;}
+ol.outline li:hover{cursor:pointer}
+ol.outline li.nofold:hover{cursor:default}
+ul.outline li:hover{cursor:pointer}
+ul.outline li.nofold:hover{cursor:default}
+ol.outline{list-style:decimal;}
+ol.outline ol{list-style-type:lower-alpha}
+ol.outline li.nofold{padding:0 0 0 20px;background:transparent url(../graphics/nofold-dim.gif)no-repeat 0px 0.5em;}
+ol.outline li.unfolded{padding:0 0 0 20px;background:transparent url(../graphics/fold-dim.gif)no-repeat 0px 0.5em;}
+ol.outline li.folded{padding:0 0 0 20px;background:transparent url(../graphics/unfold-dim.gif)no-repeat 0px 0.5em;}
+ol.outline li.unfolded:hover{padding:0 0 0 20px;background:transparent url(../graphics/fold.gif)no-repeat 0px 0.5em;}
+ol.outline li.folded:hover{padding:0 0 0 20px;background:transparent url(../graphics/unfold.gif)no-repeat 0px 0.5em;}
+ul.outline li.nofold{padding:0 0 0 20px;background:transparent url(../graphics/nofold-dim.gif)no-repeat 0px 0.5em;}
+ul.outline li.unfolded{padding:0 0 0 20px;background:transparent url(../graphics/fold-dim.gif)no-repeat 0px 0.5em;}
+ul.outline li.folded{padding:0 0 0 20px;background:transparent url(../graphics/unfold-dim.gif)no-repeat 0px 0.5em;}
+ul.outline li.unfolded:hover{padding:0 0 0 20px;background:transparent url(../graphics/fold.gif)no-repeat 0px 0.5em;}
+ul.outline li.folded:hover{padding:0 0 0 20px;background:transparent url(../graphics/unfold.gif)no-repeat 0px 0.5em;}
+a.titleslide{font-weight:bold;font-style:italic}
+img.hidden{display:none;visibility:hidden}
+div.initial_prompt{display:none;visibility:hidden}
+div.slide{visibility:visible;position:inherit;}
+div.handout{border-top-style:solid;border-top-width:thin;border-top-color:black;}@media screen{.hidden{display:none;visibility:visible}
+div.slide.hidden{display:block;visibility:visible}
+div.handout.hidden{display:block;visibility:visible}
+div.background{display:none;visibility:hidden}
+body.single_slide div.initial_prompt{display:block;visibility:visible}
+body.single_slide div.background{display:block;visibility:visible}
+body.single_slide div.background.hidden{display:none;visibility:hidden}
+body.single_slide.invisible{visibility:hidden}
+body.single_slide.hidden{display:none;visibility:hidden}
+body.single_slide div.slide{position:absolute}
+body.single_slide div.handout{display:none;visibility:hidden}}@media print{.hidden{display:block;visibility:visible}
+div.slide pre{font-size:60%;padding-left:0.5em;}
+div.toolbar{display:none;visibility:hidden;}
+div.slidy_toc{display:none;visibility:hidden;}
+div.background{display:none;visibility:hidden;}
+div.slide{page-break-before:always}
+div.slide.first-slide{page-break-before:avoid}}
\ No newline at end of file
diff --git a/slidy/slidy.min.js b/slidy/slidy.min.js
index c26b4d742..bd80a4395 100644
--- a/slidy/slidy.min.js
+++ b/slidy/slidy.min.js
@@ -1,2881 +1,487 @@
-/* slidy.js
-
- Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
- W3C liability, trademark, document use and software licensing
- rules apply, see:
-
- http://www.w3.org/Consortium/Legal/copyright-documents
- http://www.w3.org/Consortium/Legal/copyright-software
-
- Defines single name "w3c_slidy" in global namespace
- Adds event handlers without trampling on any others
-*/
-
-// the slidy object implementation
-var w3c_slidy = {
- // classify which kind of browser we're running under
- ns_pos: (typeof window.pageYOffset!='undefined'),
- khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false),
- opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false),
- ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false),
- iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false),
- ie: (typeof document.all != "undefined" && !this.opera),
- ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1),
- ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1),
- ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1),
- ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1),
- keyboardless: (this.ipad || this.iphone),
-
- // are we running as XHTML? (doesn't work on Opera)
- is_xhtml: /xml/.test(document.contentType),
-
- slide_number: 0, // integer slide count: 0, 1, 2, ...
- slide_number_element: null, // element containing slide number
- slides: [], // set to array of slide div's
- notes: [], // set to array of handout div's
- backgrounds: [], // set to array of background div's
- toolbar: null, // element containing toolbar
- title: null, // document title
- last_shown: null, // last incrementally shown item
- eos: null, // span element for end of slide indicator
- toc: null, // table of contents
- outline: null, // outline element with the focus
- selected_text_len: 0, // length of drag selection on document
- view_all: 0, // 1 to view all slides + handouts
- want_toolbar: true, // user preference to show/hide toolbar
- mouse_click_enabled: true, // enables left click for next slide
- scroll_hack: 0, // IE work around for position: fixed
- disable_slide_click: false, // used by clicked anchors
-
- lang: "en", // updated to language specified by html file
-
- help_anchor: null, // used for keyboard focus hack in showToolbar()
- help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html",
- help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " +
- "or Pg Up and Pg Dn. Use S and B to change font size.",
-
- size_index: 0,
- size_adjustment: 0,
- sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",
- "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"),
-
- // needed for efficient resizing
- last_width: 0,
- last_height: 0,
-
-
- // Needed for cross browser support for relative width/height on
- // object elements. The work around is to save width/height attributes
- // and then to recompute absolute width/height dimensions on resizing
- objects: [],
-
- // attach initialiation event handlers
- set_up: function () {
- var init = function() { w3c_slidy.init(); };
- if (typeof window.addEventListener != "undefined")
- window.addEventListener("load", init, false);
- else
- window.attachEvent("onload", init);
- },
-
- hide_slides: function () {
- if (document.body && !w3c_slidy.initialized)
- document.body.style.visibility = "hidden";
- else
- setTimeout(w3c_slidy.hide_slides, 50);
- },
-
- // hack to persuade IE to compute correct document height
- // as needed for simulating fixed positioning of toolbar
- ie_hack: function () {
- window.resizeBy(0,-1);
- window.resizeBy(0, 1);
- },
-
- init: function () {
- //alert("slidy starting test 10");
- document.body.style.visibility = "visible";
- this.init_localization();
- this.add_toolbar();
- this.wrap_implicit_slides();
- this.collect_slides();
- this.collect_notes();
- this.collect_backgrounds();
- this.objects = document.body.getElementsByTagName("object");
- this.patch_anchors();
- this.slide_number = this.find_slide_number(location.href);
- window.offscreenbuffering = true;
- this.size_adjustment = this.find_size_adjust();
- this.time_left = this.find_duration();
- this.hide_image_toolbar(); // suppress IE image toolbar popup
- this.init_outliner(); // activate fold/unfold support
- this.title = document.title;
-
- // work around for opera bug
- this.is_xhtml = (document.body.tagName == "BODY" ? false : true);
-
- if (this.slides.length > 0)
- {
- var slide = this.slides[this.slide_number];
-
- if (this.slide_number > 0)
- {
- this.set_visibility_all_incremental("visible");
- this.last_shown = this.previous_incremental_item(null);
- this.set_eos_status(true);
- }
- else
- {
- this.last_shown = null;
- this.set_visibility_all_incremental("hidden");
- this.set_eos_status(!this.next_incremental_item(this.last_shown));
- }
-
- this.set_location();
- this.add_class(this.slides[0], "first-slide");
- w3c_slidy.show_slide(slide);
- }
-
- this.toc = this.table_of_contents();
-
- this.add_initial_prompt();
-
- // bind event handlers without interfering with custom page scripts
- // Tap events behave too weirdly to support clicks reliably on
- // iPhone and iPad, so exclude these from click handler
-
- if (!this.keyboardless)
- this.add_listener(document.body, "click", this.mouse_button_click);
-
- this.add_listener(document, "keydown", this.key_down);
- this.add_listener(document, "keypress", this.key_press);
- this.add_listener(window, "resize", this.resized);
- this.add_listener(window, "scroll", this.scrolled);
- this.add_listener(window, "unload", this.unloaded);
-
- // this seems to be a debugging hack
- //if (!document.body.onclick)
- // document.body.onclick = function () { };
-
- this.single_slide_view();
-
- //this.set_location();
-
- this.resized();
-
- if (this.ie7)
- setTimeout(w3c_slidy.ie_hack, 100);
-
- this.show_toolbar();
-
- // for back button detection
- setInterval(function () { w3c_slidy.check_location(); }, 200);
- w3c_slidy.initialized = true;
- },
-
- // create div element with links to each slide
- table_of_contents: function () {
- var toc = this.create_element("div");
- this.add_class(toc, "slidy_toc hidden");
- //toc.setAttribute("tabindex", "0");
-
- var heading = this.create_element("div");
- this.add_class(heading, "toc-heading");
- heading.innerHTML = this.localize("Table of Contents");
-
- toc.appendChild(heading);
- var previous = null;
-
- for (var i = 0; i < this.slides.length; ++i)
- {
- var title = this.has_class(this.slides[i], "title");
- var num = document.createTextNode((i + 1) + ". ");
-
- toc.appendChild(num);
-
- var a = this.create_element("a");
- a.setAttribute("href", "#(" + (i+1) + ")");
-
- if (title)
- this.add_class(a, "titleslide");
-
- var name = document.createTextNode(this.slide_name(i));
- a.appendChild(name);
- a.onclick = w3c_slidy.toc_click;
- a.onkeydown = w3c_slidy.toc_key_down;
- a.previous = previous;
-
- if (previous)
- previous.next = a;
-
- toc.appendChild(a);
-
- if (i == 0)
- toc.first = a;
-
- if (i < this.slides.length - 1)
- {
- var br = this.create_element("br");
- toc.appendChild(br);
- }
-
- previous = a;
- }
-
- toc.focus = function () {
- if (this.first)
- this.first.focus();
- }
-
- toc.onmouseup = w3c_slidy.mouse_button_up;
-
- toc.onclick = function (e) {
- e||(e=window.event);
-
- if (w3c_slidy.selected_text_len <= 0)
- w3c_slidy.hide_table_of_contents(true);
-
- w3c_slidy.stop_propagation(e);
-
- if (e.cancel != undefined)
- e.cancel = true;
-
- if (e.returnValue != undefined)
- e.returnValue = false;
-
- return false;
- };
-
- document.body.insertBefore(toc, document.body.firstChild);
- return toc;
- },
-
- is_shown_toc: function () {
- return !w3c_slidy.has_class(w3c_slidy.toc, "hidden");
- },
-
- show_table_of_contents: function () {
- w3c_slidy.remove_class(w3c_slidy.toc, "hidden");
- var toc = w3c_slidy.toc;
- toc.focus();
-
- if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0)
- setTimeout(w3c_slidy.ie_hack, 100);
- },
-
- hide_table_of_contents: function (focus) {
- w3c_slidy.add_class(w3c_slidy.toc, "hidden");
-
- if (focus && !w3c_slidy.opera)
- w3c_slidy.help_anchor.focus();
- },
-
- toggle_table_of_contents: function () {
- if (w3c_slidy.is_shown_toc())
- w3c_slidy.hide_table_of_contents(true);
- else
- w3c_slidy.show_table_of_contents();
- },
-
- // called on clicking toc entry
- toc_click: function (e) {
- if (!e)
- e = window.event;
-
- var target = w3c_slidy.get_target(e);
-
- if (target && target.nodeType == 1)
- {
- var uri = target.getAttribute("href");
-
- if (uri)
- {
- //alert("going to " + uri);
- var slide = w3c_slidy.slides[w3c_slidy.slide_number];
- w3c_slidy.hide_slide(slide);
- w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);
- slide = w3c_slidy.slides[w3c_slidy.slide_number];
- w3c_slidy.last_shown = null;
- w3c_slidy.set_location();
- w3c_slidy.set_visibility_all_incremental("hidden");
- w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
- w3c_slidy.show_slide(slide);
- //target.focus();
-
- try
- {
- if (!w3c_slidy.opera)
- w3c_slidy.help_anchor.focus();
- }
- catch (e)
- {
- }
- }
- }
-
- w3c_slidy.hide_table_of_contents(true);
- if (w3c_slidy.ie7) w3c_slidy.ie_hack();
- w3c_slidy.stop_propagation(e);
- return w3c_slidy.cancel(e);
- },
-
- // called onkeydown for toc entry
- toc_key_down: function (event) {
- var key;
-
- if (!event)
- var event = window.event;
-
- // kludge around NS/IE differences
- if (window.event)
- key = window.event.keyCode;
- else if (event.which)
- key = event.which;
- else
- return true; // Yikes! unknown browser
-
- // ignore event if key value is zero
- // as for alt on Opera and Konqueror
- if (!key)
- return true;
-
- // check for concurrent control/command/alt key
- // but are these only present on mouse events?
-
- if (event.ctrlKey || event.altKey)
- return true;
-
- if (key == 13)
- {
- var uri = this.getAttribute("href");
-
- if (uri)
- {
- //alert("going to " + uri);
- var slide = w3c_slidy.slides[w3c_slidy.slide_number];
- w3c_slidy.hide_slide(slide);
- w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);
- slide = w3c_slidy.slides[w3c_slidy.slide_number];
- w3c_slidy.last_shown = null;
- w3c_slidy.set_location();
- w3c_slidy.set_visibility_all_incremental("hidden");
- w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
- w3c_slidy.show_slide(slide);
- //target.focus();
-
- try
- {
- if (!w3c_slidy.opera)
- w3c_slidy.help_anchor.focus();
- }
- catch (e)
- {
- }
- }
-
- w3c_slidy.hide_table_of_contents(true);
-
- if (self.ie7)
- w3c_slidy.ie_hack();
-
- return w3c_slidy.cancel(event);
- }
-
- if (key == 40 && this.next)
- {
- this.next.focus();
- return w3c_slidy.cancel(event);
- }
-
- if (key == 38 && this.previous)
- {
- this.previous.focus();
- return w3c_slidy.cancel(event);
- }
-
- return true;
- },
-
-
- // ### OBSOLETE ###
- before_print: function () {
- this.show_all_slides();
- this.hide_toolbar();
- alert("before print");
- },
-
- // ### OBSOLETE ###
- after_print: function () {
- if (!this.view_all)
- {
- this.single_slide_view();
- this.show_toolbar();
- }
- alert("after print");
- },
-
- // ### OBSOLETE ###
- print_slides: function () {
- this.before_print();
- window.print();
- this.after_print();
- },
-
- // ### OBSOLETE ?? ###
- toggle_view: function () {
- if (this.view_all)
- {
- this.single_slide_view();
- this.show_toolbar();
- this.view_all = 0;
- }
- else
- {
- this.show_all_slides();
- this.hide_toolbar();
- this.view_all = 1;
- }
- },
-
- // prepare for printing ### OBSOLETE ###
- show_all_slides: function () {
- this.remove_class(document.body, "single_slide");
- this.set_visibility_all_incremental("visible");
- },
-
- // restore after printing ### OBSOLETE ###
- single_slide_view: function () {
- this.add_class(document.body, "single_slide");
- this.set_visibility_all_incremental("visible");
- this.last_shown = this.previous_incremental_item(null);
- },
-
- // suppress IE's image toolbar pop up
- hide_image_toolbar: function () {
- if (!this.ns_pos)
- {
- var images = document.getElementsByTagName("IMG");
-
- for (var i = 0; i < images.length; ++i)
- images[i].setAttribute("galleryimg", "no");
- }
- },
-
- unloaded: function (e) {
- //alert("unloaded");
- },
-
- // Safari and Konqueror don't yet support getComputedStyle()
- // and they always reload page when location.href is updated
- is_KHTML: function () {
- var agent = navigator.userAgent;
- return (agent.indexOf("KHTML") >= 0 ? true : false);
- },
-
- // find slide name from first h1 element
- // default to document title + slide number
- slide_name: function (index) {
- var name = null;
- var slide = this.slides[index];
-
- var heading = this.find_heading(slide);
-
- if (heading)
- name = this.extract_text(heading);
-
- if (!name)
- name = this.title + "(" + (index + 1) + ")";
-
- name.replace(/\&/g, "&");
- name.replace(/\/g, ">");
-
- return name;
- },
-
- // find first h1 element in DOM tree
- find_heading: function (node) {
- if (!node || node.nodeType != 1)
- return null;
-
- if (node.nodeName == "H1" || node.nodeName == "h1")
- return node;
-
- var child = node.firstChild;
-
- while (child)
- {
- node = this.find_heading(child);
-
- if (node)
- return node;
-
- child = child.nextSibling;
- }
-
- return null;
- },
-
- // recursively extract text from DOM tree
- extract_text: function (node) {
- if (!node)
- return "";
-
- // text nodes
- if (node.nodeType == 3)
- return node.nodeValue;
-
- // elements
- if (node.nodeType == 1)
- {
- node = node.firstChild;
- var text = "";
-
- while (node)
- {
- text = text + this.extract_text(node);
- node = node.nextSibling;
- }
-
- return text;
- }
-
- return "";
- },
-
- // find copyright text from meta element
- find_copyright: function () {
- var name, content;
- var meta = document.getElementsByTagName("meta");
-
- for (var i = 0; i < meta.length; ++i)
- {
- name = meta[i].getAttribute("name");
- content = meta[i].getAttribute("content");
-
- if (name == "copyright")
- return content;
- }
-
- return null;
- },
-
- find_size_adjust: function () {
- var name, content, offset;
- var meta = document.getElementsByTagName("meta");
-
- for (var i = 0; i < meta.length; ++i)
- {
- name = meta[i].getAttribute("name");
- content = meta[i].getAttribute("content");
-
- if (name == "font-size-adjustment")
- return 1 * content;
- }
-
- return 1;
- },
-
- // for 20 minutes
- find_duration: function () {
- var name, content, offset;
- var meta = document.getElementsByTagName("meta");
-
- for (var i = 0; i < meta.length; ++i)
- {
- name = meta[i].getAttribute("name");
- content = meta[i].getAttribute("content");
-
- if (name == "duration")
- return 60000 * content;
- }
-
- return null;
- },
-
- replace_by_non_breaking_space: function (str) {
- for (var i = 0; i < str.length; ++i)
- str[i] = 160;
- },
-
- // ### CHECK ME ### is use of "li" okay for text/html?
- // for XHTML do we also need to specify namespace?
- init_outliner: function () {
- var items = document.getElementsByTagName("li");
-
- for (var i = 0; i < items.length; ++i)
- {
- var target = items[i];
-
- if (!this.has_class(target.parentNode, "outline"))
- continue;
-
- target.onclick = this.outline_click;
-/* ### more work needed for IE6
- if (!this.ns_pos)
- {
- target.onmouseover = this.hover_outline;
- target.onmouseout = this.unhover_outline;
- }
-*/
- if (this.foldable(target))
- {
- target.foldable = true;
- target.onfocus = function () {w3c_slidy.outline = this;};
- target.onblur = function () {w3c_slidy.outline = null;};
-
- if (!target.getAttribute("tabindex"))
- target.setAttribute("tabindex", "0");
-
- if (this.has_class(target, "expand"))
- this.unfold(target);
- else
- this.fold(target);
- }
- else
- {
- this.add_class(target, "nofold");
- target.visible = true;
- target.foldable = false;
- }
- }
- },
-
- foldable: function (item) {
- if (!item || item.nodeType != 1)
- return false;
-
- var node = item.firstChild;
-
- while (node)
- {
- if (node.nodeType == 1 && this.is_block(node))
- return true;
-
- node = node.nextSibling;
- }
-
- return false;
- },
-
- // ### CHECK ME ### switch to add/remove "hidden" class
- fold: function (item) {
- if (item)
- {
- this.remove_class(item, "unfolded");
- this.add_class(item, "folded");
- }
-
- var node = item ? item.firstChild : null;
-
- while (node)
- {
- if (node.nodeType == 1 && this.is_block(node)) // element
- {
- w3c_slidy.add_class(node, "hidden");
- }
-
- node = node.nextSibling;
- }
-
- item.visible = false;
- },
-
- // ### CHECK ME ### switch to add/remove "hidden" class
- unfold: function (item) {
- if (item)
- {
- this.add_class(item, "unfolded");
- this.remove_class(item, "folded");
- }
-
- var node = item ? item.firstChild : null;
-
- while (node)
- {
- if (node.nodeType == 1 && this.is_block(node)) // element
- {
- w3c_slidy.remove_class(node, "hidden");
- }
-
- node = node.nextSibling;
- }
-
- item.visible = true;
- },
-
- outline_click: function (e) {
- if (!e)
- e = window.event;
-
- var rightclick = false;
- var target = w3c_slidy.get_target(e);
-
- while (target && target.visible == undefined)
- target = target.parentNode;
-
- if (!target)
- return true;
-
- if (e.which)
- rightclick = (e.which == 3);
- else if (e.button)
- rightclick = (e.button == 2);
-
- if (!rightclick && target.visible != undefined)
- {
- if (target.foldable)
- {
- if (target.visible)
- w3c_slidy.fold(target);
- else
- w3c_slidy.unfold(target);
- }
-
- w3c_slidy.stop_propagation(e);
- e.cancel = true;
- e.returnValue = false;
- }
-
- return false;
- },
-
- add_initial_prompt: function () {
- var prompt = this.create_element("div");
- prompt.setAttribute("class", "initial_prompt");
-
- var p1 = this.create_element("p");
- prompt.appendChild(p1);
- p1.setAttribute("class", "help");
-
- if (this.keyboardless)
- p1.innerHTML = "Tap footer to move to next slide";
- else
- p1.innerHTML = "Space or Right Arrow to move to next " +
- "slide, click help below for more details";
-
- this.add_listener(prompt, "click", function (e) {
- document.body.removeChild(prompt);
- w3c_slidy.stop_propagation(e);
-
- if (e.cancel != undefined)
- e.cancel = true;
-
- if (e.returnValue != undefined)
- e.returnValue = false;
-
- return false;
- });
-
- document.body.appendChild(prompt);
- this.initial_prompt = prompt;
- setTimeout(function() {document.body.removeChild(prompt);}, 5000);
- },
-
- add_toolbar: function () {
- var counter, page;
-
- this.toolbar = this.create_element("div");
- this.toolbar.setAttribute("class", "toolbar");
-
- // a reasonably behaved browser
- if (this.ns_pos || !this.ie6)
- {
- var right = this.create_element("div");
- right.setAttribute("style", "float: right; text-align: right");
-
- counter = this.create_element("span")
- counter.innerHTML = this.localize("slide") + " n/m";
- right.appendChild(counter);
- this.toolbar.appendChild(right);
-
- var left = this.create_element("div");
- left.setAttribute("style", "text-align: left");
-
- // global end of slide indicator
- this.eos = this.create_element("span");
- this.eos.innerHTML = "* ";
- left.appendChild(this.eos);
-
- var help = this.create_element("a");
- help.setAttribute("href", this.help_page);
- help.setAttribute("title", this.localize(this.help_text));
- help.innerHTML = this.localize("help?");
- left.appendChild(help);
- this.help_anchor = help; // save for focus hack
-
- var gap1 = document.createTextNode(" ");
- left.appendChild(gap1);
-
- var contents = this.create_element("a");
- contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()");
- contents.setAttribute("title", this.localize("table of contents"));
- contents.innerHTML = this.localize("contents?");
- left.appendChild(contents);
-
- var gap2 = document.createTextNode(" ");
- left.appendChild(gap2);
-
- var copyright = this.find_copyright();
-
- if (copyright)
- {
- var span = this.create_element("span");
- span.className = "copyright";
- span.innerHTML = copyright;
- left.appendChild(span);
- }
-
- this.toolbar.setAttribute("tabindex", "0");
- this.toolbar.appendChild(left);
- }
- else // IE6 so need to work around its poor CSS support
- {
- this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute");
- this.toolbar.style.zIndex = "200";
- this.toolbar.style.width = "99.9%";
- this.toolbar.style.height = "1.2em";
- this.toolbar.style.top = "auto";
- this.toolbar.style.bottom = "0";
- this.toolbar.style.left = "0";
- this.toolbar.style.right = "0";
- this.toolbar.style.textAlign = "left";
- this.toolbar.style.fontSize = "60%";
- this.toolbar.style.color = "red";
- this.toolbar.borderWidth = 0;
- this.toolbar.className = "toolbar";
- this.toolbar.style.background = "rgb(240,240,240)";
-
- // would like to have help text left aligned
- // and page counter right aligned, floating
- // div's don't work, so instead use nested
- // absolutely positioned div's.
-
- var sp = this.create_element("span");
- sp.innerHTML = " * ";
- this.toolbar.appendChild(sp);
- this.eos = sp; // end of slide indicator
-
- var help = this.create_element("a");
- help.setAttribute("href", this.help_page);
- help.setAttribute("title", this.localize(this.help_text));
- help.innerHTML = this.localize("help?");
- this.toolbar.appendChild(help);
- this.help_anchor = help; // save for focus hack
-
- var gap1 = document.createTextNode(" ");
- this.toolbar.appendChild(gap1);
-
- var contents = this.create_element("a");
- contents.setAttribute("href", "javascript:toggleTableOfContents()");
- contents.setAttribute("title", this.localize("table of contents".localize));
- contents.innerHTML = this.localize("contents?");
- this.toolbar.appendChild(contents);
-
- var gap2 = document.createTextNode(" ");
- this.toolbar.appendChild(gap2);
-
- var copyright = this.find_copyright();
-
- if (copyright)
- {
- var span = this.create_element("span");
- span.innerHTML = copyright;
- span.style.color = "black";
- span.style.marginLeft = "0.5em";
- this.toolbar.appendChild(span);
- }
-
- counter = this.create_element("div")
- counter.style.position = "absolute";
- counter.style.width = "auto"; //"20%";
- counter.style.height = "1.2em";
- counter.style.top = "auto";
- counter.style.bottom = 0;
- counter.style.right = "0";
- counter.style.textAlign = "right";
- counter.style.color = "red";
- counter.style.background = "rgb(240,240,240)";
-
- counter.innerHTML = this.localize("slide") + " n/m";
- this.toolbar.appendChild(counter);
- }
-
- // ensure that click isn't passed through to the page
- this.toolbar.onclick =
- function (e) {
- if (!e)
- e = window.event;
-
- var target = e.target;
-
- if (!target && e.srcElement)
- target = e.srcElement;
-
- // work around Safari bug
- if (target && target.nodeType == 3)
- target = target.parentNode;
-
- w3c_slidy.stop_propagation(e);
-
- if (target && target.nodeName.toLowerCase() != "a")
- w3c_slidy.mouse_button_click(e);
- };
-
- this.slide_number_element = counter;
- this.set_eos_status(false);
- document.body.appendChild(this.toolbar);
- },
-
- // wysiwyg editors make it hard to use div elements
- // e.g. amaya loses the div when you copy and paste
- // this function wraps div elements around implicit
- // slides which start with an h1 element and continue
- // up to the next heading or div element
- wrap_implicit_slides: function () {
- var i, heading, node, next, div;
- var headings = document.getElementsByTagName("h1");
-
- if (!headings)
- return;
-
- for (i = 0; i < headings.length; ++i)
- {
- heading = headings[i];
-
- if (heading.parentNode != document.body)
- continue;
-
- node = heading.nextSibling;
-
- div = document.createElement("div");
- this.add_class(div, "slide");
- document.body.replaceChild(div, heading);
- div.appendChild(heading);
-
- while (node)
- {
- if (node.nodeType == 1 && // an element
- (node.nodeName == "H1" ||
- node.nodeName == "h1" ||
- node.nodeName == "DIV" ||
- node.nodeName == "div"))
- break;
-
- next = node.nextSibling;
- node = document.body.removeChild(node);
- div.appendChild(node);
- node = next;
- }
- }
- },
-
-// return new array of all slides
- collect_slides: function () {
- var slides = new Array();
- var divs = document.body.getElementsByTagName("div");
-
- for (var i = 0; i < divs.length; ++i)
- {
- div = divs.item(i);
-
- if (this.has_class(div, "slide"))
- {
- // add slide to collection
- slides[slides.length] = div;
-
- // hide each slide as it is found
- this.add_class(div, "hidden");
-
- // add dummy
at end for scrolling hack
- var node1 = document.createElement("br");
- div.appendChild(node1);
- var node2 = document.createElement("br");
- div.appendChild(node2);
- }
- else if (this.has_class(div, "background"))
- { // work around for Firefox SVG reload bug
- // which otherwise replaces 1st SVG graphic with 2nd
- div.style.display = "block";
- }
- }
-
- this.slides = slides;
- },
-
- // return new array of all