update markdown plugin formatting to match reveal.js core
This commit is contained in:
		| @@ -6,23 +6,23 @@ | |||||||
| 		throw 'The reveal.js Markdown plugin requires marked to be loaded'; | 		throw 'The reveal.js Markdown plugin requires marked to be loaded'; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|     if (typeof hljs !== 'undefined') { | 	if( typeof hljs !== 'undefined' ) { | ||||||
| 		marked.setOptions({ | 		marked.setOptions({ | ||||||
|             highlight: function (lang, code) { | 			highlight: function( lang, code ) { | ||||||
|                 return hljs.highlightAuto(lang, code).value; | 				return hljs.highlightAuto( lang, code ).value; | ||||||
| 			} | 			} | ||||||
| 		}); | 		}); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|     var stripLeadingWhitespace = function(section) { | 	var stripLeadingWhitespace = function( section ) { | ||||||
|  |  | ||||||
| 		var template = section.querySelector( 'script' ); | 		var template = section.querySelector( 'script' ); | ||||||
|  |  | ||||||
| 		// strip leading whitespace so it isn't evaluated as code | 		// strip leading whitespace so it isn't evaluated as code | ||||||
| 		var text = ( template || section ).textContent; | 		var text = ( template || section ).textContent; | ||||||
|  |  | ||||||
|         var leadingWs = text.match(/^\n?(\s*)/)[1].length, | 		var leadingWs = text.match( /^\n?(\s*)/ )[1].length, | ||||||
|             leadingTabs = text.match(/^\n?(\t*)/)[1].length; | 			leadingTabs = text.match( /^\n?(\t*)/ )[1].length; | ||||||
|  |  | ||||||
| 		if( leadingTabs > 0 ) { | 		if( leadingTabs > 0 ) { | ||||||
| 			text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); | 			text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); | ||||||
| @@ -35,13 +35,20 @@ | |||||||
|  |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|     var twrap = function(el) { | 	var twrap = function( el ) { | ||||||
|  |  | ||||||
| 		var content = el.content || el; | 		var content = el.content || el; | ||||||
|         content += el.asideContent ? ('<aside class="notes" data-markdown>' + el.asideContent + '</aside>') : ''; |  | ||||||
|  | 		if( el.asideContent ) { | ||||||
|  | 			content += '<aside class="notes" data-markdown>' + el.asideContent + '</aside>'; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		return '<script type="text/template">' + content + '</script>'; | 		return '<script type="text/template">' + content + '</script>'; | ||||||
|  |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|     var getForwardedAttributes = function(section) { | 	var getForwardedAttributes = function( section ) { | ||||||
|  |  | ||||||
| 		var attributes = section.attributes; | 		var attributes = section.attributes; | ||||||
| 		var result = []; | 		var result = []; | ||||||
|  |  | ||||||
| @@ -61,9 +68,10 @@ | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		return result.join( ' ' ); | 		return result.join( ' ' ); | ||||||
|  |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|     var slidifyMarkdown = function(markdown, separator, vertical, notes, attributes) { | 	var slidifyMarkdown = function( markdown, separator, vertical, notes, attributes ) { | ||||||
|  |  | ||||||
| 		separator = separator || '^\n---\n$'; | 		separator = separator || '^\n---\n$'; | ||||||
| 		notes = notes || 'note:'; | 		notes = notes || 'note:'; | ||||||
| @@ -105,7 +113,7 @@ | |||||||
|  |  | ||||||
| 			slide = { | 			slide = { | ||||||
| 				content: content, | 				content: content, | ||||||
|                 asideContent: asideContent || "" | 				asideContent: asideContent || '' | ||||||
| 			}; | 			}; | ||||||
|  |  | ||||||
| 			if( isHorizontal && wasHorizontal ) { | 			if( isHorizontal && wasHorizontal ) { | ||||||
| @@ -126,9 +134,9 @@ | |||||||
| 		// flatten the hierarchical stack, and insert <section data-markdown> tags | 		// flatten the hierarchical stack, and insert <section data-markdown> tags | ||||||
| 		for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { | 		for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { | ||||||
| 			// vertical | 			// vertical | ||||||
|             if( sectionStack[k].propertyIsEnumerable(length) && typeof sectionStack[k].splice === 'function' ) { | 			if( sectionStack[k].propertyIsEnumerable( length ) && typeof sectionStack[k].splice === 'function' ) { | ||||||
| 				markdownSections += '<section '+ attributes +'>' + | 				markdownSections += '<section '+ attributes +'>' + | ||||||
|                                         '<section data-markdown>' +  sectionStack[k].map(twrap).join('</section><section data-markdown>') + '</section>' + | 										'<section data-markdown>' +  sectionStack[k].map( twrap ).join( '</section><section data-markdown>' ) + '</section>' + | ||||||
| 									'</section>'; | 									'</section>'; | ||||||
| 			} else { | 			} else { | ||||||
| 				markdownSections += '<section '+ attributes +' data-markdown>' + twrap( sectionStack[k] ) + '</section>'; | 				markdownSections += '<section '+ attributes +' data-markdown>' + twrap( sectionStack[k] ) + '</section>'; | ||||||
| @@ -138,7 +146,7 @@ | |||||||
| 		return markdownSections; | 		return markdownSections; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|     var querySlidingMarkdown = function() { | 	var queryExternalMarkdown = function() { | ||||||
|  |  | ||||||
| 		var sections = document.querySelectorAll( '[data-markdown]'), | 		var sections = document.querySelectorAll( '[data-markdown]'), | ||||||
| 			section; | 			section; | ||||||
| @@ -147,22 +155,24 @@ | |||||||
|  |  | ||||||
| 			section = sections[j]; | 			section = sections[j]; | ||||||
|  |  | ||||||
|             if( section.getAttribute('data-markdown').length ) { | 			if( section.getAttribute( 'data-markdown' ).length ) { | ||||||
|  |  | ||||||
| 				var xhr = new XMLHttpRequest(), | 				var xhr = new XMLHttpRequest(), | ||||||
|                     url = section.getAttribute('data-markdown'); | 					url = section.getAttribute( 'data-markdown' ); | ||||||
|  |  | ||||||
|  | 				datacharset = section.getAttribute( 'data-charset' ); | ||||||
|  |  | ||||||
|                 datacharset = section.getAttribute('data-charset'); |  | ||||||
| 				// see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes | 				// see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes | ||||||
|                 if (datacharset != null && datacharset != '') { | 				if( datacharset != null && datacharset != '' ) { | ||||||
|                     xhr.overrideMimeType('text/html; charset=' + datacharset); | 					xhr.overrideMimeType( 'text/html; charset=' + datacharset ); | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|                 xhr.onreadystatechange = function () { | 				xhr.onreadystatechange = function() { | ||||||
| 					if( xhr.readyState === 4 ) { | 					if( xhr.readyState === 4 ) { | ||||||
|                         if (xhr.status >= 200 && xhr.status < 300) { | 						if ( xhr.status >= 200 && xhr.status < 300 ) { | ||||||
|                             section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), section.getAttribute('data-notes'), getForwardedAttributes(section) ); | 							section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute( 'data-separator' ), section.getAttribute( 'data-vertical' ), section.getAttribute( 'data-notes' ), getForwardedAttributes( section ) ); | ||||||
|                         } else { | 						} | ||||||
|  | 						else { | ||||||
| 							section.outerHTML = '<section data-state="alert">ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + | 							section.outerHTML = '<section data-state="alert">ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + | ||||||
| 								'. Check your browser\'s JavaScript console for more details.' + | 								'. Check your browser\'s JavaScript console for more details.' + | ||||||
| 								'<p>Remember that you need to serve the presentation HTML from a HTTP server and the Markdown file must be there too.</p></section>'; | 								'<p>Remember that you need to serve the presentation HTML from a HTTP server and the Markdown file must be there too.</p></section>'; | ||||||
| @@ -170,17 +180,19 @@ | |||||||
| 					} | 					} | ||||||
| 				}; | 				}; | ||||||
|  |  | ||||||
|                 xhr.open('GET', url, false); | 				xhr.open( 'GET', url, false ); | ||||||
|  |  | ||||||
| 				try { | 				try { | ||||||
| 					xhr.send(); | 					xhr.send(); | ||||||
|                 } catch (e) { | 				} | ||||||
|                     alert('Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e); | 				catch ( e ) { | ||||||
|  | 					alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e ); | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|             } else if( section.getAttribute('data-separator') ) { | 			} else if( section.getAttribute( 'data-separator' ) ) { | ||||||
|  |  | ||||||
|                 var markdown = stripLeadingWhitespace(section); | 				var markdown = stripLeadingWhitespace( section ); | ||||||
|                 section.outerHTML = slidifyMarkdown( markdown, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), section.getAttribute('data-notes'), getForwardedAttributes(section) ); | 				section.outerHTML = slidifyMarkdown( markdown, section.getAttribute( 'data-separator' ), section.getAttribute( 'data-vertical' ), section.getAttribute( 'data-notes' ), getForwardedAttributes( section ) ); | ||||||
|  |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @@ -193,19 +205,19 @@ | |||||||
|  |  | ||||||
| 		for( var j = 0, jlen = sections.length; j < jlen; j++ ) { | 		for( var j = 0, jlen = sections.length; j < jlen; j++ ) { | ||||||
|  |  | ||||||
|             makeHtml(sections[j]); | 			makeHtml( sections[j] ); | ||||||
|  |  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|     var makeHtml = function(section) { | 	var makeHtml = function( section ) { | ||||||
|  |  | ||||||
| 		var notes = section.querySelector( 'aside.notes' ); | 		var notes = section.querySelector( 'aside.notes' ); | ||||||
|  |  | ||||||
|         var markdown = stripLeadingWhitespace(section); | 		var markdown = stripLeadingWhitespace( section ); | ||||||
|  |  | ||||||
|         section.innerHTML = marked(markdown); | 		section.innerHTML = marked( markdown ); | ||||||
|  |  | ||||||
| 		if( notes ) { | 		if( notes ) { | ||||||
| 			section.appendChild( notes ); | 			section.appendChild( notes ); | ||||||
| @@ -213,8 +225,7 @@ | |||||||
|  |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|     querySlidingMarkdown(); | 	queryExternalMarkdown(); | ||||||
|  |  | ||||||
| 	queryMarkdownSlides(); | 	queryMarkdownSlides(); | ||||||
|  |  | ||||||
| })(); | })(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user