Better version of data-trim on code snippets
This commit is contained in:
		@@ -1,5 +1,52 @@
 | 
				
			|||||||
// START CUSTOM REVEAL.JS INTEGRATION
 | 
					// START CUSTOM REVEAL.JS INTEGRATION
 | 
				
			||||||
(function() {
 | 
					(function() {
 | 
				
			||||||
 | 
						// Function to perform a better "data-trim" on code snippets
 | 
				
			||||||
 | 
						// Will slice an indentation amount on each line of the snippet (amount based on the line having the lowest indentation length)
 | 
				
			||||||
 | 
						function betterTrim(snippetEl) {
 | 
				
			||||||
 | 
							// Helper functions
 | 
				
			||||||
 | 
							function trimLeft(val) {
 | 
				
			||||||
 | 
								// Adapted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill
 | 
				
			||||||
 | 
								return val.replace(/^[\s\uFEFF\xA0]+/g, '');
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							function trimLineBreaks(input) {
 | 
				
			||||||
 | 
								var lines = input.split('\n');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Trim line-breaks from the beginning
 | 
				
			||||||
 | 
								for (var i = 0; i < lines.length; i++) {
 | 
				
			||||||
 | 
									if (lines[i].trim() === '') {
 | 
				
			||||||
 | 
										lines.splice(i--, 1);
 | 
				
			||||||
 | 
									} else break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Trim line-breaks from the end
 | 
				
			||||||
 | 
								for (var i = lines.length-1; i >= 0; i--) {
 | 
				
			||||||
 | 
									if (lines[i].trim() === '') {
 | 
				
			||||||
 | 
										lines.splice(i, 1);
 | 
				
			||||||
 | 
									} else break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return lines.join('\n');
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Main function for betterTrim()
 | 
				
			||||||
 | 
							return (function(snippetEl) {
 | 
				
			||||||
 | 
								var content = trimLineBreaks(snippetEl.innerHTML);
 | 
				
			||||||
 | 
								var lines = content.split('\n');
 | 
				
			||||||
 | 
								// Calculate the minimum amount to remove on each line start of the snippet (can be 0)
 | 
				
			||||||
 | 
								var pad = lines.reduce(function(acc, line) {
 | 
				
			||||||
 | 
									if (line.length > 0 && trimLeft(line).length > 0 && acc > line.length - trimLeft(line).length) {
 | 
				
			||||||
 | 
										return line.length - trimLeft(line).length;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return acc;
 | 
				
			||||||
 | 
								}, Number.POSITIVE_INFINITY);
 | 
				
			||||||
 | 
								// Slice each line with this amount
 | 
				
			||||||
 | 
								return lines.map(function(line, index) {
 | 
				
			||||||
 | 
									return line.slice(pad);
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								.join('\n');
 | 
				
			||||||
 | 
							})(snippetEl);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if( typeof window.addEventListener === 'function' ) {
 | 
						if( typeof window.addEventListener === 'function' ) {
 | 
				
			||||||
		var hljs_nodes = document.querySelectorAll( 'pre code' );
 | 
							var hljs_nodes = document.querySelectorAll( 'pre code' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8,7 +55,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			// trim whitespace if data-trim attribute is present
 | 
								// trim whitespace if data-trim attribute is present
 | 
				
			||||||
			if( element.hasAttribute( 'data-trim' ) && typeof element.innerHTML.trim === 'function' ) {
 | 
								if( element.hasAttribute( 'data-trim' ) && typeof element.innerHTML.trim === 'function' ) {
 | 
				
			||||||
				element.innerHTML = element.innerHTML.trim();
 | 
									element.innerHTML = betterTrim(element);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Now escape html unless prevented by author
 | 
								// Now escape html unless prevented by author
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user