89 lines
3.6 KiB
JavaScript
89 lines
3.6 KiB
JavaScript
import { RdDActorSheet } from "../../actor-sheet.js"
|
|
import { SYSTEM_RDD } from "../../constants.js";
|
|
import { Misc } from "../../misc.js";
|
|
import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js";
|
|
import { ExportScriptarium } from "./export-scriptarium.js";
|
|
import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping.js";
|
|
|
|
export class RdDActorExportSheet extends RdDActorSheet {
|
|
static async init() {
|
|
await loadTemplates([
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee-compteur.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/competences.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/esquive.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs",
|
|
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs",
|
|
])
|
|
Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille d'encart" })
|
|
}
|
|
static get defaultOptions() {
|
|
return foundry.utils.mergeObject(RdDActorSheet.defaultOptions, {
|
|
template: "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/actor-encart-sheet.hbs",
|
|
width: 550,
|
|
showCompNiveauBase: false,
|
|
vueArchetype: false,
|
|
}, { inplace: false })
|
|
}
|
|
|
|
constructor(actor, options) {
|
|
super(actor, options)
|
|
}
|
|
|
|
async getData() {
|
|
const formData = await super.getData()
|
|
// Add any structured, precomputed list of data
|
|
formData.export = this.getMappingValues();
|
|
formData.competences = this.getCompetences(CATEGORIES_COMPETENCES)
|
|
formData.draconic = this.getCompetences(CATEGORIES_DRACONIC)
|
|
formData.options.exportScriptarium = OptionsAvancees.isUsing(EXPORT_CSV_SCRIPTARIUM)
|
|
return formData
|
|
}
|
|
|
|
getMappingValues() {
|
|
const context = Mapping.prepareContext(this.actor)
|
|
return Object.fromEntries(Mapping.getMapping().map(it => [it.column, {
|
|
colName: it.colName ?? it.column,
|
|
column: it.column,
|
|
rollClass: it.rollClass,
|
|
value: it.getter(this.actor, context)
|
|
}]))
|
|
}
|
|
|
|
getCompetences(categories) {
|
|
const competences = Mapping.getCompetencesCategorie(this.actor, categories)
|
|
if (competences.length == 0) {
|
|
return ''
|
|
}
|
|
const byCategories = Mapping.competencesByCategoriesByNiveau(competences, categories)
|
|
const listByCategories = Object.values(byCategories)
|
|
.map(it => it.competencesParNiveau)
|
|
.map(byNiveau => {
|
|
const niveaux = Object.keys(byNiveau).map(it => Number(it)).sort(Misc.ascending())
|
|
if (niveaux.length == 0) {
|
|
return undefined
|
|
}
|
|
const listCategorieByNiveau = niveaux.map(niveau => {
|
|
const list = byNiveau[niveau].sort(Misc.ascending(it => it.name))
|
|
return {niveau, list}
|
|
})
|
|
return Misc.concat(listCategorieByNiveau)
|
|
}).filter(it => it != undefined)
|
|
|
|
return Misc.concat(listByCategories)
|
|
}
|
|
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
this.html.find('.button-export').click(async event => {
|
|
|
|
ExportScriptarium.INSTANCE.exportActors([this.actor],
|
|
`${this.actor.uuid}-${this.actor.name}`
|
|
)
|
|
})
|
|
}
|
|
}
|