#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 935b55827de220
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
     1.1 --- a/vstup/js/skript.js	Thu Feb 09 12:54:49 2012 +0100
     1.2 +++ b/vstup/js/skript.js	Thu Feb 09 14:52:20 2012 +0100
     1.3 @@ -27,7 +27,31 @@
     1.4  	rot13: function(id) {
     1.5  		var e = document.getElementById(id);
     1.6  		e.textContent = e.textContent.rot13();
     1.7 -	}
     1.8 +	},
     1.9 +
    1.10 +	/**
    1.11 +	 * Vloží klikatelný odkaz.
    1.12 +	 * @param id ID span elementu obsahujícího data
    1.13 +	 */
    1.14 +	odkazNaElektronickouPoštu: function(id) {
    1.15 +		var spanČesky = document.getElementById(id);
    1.16 +		var spanObsah = document.getElementById(id + "b");
    1.17 +		var česky = spanČesky.innerHTML;
    1.18 +		var adresa = česky.replace(" zavináč ", "@").replace(" tečka ",".");
    1.19 +
    1.20 +		var odkaz = document.createElement("a");
    1.21 +		odkaz.href = "mailto:" + adresa;
    1.22 +		if (spanObsah.innerHTML.length > 0) {
    1.23 +			odkaz.innerHTML = spanObsah.innerHTML;
    1.24 +		} else {
    1.25 +			odkaz.innerHTML = adresa;
    1.26 +		}
    1.27 +
    1.28 +		spanČesky.parentNode.insertBefore(odkaz, spanČesky);
    1.29 +		spanČesky.parentNode.removeChild(spanČesky);
    1.30 +		spanObsah.parentNode.removeChild(spanObsah);
    1.31 +	},
    1.32 +
    1.33  };
    1.34  
    1.35  /**
     2.1 --- a/vstup/odkazy.xml	Thu Feb 09 12:54:49 2012 +0100
     2.2 +++ b/vstup/odkazy.xml	Thu Feb 09 14:52:20 2012 +0100
     2.3 @@ -11,6 +11,7 @@
     2.4  
     2.5  		<ul>
     2.6  			<li><m:a href="kontakt">Kontakt</m:a> – interní odkaz</li>
     2.7 +			<li><m:a href="anonym@example.com" typ="email">Pan <em>Anonym</em></m:a> – obfuskovaný e-mail</li>
     2.8  			<li>
     2.9  				<m:a href="nejlepší linuxová distribuce" typ="seznam">Nejlepší distribuce</m:a> – vyhledávání pomocí Seznamu
    2.10  				<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.
    2.11 @@ -29,6 +30,7 @@
    2.12  
    2.13  		<m:pre jazyk="xml"><![CDATA[
    2.14  <m:a href="kontakt">Kontakt</m:a>
    2.15 +<m:a href="anonym@example.com" typ="email">Pan Anonym</m:a>
    2.16  <m:a href="nejlepší linuxová distribuce" typ="seznam">Nejlepší distribuce</m:a>
    2.17  <m:a href="GNU/Linux a tučňák Tux" typ="google">GNU/Linux a tučňák Tux</m:a>
    2.18  <m:a href="1855" typ="rfc">Netiketa</m:a>
     3.1 --- a/šablona/makra/odkazy.xsl	Thu Feb 09 12:54:49 2012 +0100
     3.2 +++ b/šablona/makra/odkazy.xsl	Thu Feb 09 14:52:20 2012 +0100
     3.3 @@ -19,9 +19,10 @@
     3.4  <xsl:stylesheet version="2.0"
     3.5  	xmlns="http://www.w3.org/1999/xhtml"
     3.6  	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
     3.7 +	xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace"
     3.8  	xmlns:xs="http://www.w3.org/2001/XMLSchema"
     3.9  	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    3.10 -	exclude-result-prefixes="m xs">
    3.11 +	exclude-result-prefixes="m k xs">
    3.12  
    3.13  	<!--
    3.14  		Interní odkazy
    3.15 @@ -96,7 +97,7 @@
    3.16  				)"/>
    3.17  		</xsl:call-template>
    3.18  	</xsl:template>
    3.19 -	
    3.20 +
    3.21  	<!--
    3.22  		Wikipedia
    3.23  		*********
    3.24 @@ -114,7 +115,7 @@
    3.25  				)"/>
    3.26  		</xsl:call-template>
    3.27  	</xsl:template>
    3.28 -	
    3.29 +
    3.30  	<!--
    3.31  		Javadoc
    3.32  		*******
    3.33 @@ -133,7 +134,7 @@
    3.34  				)"/>
    3.35  		</xsl:call-template>
    3.36  	</xsl:template>
    3.37 -	
    3.38 +
    3.39  	<!-- 
    3.40  		Seznam.cz
    3.41  		*********
    3.42 @@ -167,7 +168,7 @@
    3.43  				)"/>
    3.44  		</xsl:call-template>	
    3.45  	</xsl:template>
    3.46 -	
    3.47 +
    3.48  	<!-- 
    3.49  		Request for comments
    3.50  		********************
    3.51 @@ -184,8 +185,34 @@
    3.52  				)"/>
    3.53  		</xsl:call-template>
    3.54  	</xsl:template>
    3.55 -	
    3.56 -	
    3.57 +
    3.58 +	<!--
    3.59 +		E-mail
    3.60 +		******
    3.61 +		Odkaz na e-mail v „obfuskovaném“ tvaru,
    3.62 +		aby spamovací roboti nemohli tak snadno sbírat e-mailové adresy z webů.
    3.63 +		Ale zároveň klikatelný, aby ho uživatel nemusel opisovat (vyžaduje JavaScript).
    3.64 +		Obsah elementu je nepovinný – pokud chybí, vloží se e-mailová adresa.
    3.65 +		*
    3.66 +		@href e-mailová adresa (bez „mailto:“)
    3.67 +	-->
    3.68 +	<xsl:template match="m:a[@typ='email']">
    3.69 +		<xsl:variable name="česky" select="replace(replace(@href, '@', ' zavináč '), '\.', ' tečka ')"/>
    3.70 +		<xsl:variable name="klíč" select="concat(tokenize($konfigurace/k:web/k:uuid/text(), '-')[1], '9df1')"/>
    3.71 +		<xsl:variable name="pořadí"><xsl:number level="any"/></xsl:variable>
    3.72 +		<xsl:variable name="idSpanu" select="concat('c', $klíč, $pořadí)"/>
    3.73 +		<span title="{text()}" id="{$idSpanu}">
    3.74 +			<xsl:value-of select="$česky"/>
    3.75 +		</span>
    3.76 +		<span id="{$idSpanu}b" style="display: none">
    3.77 +			<xsl:apply-templates/>
    3.78 +		</span>
    3.79 +		<script type="text/javascript">
    3.80 +			xwg.odkazNaElektronickouPoštu("<xsl:value-of select="$idSpanu"/>");
    3.81 +		</script>
    3.82 +	</xsl:template>
    3.83 +
    3.84 +
    3.85  	<xsl:template name="vložOdkaz">
    3.86  		<xsl:param name="url"/>
    3.87  		<a>