First implem for adding classes to enclosing elts.

Extra text representing classes is detected and correctly removed.
Adding attributes isn't working yet.
This commit is contained in:
VonC 2013-10-24 22:37:55 +02:00
parent 82d2ae654d
commit 0bc3a836fc

View File

@ -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
* DOM to HTML.
@ -289,6 +325,7 @@
var markdown = getMarkdownFromSlide( section );
section.innerHTML = marked( markdown );
addClasses(section);
// If there were notes, we need to re-add them after
// having overwritten the section's HTML