mirror of
https://git.studyfor.work/actions/action-send-mail.git
synced 2026-08-31 20:02:08 -04:00
Add markdown format support (#25)
Co-authored-by: Dawid Dziurla <dawidd0811@gmail.com>
This commit is contained in:
+98
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Turn Markdown link shortcuts into XHTML <a> tags.
|
||||
*/
|
||||
showdown.subParser('anchors', function (text, options, globals) {
|
||||
'use strict';
|
||||
|
||||
text = globals.converter._dispatch('anchors.before', text, options, globals);
|
||||
|
||||
var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {
|
||||
if (showdown.helper.isUndefined(title)) {
|
||||
title = '';
|
||||
}
|
||||
linkId = linkId.toLowerCase();
|
||||
|
||||
// Special case for explicit empty url
|
||||
if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) {
|
||||
url = '';
|
||||
} else if (!url) {
|
||||
if (!linkId) {
|
||||
// lower-case and turn embedded newlines into spaces
|
||||
linkId = linkText.toLowerCase().replace(/ ?\n/g, ' ');
|
||||
}
|
||||
url = '#' + linkId;
|
||||
|
||||
if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {
|
||||
url = globals.gUrls[linkId];
|
||||
if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {
|
||||
title = globals.gTitles[linkId];
|
||||
}
|
||||
} else {
|
||||
return wholeMatch;
|
||||
}
|
||||
}
|
||||
|
||||
//url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance
|
||||
url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
|
||||
|
||||
var result = '<a href="' + url + '"';
|
||||
|
||||
if (title !== '' && title !== null) {
|
||||
title = title.replace(/"/g, '"');
|
||||
//title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance
|
||||
title = title.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
|
||||
result += ' title="' + title + '"';
|
||||
}
|
||||
|
||||
// optionLinksInNewWindow only applies
|
||||
// to external links. Hash links (#) open in same page
|
||||
if (options.openLinksInNewWindow && !/^#/.test(url)) {
|
||||
// escaped _
|
||||
result += ' rel="noopener noreferrer" target="¨E95Eblank"';
|
||||
}
|
||||
|
||||
result += '>' + linkText + '</a>';
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
// First, handle reference-style links: [link text] [id]
|
||||
text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g, writeAnchorTag);
|
||||
|
||||
// Next, inline-style links: [link text](url "optional title")
|
||||
// cases with crazy urls like ./image/cat1).png
|
||||
text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
|
||||
writeAnchorTag);
|
||||
|
||||
// normal cases
|
||||
text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
|
||||
writeAnchorTag);
|
||||
|
||||
// handle reference-style shortcuts: [link text]
|
||||
// These must come last in case you've also got [link test][1]
|
||||
// or [link test](/foo)
|
||||
text = text.replace(/\[([^\[\]]+)]()()()()()/g, writeAnchorTag);
|
||||
|
||||
// Lastly handle GithubMentions if option is enabled
|
||||
if (options.ghMentions) {
|
||||
text = text.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gmi, function (wm, st, escape, mentions, username) {
|
||||
if (escape === '\\') {
|
||||
return st + mentions;
|
||||
}
|
||||
|
||||
//check if options.ghMentionsLink is a string
|
||||
if (!showdown.helper.isString(options.ghMentionsLink)) {
|
||||
throw new Error('ghMentionsLink option must be a string');
|
||||
}
|
||||
var lnk = options.ghMentionsLink.replace(/\{u}/g, username),
|
||||
target = '';
|
||||
if (options.openLinksInNewWindow) {
|
||||
target = ' rel="noopener noreferrer" target="¨E95Eblank"';
|
||||
}
|
||||
return st + '<a href="' + lnk + '"' + target + '>' + mentions + '</a>';
|
||||
});
|
||||
}
|
||||
|
||||
text = globals.converter._dispatch('anchors.after', text, options, globals);
|
||||
return text;
|
||||
});
|
||||
Reference in New Issue
Block a user