/* -------------------------------------------------------------------------- $Id: spamspan.js 5 2007-09-29 15:56:26Z moltar $ -------------------------------------------------------------------------- Version: 1.03 Release date: 13/05/2006 Last update: 07/01/2007 (c) 2006 SpamSpan (www.spamspan.com) This program is distributed under the terms of the GNU General Public Licence version 2, available at http://www.gnu.org/licenses/gpl.txt -------------------------------------------------------------------------- */ var spamSpanMainClass = 'spamspan'; var spamSpanUserClass = 'u'; var spamSpanDomainClass = 'd'; var spamSpanAnchorTextClass = 't'; var spamSpanParams = new Array('subject', 'body'); /* -------------------------------------------------------------------------- Do not edit past this point unless you know what you are doing. -------------------------------------------------------------------------- */ // load SpamSpan //addEvent(window, 'load', spamSpan); function spamSpan() { var allSpamSpans = getElementsByClass(spamSpanMainClass, document, 'span'); for (var i = 0; i < allSpamSpans.length; i++) { // get data var user = getSpanValue(spamSpanUserClass, allSpamSpans[i]); var domain = getSpanValue(spamSpanDomainClass, allSpamSpans[i]); var anchorText = getSpanValue(spamSpanAnchorTextClass, allSpamSpans[i]); // prepare parameter data var paramValues = new Array(); for (var j = 0; j < spamSpanParams.length; j++) { var paramSpanValue = getSpanValue(spamSpanParams[j], allSpamSpans[i]); if (paramSpanValue) { paramValues.push(spamSpanParams[j] + '=' + encodeURIComponent(paramSpanValue)); } } // create new anchor tag var at = String.fromCharCode(32*2); var email = cleanSpan(user) + at + cleanSpan(domain); var anchorTagText = document.createTextNode(anchorText ? anchorText : email); var mto = String.fromCharCode(109,97,105,108,116,111,58); var hrefAttr = mto + email; hrefAttr += paramValues.length ? '?' + paramValues.join('&') : ''; var anchorTag = document.createElement('a'); anchorTag.className = spamSpanMainClass; anchorTag.setAttribute('href', hrefAttr); anchorTag.appendChild(anchorTagText); // replace the span with anchor allSpamSpans[i].parentNode.replaceChild(anchorTag, allSpamSpans[i]); } } function getElementsByClass(searchClass, scope, tag) { var classElements = new Array(); if (scope == null) node = document; if (tag == null) tag = '*'; var els = scope.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)"); for (var i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; } function getSpanValue(searchClass, scope) { var span = getElementsByClass(searchClass, scope, 'span'); if (span[0] && span[0].firstChild != null ) { return span[0].firstChild.nodeValue; } else { return false; } } function cleanSpan(string) { if( string ){ // string = string.replace(//g, ''); // replace variations of [dot] with . string = string.replace(/[\[\(\{]?[dD][oO0][tT][\}\)\]]?/g, '.'); // replace spaces with nothing string = string.replace(/\s+/g, ''); } return string; } // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html /* function addEvent(obj, type, fn) { if (obj.addEventListener) obj.addEventListener(type, fn, false); else if (obj.attachEvent) { obj['e' + type + fn] = fn; obj[type + fn] = function() { obj['e' + type + fn](window.event); } obj.attachEvent('on' + type, obj[type + fn]); } } */