Refonte du système JDR + système de personnage joueurs / non joueurs :

- Système de templating dans le game system : en effet, les templates sont liés au game system car les fiches personnages ne sont pas forcément les même selon les jeux (perso Dnd possède + de compétences que Nimble par exemple)
- changement des fiches personnages pour adapter le templating au niveau des campagnes et remplir des pages de perso
This commit is contained in:
2026-04-30 10:42:09 +02:00
parent 8e0c1c1017
commit 117334315f
67 changed files with 1610 additions and 255 deletions

View File

@@ -205,19 +205,23 @@ export class CampaignDetailComponent implements OnInit, OnDestroy {
}
/**
* Extrait une ligne de résumé depuis le markdown (1re ligne non-vide, non-titre).
* Générique : utilisé pour les fiches PJ comme PNJ (mêmes besoins d'aperçu carte).
* Extrait une ligne de resume pour la fiche PJ/PNJ — 1re valeur de template
* non-vide (apres refonte 2026-04-30, remplace l'ancien parsing markdown).
*/
personaSnippet(p: { markdownContent?: string | null }): string {
if (!p.markdownContent) return '(Fiche vide)';
const firstMeaningful = p.markdownContent
.split('\n')
.map(l => l.trim())
.find(l => l && !l.startsWith('#'));
if (!firstMeaningful) return '(Fiche vide)';
return firstMeaningful.length > 80
? firstMeaningful.substring(0, 77) + '…'
: firstMeaningful;
personaSnippet(p: { values?: Record<string, string> }): string {
const values = p.values ?? {};
for (const v of Object.values(values)) {
if (!v) continue;
const firstMeaningful = v
.split('\n')
.map(l => l.trim())
.find(l => l && !l.startsWith('#'));
if (!firstMeaningful) continue;
return firstMeaningful.length > 80
? firstMeaningful.substring(0, 77) + '…'
: firstMeaningful;
}
return '(Fiche vide)';
}
/** Alias gardé pour compatibilité avec les anciens templates. */