Commit 20c0a1e96d6760aa2f0fad5b9a4f77d6f6b89434

Lea Verou 2013-05-11T04:44:48

Alpha version of Prism-WPD plugin

diff --git a/plugins/wpd/index.html b/plugins/wpd/index.html
new file mode 100644
index 0000000..a10567f
--- /dev/null
+++ b/plugins/wpd/index.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+<meta charset="utf-8" />
+<link rel="shortcut icon" href="favicon.png" />
+<title>WebPlatform Docs ▲ Prism plugins</title>
+<base href="../.." />
+<link rel="stylesheet" href="style.css" />
+<link rel="stylesheet" href="prism.css" data-noprefix />
+<link rel="stylesheet" href="plugins/line-highlight/prism-line-highlight.css" data-noprefix />
+<script src="prefixfree.min.js"></script>
+
+<script>var _gaq = [['_setAccount', 'UA-33746269-1'], ['_trackPageview']];</script>
+<script src="http://www.google-analytics.com/ga.js" async></script>
+</head>
+<body>
+
+<header>
+	<div class="intro" data-src="templates/header-plugins.html" data-type="text/html"></div>
+
+	<h2>WebPlatform Docs</h2>
+	<p>Makes tokens link to WebPlatform.org documentation</p>
+</header>
+
+<section class="language-markup">
+	<h1>How to use</h1>
+	
+	<p>No setup required, just include the plugin and you’re good to go!</p>
+</section>
+
+<section>
+	<h1>Examples</h1>
+	
+	<h2>CSS</h2>
+	<pre data-src="style.css"></pre>
+	<pre data-src="prism.css"></pre>
+	
+	<h2>HTML</h2>
+	<pre data-src="index.html"></pre>
+	
+	<h2>SVG</h2>
+	<pre data-src="logo.svg"></pre>
+</section>
+
+<footer data-src="templates/footer.html" data-type="text/html"></footer>
+
+<script src="prism.js"></script>
+<script src="plugins/wpd/prism-wpd.js"></script>
+<script src="utopia.js"></script>
+<script src="code.js"></script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/wpd/prism-wpd.js b/plugins/wpd/prism-wpd.js
new file mode 100644
index 0000000..f423050
--- /dev/null
+++ b/plugins/wpd/prism-wpd.js
@@ -0,0 +1,159 @@
+(function(){
+
+if (!self.Prism) {
+	return;
+}
+
+if (Prism.languages.css) {
+	Prism.languages.css.atrule = {
+		pattern: Prism.languages.css.atrule,
+		inside: {
+			'atrule-id': /^@[\w-]+/
+		}
+	};
+	
+	Prism.languages.css.selector = {
+		pattern: Prism.languages.css.selector,
+		inside: {
+			'pseudo-class': /:[\w-]+/,
+			'pseudo-element': /::[\w-]+/
+		}
+	};
+}
+
+if (Prism.languages.markup) {
+	Prism.languages.markup.tag.inside.tag.inside['tag-id'] = /[\w-]+/;
+	
+	var Tags = {
+		HTML: {
+			'a': 1, 'abbr': 1, 'acronym': 1, 'b': 1, 'basefont': 1, 'bdo': 1, 'big': 1, 'blink': 1, 'cite': 1, 'code': 1, 'dfn': 1, 'em': 1, 'kbd': 1,  'i': 1, 
+			'rp': 1, 'rt': 1, 'ruby': 1, 's': 1, 'samp': 1, 'small': 1, 'spacer': 1, 'strike': 1, 'strong': 1, 'sub': 1, 'sup': 1, 'time': 1, 'tt': 1,  'u': 1, 
+			'var': 1, 'wbr': 1, 'noframes': 1, 'summary': 1, 'command': 1, 'dt': 1, 'dd': 1, 'figure': 1, 'figcaption': 1, 'center': 1, 'section': 1, 'nav': 1,
+			'article': 1, 'aside': 1, 'hgroup': 1, 'header': 1, 'footer': 1, 'address': 1, 'noscript': 1, 'isIndex': 1, 'main': 1, 'mark': 1, 'marquee': 1,
+			'meter': 1, 'menu': 1
+		},
+		SVG: {
+			'animateColor': 1, 'animateMotion': 1, 'animateTransform': 1, 'glyph': 1, 'feBlend': 1, 'feColorMatrix': 1, 'feComponentTransfer': 1, 
+			'feFuncR': 1, 'feFuncG': 1, 'feFuncB': 1, 'feFuncA': 1, 'feComposite': 1, 'feConvolveMatrix': 1, 'feDiffuseLighting': 1, 'feDisplacementMap': 1, 
+			'feFlood': 1, 'feGaussianBlur': 1, 'feImage': 1, 'feMerge': 1, 'feMergeNode': 1, 'feMorphology': 1, 'feOffset': 1, 'feSpecularLighting': 1, 
+			'feTile': 1, 'feTurbulence': 1, 'feDistantLight': 1, 'fePointLight': 1, 'feSpotLight': 1, 'linearGradient': 1, 'radialGradient': 1, 'altGlyph': 1, 
+			'textPath': 1, 'tref': 1, 'altglyph': 1, 'textpath': 1, 'tref': 1, 'altglyphdef': 1, 'altglyphitem': 1, 'clipPath': 1, 'color-profile': 1, 'cursor': 1, 
+			'font-face': 1, 'font-face-format': 1, 'font-face-name': 1, 'font-face-src': 1, 'font-face-uri': 1, 'foreignObject': 1, 'glyph': 1, 'glyphRef': 1, 
+			'hkern': 1, 'vkern': 1, 
+		},
+		MathML: {}
+	}
+}
+
+var language;
+
+Prism.hooks.add('wrap', function(env) {
+	if ((['tag-id'].indexOf(env.type) > -1
+		|| (env.type == 'property' && env.content.indexOf('-') != 0)
+		|| (env.type == 'atrule-id'&& env.content.indexOf('@-') != 0)
+		|| (env.type == 'pseudo-class'&& env.content.indexOf(':-') != 0) 
+		|| (env.type == 'pseudo-element'&& env.content.indexOf('::-') != 0) 
+	    || (env.type == 'attr-name' && env.content.indexOf('data-') != 0)
+	    ) && env.content.indexOf('<') === -1
+	) {
+		var searchURL = 'w/index.php?fulltext&search=';
+		
+		env.tag = 'a';
+		
+		var href = 'http://docs.webplatform.org/';
+		
+		if (env.language == 'css') {
+			href += 'wiki/css/'
+			
+			if (env.type == 'property') {
+				href += 'properties/';
+			}
+			else if (env.type == 'atrule-id') {
+				href += 'atrules/';
+			}
+			else if (env.type == 'pseudo-class') {
+				href += 'selectors/pseudo-classes/';
+			}
+			else if (env.type == 'pseudo-element') {
+				href += 'selectors/pseudo-elements/';
+			}
+		}
+		else if (env.language == 'markup') {
+			if (env.type == 'tag-id') {
+				// Check language
+				language = getLanguage(env.content) || language;
+				
+				if (language) {
+					href += 'wiki/' + language + '/elements/';
+				}
+				else {
+					href += searchURL;
+				}
+			}
+			else if (env.type == 'attr-name') {
+				if (language) {
+					href += 'wiki/' + language + '/attributes/';
+				}
+				else {
+					href += searchURL;
+				}
+			}
+		}
+		
+		href += env.content;
+		
+		env.attributes.href = href;
+		env.attributes.target = '_blank';
+	}
+});
+
+function getLanguage(tag) {
+	var tagL = tag.toLowerCase();
+	
+	if (Tags.HTML[tagL]) {
+		return 'html';
+	}
+	else if (Tags.SVG[tag]) {
+		return 'svg';
+	}
+	else if (Tags.MathML[tag]) {
+		return 'mathml';
+	}
+	
+	// Not in dictionary, perform check
+	if (Tags.HTML[tagL] !== 0) {
+		var htmlInterface = (document.createElement(tag).toString().match(/\[object HTML(.+)Element\]/) || [])[1];
+		
+		if (htmlInterface && htmlInterface != 'Unknown') {
+			Tags.HTML[tagL] = 1;
+			return 'html';
+		}
+	}
+	
+	Tags.HTML[tagL] = 0;
+	
+	if (Tags.SVG[tag] !== 0) {
+		var svgInterface = (document.createElementNS('http://www.w3.org/2000/svg', tag).toString().match(/\[object SVG(.+)Element\]/) || [])[1];
+		
+		if (svgInterface && svgInterface != 'Unknown') {
+			Tags.SVG[tag] = 1;
+			return 'svg';
+		}
+	}
+	
+	Tags.SVG[tag] = 0;
+	
+	// Lame way to detect MathML, but browsers don’t expose interface names there :(
+	if (Tags.MathML[tag] !== 0) {
+		if (tag.indexOf('m') === 0) {
+			Tags.MathML[tag] = 1;
+			return 'mathml';
+		}
+	}
+	
+	Tags.MathML[tag] = 0;
+	
+	return null;
+}
+
+})();
\ No newline at end of file
diff --git a/plugins/wpd/prism-wpd.min.js b/plugins/wpd/prism-wpd.min.js
new file mode 100644
index 0000000..4c9a280
--- /dev/null
+++ b/plugins/wpd/prism-wpd.min.js
@@ -0,0 +1 @@
+(function(){function n(t){var n=t.toLowerCase();if(e.HTML[n])return"html";if(e.SVG[t])return"svg";if(e.MathML[t])return"mathml";if(e.HTML[n]!==0){var r=(document.createElement(t).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(r&&r!="Unknown"){e.HTML[n]=1;return"html"}}e.HTML[n]=0;if(e.SVG[t]!==0){var i=(document.createElementNS("http://www.w3.org/2000/svg",t).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(i&&i!="Unknown"){e.SVG[t]=1;return"svg"}}e.SVG[t]=0;if(e.MathML[t]!==0&&t.indexOf("m")===0){e.MathML[t]=1;return"mathml"}e.MathML[t]=0;return null}if(!self.Prism)return;if(Prism.languages.css){Prism.languages.css.atrule={pattern:Prism.languages.css.atrule,inside:{"atrule-id":/^@[\w-]+/}};Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}}if(Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var e={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,tref:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyph:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var t;Prism.hooks.add("wrap",function(e){if((["tag-id"].indexOf(e.type)>-1||e.type=="property"&&e.content.indexOf("-")!=0||e.type=="atrule-id"&&e.content.indexOf("@-")!=0||e.type=="pseudo-class"&&e.content.indexOf(":-")!=0||e.type=="pseudo-element"&&e.content.indexOf("::-")!=0||e.type=="attr-name"&&e.content.indexOf("data-")!=0)&&e.content.indexOf("<")===-1){var r="w/index.php?fulltext&search=";e.tag="a";var i="http://docs.webplatform.org/";if(e.language=="css"){i+="wiki/css/";e.type=="property"?i+="properties/":e.type=="atrule-id"?i+="atrules/":e.type=="pseudo-class"?i+="selectors/pseudo-classes/":e.type=="pseudo-element"&&(i+="selectors/pseudo-elements/")}else if(e.language=="markup")if(e.type=="tag-id"){t=n(e.content)||t;t?i+="wiki/"+t+"/elements/":i+=r}else e.type=="attr-name"&&(t?i+="wiki/"+t+"/attributes/":i+=r);i+=e.content;e.attributes.href=i;e.attributes.target="_blank"}})})();
\ No newline at end of file