Browse Source

First implem for adding classes to enclosing elts.

Extra text representing classes is detected and correctly removed.
Adding attributes isn't working yet.
VonC 11 years ago
parent
commit
0bc3a836fc
1 changed files with 37 additions and 0 deletions
  1. 37 0
      plugin/markdown/markdown.js

+ 37 - 0
plugin/markdown/markdown.js

@@ -268,6 +268,42 @@
 
 
 	}
 	}
 
 
+	/**
+	 * Add classes to the parent element of a text node
+	 * From http://stackoverflow.com/questions/9178174/find-all-text-nodes
+	 */
+	function addClasses(element)
+	{
+		var mardownClassesInElementsRegex = new RegExp( "{\\\.\s*?([^}]+?)}", 'mg' );
+		var mardownClassRegex = new RegExp( "([^\"= ]+?)=\"([^\"=]+?)\"", 'mg' );
+		if ( element.childNodes.length > 0 ) {
+
+			for (var i = 0; i < element.childNodes.length; i++) {
+				addClasses(element.childNodes[i]);
+			}
+		}
+
+		if (element.nodeType == Node.TEXT_NODE && /\S/.test(element.nodeValue)) {
+
+			var nodeValue = element.nodeValue;
+			if ( matches = mardownClassesInElementsRegex.exec( nodeValue ) ) {
+
+				var classes = matches[1];
+				console.log("'" + classes + "'");
+				nodeValue = nodeValue.substring(0,matches.index) + nodeValue.substring(mardownClassesInElementsRegex.lastIndex) + "ee";
+				console.log("'" + nodeValue + "'");
+				element.nodeValue = nodeValue;
+				console.log("'" + element.parentNode.tagName + "'");
+
+				while( matchesClass = mardownClassRegex.exec( classes ) ) {
+					console.log("attr='" + matchesClass[1] + "'='" + matchesClass[2] + "'");
+					element.parentNode.attributes[matchesClass[1]] = matchesClass[2];
+					console.log("=>'" + element.parentNode.attributes[matchesClass[1]] + "'");
+				}
+			}
+		}
+	}
+
 	/**
 	/**
 	 * Converts any current data-markdown slides in the
 	 * Converts any current data-markdown slides in the
 	 * DOM to HTML.
 	 * DOM to HTML.
@@ -289,6 +325,7 @@
 				var markdown = getMarkdownFromSlide( section );
 				var markdown = getMarkdownFromSlide( section );
 
 
 				section.innerHTML = marked( markdown );
 				section.innerHTML = marked( markdown );
+				addClasses(section);
 
 
 				// If there were notes, we need to re-add them after
 				// If there were notes, we need to re-add them after
 				// having overwritten the section's HTML
 				// having overwritten the section's HTML