Volevo anche la possibilità di utilizzare SVG personalizzati come icona accanto a una menzione, qualcosa che ho visto su Guilded per lo staff e che volevo avere lì ma non potevo avere—un altro motivo per cui mi piace così tanto Discourse è che posso effettivamente creare qualcosa che potrebbe funzionare invece di sperare e aspettare che gli sviluppatori lo aggiungano.
Così ho creato la seguente soluzione. Non è infallibile in alcun modo, probabilmente richiede che l’SVG che carichi abbia una variabile SCSS che inizi con svg e tuttavia sembra funzionare abbastanza per me ora ![]()
Se qualcuno vuole prendere questo codice e svilupparlo, incorporarlo per renderlo più elegante, gli sarei grato!
Possibili miglioramenti
- Far funzionare tutte le icone SVG, il che significa tutte quelle di Discourse e tutte quelle caricate che non iniziano con
svg. - Pulire il codice.
- Migliorare lo stile, dato che ho un po’ improvvisato il CSS per farlo funzionare e potrebbe non funzionare in tutte le situazioni.
Indipendentemente da ciò, ecco un esempio di menzione con me che uso l’icona personalizzata che ho per Emotional Self-Defense come icona di menzione dello staff:

Ecco il codice che ho aggiunto:
header.html
// Aggiunge icone SVG come opzione, purché siano incluse negli asset e caricate
// Crea un oggetto di tutti gli asset e itera per trovare quali link hanno l'attributo data-emoji
// uguale al nome della variabile dell'asset e quindi aggiunge l'URL per esso
// converte l'oggetto in un array di chiavi
const keys = Object.keys(settings.theme_uploads);
// stampa tutte le chiavi
console.log(keys);
// itera sull'oggetto
keys.forEach((key, index) => {
console.log(`${key}: ${settings.theme_uploads[key]}`);
api.decorateCooked($elem => {
var url = settings.theme_uploads[key];
console.log("key: " + key);
console.log("index: " + index);
console.log("url: " + url);
console.log(JSON.stringify(settings.theme_uploads));
$elem
.find("a[data-emoji^='" + key + "']")
.css("--svg-icon", "url('" + url + "')");
}
);
});
common.scss
@if $show-after-mention == "true" {
[data-emoji^="svg"]:after {
content: 'hey ';
color: transparent;
height:5px;
width:15px;
background: var(--svg-icon) no-repeat center;
background-size: contain;
display: inline;
}
} @else {
[data-emoji^="svg"]:before {
content: 'hey ';
color: transparent;
height:5px;
width:15px;
background: var(--svg-icon) no-repeat center;
background-size: contain;
display: inline;
}
}
Questo richiede anche di:
- Creare una cartella
/assets - Aggiungere file
svgnella cartella/assets, come/assets/esd-heart.svg - Aggiornare il file
about.jsonper collegare tali asset con qualcosa come:
"assets": {
"svg_esd_heart": "assets/esd-heart.svg"
}