Vous pouvez override a renderer method. Marqué fonctionne en deux étapes: (1) il analyse Markdown dans un groupe de jetons et (2) il rend ces jetons au format HTML. Comme vous ne voulez pas modifier l'analyse de Markdown (il identifie déjà correctement les liens), mais vous voulez modifier la sortie HTML, vous voulez remplacer le moteur de rendu pour les liens.
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)
Notez que je viens de prendre la default link method et changeai légèrement pour passer text
par la fonction get_favicon
. La fonction get_favicon
accepte une chaîne de texte et renvoie le texte de remplacement (une image dans ce cas). Il pourrait probablement être amélioré car tous les liens n'auront qu'un domaine comme contenu textuel. Si le texte contenait plus que le domaine (chemin, fragment, chaîne de requête, etc.), utilisez uniquement le domaine pour le lien favicon. Ou si le texte ne contient pas du tout de lien (puisque le même rendu est utilisé pour tous les liens, pas seulement pour les liens automatiques), le texte doit être retourné sans être modifié. Je vais laisser ces améliorations comme un exercice pour le lecteur.
Merci, le convertisseur de Google S2 semble gérer la plupart des liens qui contiennent beaucoup plus qu'un domaine, mais je pense qu'il y a parfois des problèmes avec les sous-domaines. Cela fonctionne par exemple: \t Sample long link with Google S2 – mrmccormack
Il semble que stackoverflow utilise un truncator de description de lien sur tous les commentaires ... pour la même raison que je veux dans l'application ExpressJS. – mrmccormack