mirror of
https://github.com/showdownjs/showdown.git
synced 2024-03-22 13:30:55 +08:00
61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
|
/**
|
||
|
* Created by Estevao on 12-01-2015.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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;
|
||
|
|
||
|
});
|