/** * Input: an email address, e.g. "foo@example.com" * * Output: the email address as a mailto link, with each character * of the address encoded as either a decimal or hex entity, in * the hopes of foiling most address harvesting spam bots. E.g.: * * foo * @example.com * * Based on a filter by Matthew Wickline, posted to the BBEdit-Talk * mailing list: * */ showdown.subParser('encodeEmailAddress', function (addr) { 'use strict'; var encode = [ function (ch) { return '&#' + ch.charCodeAt(0) + ';'; }, function (ch) { return '&#x' + ch.charCodeAt(0).toString(16) + ';'; }, function (ch) { return ch; } ]; addr = 'mailto:' + addr; addr = addr.replace(/./g, function (ch) { if (ch === '@') { // this *must* be encoded. I insist. ch = encode[Math.floor(Math.random() * 2)](ch); } else if (ch !== ':') { // leave ':' alone (to spot mailto: later) var r = Math.random(); // roughly 10% raw, 45% hex, 45% dec ch = ( r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch) ); } return ch; }); addr = '' + addr + ''; addr = addr.replace(/">.+:/g, '">'); // strip the mailto: from the visible part return addr; });