Resolves an issue where the first label (e.g., first bullet or first number) of a list would wrap to the right side of the window and be hidden under the clock element.
		
			
				
	
	
		
			254 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!doctype html>
 | |
| <html lang="en">
 | |
| 	<head>
 | |
| 		<meta charset="utf-8">
 | |
| 
 | |
| 		<title>reveal.js - Slide Notes</title>
 | |
| 
 | |
| 		<style>
 | |
| 			body {
 | |
| 				font-family: Helvetica;
 | |
| 			}
 | |
| 
 | |
| 			#notes {
 | |
| 				font-size: 24px;
 | |
| 				width: 640px;
 | |
| 				margin-top: 5px;
 | |
| 				clear: left;
 | |
| 			}
 | |
| 
 | |
| 			#wrap-current-slide {
 | |
| 				width: 640px;
 | |
| 				height: 512px;
 | |
| 				float: left;
 | |
| 				overflow: hidden;
 | |
| 			}
 | |
| 
 | |
| 			#current-slide {
 | |
| 				width: 1280px;
 | |
| 				height: 1024px;
 | |
| 				border: none;
 | |
| 
 | |
| 				-webkit-transform-origin: 0 0;
 | |
| 				   -moz-transform-origin: 0 0;
 | |
| 					-ms-transform-origin: 0 0;
 | |
| 					 -o-transform-origin: 0 0;
 | |
| 						transform-origin: 0 0;
 | |
| 
 | |
| 				-webkit-transform: scale(0.5);
 | |
| 				   -moz-transform: scale(0.5);
 | |
| 					-ms-transform: scale(0.5);
 | |
| 					 -o-transform: scale(0.5);
 | |
| 						transform: scale(0.5);
 | |
| 			}
 | |
| 
 | |
| 			#wrap-next-slide {
 | |
| 				width: 448px;
 | |
| 				height: 358px;
 | |
| 				float: left;
 | |
| 				margin: 0 0 0 10px;
 | |
| 				overflow: hidden;
 | |
| 			}
 | |
| 
 | |
| 			#next-slide {
 | |
| 				width: 1280px;
 | |
| 				height: 1024px;
 | |
| 				border: none;
 | |
| 
 | |
| 				-webkit-transform-origin: 0 0;
 | |
| 				   -moz-transform-origin: 0 0;
 | |
| 					-ms-transform-origin: 0 0;
 | |
| 					 -o-transform-origin: 0 0;
 | |
| 						transform-origin: 0 0;
 | |
| 
 | |
| 				-webkit-transform: scale(0.35);
 | |
| 				   -moz-transform: scale(0.35);
 | |
| 					-ms-transform: scale(0.35);
 | |
| 					 -o-transform: scale(0.35);
 | |
| 						transform: scale(0.35);
 | |
| 			}
 | |
| 
 | |
| 			.slides {
 | |
| 				position: relative;
 | |
| 				margin-bottom: 10px;
 | |
| 				border: 1px solid black;
 | |
| 				border-radius: 2px;
 | |
| 				background: rgb(28, 30, 32);
 | |
| 			}
 | |
| 
 | |
| 			.slides span {
 | |
| 				position: absolute;
 | |
| 				top: 3px;
 | |
| 				left: 3px;
 | |
| 				font-weight: bold;
 | |
| 				font-size: 14px;
 | |
| 				color: rgba( 255, 255, 255, 0.9 );
 | |
| 			}
 | |
| 
 | |
| 			.error {
 | |
| 				font-weight: bold;
 | |
| 				color: red;
 | |
| 				font-size: 1.5em;
 | |
| 				text-align: center;
 | |
| 				margin-top: 10%;
 | |
| 			}
 | |
| 
 | |
| 			.error code {
 | |
| 				font-family: monospace;
 | |
| 			}
 | |
| 
 | |
| 			.time {
 | |
| 				width: 448px;
 | |
| 				margin: 30px 0 0 10px;
 | |
| 				float: left;
 | |
| 				text-align: center;
 | |
| 				opacity: 0;
 | |
| 
 | |
| 				-webkit-transition: opacity 0.4s;
 | |
| 				   -moz-transition: opacity 0.4s;
 | |
| 				     -o-transition: opacity 0.4s;
 | |
| 				        transition: opacity 0.4s;
 | |
| 			}
 | |
| 
 | |
| 			.elapsed,
 | |
| 			.clock {
 | |
| 				color: #333;
 | |
| 				font-size: 2em;
 | |
| 				text-align: center;
 | |
| 				display: inline-block;
 | |
| 				padding: 0.5em;
 | |
| 				background-color: #eee;
 | |
| 				border-radius: 10px;
 | |
| 			}
 | |
| 
 | |
| 			.elapsed h2,
 | |
| 			.clock h2 {
 | |
| 				font-size: 0.8em;
 | |
| 				line-height: 100%;
 | |
| 				margin: 0;
 | |
| 				color: #aaa;
 | |
| 			}
 | |
| 
 | |
| 			.elapsed .mute {
 | |
| 				color: #ddd;
 | |
| 			}
 | |
| 
 | |
| 		</style>
 | |
| 	</head>
 | |
| 
 | |
| 	<body>
 | |
| 
 | |
| 		<div id="wrap-current-slide" class="slides">
 | |
| 			<script>document.write( '<iframe width="1280" height="1024" id="current-slide" src="'+ window.opener.location.href +'"></iframe>' );</script>
 | |
| 		</div>
 | |
| 
 | |
| 		<div id="wrap-next-slide" class="slides">
 | |
| 			<script>document.write( '<iframe width="640" height="512" id="next-slide" src="'+ window.opener.location.href +'"></iframe>' );</script>
 | |
| 			<span>UPCOMING:</span>
 | |
| 		</div>
 | |
| 
 | |
| 		<div class="time">
 | |
| 			<div class="clock">
 | |
| 				<h2>Time</h2>
 | |
| 				<span id="clock">0:00:00 AM</span>
 | |
| 			</div>
 | |
| 			<div class="elapsed">
 | |
| 				<h2>Elapsed</h2>
 | |
| 				<span id="hours">00</span><span id="minutes">:00</span><span id="seconds">:00</span>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 
 | |
| 		<div id="notes"></div>
 | |
| 
 | |
| 		<script src="../../plugin/markdown/showdown.js"></script>
 | |
| 		<script>
 | |
| 
 | |
| 			window.addEventListener( 'load', function() {
 | |
| 
 | |
| 				if( window.opener && window.opener.location && window.opener.location.href ) {
 | |
| 
 | |
| 					var notes = document.getElementById( 'notes' ),
 | |
| 						currentSlide = document.getElementById( 'current-slide' ),
 | |
| 						nextSlide = document.getElementById( 'next-slide' );
 | |
| 
 | |
| 					window.addEventListener( 'message', function( event ) {
 | |
| 						var data = JSON.parse( event.data );
 | |
| 						// No need for updating the notes in case of fragment changes
 | |
| 						if ( data.notes !== undefined) {
 | |
| 							if( data.markdown ) {
 | |
| 								notes.innerHTML = (new Showdown.converter()).makeHtml( data.notes );
 | |
| 							}
 | |
| 							else {
 | |
| 								notes.innerHTML = data.notes;
 | |
| 							}
 | |
| 						}
 | |
| 
 | |
| 						// Showing and hiding fragments
 | |
| 						if( data.fragment === 'next' ) {
 | |
| 							currentSlide.contentWindow.Reveal.nextFragment();
 | |
| 						}
 | |
| 						else if( data.fragment === 'prev' ) {
 | |
| 							currentSlide.contentWindow.Reveal.prevFragment();
 | |
| 						}
 | |
| 						else {
 | |
| 							// Update the note slides
 | |
| 							currentSlide.contentWindow.Reveal.slide( data.indexh, data.indexv );
 | |
| 							nextSlide.contentWindow.Reveal.slide( data.nextindexh, data.nextindexv );
 | |
| 						}
 | |
| 
 | |
| 					}, false );
 | |
| 
 | |
| 					var start = new Date(),
 | |
| 						timeEl = document.querySelector( '.time' ),
 | |
| 						clockEl = document.getElementById( 'clock' ),
 | |
| 						hoursEl = document.getElementById( 'hours' ),
 | |
| 						minutesEl = document.getElementById( 'minutes' ),
 | |
| 						secondsEl = document.getElementById( 'seconds' );
 | |
| 
 | |
| 					setInterval( function() {
 | |
| 
 | |
| 						timeEl.style.opacity = 1;
 | |
| 
 | |
| 						var diff, hours, minutes, seconds,
 | |
| 							now = new Date();
 | |
| 
 | |
| 						diff = now.getTime() - start.getTime();
 | |
| 						hours = parseInt( diff / ( 1000 * 60 * 60 ) );
 | |
| 						minutes = parseInt( ( diff / ( 1000 * 60 ) ) % 60 );
 | |
| 						seconds = parseInt( ( diff / 1000 ) % 60 );
 | |
| 
 | |
| 						clockEl.innerHTML = now.toLocaleTimeString();
 | |
| 						hoursEl.innerHTML = zeroPadInteger( hours );
 | |
| 						hoursEl.className = hours > 0 ? "" : "mute";
 | |
| 						minutesEl.innerHTML = ":" + zeroPadInteger( minutes );
 | |
| 						minutesEl.className = minutes > 0 ? "" : "mute";
 | |
| 						secondsEl.innerHTML = ":" + zeroPadInteger( seconds );
 | |
| 
 | |
| 					}, 1000 );
 | |
| 
 | |
| 					// Navigate the main window when the notes slide changes
 | |
| 					currentSlide.contentWindow.Reveal.addEventListener( 'slidechanged', function( event ) {
 | |
| 
 | |
| 						window.opener.Reveal.slide( event.indexh, event.indexv );
 | |
| 
 | |
| 					} );
 | |
| 
 | |
| 				}
 | |
| 				else {
 | |
| 
 | |
| 					document.body.innerHTML =  '<p class="error">Unable to access <code>window.opener.location</code>.<br>Make sure the presentation is running on a web server.</p>';
 | |
| 
 | |
| 				}
 | |
| 
 | |
| 
 | |
| 			}, false );
 | |
| 
 | |
| 			function zeroPadInteger( num ) {
 | |
| 				var str = "00" + parseInt( num );
 | |
| 				return str.substring( str.length - 2 );
 | |
| 			}
 | |
| 
 | |
| 		</script>
 | |
| 	</body>
 | |
| </html>
 |