devstaff-crete/DevStaff-Heraklion

View on GitHub
meetups/meetup06-MobileDev/x-platform/plugin/notes-server/client.js

Summary

Maintainability
A
40 mins
Test Coverage
(function() {

    // don't emit events from inside the previews themselves
    if( window.location.search.match( /receiver/gi ) ) { return; }

    var socket = io.connect( window.location.origin ),
        socketId = Math.random().toString().slice( 2 );

    console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId );

    window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId );

    /**
     * Posts the current slide data to the notes window
     */
    function post() {

        var slideElement = Reveal.getCurrentSlide(),
            notesElement = slideElement.querySelector( 'aside.notes' );

        var messageData = {
            notes: '',
            markdown: false,
            socketId: socketId,
            state: Reveal.getState()
        };

        // Look for notes defined in a slide attribute
        if( slideElement.hasAttribute( 'data-notes' ) ) {
            messageData.notes = slideElement.getAttribute( 'data-notes' );
        }

        // Look for notes defined in an aside element
        if( notesElement ) {
            messageData.notes = notesElement.innerHTML;
            messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
        }

        socket.emit( 'statechanged', messageData );

    }

    // When a new notes window connects, post our current state
    socket.on( 'connect', function( data ) {
        post();
    } );

    // Monitor events that trigger a change in state
    Reveal.addEventListener( 'slidechanged', post );
    Reveal.addEventListener( 'fragmentshown', post );
    Reveal.addEventListener( 'fragmenthidden', post );
    Reveal.addEventListener( 'overviewhidden', post );
    Reveal.addEventListener( 'overviewshown', post );
    Reveal.addEventListener( 'paused', post );
    Reveal.addEventListener( 'resumed', post );

    // Post the initial state
    post();

}());