BeamerReveal

 view release on metacpan or  search on metacpan

beamer-reveal-example_files/libs/revealjs/plugin/notes/jojo.html  view on Meta::CPAN

	      var upcomingURL = data.url + urlSeparator + params + '&scrollActivationWidth=false&controls=false' + hash;

	      currentSlide = document.createElement( 'iframe' );
	      currentSlide.setAttribute( 'width', 1280 );
	      currentSlide.setAttribute( 'height', 1024 );
	      currentSlide.setAttribute( 'src', currentURL );
	      document.querySelector( '#current-slide' ).appendChild( currentSlide );

	      upcomingSlide = document.createElement( 'iframe' );
	      upcomingSlide.setAttribute( 'width', 640 );
	      upcomingSlide.setAttribute( 'height', 512 );
	      upcomingSlide.setAttribute( 'src', upcomingURL );
	      document.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );

	  }

	  /**
	   * Setup the notes UI.
	   */
	  function setupNotes() {

	      notes = document.querySelector( '.speaker-controls-notes' );
	      notesValue = document.querySelector( '.speaker-controls-notes .value' );

	  }

	  /**
	   * We send out a heartbeat at all times to ensure we can
	   * reconnect with the main presentation window after reloads.
	   */
	  function setupHeartbeat() {

	      setInterval( () => {
		  window.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'heartbeat'} ), '*' );
	      }, 1000 );

	  }

	  function getTimings( callback ) {

	      callRevealApi( 'getSlidesAttributes', [], function ( slideAttributes ) {
		  callRevealApi( 'getConfig', [], function ( config ) {
		      var totalTime = config.totalTime;
		      var minTimePerSlide = config.minimumTimePerSlide || 0;
		      var defaultTiming = config.defaultTiming;
		      if ((defaultTiming == null) && (totalTime == null)) {
			  callback(null);
			  return;
		      }
		      // Setting totalTime overrides defaultTiming
		      if (totalTime) {
			  defaultTiming = 0;
		      }
		      var timings = [];
		      for ( var i in slideAttributes ) {
			  var slide = slideAttributes[ i ];
			  var timing = defaultTiming;
			  if( slide.hasOwnProperty( 'data-timing' )) {
			      var t = slide[ 'data-timing' ];
			      timing = parseInt(t);
			      if( isNaN(timing) ) {
				  console.warn("Could not parse timing '" + t + "' of slide " + i + "; using default of " + defaultTiming);
				  timing = defaultTiming;
			      }
			  }
			  timings.push(timing);
		      }
		      if ( totalTime ) {
			  // After we've allocated time to individual slides, we summarize it and
			  // subtract it from the total time
			  var remainingTime = totalTime - timings.reduce( function(a, b) { return a + b; }, 0 );
			  // The remaining time is divided by the number of slides that have 0 seconds
			  // allocated at the moment, giving the average time-per-slide on the remaining slides
			  var remainingSlides = (timings.filter( function(x) { return x == 0 }) ).length
			  var timePerSlide = Math.round( remainingTime / remainingSlides, 0 )
			  // And now we replace every zero-value timing with that average
			  timings = timings.map( function(x) { return (x==0 ? timePerSlide : x) } );
		      }
		      var slidesUnderMinimum = timings.filter( function(x) { return (x < minTimePerSlide) } ).length
		      if ( slidesUnderMinimum ) {
			  message = "The pacing time for " + slidesUnderMinimum + " slide(s) is under the configured minimum of " + minTimePerSlide + " seconds. Check the data-timing attribute on individual slides, or consider increasing the totalTime or minimumTimePerSl...
			  alert(message);
		      }
		      callback( timings );
		  } );
	      } );

	  }

	  /**
	   * Return the number of seconds allocated for presenting
	   * all slides up to and including this one.
	   */
	  function getTimeAllocated( timings, callback ) {

	      callRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {
		  var allocated = 0;
		  for (var i in timings.slice(0, currentSlide + 1)) {
		      allocated += timings[i];
		  }
		  callback( allocated );
	      } );

	  }

	  /**
	   * Create the timer and clock and start updating them
	   * at an interval.
	   */
	  function setupTimer() {

	      var start = new Date(),
		  timeEl = document.querySelector( '.speaker-controls-time' ),
		  clockEl = timeEl.querySelector( '.clock-value' ),
		  hoursEl = timeEl.querySelector( '.hours-value' ),
		  minutesEl = timeEl.querySelector( '.minutes-value' ),
		  secondsEl = timeEl.querySelector( '.seconds-value' ),
		  pacingTitleEl = timeEl.querySelector( '.pacing-title' ),
		  pacingEl = timeEl.querySelector( '.pacing' ),
		  pacingHoursEl = pacingEl.querySelector( '.hours-value' ),
		  pacingMinutesEl = pacingEl.querySelector( '.minutes-value' ),



( run in 2.695 seconds using v1.01-cache-2.11-cpan-99c4e6809bf )