فهرست منبع

Add attributes extracted from an attribute.

Allows to add attributes to element of an attribute which contains
the attribute pattern.
VonC 11 سال پیش
والد
کامیت
28198b2ff0
1فایلهای تغییر یافته به همراه45 افزوده شده و 23 حذف شده
  1. 45 23
      plugin/markdown/markdown.js

+ 45 - 23
plugin/markdown/markdown.js

@@ -268,39 +268,61 @@
 
 	}
 
+	/**
+	 * Check if a node value has the attributes pattern.
+	 * If yes, extract it and add that value as one or several attributes
+	 * the the terget element.
+	 *
+	 * You need Cache Killer on Chrome to see the effect on any FOM transformation
+	 * directly on refresh (F5)
+	 * http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277
+	 */
+	function addAttributeInElement(node, elementTarget){
+		var mardownClassesInElementsRegex = new RegExp( "{\\\.\s*?([^}]+?)}", 'mg' );
+		var mardownClassRegex = new RegExp( "([^\"= ]+?)=\"([^\"=]+?)\"", 'mg' );
+		var nodeValue = node.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 + "'");
+			node.nodeValue = nodeValue;
+			console.log("'" + elementTarget.tagName + "'");
+
+			while( matchesClass = mardownClassRegex.exec( classes ) ) {
+				console.log("attr='" + matchesClass[1] + "'='" + matchesClass[2] + "'");
+				elementTarget.setAttribute(matchesClass[1], matchesClass[2]);
+				console.log("=>'" + elementTarget.attributes[matchesClass[1]].nodeValue + "'");
+			}
+		}
+	}
+
 	/**
 	 * Add classes to the parent element of a text node
 	 * From http://stackoverflow.com/questions/9178174/find-all-text-nodes
 	 */
-	function addClasses(element)
+	function addAttributes(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]);
+				addAttributes(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.setAttribute(matchesClass[1], matchesClass[2]);
-					console.log("=>'" + element.parentNode.attributes[matchesClass[1]].nodeValue + "'");
-				}
+		var nodeValue;
+		var elementTarget;
+		if ( element.nodeType == Node.TEXT_NODE && /\S/.test(element.nodeValue) ) {
+			addAttributeInElement(element, element.parentNode);
+		}
+		if ( element.nodeType == Node.ELEMENT_NODE && element.attributes.length > 0 ) {
+			console.log("Element '" + element.tagName + "' has " + element.attributes.length + " attributes");
+			for (iattr=0; iattr<element.attributes.length; iattr++){
+				var attr = element.attributes[iattr];
+				console.log("Check attr '" + attr + "', name='" + attr.name + "'='" + attr.value + "'");
+				addAttributeInElement(attr, element)
 			}
+			console.log("<== Element '" + element.tagName + "' had " + element.attributes.length + " attributes");
 		}
 	}
 
@@ -325,7 +347,7 @@
 				var markdown = getMarkdownFromSlide( section );
 
 				section.innerHTML = marked( markdown );
-				addClasses(section);
+				addAttributes(section);
 
 				// If there were notes, we need to re-add them after
 				// having overwritten the section's HTML