Sie override a renderer method können.
Markiert funktioniert in zwei Schritten: (1) es analysiert die Markdown in eine Reihe von Tokens und (2) es rendert diese Token in HTML. Da Sie das Markdown-Parsing nicht ändern möchten (es identifiziert Links bereits richtig), aber Sie möchten die HTML-Ausgabe ändern, möchten Sie den Renderer für Links überschreiben.
var renderer = new marked.Renderer();
get_favicon = function (text) {
// return replacement text here...
var out = '<img src="https://www.google.com/s2/favicons?domain='
out += text + '">' + text + '</a>'
return out
}
renderer.link = function (href, title, text) {
if (this.options.sanitize) {
try {
var prot = decodeURIComponent(unescape(href))
.replace(/[^\w:]/g, '')
.toLowerCase();
} catch (e) {
return '';
}
if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
return '';
}
}
var out = '<a href="' + href + '"';
if (title) {
out += ' title="' + title + '"';
}
out += '>' + get_favicon(text) + '</a>';
return out;
};
}
// Pass the custom renderer to marked with the input.
markdown(input, renderer=renderer)
Bitte beachte, dass ich nahm nur die default link method und es leicht verändert text
durch die get_favicon
Funktion zu übergeben. Die Funktion get_favicon
akzeptiert eine Textzeichenfolge und gibt den Ersatztext (in diesem Fall ein Bild) zurück. Es könnte wahrscheinlich verbessert werden, da nicht alle Links nur eine Domain als Textinhalt haben. Wenn der Text mehr als die Domäne enthält (Pfad, Fragment, Abfragezeichenfolge usw.), verwenden Sie nur die Domäne für die Favicon-Verknüpfung. Oder wenn der Text überhaupt keinen Link enthält (da derselbe Renderer für alle Links verwendet wird, nicht nur für automatische Links), sollte der Text unverändert zurückgegeben werden. Ich werde diese Verbesserungen als Übung für den Leser hinterlassen.
Danke, Google S2-Konverter scheint die meisten Links zu behandeln, die weit mehr als eine Domain enthalten, aber ich denke, manchmal hat Probleme mit Sub-Domains. Das funktioniert zum Beispiel: \t Sample long link with Google S2 – mrmccormack
Es scheint, dass stackoverflow einen Link Beschreibung truncator auf alle Kommentare verwendet ... aus dem gleichen Grund möchte ich im Mai ExpressJS App. – mrmccormack