Sto usando decorateCooked nel tema del mio sito per post-elaborare i blocchi di codice HighlightJS per un linguaggio specifico. Funziona quando si usano i ``` per indicare il codice in un post, ma fallisce quando si usa l’indentazione per includere il codice.
Nel caso di successo, le classi di HighlightJS sono presenti prima che venga invocato il mio codice decorateCooked, quindi posso usare jQuery per trovare i blocchi di codice che contengono la mia classe (‘applescript’). Nel caso fallito, sembra che HighlightJS applichi la sua magia dopo l’esecuzione del mio codice plugin, perché le classi di HighlightJS (hljs applescript) sono assenti. Tuttavia, queste classi sono presenti quando ispeziono successivamente la pagina caricata.
Ecco il mio codice, definito nella sezione </HEAD> del mio tema:
<script type="text/discourse-plugin" version="0.1">
if (navigator.appVersion.indexOf('Mac') >= 0) { // Esegui solo su Mac
api.decorateCooked(
$elem => {
console.log($elem.find('code'));
console.log($elem.find('code').attr('class'));
$elem.find('.lang-applescript, .applescript').filter(function () {
return $(this).parents('.d-editor-preview').length < 1; // Non farlo nelle anteprime dell'editor
}).each(function(index) {
var src = encodeURIComponent(this.innerText);
$( '<a class="widget-button btn btn-default" href="sdapplescript://com.apple.scripteditor?action=new&script=' + src + '">Apri in Script Debugger</a>' ).insertAfter($(this).parent());
});
},
{ id: 'applescript-decorator' }
);
}
</script>
Dall’output del log della console, vedo che riesco a trovare i blocchi <code> nei miei post, ma l’attributo class viene riportato come undefined.
Esiste un modo per far eseguire il mio codice decorateCookeddopo che HighlightJS ha completato il suo lavoro?