#16 „obfuskované“ odkazy na e-maily, které znesnadní sběr spamovacím robotům
authorFrantišek Kučera <franta-hg@frantovo.cz>
Thu, 09 Feb 2012 14:52:20 +0100
changeset 93 5b55827de220
parent 92 8d34f2020884
child 94 4b3ba32f613c
#16 „obfuskované“ odkazy na e-maily, které znesnadní sběr spamovacím robotům odkazy jsou pro uživatele klikatelné (vyžaduje JavaScript).
vstup/js/skript.js
vstup/odkazy.xml
šablona/makra/odkazy.xsl
--- a/vstup/js/skript.js	Thu Feb 09 12:54:49 2012 +0100
+++ b/vstup/js/skript.js	Thu Feb 09 14:52:20 2012 +0100
@@ -27,7 +27,31 @@
 	rot13: function(id) {
 		var e = document.getElementById(id);
 		e.textContent = e.textContent.rot13();
-	}
+	},
+
+	/**
+	 * Vloží klikatelný odkaz.
+	 * @param id ID span elementu obsahujícího data
+	 */
+	odkazNaElektronickouPoštu: function(id) {
+		var spanČesky = document.getElementById(id);
+		var spanObsah = document.getElementById(id + "b");
+		var česky = spanČesky.innerHTML;
+		var adresa = česky.replace(" zavináč ", "@").replace(" tečka ",".");
+
+		var odkaz = document.createElement("a");
+		odkaz.href = "mailto:" + adresa;
+		if (spanObsah.innerHTML.length > 0) {
+			odkaz.innerHTML = spanObsah.innerHTML;
+		} else {
+			odkaz.innerHTML = adresa;
+		}
+
+		spanČesky.parentNode.insertBefore(odkaz, spanČesky);
+		spanČesky.parentNode.removeChild(spanČesky);
+		spanObsah.parentNode.removeChild(spanObsah);
+	},
+
 };
 
 /**
--- a/vstup/odkazy.xml	Thu Feb 09 12:54:49 2012 +0100
+++ b/vstup/odkazy.xml	Thu Feb 09 14:52:20 2012 +0100
@@ -11,6 +11,7 @@
 
 		<ul>
 			<li><m:a href="kontakt">Kontakt</m:a> – interní odkaz</li>
+			<li><m:a href="anonym@example.com" typ="email">Pan <em>Anonym</em></m:a> – obfuskovaný e-mail</li>
 			<li>
 				<m:a href="nejlepší linuxová distribuce" typ="seznam">Nejlepší distribuce</m:a> – vyhledávání pomocí Seznamu
 				<m:podČarou>Byl založen roku 1996 <m:a href="Ivo Lukačovič" typ="wiki">Ivem Lukačovičem</m:a>, a stal se prvním českým internetovým vyhledávačem v České republice.
@@ -29,6 +30,7 @@
 
 		<m:pre jazyk="xml"><![CDATA[
 <m:a href="kontakt">Kontakt</m:a>
+<m:a href="anonym@example.com" typ="email">Pan Anonym</m:a>
 <m:a href="nejlepší linuxová distribuce" typ="seznam">Nejlepší distribuce</m:a>
 <m:a href="GNU/Linux a tučňák Tux" typ="google">GNU/Linux a tučňák Tux</m:a>
 <m:a href="1855" typ="rfc">Netiketa</m:a>
--- a/šablona/makra/odkazy.xsl	Thu Feb 09 12:54:49 2012 +0100
+++ b/šablona/makra/odkazy.xsl	Thu Feb 09 14:52:20 2012 +0100
@@ -19,9 +19,10 @@
 <xsl:stylesheet version="2.0"
 	xmlns="http://www.w3.org/1999/xhtml"
 	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
+	xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace"
 	xmlns:xs="http://www.w3.org/2001/XMLSchema"
 	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-	exclude-result-prefixes="m xs">
+	exclude-result-prefixes="m k xs">
 
 	<!--
 		Interní odkazy
@@ -96,7 +97,7 @@
 				)"/>
 		</xsl:call-template>
 	</xsl:template>
-	
+
 	<!--
 		Wikipedia
 		*********
@@ -114,7 +115,7 @@
 				)"/>
 		</xsl:call-template>
 	</xsl:template>
-	
+
 	<!--
 		Javadoc
 		*******
@@ -133,7 +134,7 @@
 				)"/>
 		</xsl:call-template>
 	</xsl:template>
-	
+
 	<!-- 
 		Seznam.cz
 		*********
@@ -167,7 +168,7 @@
 				)"/>
 		</xsl:call-template>	
 	</xsl:template>
-	
+
 	<!-- 
 		Request for comments
 		********************
@@ -184,8 +185,34 @@
 				)"/>
 		</xsl:call-template>
 	</xsl:template>
-	
-	
+
+	<!--
+		E-mail
+		******
+		Odkaz na e-mail v „obfuskovaném“ tvaru,
+		aby spamovací roboti nemohli tak snadno sbírat e-mailové adresy z webů.
+		Ale zároveň klikatelný, aby ho uživatel nemusel opisovat (vyžaduje JavaScript).
+		Obsah elementu je nepovinný – pokud chybí, vloží se e-mailová adresa.
+		*
+		@href e-mailová adresa (bez „mailto:“)
+	-->
+	<xsl:template match="m:a[@typ='email']">
+		<xsl:variable name="česky" select="replace(replace(@href, '@', ' zavináč '), '\.', ' tečka ')"/>
+		<xsl:variable name="klíč" select="concat(tokenize($konfigurace/k:web/k:uuid/text(), '-')[1], '9df1')"/>
+		<xsl:variable name="pořadí"><xsl:number level="any"/></xsl:variable>
+		<xsl:variable name="idSpanu" select="concat('c', $klíč, $pořadí)"/>
+		<span title="{text()}" id="{$idSpanu}">
+			<xsl:value-of select="$česky"/>
+		</span>
+		<span id="{$idSpanu}b" style="display: none">
+			<xsl:apply-templates/>
+		</span>
+		<script type="text/javascript">
+			xwg.odkazNaElektronickouPoštu("<xsl:value-of select="$idSpanu"/>");
+		</script>
+	</xsl:template>
+
+
 	<xsl:template name="vložOdkaz">
 		<xsl:param name="url"/>
 		<a>