add first version of linuxwochen 2011 slides
authorrobert <robert>
Wed, 4 May 2011 23:52:51 +0000 (23:52 +0000)
committerrobert <robert>
Wed, 4 May 2011 23:52:51 +0000 (23:52 +0000)
linuxwochen2011/cc-by-sa-80x15.png [new file with mode: 0644]
linuxwochen2011/index.html [new file with mode: 0755]
linuxwochen2011/local.conf [new file with mode: 0644]
linuxwochen2011/nightly-aurora-beta.jpg [new file with mode: 0644]
linuxwochen2011/slides.css [new file with mode: 0644]
linuxwochen2011/slides.js [new file with mode: 0644]
linuxwochen2011/template/firefox-title.png [new file with mode: 0644]
linuxwochen2011/template/page-background.png [new file with mode: 0644]

diff --git a/linuxwochen2011/cc-by-sa-80x15.png b/linuxwochen2011/cc-by-sa-80x15.png
new file mode 100644 (file)
index 0000000..c67509f
Binary files /dev/null and b/linuxwochen2011/cc-by-sa-80x15.png differ
diff --git a/linuxwochen2011/index.html b/linuxwochen2011/index.html
new file mode 100755 (executable)
index 0000000..3b9c057
--- /dev/null
@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta name="Author" content="KaiRo - Robert Kaiser">
+  <title>In-Tab UI</title>
+  <link rel="stylesheet" type="text/css" href="slides.css">
+  <script type="text/javascript" src="slides.js"></script>
+  <link rel="contents" href="#index" title="Überblick">
+  <link rel="index" id="link-toc" href="#toc" title="Inhalt">
+  <link rel="start" id="link-start" href="#index" title="Start">
+  <!-- link rel="first" id="link-first" href="#" title="First page" hidden>
+  <link rel="previous" id="link-prev" href="#" title="Previous page" hidden>
+  <link rel="next" id="link-next" href="#" title="Next page" hidden>
+  <link rel="last" id="link-last" href="#" title="Last page" hidden -->
+</head>
+<body onload="docLoaded();">
+<header id="header"><div id="header-text">CSI:Mozilla</div>
+  <a id="headerlogo" href="#index" title="Startseite">Mozilla Firefox</a>
+</header>
+<nav id="slidenav"><div id="subheader-text"></div>
+  <a href="#toc" id="nav-toc" accesskey="t">inhalt</a> ||
+  <a href="#index" id="nav-start" accesskey="s">start</a> ||
+  <a href="#" id="nav-prev" accesskey="p" hidden>&lt; zurück</a>
+  <span id="nav-prev-nolink" class="nolink">&lt; zurück</span> |
+  <a href="#" id="nav-next" id="goNext" accesskey="n" hidden>weiter &gt;</a>
+  <span id="nav-next-nolink" class="nolink">weiter &gt;</span>
+</nav>
+
+<article id="toc" title="Table of Contents">
+<h1>Inhalt</h1>
+<h2>CSI:Mozilla</h2>
+
+<div class="captionedbox">
+<p class="captionedbox-caption">Folgende Folien sind in dieser Präsentation enthalten:</p>
+<div class="captionedbox-content">
+<ul id="toc-list">
+</ul>
+</article>
+
+<article id="index" title="Startseite">
+<h1>CSI:Mozilla - Den Bugs auf der Spur</h1>
+
+<div class="simplebox">
+<mark><a href="http://home.kairo.at/">Robert Kaiser</a></mark>,
+"KaiRo" &lt;kairo@kairo.at&gt;
+<br><small>Mozilla-Manager</small>
+</div>
+
+<div class="captionedbox">
+<p class="captionedbox-caption">Slides:
+  <a href="http://kairo.mozdev.org/slides/linuxwochen2011/">http://kairo.mozdev.org/slides/linuxwochen2011/</a></p>
+<div class="captionedbox-content small">
+<ul class="small">
+  <li>Erstellt für einen Vortrag auf den
+    <a href="http://www.linuxwochen.at/">Linuxwochen 2011</a> in
+    Wien.</li>
+  <li>Geschrieben in HTML 5 mit CSS 3 und JavaScript.</li>
+  <li>Navigation mit Links auf allen Folien, mit Accesskeys
+   (e.g. "n"/Alt+Shift+N for "next") oder vor/zurück-Pfeilasten</li>
+  <li><a href="#toc">Inhalt</a></li>
+  <li><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/at/"><img
+      alt="Licensed under CC-BY-SA," style="border-width:0;vertical-align:bottom;"
+      src="cc-by-sa-80x15.png" /></a> 05/2011 Robert Kaiser</li>
+</ul>
+</div>
+</div>
+</article>
+
+<article id="mozilla" title="Was ist Mozilla?">
+<h1>Mozilla</h1>
+
+<div class="simplebox">
+<ul>
+  <li><mark>Gemeinnützige</mark> Stiftung</li>
+  <li>Innovation, Offenheit und Auswahl im Web</li>
+  <li>Firefox, Thunderbird, Drumbeat, Bugzilla, SeaMonkey, XULRunner, ...</li>
+  <li>Riesige Community</li>
+</ul>
+</div>
+</article>
+
+<article id="ff4-overview" title="Firefox 4: Überblick">
+<h1>Firefox 4</h1>
+
+<div class="simplebox">
+<ul>
+  <li>März 2011 - auch für Android und N900!</li>
+  <li>Große Anzahl an Neuerungen</li>
+  <li>Manche Funktionen fast 1 Jahr vorher fertig</li>
+  <li>Letztes "großes" Release</li>
+  <li>In Zukunft schnelle, kleine Schritte</li>
+</ul>
+</div>
+</article>
+
+<article id="ff4-features" title="Firefox 4: Funktionen">
+<h1>Firefox 4: Funktionen</h1>
+
+<div class="simplebox">
+<ul>
+  <li>Neue einfachere Oberfläche (anpassbar!)</li>
+  <li>Neue Web-Funktionen -
+    <a href="http://webofwonder.org/">webofwonder.org</a> - WebGL, WebM,
+    Audio-API, CSS-Transformationen, IndexedDB, ...</li>
+  <li>Performance (Start und Ausführung, Hardwarebeschleunigung)</li>
+  <li>DNT, Sync, App-Tabs, Panorama, ...</li>
+  <li>Neustart-freie Add-Ons</li>
+</ul>
+</div>
+</article>
+
+<article id="new-process" title="Neuer Release-Prozess">
+<h1>Neuer Prozess</h1>
+
+<div class="simplebox">
+<ul>
+  <li>Kleine, schnelle Schritte, Versionsnummern immer weniger wichtig</li>
+  <li>Neuer "Zug" alle 6 Wochen</li>
+  <li>Nightly / Aurora / Beta / Release</li>
+  <li>Derzeit  5 in Aurora, 6 in Nightly - 17./24. Mai: 5-&gt;Beta, 6-&gt;Aurora, 7-&gt;Nightly</li>
+  <li>Automatische Updates</li>
+</ul>
+<div class="cent topmargin">
+<img src="nightly-aurora-beta.jpg" alt="Logos: Nightly, Aurora, Beta/Firefox">
+</div>
+</div>
+</article>
+
+<article id="ff5" title="Firefox 5">
+<h1>Firefox 5</h1>
+
+<div class="simplebox">
+<ul>
+  <li><mark>Juni 2011</mark> (!)</li>
+  <li>Derzeit "Aurora"</li>
+  <li>Performance (Verbindungen, Seiten-Ausführung)</li>
+  <li>CSS-Animationen, überarbeitete Rechtschreibprüfung, ...</li>
+  <li><a href="https://wiki.mozilla.org/Features/Release_Tracking#Firefox_5"
+        >https://wiki.mozilla.org/Features/Release_Tracking#Firefox_5</a></li>
+</ul>
+</div>
+</article>
+
+<article id="ff6" title="Firefox 6">
+<h1>Firefox 6</h1>
+
+<div class="simplebox">
+<ul>
+  <li><mark>August 2011</mark></li>
+  <li>Derzeit "Nightly"</li>
+  <li>"Scratchpad" ("Schmierzettel"?), Firefox Share (F1)?</li>
+  <li>Ab 24. Mai "Aurora" - was nicht korrekt funktioniert, wird gestrichen
+    und kommt später</li>
+</ul>
+</div>
+</article>
+
+<article id="ff7plus" title="Firefox 7+">
+<h1>Firefox 7+</h1>
+
+<div class="simplebox">
+<ul>
+  <li>Websockets, <a href="https://wiki.mozilla.org/Identity">"Firefox
+    Identity"</a>, usw.</li>
+  <li><a href="https://wiki.mozilla.org/Platform/Features/IonMonkey">"IonMonkey"</a>
+    (Noch schelleres JavaScript)</li>
+  <li><a href="http://blog.mozilla.com/joe/2011/04/26/introducing-the-azure-project/">"Azure"</a>
+    (Besser beschleunigte Grafikfunktionen)</li>
+  <li><a href="https://wiki.mozilla.org/Electrolysis">"Electrolysis"</a> (Prozesstrennung),
+    usw.</li>
+  <li>Auslieferung 12-18 Wochen nach Fertigstellung der Funktionen</li>
+</ul>
+</div>
+</article>
+
+<article id="csi-mozilla" title="CSI:Mozilla">
+<h1>"CSI:Mozilla"</h1>
+
+<div class="simplebox cent">
+<ul>
+  <li>"CrashKill"-Team</li>
+  <li>"Autopsieberichte und Spurensicherung" von "toten" Firefox-Prozessen</li>
+  <li>Finden von größeren Serien"fällen"</li>
+  <li>Analyse von Zusammenhängen</li>
+  <li>Zuständige Entwickler (intern/extern) zur Lösung bewegen</li>
+</ul>
+</div>
+</article>
+
+<article id="crash" title="Was ist ein Absturz?">
+<h1>Absturz?</h1>
+
+<div class="simplebox">
+<ul>
+  <li>Ungültiger Aufruf -&gt; unsauberes Beenden von Prozessen</li>
+  <li>Nicht antwortendes Plugin ("Hang")</li>
+  <li>Absturzmelder sammelt Daten ("Spurensicherung", "Autopsie")</li>
+  <li>An Mozilla übermittelt, ev. mit Kommentar</li>
+  <li>Dort aufbereitet, analysiert</li>
+</ul>
+</div>
+</article>
+
+<article id="reported-data" title="Daten im Bericht">
+<h1>Daten in Absturzberichten</h1>
+
+<div class="simplebox">
+<ul>
+  <li>Produkt, Version, Build ID, System, Channel, ...</li>
+  <li>Aufrufe im Stack ("Autopsie")</li>
+  <li>Geladene Module, Erweiterungen, Kommentar, ... ("Spurensicherung")</li>
+</ul>
+</div>
+</article>
+
+<article id="csi-overview" title="Überblick">
+<h1>Überblick</h1>
+
+<div class="simplebox">
+<ul>
+  <li>Verwandte Abstürze -&gt; "Signatur"</li>
+  <li>"Topcrashers"</li>
+  <li>Signifikante Anstiege</li>
+  <li>Korrelationen</li>
+</ul>
+</div>
+</article>
+
+<article id="demo" title="Demo">
+<h1>Demo</h1>
+
+<div class="simplebox">
+Wahlweise:
+<ul>
+  <li>Absturz</li>
+  <li>Firefox-Funktionen</li>
+</ul>
+</div>
+</article>
+
+<article id="end" title="Aktiv werden">
+<h1>Aktiv werden</h1>
+
+<div class="captionedbox">
+<p class="captionedbox-caption">Danke für die Aufmerksamkeit!</p>
+<div class="captionedbox-content">
+Jetzt ist es an der Zeit, selbst aktiv zu werden:
+<ul>
+  <li><mark>Firefox 4</mark> installieren, wo möglich!</li>
+  <li><mark>Aurora</mark> testen! <a href="http://www.firefox.com/channel">www.firefox.com/channel</a></li>
+  <li><mark>Absturzmeldungen</mark> senden!</li>
+  <li>Mozilla <mark>unterstützen</mark>!</li>
+</ul>
+</div>
+</div>
+</article>
+
+</body>
+</html>
diff --git a/linuxwochen2011/local.conf b/linuxwochen2011/local.conf
new file mode 100644 (file)
index 0000000..0996d80
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+// site branding
+$local_conf_no_wrap=ON;
+// serve it as it is
+$local_conf_serve_as_is=ON;
+?>
diff --git a/linuxwochen2011/nightly-aurora-beta.jpg b/linuxwochen2011/nightly-aurora-beta.jpg
new file mode 100644 (file)
index 0000000..5931ee9
Binary files /dev/null and b/linuxwochen2011/nightly-aurora-beta.jpg differ
diff --git a/linuxwochen2011/slides.css b/linuxwochen2011/slides.css
new file mode 100644 (file)
index 0000000..b4609e2
--- /dev/null
@@ -0,0 +1,276 @@
+/**************************
+ * styles for talk slides *
+ *    by Robert Kaiser    *
+ *    <kairo@kairo.at>    *
+ * (for Linuxwochen 2009) *
+ **************************/
+
+
+/***** base style *****/
+
+html {
+  overflow: hidden; /* to make translations not paint scrollbars */
+}
+
+body {
+  margin: 0px;
+  padding: 0px;
+  border: 0px;
+  font-family: Arial,Helvetica,sans-serif;
+  font-size: 2em;
+  color: #6d7581;
+  background: white url("template/page-background.png") top left repeat-x;
+}
+
+ul {
+  padding-left: 1.2em;
+  margin-bottom: 0.5em;
+}
+
+ul:first-child,
+ul:last-child {
+  margin-top: 0;
+}
+
+#header {
+  height: 38px;
+  position: relative;
+  padding: 0 15px 0 0;
+  z-index: 1;
+}
+
+#headerlogo {
+  position: relative;
+  display: block;
+  text-indent: -500px;
+  font-size: 1px;
+  overflow: hidden;
+  height: 48px;
+  width: 186px;
+  background: url("template/firefox-title.png") 5px 3px no-repeat;
+}
+
+#header-text {
+  float: right;
+  padding: 7px 20px;
+  font-size: 24px;
+  font-weight: bold;
+  color: #C0C8CA;
+}
+
+#header-text.neartime {
+  color: #A0C8DA;
+}
+
+#header-text.ontime {
+  color: #80CC80;
+}
+
+#header-text.overtime {
+  color: #FF8080;
+}
+
+#slidenav {
+  padding: 4px 15px 30px 55px;
+  font-size: 10px;
+  color: #A0C8DA;
+}
+
+#slidenav a:link,
+#slidenav a:visited {
+  color: #6d7581;
+}
+
+#slidenav a:hover,
+#slidenav a:active {
+  color: #0000FF;
+}
+
+#slidenav .nolink {
+  color: #A0C8DA;
+}
+
+#subheader-text {
+  float: right;
+  padding: 0 20px;
+  color: #6d7581;
+}
+
+article {
+  position: absolute;
+  width: 100%;
+  /* header is 38px + 1px border, slidenav is 13px + 4px + 30px paddings,
+     another 5px for safety */
+  height: -moz-calc(100% - 90px);
+  overflow: auto;
+
+  -moz-transition-property: -moz-transform, opacity;
+  -moz-transition-duration: 3s;
+  -moz-transition-timing-function: ease;
+  -webkit-transition-property: -moz-transform, opacity;
+  -webkit-transition-duration: 3s;
+  -webkit-transition-timing-function: ease;
+  -moz-transform-origin: center 5em;
+
+  opacity: 0;
+/*
+  -moz-transform: translate(-100%, 0);
+  -webkit-transform: translate(-100%, 0);
+*/
+/*
+  -moz-transform: scale(0.1) rotate(360deg);
+  -webkit-transform: scale(0.1) rotate(360deg);
+*/
+  -moz-transform: scale(0.1) rotate(360deg) translate(-200%, 0);
+  -webkit-transform: scale(0.1) rotate(360deg) translate(-100%, 0);
+}
+
+article[aria-selected="true"] {
+  opacity: 1;
+  -moz-transform: scale(1) rotate(0deg) translate(0, 0);
+  -webkit-transform: scale(1) rotate(0deg) translate(0, 0);
+}
+
+article[aria-selected="true"] ~ article {
+  opacity: 0;
+/*
+  -moz-transform: translate(100%, 0);
+  -webkit-transform: translate(100%, 0);
+*/
+/*
+  -moz-transform: scale(0.1) rotate(-360deg);
+  -webkit-transform: scale(0.1) rotate(-360deg);
+*/
+  -moz-transform: scale(0.1) rotate(-360deg) translate(200%, 0);
+  -webkit-transform: scale(0.1) rotate(-360deg) translate(100%, 0);
+}
+
+/***** headers *****/
+
+h1 {
+  margin: 0 0 0.5em 0;
+  font-size: 1.7em;
+  font-weight: bold;
+  color: #505050;
+  text-align: center;
+  text-shadow: #AAAA80 3px 3px 5px;
+}
+
+h2 {
+  margin: 0.5em 0;
+  font-size: 1.3em;
+  font-weight: bold;
+  color: #505050;
+  text-align: center;
+  text-shadow: #AAAA80 2px 2px 3px;
+}
+
+h3 {
+  margin: 0.5em 0;
+  font-size: 1.1em;
+  font-weight: bold;
+  color: #505050;
+  text-align: center;
+}
+
+h4 {
+  margin: 0.5em 0;
+  font-size: 1em;
+  font-weight: bold;
+  color: #505050;
+  text-align: left;
+}
+
+/***** boxes *****/
+
+.simplebox {
+  padding: 0.5em;
+}
+
+.captionedbox {
+  padding: 0px;
+}
+
+.simplebox,
+.captionedbox {
+  margin: 1em;
+  border: 1px solid #A0C8DA;
+  background: white url("template/page-background.png") top left repeat-x;
+  -moz-border-radius: .5em;
+  -moz-box-shadow: #6d7581 1px 1px 3px 2px;
+}
+
+.captionedbox-content {
+  margin: 0px;
+  padding: 0.5em;
+  border: 0px;
+  border-top: 2px solid #A0C8DA;
+  -moz-border-top-colors: #A0C8DA #6d7581;
+  -moz-border-radius: 0 0 .5em .5em;
+}
+
+.captionedbox-caption {
+  margin: 0.5em;
+  font-weight: bold;
+  text-shadow: #AAAA80 1px 1px 2px;
+}
+
+/***** misc formatting *****/
+
+mark {
+  font-weight: bold;
+  color: #FF6600;
+  background-color: transparent;
+  text-shadow: #AAAA80 2px 2px 3px;
+}
+
+.border {
+  border: 1px solid #6d7581;
+  padding: 0.5em;
+}
+
+ul > li {
+  margin: 0.5em 0;
+}
+
+.cent {
+  text-align: center;
+}
+
+.topmargin {
+  margin-top: 0.5em;
+}
+
+.akey {
+  text-decoration: underline;
+}
+
+a:link, a:visited { color: #447bc4; text-decoration: none; }
+a:hover, a:active { color: #FF6600; text-decoration: underline; }
+
+mark a:link, mark a:visited { color: #FF6600; }
+mark a:hover, mark a:active { color: #FF6600; }
+
+/***** small stuff *****/
+
+.small,
+.small {
+  font-size: 0.75em;
+}
+
+ul.small,
+.small ul {
+  padding: 0px;
+  border: 0px;
+  margin: 0px 0px 0px 1em;
+}
+
+ul.small > li
+.small ul > li {
+  margin: 0px;
+  padding: 0px;
+  border: 0px;
+}
+
+/***** specific slides *****/
+
diff --git a/linuxwochen2011/slides.js b/linuxwochen2011/slides.js
new file mode 100644 (file)
index 0000000..87b2961
--- /dev/null
@@ -0,0 +1,198 @@
+/******************************
+ * JavaScript for talk slides *
+ *      by Robert Kaiser      *
+ *      <kairo@kairo.at>      *
+ *     (for FOSDEM 2011)      *
+ ******************************/
+
+var slides = {};
+var articleNodes;
+var currentSlide;
+var currentIdx;
+var defaultIdx = 1; // set to slide index to show by default
+var firstIdx = 2; // set no value if to use first available
+var lastIdx; // set no value if to use first available
+
+var pageTitle, headerText, subHeaderText;
+var navPrev, navNext, navPrevNolink, navNextNolink;
+
+// Called when the document has been loaded.
+function docLoaded() {
+  pageTitle = document.getElementsByTagName("title")[0];
+  headerText = document.getElementById("header-text");
+  subHeaderText = document.getElementById("subheader-text");
+  navPrev = document.getElementById("nav-prev");
+  navNext = document.getElementById("nav-next");
+  navPrevNolink = document.getElementById("nav-prev-nolink");
+  navNextNolink = document.getElementById("nav-next-nolink");
+  articleNodes = document.getElementsByTagName("article");
+
+  if (!firstIdx)
+    firstIdx = 0;
+  if (!lastIdx)
+    lastIdx = articleNodes.length - 1;
+
+  // Get a list of all slides (articles).
+  subHeaderText.textContent = articleNodes.length + " slides...";
+  for (var i = 0; i < articleNodes.length; ++i) {
+    subHeaderText.textContent = "Indexing slide " + i + " / " + articleNodes.length;
+    if (!articleNodes[i].id)
+      articleNodes[i].id = "slide_" + i;
+
+    slides[articleNodes[i].id] =
+       {"idx": i,
+        "name": articleNodes[i].id,
+        "title": articleNodes[i].title ? articleNodes[i].title : articleNodes[i].id,
+        "obj": articleNodes[i]};
+
+    if (location.hash.length &&
+        (location.hash == "#" + articleNodes[i].id || location.hash == "#" + i)) {
+      articleNodes[i].setAttribute("aria-selected", "true");
+      currentSlide = slides[articleNodes[i].id];
+      currentIdx = i;
+    }
+  }
+
+  if (!currentSlide) {
+    currentIdx = defaultIdx;
+    currentSlide = slides[articleNodes[currentIdx].id];
+    currentSlide.obj.setAttribute("aria-selected", "true");
+    location.hash = "#" + currentSlide.name;
+  }
+  updateDisplay();
+}
+
+// Called when the hash part of the location changes.
+function locationHashChanged() {
+  if (location.hash.length > 1) {
+    var hashtag = location.hash.substring(1);
+    // If not a number, treat as ID
+    if (isNaN(hashtag) && slides[hashtag]) {
+      currentSlide.obj.removeAttribute("aria-selected");
+      currentSlide = slides[hashtag];
+      currentIdx = currentSlide.idx;
+      currentSlide.obj.setAttribute("aria-selected", "true");
+      updateDisplay();
+    }
+    else if (articleNodes[hashtag]) {
+      currentSlide.obj.removeAttribute("aria-selected");
+      currentIdx = hashtag;
+      currentSlide = slides[articleNodes[currentIdx].id];
+      currentSlide.obj.setAttribute("aria-selected", "true");
+      updateDisplay();
+    }
+  }
+}
+window.onhashchange = locationHashChanged;
+
+// Update the display after we updated what slide is shown.
+function updateDisplay() {
+  if (currentIdx >= firstIdx && currentIdx <= lastIdx &&
+      currentSlide.name != "toc")
+    subHeaderText.textContent = (currentIdx - firstIdx + 1) + "/" +
+                                (lastIdx - firstIdx + 1) + " - " +
+                                currentSlide.title;
+  else
+    subHeaderText.textContent = currentSlide.title;
+  pageTitle.textContent = headerText.textContent + ": " + currentSlide.title;
+  if (currentIdx > firstIdx && currentSlide.name != "toc") {
+    navPrev.hidden = false;
+    navPrev.href = "#" + articleNodes[currentIdx - 1].id;
+    navPrevNolink.hidden = true;
+  }
+  else {
+    navPrev.hidden = true;
+    navPrevNolink.hidden = false;
+  }
+  if (currentIdx < lastIdx && currentSlide.name != "toc") {
+    navNext.hidden = false;
+    navNext.href = "#" + articleNodes[currentIdx + 1].id;
+    navNextNolink.hidden = true;
+  }
+  else {
+    navNext.hidden = true;
+    navNextNolink.hidden = false;
+  }
+  headerText.className = "";
+  slide_start = new Date();
+  if (currentSlide.name == "toc")
+    createTOC();
+  else
+    setTimeout("timerFired()", 1000*(slide_seconds/3));
+}
+
+// Create TOC list.
+function createTOC() {
+ var list = document.getElementById("toc-list");
+ if (!list.getElementsByTagName("li").length) {
+   for (var slide in slides) {
+     if (slide != "toc") {
+       var item = document.createElement("li");
+       var link = document.createElement("a");
+       var slideHeaders = slides[slide].obj.getElementsByTagName("h1");
+       if (slideHeaders.length)
+         link.textContent = slideHeaders[0].textContent;
+       else
+         link.textContent = slides[slide].title;
+       link.href = "#" + slides[slide].name;
+       item.appendChild(link);
+       list.appendChild(item);
+     }
+   }
+ }
+}
+
+// Do timed color variation on slides.
+var slide_seconds = 3*60;
+var slide_start = new Date();
+
+function timerFired() {
+  var slide_current = new Date();
+  var seconds_diff = Math.round((slide_current.getTime() - slide_start.getTime()) / 1000);
+  if (seconds_diff >= slide_seconds) {
+    headerText.className = "overtime";
+  }
+  else if (seconds_diff >= Math.round(2*slide_seconds/3)) {
+    headerText.className = "ontime";
+    setTimeout("timerFired()", 1000*(slide_seconds/3));
+  }
+  else if (seconds_diff >= Math.round(slide_seconds/3)) {
+    headerText.className = "neartime";
+    setTimeout("timerFired()", 1000*(slide_seconds/3));
+  }
+  else {
+    // We should never come here, but if we do, go into a 1s loop until we get over the upcoming step.
+    setTimeout("timerFired()", 1000);
+  }
+}
+setTimeout("timerFired()", 1000*(slide_seconds/3));
+
+// Keyboard/click nav functionality, mostly inherited from FOSDEM 2007.
+(function() {
+  function go(where) {
+    where = where || "next";
+    var navElem = document.getElementById("nav-" + where);
+    if (!navElem.hidden)
+      window.location.href = navElem.href;
+  }
+
+  function handleClick(e) {
+    e = e || event;
+    var target = (window.event) ? e.srcElement : e.target;
+    if (e.which == 1 && target.nodeName != "A" && target.nodeName != "VIDEO")
+      go("next");
+  }
+
+  function handleKeyPress(e) {
+    e = e || event;
+    switch (e.keyCode) {
+      case e.DOM_VK_LEFT:
+        go("prev"); break;
+      case e.DOM_VK_RIGHT:
+        go("next"); break;
+    }
+  }
+
+  window.onclick = handleClick;
+  window.onkeypress = handleKeyPress;
+})();
diff --git a/linuxwochen2011/template/firefox-title.png b/linuxwochen2011/template/firefox-title.png
new file mode 100644 (file)
index 0000000..2648e79
Binary files /dev/null and b/linuxwochen2011/template/firefox-title.png differ
diff --git a/linuxwochen2011/template/page-background.png b/linuxwochen2011/template/page-background.png
new file mode 100644 (file)
index 0000000..b499bb2
Binary files /dev/null and b/linuxwochen2011/template/page-background.png differ