merge in support for stepped fragments in notes window
This commit is contained in:
		| @@ -132,6 +132,8 @@ Reveal.up(); | ||||
| Reveal.down(); | ||||
| Reveal.prev(); | ||||
| Reveal.next(); | ||||
| Reveal.prevFragment(); | ||||
| Reveal.nextFragment(); | ||||
| Reveal.toggleOverview(); | ||||
|  | ||||
| // Retrieves the previous and current slide elements | ||||
|   | ||||
| @@ -261,6 +261,10 @@ function linkify( selector ) { | ||||
| 							<li class="fragment"><em>of view</em></li> | ||||
| 							<li class="fragment"><strong>fragments</strong></li> | ||||
| 						</ol> | ||||
|  | ||||
| 						<aside class="notes"> | ||||
| 							This slide has fragments which are also stepped through in the notes window. | ||||
| 						</aside> | ||||
| 					</section> | ||||
| 					<section> | ||||
| 						<h2>Fragment Styles</h2> | ||||
|   | ||||
| @@ -1324,6 +1324,8 @@ var Reveal = (function(){ | ||||
| 		down: navigateDown, | ||||
| 		prev: navigatePrev, | ||||
| 		next: navigateNext, | ||||
| 		prevFragment: previousFragment, | ||||
| 		nextFragment: nextFragment, | ||||
|  | ||||
| 		// Deprecated aliases | ||||
| 		navigateTo: slide, | ||||
|   | ||||
							
								
								
									
										2
									
								
								js/reveal.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								js/reveal.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -76,7 +76,7 @@ if(am>ac.threshold&&Math.abs(am)>Math.abs(al)){ac.handled=true;B();}else{if(am<- | ||||
| u();}else{if(al<-ac.threshold){ac.handled=true;F();}}}}aq.preventDefault();}}}else{if(navigator.userAgent.match(/android/gi)){aq.preventDefault();}}}function W(al){ac.handled=false; | ||||
| }function o(al){clearTimeout(z);z=setTimeout(function(){var am=al.detail||-al.wheelDelta;if(am>0){x();}else{Z();}},100);}function ai(am){var al=Array.prototype.slice.call(document.querySelectorAll(l)).length; | ||||
| var an=Math.floor((am.clientX/f.wrapper.offsetWidth)*al);a(an);}function w(al){J();}function C(al){if(L()){al.preventDefault();ae();m=this.getAttribute("data-index-h"); | ||||
| e=this.getAttribute("data-index-v");a();}}return{initialize:i,slide:a,left:B,right:j,up:u,down:F,prev:Z,next:x,navigateTo:a,navigateLeft:B,navigateRight:j,navigateUp:u,navigateDown:F,navigatePrev:Z,navigateNext:x,toggleOverview:X,addEventListeners:E,removeEventListeners:U,getIndices:M,getPreviousSlide:function(){return y; | ||||
| e=this.getAttribute("data-index-v");a();}}return{initialize:i,slide:a,left:B,right:j,up:u,down:F,prev:Z,next:x,prevFragment:Q,nextFragment:v,navigateTo:a,navigateLeft:B,navigateRight:j,navigateUp:u,navigateDown:F,navigatePrev:Z,navigateNext:x,toggleOverview:X,addEventListeners:E,removeEventListeners:U,getIndices:M,getPreviousSlide:function(){return y; | ||||
| },getCurrentSlide:function(){return G;},getQueryHash:function(){var al={};location.search.replace(/[A-Z0-9]+?=(\w*)/gi,function(am){al[am.split("=").shift()]=am.split("=").pop(); | ||||
| });return al;},addEventListener:function(am,an,al){if("addEventListener" in window){(f.wrapper||document.querySelector(".reveal")).addEventListener(am,an,al); | ||||
| }},removeEventListener:function(am,an,al){if("addEventListener" in window){(f.wrapper||document.querySelector(".reveal")).removeEventListener(am,an,al); | ||||
|   | ||||
| @@ -109,45 +109,30 @@ | ||||
|  | ||||
| 					window.addEventListener( 'message', function( event ) { | ||||
| 						var data = JSON.parse( event.data ); | ||||
|  | ||||
| 						if( data.markdown ) { | ||||
| 							notes.innerHTML = (new Showdown.converter()).makeHtml( data.notes ); | ||||
| 						// 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; | ||||
| 							} | ||||
| 						} | ||||
| 						else { | ||||
| 							notes.innerHTML = data.notes; | ||||
| 						} | ||||
|  | ||||
| 						// Kill the slide listeners while responding to the event | ||||
| 						removeSlideListeners(); | ||||
|  | ||||
| 						// Update the note slides | ||||
| 						currentSlide.contentWindow.Reveal.slide( data.indexh, data.indexv ); | ||||
| 						nextSlide.contentWindow.Reveal.slide( data.nextindexh, data.nextindexv ); | ||||
|  | ||||
| 						// Resume listening on the next cycle | ||||
| 						setTimeout( addSlideListeners, 1 ); | ||||
| 						// Showing and hiding fragments | ||||
| 						if( data.fragment === 'next' ) { | ||||
| 							currentSlide.contentWindow.Reveal.nextFragment(); | ||||
| 						} | ||||
| 						else if( data.fragment === 'prev' ) { | ||||
| 							currentSlide.contentWindow.Reveal.prevFragment(); | ||||
| 						} | ||||
|  | ||||
| 					}, false ); | ||||
|  | ||||
| 					function addSlideListeners() { | ||||
| 						currentSlide.contentWindow.Reveal.addEventListener( 'slidechanged', onNotesSlideChange, false ); | ||||
| 						nextSlide.contentWindow.Reveal.addEventListener( 'slidechanged', onNotesSlideChange, false ); | ||||
| 					} | ||||
|  | ||||
| 					function removeSlideListeners() { | ||||
| 						currentSlide.contentWindow.Reveal.removeEventListener( 'slidechanged', onNotesSlideChange, false ); | ||||
| 						nextSlide.contentWindow.Reveal.removeEventListener( 'slidechanged', onNotesSlideChange, false ); | ||||
| 					} | ||||
|  | ||||
| 					function onNotesSlideChange( event ) { | ||||
| 						window.opener.postMessage( JSON.stringify({ | ||||
| 							indexh : event.indexh, | ||||
| 							indexv : event.indexv | ||||
| 						}), '*' ); | ||||
| 					} | ||||
|  | ||||
| 					addSlideListeners(); | ||||
|  | ||||
| 				})( window ); | ||||
|  | ||||
| 			}, false ); | ||||
|   | ||||
| @@ -7,54 +7,78 @@ var RevealNotes = (function() { | ||||
| 	function openNotes() { | ||||
| 		var notesPopup = window.open( 'plugin/notes/notes.html', 'reveal.js - Notes', 'width=1120,height=850' ); | ||||
|  | ||||
| 		Reveal.addEventListener( 'slidechanged', post ); | ||||
|  | ||||
| 		// Posts the current slide data to the notes window | ||||
| 		function post() { | ||||
| 			var slideElement = Reveal.getCurrentSlide(), | ||||
| 				indexh = Reveal.getIndices().h, | ||||
| 				indexv = Reveal.getIndices().v, | ||||
| 				nextindexh, | ||||
| 				nextindexv; | ||||
|  | ||||
| 			if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { | ||||
| 				nextindexh = indexh; | ||||
| 				nextindexv = indexv + 1; | ||||
| 			} else { | ||||
| 				nextindexh = indexh + 1; | ||||
| 				nextindexv = 0; | ||||
| 			} | ||||
|  | ||||
| 			var notes = slideElement.querySelector( 'aside.notes' ); | ||||
|  | ||||
| 			var slideData = { | ||||
| 				notes : notes ? notes.innerHTML : '', | ||||
| 				indexh : indexh, | ||||
| 				indexv : indexv, | ||||
| 				nextindexh : nextindexh, | ||||
| 				nextindexv : nextindexv, | ||||
| 				markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false | ||||
| 			}; | ||||
|  | ||||
| 			notesPopup.postMessage( JSON.stringify( slideData ), '*' ); | ||||
| 		} | ||||
|  | ||||
| 		// The main presentation is kept in sync when navigating the | ||||
| 		// note slides so that the popup may be used as a remote | ||||
| 		window.addEventListener( 'message', function( event ) { | ||||
| 			var data = JSON.parse( event.data ); | ||||
|  | ||||
| 			if( data && typeof data.indexh === 'number' && typeof data.indexv === 'number' ) { | ||||
| 				Reveal.slide( data.indexh, data.indexv ); | ||||
| 			} | ||||
| 		// Fires when slide is changed | ||||
| 		Reveal.addEventListener( 'slidechanged', function( event ) { | ||||
| 			post('slidechanged'); | ||||
| 		} ); | ||||
|  | ||||
| 		// Fires when a fragment is shown | ||||
| 		Reveal.addEventListener( 'fragmentshown', function( event ) { | ||||
| 			post('fragmentshown'); | ||||
| 		} ); | ||||
|  | ||||
| 		// Fires when a fragment is hidden | ||||
| 		Reveal.addEventListener( 'fragmenthidden', function( event ) { | ||||
| 			post('fragmenthidden'); | ||||
| 		} ); | ||||
|  | ||||
| 		/** | ||||
| 		 * Posts the current slide data to the notes window | ||||
| 		 * | ||||
| 		 * @param {String} eventType Expecting 'slidechanged', 'fragmentshown'  | ||||
| 		 * or 'fragmenthidden' set in the events above to define the needed  | ||||
| 		 * slideDate. | ||||
| 		 */ | ||||
| 		function post( eventType ) { | ||||
| 			var slideElement = Reveal.getCurrentSlide(), | ||||
| 				messageData; | ||||
|  | ||||
| 			if( eventType === 'slidechanged' ) { | ||||
| 				var notes = slideElement.querySelector( 'aside.notes' ), | ||||
| 					indexh = Reveal.getIndices().h, | ||||
| 					indexv = Reveal.getIndices().v, | ||||
| 					nextindexh, | ||||
| 					nextindexv; | ||||
|  | ||||
| 				if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { | ||||
| 					nextindexh = indexh; | ||||
| 					nextindexv = indexv + 1; | ||||
| 				} else { | ||||
| 					nextindexh = indexh + 1; | ||||
| 					nextindexv = 0; | ||||
| 				} | ||||
|  | ||||
| 				messageData = { | ||||
| 					notes : notes ? notes.innerHTML : '', | ||||
| 					indexh : indexh, | ||||
| 					indexv : indexv, | ||||
| 					nextindexh : nextindexh, | ||||
| 					nextindexv : nextindexv, | ||||
| 					markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false | ||||
| 				}; | ||||
| 			} | ||||
| 			else if( eventType === 'fragmentshown' ) { | ||||
| 				messageData = { | ||||
| 					fragment : 'next' | ||||
| 				}; | ||||
| 			} | ||||
| 			else if( eventType === 'fragmenthidden' ) { | ||||
| 				messageData = { | ||||
| 					fragment : 'prev' | ||||
| 				}; | ||||
| 			} | ||||
|  | ||||
| 			notesPopup.postMessage( JSON.stringify( messageData ), '*' ); | ||||
| 		} | ||||
|  | ||||
| 		// Navigate to the current slide when the notes are loaded | ||||
| 		notesPopup.addEventListener( 'load', post, false ); | ||||
| 		notesPopup.addEventListener( 'load', function( event ) { | ||||
| 			post('slidechanged'); | ||||
| 		}, false ); | ||||
| 	} | ||||
|  | ||||
| 	// If the there's a 'notes' query set, open directly | ||||
| 	if( window.location.search.match(/(\?|\&)notes/gi ) !== null ) { | ||||
| 	if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) { | ||||
| 		openNotes(); | ||||
| 	} | ||||
|  | ||||
| @@ -70,5 +94,5 @@ var RevealNotes = (function() { | ||||
| 		} | ||||
| 	}, false ); | ||||
|  | ||||
| 	return { open: openNotes } | ||||
| })(); | ||||
| 	return { open: openNotes }; | ||||
| })(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user