forked from public/foundryvtt-reve-de-dragon
Export csv pour Scriptarium
Activable dans les options avancées du système Un menu contextuel permet d'écrire dans les logs
This commit is contained in:
73
module/actor/export-scriptarium/export-scriptarium.js
Normal file
73
module/actor/export-scriptarium/export-scriptarium.js
Normal file
@ -0,0 +1,73 @@
|
||||
import { LOG_HEAD } from "../../constants.js"
|
||||
import { ACTOR_TYPES } from "../../item.js"
|
||||
import { Misc } from "../../misc.js"
|
||||
import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js"
|
||||
import { Mapping } from "./mapping.js"
|
||||
|
||||
const IMG_SCRIPTARIUM = '<img class="context-menu-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/scriptarium.svg">'
|
||||
|
||||
export class ExportScriptarium {
|
||||
|
||||
static init() {
|
||||
ExportScriptarium.INSTANCE = new ExportScriptarium()
|
||||
}
|
||||
|
||||
constructor() {
|
||||
this.mapping = Mapping.getMapping()
|
||||
Hooks.on("getActorDirectoryFolderContext", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
|
||||
Hooks.on("getActorDirectoryEntryContext", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
|
||||
}
|
||||
|
||||
onActorDirectoryMenu(actorDirectory, menus) {
|
||||
menus.push({
|
||||
name: 'Export Personnages',
|
||||
icon: IMG_SCRIPTARIUM,
|
||||
condition: (target) => game.user.isGM &&
|
||||
OptionsAvancees.isUsing(EXPORT_CSV_SCRIPTARIUM) &&
|
||||
this.$getActors(actorDirectory, target).length > 0,
|
||||
callback: target => this.exportActors(this.$getActors(actorDirectory, target))
|
||||
})
|
||||
}
|
||||
|
||||
$getActors(actorDirectory, target) {
|
||||
const li = target.closest(".directory-item")
|
||||
const folderId = li.data("folderId")
|
||||
const actorId = li.data("documentId")
|
||||
const actors = actorId
|
||||
? [game.actors.get(actorId)]
|
||||
: folderId
|
||||
? actorDirectory.folders.find(it => it.id == folderId).contents
|
||||
: []
|
||||
return actors.filter(it => it.type == ACTOR_TYPES.personnage)
|
||||
}
|
||||
|
||||
exportActors(actors) {
|
||||
console.log(LOG_HEAD + 'exportActors', actors)
|
||||
const header = Misc.join(this.getHeaderLine(), ';')
|
||||
console.log(header)
|
||||
actors.forEach(actor => {
|
||||
const actorLine = Misc.join(this.getActorLine(actor), ';')
|
||||
console.log(actorLine)
|
||||
})
|
||||
}
|
||||
|
||||
getHeaderLine() {
|
||||
return this.mapping.map(it => it.column)
|
||||
}
|
||||
|
||||
getActorLine(actor) {
|
||||
const context = Mapping.prepareContext(actor)
|
||||
return this.mapping.map(it => it.getter(actor, context))
|
||||
.map(it => this.$escapeQuotes(it))
|
||||
.map(it => it.replaceAll("\n", " ").replaceAll("\r", ""))
|
||||
}
|
||||
|
||||
$escapeQuotes(it) {
|
||||
it = '' + it
|
||||
if (it.includes('"') || it.includes(';')) {
|
||||
return `"${it.replaceAll('"', '\\"')}"`
|
||||
}
|
||||
return it
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user