import { SYSTEM_RDD } from "./constants.js"; import { Grammar } from "./grammar.js"; import { RdDTimestamp } from "./rdd-timestamp.js"; const LATEST_USED_JOURNAL_ID = "chronologie-dernier-journal"; export class DialogChronologie extends Dialog { static init() { game.settings.register(SYSTEM_RDD, LATEST_USED_JOURNAL_ID, { name: "Dernier article de journal utilisé pour enregistrer la chronologie", scope: "client", config: false, default: "", type: String }); } static async create() { const dialogData = { auteur: game.user.name, isGM: game.user.isGM, information: "", journalId: game.settings.get(SYSTEM_RDD, LATEST_USED_JOURNAL_ID), journaux: game.journal.filter(it => it.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)), timestamp: game.system.rdd.calendrier.timestamp, dateReel: DialogChronologie.getCurrentDateTime() }; const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-chronologie.html", dialogData); const dialog = new DialogChronologie(html); dialog.render(true); } constructor(html) { const options = { classes: ["DialogChronologie"], width: 500, height: 'fit-content', 'z-index': 99999 }; const conf = { title: "Chronologie", content: html, buttons: { ajout: { label: "Ajouter", callback: it => this.ajouter() }, } }; super(conf, options); } static getCurrentDateTime() { return new Date().toLocaleString("sv-SE", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }).replace(" ", "T"); } activateListeners(html) { super.activateListeners(html); this.html = html; } async ajouter() { await this.forceValidation(); const { journalId, journalEntry } = this.findJournal(); // ajouter à la page ou créer une page this.addContentToJournal(journalEntry, await this.prepareChronologieEntry()); this.storeLatestUsedJournalEntry(journalId); } async forceValidation() { await this.html.find("form.rdddialogchrono :input").change(); } findJournal() { const journalId = this.html.find("form.rdddialogchrono :input[name='journalId']").val(); const journalEntry = game.journal.get(journalId); return { journalId, journalEntry }; } async prepareChronologieEntry() { return await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chronologie-entry.html", this.extractJournalParameters()); } extractJournalParameters() { return { auteur: this.html.find("form.rdddialogchrono :input[name='auteur']").val(), information: this.html.find("form.rdddialogchrono :input[name='information']").val(), dateRdD: { jour: this.html.find("form.rdddialogchrono :input[name='chronologie.jourDuMois']").val(), mois: RdDTimestamp.definition(this.html.find("form.rdddialogchrono :input[name='chronologie.mois']").val()), annee: this.html.find("form.rdddialogchrono :input[name='chronologie.annee']").val(), heure: RdDTimestamp.definition(this.html.find("form.rdddialogchrono :input[name='chronologie.heure']").val()), minute: this.html.find("form.rdddialogchrono :input[name='chronologie.minute']").val(), }, dateReel: this.html.find("form.rdddialogchrono :input[name='dateReel']").val().replace('T', ' ') } } addContentToJournal(journalEntry, content) { let page = journalEntry.pages.find(p => p.type == 'text' && Grammar.equalsInsensitive(p.name, 'Chronologie')); if (page) { page.update({ 'text.content': content + '\n' + page.text.content }); } else { journalEntry.createEmbeddedDocuments('JournalEntryPage', [this.newPageChronologie(content)]); } } newPageChronologie(content) { return new JournalEntryPage({ name: 'Chronologie', type: 'text', title: { show: true, level: 1 }, text: { content: content, format: 1 } }); } storeLatestUsedJournalEntry(journalId) { game.settings.set(SYSTEM_RDD, LATEST_USED_JOURNAL_ID, journalId); } }