repro-pub

(Arne Babenhauserheide)
2013-12-20: updated s5

updated s5

diff --git a/ui/default/bodybg.gif b/ui/default/bodybg.gif
old mode 100644
new mode 100755
diff --git a/ui/default/framing.css b/ui/default/framing.css
--- a/ui/default/framing.css
+++ b/ui/default/framing.css
@@ -10,7 +10,8 @@ div#header {top: 0; height: 3em; z-index
 div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
 .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2;  list-style: none;}
 div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
-div#controls form {text-align: right; width: 100%; margin: 0;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+  margin: 0;}
 #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
 html>body #currentSlide {position: fixed;}
 
diff --git a/ui/default/iepngfix.htc b/ui/default/iepngfix.htc
--- a/ui/default/iepngfix.htc
+++ b/ui/default/iepngfix.htc
@@ -7,7 +7,7 @@
 // Free usage permitted as long as this notice remains intact.
 
 // This must be a path to a blank image. That's all the configuration you need here.
-var blankImg = 'ui/default/blank.gif';
+var blankImg = 'v11rc1/default/blank.gif';
 
 var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
 
diff --git a/ui/default/pretty.css b/ui/default/pretty.css
--- a/ui/default/pretty.css
+++ b/ui/default/pretty.css
@@ -1,6 +1,6 @@
 /* Following are the presentation styles -- edit away! */
 
-body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2.25em;}
+body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
 :link, :visited {text-decoration: none; color: #00C;}
 #controls :active {color: #88A !important;}
 #controls :focus {outline: 1px dotted #227;}
@@ -45,14 +45,18 @@ div.long {font-size: 0.75em;}
 .slide h3 {font-size: 130%;}
 h1 abbr {font-variant: small-caps;}
 
-div#controls {position: absolute; left: 60%; bottom: 0;
-  width: 40%;
+div#controls {position: absolute; left: 50%; bottom: 0;
+  width: 50%;
   text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}
-html>body div#controls {position: fixed; padding: 0; top: auto;}
+html>body div#controls {position: fixed; padding: 0 0 1em 0;
+  top: auto;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+  margin: 0; padding: 0;}
 #controls #navLinks a {padding: 0; margin: 0 0.5em; 
   background: #005; border: none; color: #779; 
   cursor: pointer;}
-#controls #navList #jumplist {background: #DDD; color: #227;}
+#controls #navList {height: 1em;}
+#controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}
 
 #currentSlide {text-align: center; font-size: 0.5em; color: #449;}
 
diff --git a/ui/default/s5-core.css b/ui/default/s5-core.css
--- a/ui/default/s5-core.css
+++ b/ui/default/s5-core.css
@@ -3,7 +3,7 @@
 div#header, div#footer, div#controls, .slide {position: absolute;}
 html>body div#header, html>body div#footer, 
   html>body div#controls, html>body .slide {position: fixed;}
-.handout, .notes {display: none;}
+.handout {display: none;}
 .layout {display: block;}
 .slide, .hideme, .incremental {visibility: hidden;}
 #slide0 {visibility: visible;}
diff --git a/ui/default/slides.js b/ui/default/slides.js
--- a/ui/default/slides.js
+++ b/ui/default/slides.js
@@ -1,4 +1,4 @@
-// S5 v1.2a1 slides.js -- released into the Public Domain
+// S5 v1.1 slides.js -- released into the Public Domain
 //
 // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information 
 // about all the wonderful and talented contributors to this code!
@@ -13,22 +13,7 @@ var s5mode = true;
 var defaultView = 'slideshow';
 var controlVis = 'visible';
 
-var s5NotesWindow;
-var s5NotesWindowLoaded = false;
-var previousSlide = 0;
-var presentationStart = new Date();
-var slideStart = new Date();
-
-var countdown = {
-	timer: 0,
-	state: 'pause',
-	start: new Date(),
-	end: 0,
-	remaining: 0
-};
-
-
-var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+var isIE = navigator.appName == 'Microsoft Internet Explorer' ? 1 : 0;
 var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
 var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
 
@@ -43,7 +28,7 @@ function hasValue(object, value) {
 }
 
 function removeClass(object,className) {
-	if (!object || !hasClass(object,className)) return;
+	if (!object) return;
 	object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
 }
 
@@ -96,8 +81,7 @@ function slideLabel() {
 
 		var did = 'slide' + n.toString();
 		obj.setAttribute('id',did);
-
-//		if (isOp) continue;   // Opera fix (hallvord)
+		if (isOp) continue;
 
 		var otext = '';
 		var menu = obj.firstChild;
@@ -122,12 +106,9 @@ function currentSlide() {
 	} else {
 		cs = document.currentSlide;
 	}
-	cs.innerHTML = '<a id="plink" href="">' + 
-		'<span id="csHere">' + snum + '<\/span> ' + 
+	cs.innerHTML = '<span id="csHere">' + snum + '<\/span> ' + 
 		'<span id="csSep">\/<\/span> ' + 
-		'<span id="csTotal">' + (smax-1) + '<\/span>' +
-		'<\/a>'
-		;
+		'<span id="csTotal">' + (smax-1) + '<\/span>';
 	if (snum == 0) {
 		cs.style.visibility = 'hidden';
 	} else {
@@ -170,17 +151,11 @@ function go(step) {
 	}
 	if (incrementals[snum].length > 0 && incpos > 0)
 		addClass(incrementals[snum][incpos - 1], 'current');
-	if (isOp) { //hallvord
-		location.hash = nid;
-	} else {
-		ce.style.visibility = 'hidden'; 
-		ne.style.visibility = 'visible';
-	} // /hallvord
+	ce.style.visibility = 'hidden';
+	ne.style.visibility = 'visible';
 	jl.selectedIndex = snum;
 	currentSlide();
-	loadNote();
-	permaLink();
-	number = undef;
+	number = 0;
 }
 
 function goTo(target) {
@@ -200,7 +175,6 @@ function subgo(step) {
 		addClass(incrementals[snum][incpos], 'incremental');
 		addClass(incrementals[snum][incpos - 1],'current');
 	}
-	loadNote();
 }
 
 function toggle() {
@@ -296,9 +270,6 @@ function keys(key) {
 			case 67: // c
 				showHide('k');
 				break;
-			case 78: // n
-				createNotesWindow();
-				break;
 		}
 		if (key.which < 48 || key.which > 57) {
 			number = undef;
@@ -318,7 +289,7 @@ function clicker(e) {
 		target = window.event.srcElement;
 		e = window.event;
 	} else target = e.target;
-	if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+	if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
 	if (!e.which || e.which == 1) {
 		if (!incrementals[snum] || incpos >= incrementals[snum].length) {
 			go(1);
@@ -400,10 +371,6 @@ function externalLinks() {
 	}
 }
 
-function permaLink() {
-	document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
-}
-
 function createControls() {
 	var controlsDiv = document.getElementById("controls");
 	if (!controlsDiv) return;
@@ -416,7 +383,6 @@ function createControls() {
 	}
 	controlsDiv.innerHTML = '<form action="#" id="controlForm"' + hideDiv + '>' +
 	'<div id="navLinks">' +
-	'<a accesskey="n" id="show-notes" href="javascript:createNotesWindow();" title="Show Notes">≡<\/a>' +
 	'<a accesskey="t" id="toggle" href="javascript:toggle();">Ø<\/a>' +
 	'<a accesskey="z" id="prev" href="javascript:go(-1);">«<\/a>' +
 	'<a accesskey="x" id="next" href="javascript:go(1);">»<\/a>' +
@@ -432,8 +398,8 @@ function createControls() {
 
 function fontScale() {  // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
 	if (!s5mode) return false;
-	var vScale = 48;  // both yield 16 (the usual browser default) at 1024x768
-	var hScale = 64;  // perhaps should auto-calculate based on theme's declared value?
+	var vScale = 22;  // both yield 32 (after rounding) at 1024x768
+	var hScale = 32;  // perhaps should auto-calculate based on theme's declared value?
 	if (window.innerHeight) {
 		var vSize = window.innerHeight;
 		var hSize = window.innerWidth;
@@ -458,7 +424,7 @@ function fontScale() {  // causes layout
 
 function fontSize(value) {
 	if (!(s5ss = document.getElementById('s5ss'))) {
-		if (!document.createStyleSheet) {
+		if (!isIE) {
 			document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
 			s5ss.setAttribute('media','screen, projection');
 			s5ss.setAttribute('id','s5ss');
@@ -467,11 +433,11 @@ function fontSize(value) {
 			document.s5ss = document.styleSheets[document.styleSheets.length - 1];
 		}
 	}
-	if (!(document.s5ss && document.s5ss.addRule)) {
+	if (!isIE) {
 		while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
-		s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+		s5ss.appendChild(document.createTextNode('body {font-size: ' + value + ' !important;}'));
 	} else {
-		document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+		document.s5ss.addRule('body','font-size: ' + value + ' !important;');
 	}
 }
 
@@ -562,203 +528,25 @@ function trap(e) {
 	return modifierKey || e.which == 0;
 }
 
-function noteLabel() { // Gives notes id's to match parent slides
-	var notes = GetElementsWithClassName('div','notes');
-	for (var i = 0; i < notes.length; i++) {
-		var note = notes[i];
-		var id = 'note' + note.parentNode.id.substring(5);
-		note.setAttribute('id',id);
-	}
-	resetElapsedSlide();
-	resetRemainingTime();
-	window.setInterval('updateElaspedTime()', 1000);
-}
-
-function createNotesWindow() { // creates a window for our notes
-	if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
-		s5NotesWindowLoaded = false;
-		// Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
-		s5NotesWindow = window.open('ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
-	}
-	if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
-		loadNote();
-	} else { // Keep trying...
-		window.setTimeout('createNotesWindow()', 50);
+function startup() {
+	defaultCheck();
+	if (!isOp) createControls();
+	slideLabel();
+	fixLinks();
+	externalLinks();
+	fontScale();
+	if (!isOp) {
+		notOperaFix();
+		incrementals = createIncrementals();
+		slideJump();
+		if (defaultView == 'outline') {
+			toggle();
+		}
+		document.onkeyup = keys;
+		document.onkeypress = trap;
+		document.onclick = clicker;
 	}
 }
 
-function loadNote() {
-// Loads a note into the note window
-	var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
-	if (document.getElementById('note' + snum)) {
-		notes = document.getElementById('note' + snum).innerHTML;
-	}
-	if (document.getElementById('note' + (snum + 1))) {
-		nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
-	}
-	
-	var jl = document.getElementById('jumplist');
-	var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
-	if (incrementals[snum].length > 0) {
-//		alert('howdy');
-		slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
-	}
-	if (jl.selectedIndex < smax - 1) {
-		var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
-	} else {
-		var nextTitle = '[end of slide show]';
-	}
-	
-	if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
-		s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
-		s5NotesWindow.document.getElementById('notes').innerHTML = notes;
-		s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
-		s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
-	}
-	resetElapsedSlide();
-}
-
-function minimizeTimer(id) {
-	var obj = s5NotesWindow.document.getElementById(id);
-	if (hasClass(obj,'collapsed')) {
-		removeClass(obj,'collapsed');
-	} else {
-		addClass(obj,'collapsed');
-	}
-}
-
-function resetElapsedTime() {
-	presentationStart = new Date();
-	slideStart = new Date();
-	updateElaspedTime();
-}
-
-function resetElapsedSlide() {
-	if (snum != previousSlide) {
-		slideStart = new Date();
-		previousSlide = snum;
-		updateElaspedTime();
-	}
-}
-
-function updateElaspedTime() {
-	if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
-	var now = new Date();
-	var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
-	var es = s5NotesWindow.document.getElementById('elapsed-slide');
-	ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
-	es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
-}
-
-function resetRemainingTime() {
-	if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
-	var startField = s5NotesWindow.document.getElementById('startFrom');
-	startFrom = readTime(startField.value);
-	countdown.remaining = startFrom * 60000;  // convert to msecs
-	countdown.start = new Date().valueOf();
-	countdown.end = countdown.start + countdown.remaining;
-	var tl = s5NotesWindow.document.getElementById('timeLeft');
-	var timeLeft = formatTime(countdown.remaining);
-	tl.innerHTML = timeLeft;
-}
-
-function updateRemainingTime() {
-	if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
-	var tl = s5NotesWindow.document.getElementById('timeLeft');
-	var now = new Date();
-	if (countdown.state == 'run') {
-		countdown.remaining = countdown.end - now;
-	}
-	tl.style.color = '';
-	tl.style.backgroundColor = '';
-	if (countdown.remaining >= 0) {
-		var timeLeft = formatTime(countdown.remaining);
-		removeClass(tl,'overtime');
-		if (countdown.remaining < 300000) {
-			tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
-			tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
-		}
-	} else {
-		var timeLeft = '-' + formatTime(-countdown.remaining);
-		addClass(tl,'overtime');
-	}
-	tl.innerHTML = timeLeft;
-}
-
-function toggleRemainingTime() {
-	if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
-	if (countdown.state == 'pause') {
-		window.clearInterval(countdown.timer);
-	}
-	if (countdown.state == 'run') {
-		countdown.start = new Date().valueOf();
-		countdown.end = countdown.start + countdown.remaining;
-		countdown.timer = window.setInterval('updateRemainingTime()', 1000);
-	}
-}
-
-function alterRemainingTime(amt) {
-	var change = amt * 60000;  // convert to msecs
-	countdown.end += change;
-	countdown.remaining += change;
-	updateRemainingTime();
-}
-
-function formatTime(msecs)  {
-	var time = new Date(msecs);
-	
-	var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
-	hrs = (hrs < 10) ? '0'+hrs : hrs;
-	if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
-	
-	var min = time.getUTCMinutes();
-	min = (min < 10) ? '0'+min : min;
-	if (min == 'NaN' || isNaN(min)) min = '--';
-	
-	var sec = time.getUTCSeconds();
-	sec = (sec < 10) ? '0'+sec : sec;
-	if (sec == 'NaN' || isNaN(sec)) sec = '--';
-
-	return hrs + ':' + min + ':' + sec;
-}
-
-function readTime(val) {
-	var sregex = /:/;
-	var matches = sregex.exec(val);
-	if (matches == null) {
-		return val;
-	} else {
-		var times = val.split(':');
-		var hours = parseInt(times[0]);
-		var mins = parseInt(times[1]);
-		var total = (hours * 60) + mins;
-		return total;
-	}
-}
-
-function windowChange() {
-	fontScale();
-}
-
-function startup() {
-	defaultCheck();
-	createControls();  // hallvord
-	slideLabel();
-	incrementals = createIncrementals();
-	noteLabel(); // [SI:060104] must follow slideLabel()
-	loadNote();
-	fixLinks();
-	externalLinks();
-	fontScale();
-	if (!isOp) notOperaFix();
-	slideJump();
-	if (defaultView == 'outline') {
-		toggle();
-	}
-	document.onkeyup = keys;
-	document.onkeypress = trap;
-	document.onclick = clicker;
-}
-
 window.onload = startup;
-window.onresize = function(){setTimeout('windowChange()',5);}
\ No newline at end of file
+window.onresize = function(){setTimeout('fontScale()', 50);}
\ No newline at end of file