Estensione markdown per i pgn

Si ma se non ho capito male (può essere), il plugin viene eseguito lato server mentre il tema viene spinto al client.
Credo che l’approccio corretto sia proprio creare l’estensione di markdown-it che trasforma lato server i tag in un

e lato client viene chiamato il motore.
Si veda come funziona graphviz e footnotes.

Capito. Allora bisogna vedere se i markdown nel tema funzionano ancora (domani vedo se c’è la faccio, ho un periodo di lavoro molto intenso) e lato server prova a vedere se il motore si può rendere disponibile.
Domani studio meglio comunque

Intanto do una occhiata anche io, metto su una copia di discourse in un docker locale.

Giusto per continuare il discorso, questo che ho citato già lo fa il nostro markdown, ossia creare un pezzo di html <div class='pgn'> con dopo la stringa nata dai parametri passati e una invocazione al motore.
Ecco, per ribadire, ci serve che il motore sia di rendering del gioco PGN, sia ricosciuto e funzionante come javascript lato server, così quando l’HTML deve essere interpretato, il rendering venga eseguito.

Sto installando discourse in locale. Piu’ tardi faccio due esperimenti e torno a stretto giro.

1 Mi Piace

Ah se serve il tema che funziona, qui dovrei aver condiviso tutto:

Ok sono riuscito ad avviare il plugin e a far crashare il motore.
A ben vedere, il meccanismo è identico a quello di graphviz: il motore js del client prende i tag e li trasforma, passandoli al js del motore scacchistico che mi renderizza un svg.
Però ricomincerei da capo, lasciando da parte per il momento gli argomenti e parsando semplicemente due tag [pgn].
Stasera approfondisco.

Se vedi i post precedenti, il motore va in crash se trova o caratteri non unicode o se ci sono ad esempio dei .gz in giro. Va quindi presa una versione “pulita”.
Non ci son problemi a non usare per adesso i parametri, anche se era l’unica cosa che andava :rofl:

Comunque ho messo commenti e spiegazioni su cosa ci si attende e cosa dovrebbe fare, facendo copia e incolla dalle sorgenti. Dovrebbe essere comprensibile quindi cosa fare. Farlo funzionare è un altro paio di maniche!

Ho visto, qui il problema e’ un po’ diverso, ho preso il tema caricato qui ma ci son proprio problemi in js. Del tipo che attrs.["stocazzo"] deve essere cambiato in attrs.stocazzo, poi invece ci son problemi con la chiamata alla funzione wrap.
Comunque sto riordinando un po’ le cose, oggi ci lavoro partendo dal tema che mi hai condiviso.
Hai visto il post che ho fatto sui tecnicismi?

Sì, me lo sono anche appuntato ma devi ristudiare un po’ di cose… cmq la.cosa sembra fattibile e all’apparenza neanche troppo difficile. In due penso che riusciremo a sistemare

La cosa che assolutamente non so fare è i CSS e compagnia, sul js posso ingegnarmi.

Sono cotto di lavoro e un imbrattacodici di mestiere. Senza ambiente di debug, è probabile che la mia utilità rasenti lo zero, però se serve una mano un occhio di notte posso buttarlo - provate a dirmi cosa vi serve del css.

Per ora nulla, sto ancora cercando di fare funzionare la sostituzione dei tag.

Ma lato cliente o lato server? Perché lato cliente funzionava prima (vedasi il thread di test)

Si ma integrarlo nel tema non è l’approccio corretto mi pare per diversi motivi tra cui il fatto che qualora dovessimo modificare il tema, va portato. L’approccio è il plugin con l’estensione markdown-it, e il packaging non è, sulla carta, complicato, anzi.
Comunque possiamo anche lavorare su entrambi i fronti, l’implementazione è del tutto simile.

Ok era giusto per direz magari di può fare un porting del codice esistente

Si, il concetto è corretto.
Ho risolto uno dei problemi (credo ripulendo la cache dell’installazione di discourse, ma che ne so, è il classico inferno dell’Open Source), resta che non mi sostituisce i tag con la semplice funzionalità wrap: Mi sa che provo a fare copia incolla del codice del tema, tanto per vedere l’effetto che fa.

Dannazione!!!
Ho capito perche’ tu dici A e io capisco B!!!
Quello che pensavi di implementare non e’ un tema, ma un componente di un tema!!!
Come per il dice roll!!!
Ok, allora ha senso.

Mi fermo qui per capire.

Un’altra delle cose che mi frullano in testa strane e’ questa.
Il pgn viewer disegna in una div. Infatti abbiamo due componenti: il pezzo JS:

var pgn = ['1. e4 e5 2. Nf3 Nc6  3.Bc4 Bc5 4.b4 Bxb4 5.c3 Ba5 6.d4 exd4 7.O-O d3 8.Qb3 Qf6 9.e5 Qg6 10.Re1 Nge7 11.Ba3 b5 12.Qxb5 Rb8 13.Qa4 Bb6 14.Nbd2 Bb7 15.Ne4 Qf5 16.Bxd3 Qh5 { now the whole idea unfolds } 17.Nf6+ gxf6 18.exf6 Rg8 19.Rad1!  Qxf3? 20.Rxe7+! Nxe7 21.Qxd7+ Kxd7 22.Bf5+ Ke8 23.Bd7+ Kf8 24. Bxe7# 1-0']
.join(" ");
pgnv = PGNV.pgnEdit('b1', {pgn: pgn});

e il pezzo HTML:

<div id="b1" style="width: 360px"></div>

Il componente va a disegnare nell’elemento della pagina che matcha l’id passato.
Ma tale ID dovra’ essere unico.
Come pensavi di risolvere questo?

Vedo che ad un certo punto hai

    const id             = (tagInfo.attrs.id || 'board').trim();

il che mi fa pensare che tale id dovra’ essere proposto dall’utente?
Credo che qui entri in gioco il server…

E’ uno dei parametri. In teoria tutti i parametri per costruire la stringa

, se non dovesse essere passato, usa il valore di default.