mirror of
https://github.com/showdownjs/showdown.git
synced 2024-03-22 13:30:55 +08:00
53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
/**
|
|
* 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.:
|
|
*
|
|
* <a href="mailto:foo@e
|
|
* xample.com">foo
|
|
* @example.com</a>
|
|
*
|
|
* Based on a filter by Matthew Wickline, posted to the BBEdit-Talk
|
|
* mailing list: <http://tinyurl.com/yu7ue>
|
|
*
|
|
*/
|
|
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 = '<a href="' + addr + '">' + addr + '</a>';
|
|
addr = addr.replace(/">.+:/g, '">'); // strip the mailto: from the visible part
|
|
|
|
return addr;
|
|
});
|