presentations

Presentations
Log | Files | Refs

client.js (1880B)


      1 (function() {
      2 
      3 	// don't emit events from inside the previews themselves
      4 	if( window.location.search.match( /receiver/gi ) ) { return; }
      5 
      6 	var socket = io.connect( window.location.origin ),
      7 		socketId = Math.random().toString().slice( 2 );
      8 
      9 	console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId );
     10 
     11 	window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId );
     12 
     13 	/**
     14 	 * Posts the current slide data to the notes window
     15 	 */
     16 	function post() {
     17 
     18 		var slideElement = Reveal.getCurrentSlide(),
     19 			notesElement = slideElement.querySelector( 'aside.notes' );
     20 
     21 		var messageData = {
     22 			notes: '',
     23 			markdown: false,
     24 			socketId: socketId,
     25 			state: Reveal.getState()
     26 		};
     27 
     28 		// Look for notes defined in a slide attribute
     29 		if( slideElement.hasAttribute( 'data-notes' ) ) {
     30 			messageData.notes = slideElement.getAttribute( 'data-notes' );
     31 		}
     32 
     33 		// Look for notes defined in an aside element
     34 		if( notesElement ) {
     35 			messageData.notes = notesElement.innerHTML;
     36 			messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
     37 		}
     38 
     39 		socket.emit( 'statechanged', messageData );
     40 
     41 	}
     42 
     43 	// When a new notes window connects, post our current state
     44 	socket.on( 'new-subscriber', function( data ) {
     45 		post();
     46 	} );
     47 
     48 	// When the state changes from inside of the speaker view
     49 	socket.on( 'statechanged-speaker', function( data ) {
     50 		Reveal.setState( data.state );
     51 	} );
     52 
     53 	// Monitor events that trigger a change in state
     54 	Reveal.addEventListener( 'slidechanged', post );
     55 	Reveal.addEventListener( 'fragmentshown', post );
     56 	Reveal.addEventListener( 'fragmenthidden', post );
     57 	Reveal.addEventListener( 'overviewhidden', post );
     58 	Reveal.addEventListener( 'overviewshown', post );
     59 	Reveal.addEventListener( 'paused', post );
     60 	Reveal.addEventListener( 'resumed', post );
     61 
     62 	// Post the initial state
     63 	post();
     64 
     65 }());