Finalize aappv2 data models migration
This commit is contained in:
13
modules/applications/sheets/_module.mjs
Normal file
13
modules/applications/sheets/_module.mjs
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Index des fiches AppV2 pour Maléfices
|
||||
*/
|
||||
// Actor sheets
|
||||
export { default as MaleficesPersonnageSheet } from './malefices-personnage-sheet.mjs';
|
||||
export { default as MaleficesNPCActorSheet } from './malefices-npc-actor-sheet.mjs';
|
||||
// Item sheets
|
||||
export { default as MaleficesArmeSheet } from './malefices-arme-sheet.mjs';
|
||||
export { default as MaleficesEquipementSheet } from './malefices-equipement-sheet.mjs';
|
||||
export { default as MaleficesArchetypeSheet } from './malefices-archetype-sheet.mjs';
|
||||
export { default as MaleficesTarotSheet } from './malefices-tarot-sheet.mjs';
|
||||
export { default as MaleficesSortilegeSheet } from './malefices-sortilege-sheet.mjs';
|
||||
export { default as MaleficesElementbioSheet } from './malefices-elementbio-sheet.mjs';
|
||||
132
modules/applications/sheets/base-item-sheet.mjs
Normal file
132
modules/applications/sheets/base-item-sheet.mjs
Normal file
@@ -0,0 +1,132 @@
|
||||
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||
|
||||
export default class MaleficesItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
|
||||
constructor(options = {}) {
|
||||
super(options)
|
||||
this.#dragDrop = this.#createDragDropHandlers()
|
||||
}
|
||||
|
||||
#dragDrop
|
||||
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["fvtt-malefices", "item"],
|
||||
position: {
|
||||
width: 620,
|
||||
height: 600,
|
||||
},
|
||||
form: {
|
||||
submitOnChange: true,
|
||||
},
|
||||
window: {
|
||||
resizable: true,
|
||||
},
|
||||
dragDrop: [{ dragSelector: "[data-drag]", dropSelector: null }],
|
||||
actions: {
|
||||
editImage: MaleficesItemSheet.#onEditImage,
|
||||
postItem: MaleficesItemSheet.#onPostItem,
|
||||
},
|
||||
}
|
||||
|
||||
/** @type {object} */
|
||||
tabGroups = { primary: "description" }
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = {
|
||||
fields: this.document.schema.fields,
|
||||
systemFields: this.document.system.schema.fields,
|
||||
item: this.document,
|
||||
system: this.document.system,
|
||||
source: this.document.toObject(),
|
||||
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.document.system.description ?? "", { async: true }
|
||||
),
|
||||
isEditable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.malefices.config,
|
||||
}
|
||||
return context
|
||||
}
|
||||
|
||||
/** @override */
|
||||
_onRender(context, options) {
|
||||
super._onRender(context, options)
|
||||
this.#dragDrop.forEach((d) => d.bind(this.element))
|
||||
|
||||
// Manual tab navigation
|
||||
const nav = this.element.querySelector('nav.tabs[data-group]')
|
||||
if (nav) {
|
||||
const group = nav.dataset.group
|
||||
const activeTab = this.tabGroups[group] || "description"
|
||||
nav.querySelectorAll('[data-tab]').forEach(link => {
|
||||
const tab = link.dataset.tab
|
||||
link.classList.toggle('active', tab === activeTab)
|
||||
link.addEventListener('click', (event) => {
|
||||
event.preventDefault()
|
||||
this.tabGroups[group] = tab
|
||||
this.render()
|
||||
})
|
||||
})
|
||||
this.element.querySelectorAll('[data-group="' + group + '"][data-tab]').forEach(content => {
|
||||
content.classList.toggle('active', content.dataset.tab === activeTab)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// #region Drag-and-Drop
|
||||
#createDragDropHandlers() {
|
||||
return this.options.dragDrop.map((d) => {
|
||||
d.permissions = {
|
||||
dragstart: this._canDragStart.bind(this),
|
||||
drop: this._canDragDrop.bind(this),
|
||||
}
|
||||
d.callbacks = {
|
||||
dragstart: this._onDragStart.bind(this),
|
||||
dragover: this._onDragOver.bind(this),
|
||||
drop: this._onDrop.bind(this),
|
||||
}
|
||||
return new foundry.applications.ux.DragDrop.implementation(d)
|
||||
})
|
||||
}
|
||||
|
||||
_canDragStart(selector) { return this.isEditable }
|
||||
_canDragDrop(selector) { return this.isEditable }
|
||||
|
||||
_onDragStart(event) {
|
||||
const dragData = { type: "Item", uuid: this.document.uuid }
|
||||
event.dataTransfer.setData("text/plain", JSON.stringify(dragData))
|
||||
}
|
||||
|
||||
_onDragOver(event) {}
|
||||
|
||||
async _onDrop(event) {}
|
||||
// #endregion
|
||||
|
||||
// #region Actions
|
||||
static async #onEditImage(event, target) {
|
||||
const fp = new FilePicker({
|
||||
type: "image",
|
||||
current: this.document.img,
|
||||
callback: (path) => { this.document.update({ img: path }) },
|
||||
})
|
||||
return fp.browse()
|
||||
}
|
||||
|
||||
static async #onPostItem(event, target) {
|
||||
let chatData = foundry.utils.duplicate(this.document)
|
||||
if (this.document.actor) {
|
||||
chatData.actor = { id: this.document.actor.id }
|
||||
}
|
||||
if (chatData.img?.includes("/blank.png")) {
|
||||
chatData.img = null
|
||||
}
|
||||
chatData.jsondata = JSON.stringify({ compendium: "postedItem", payload: chatData })
|
||||
const html = await foundry.applications.handlebars.renderTemplate(
|
||||
'systems/fvtt-malefices/templates/post-item.hbs', chatData
|
||||
)
|
||||
ChatMessage.create({ user: game.user.id, content: html })
|
||||
}
|
||||
// #endregion
|
||||
}
|
||||
35
modules/applications/sheets/malefices-archetype-sheet.mjs
Normal file
35
modules/applications/sheets/malefices-archetype-sheet.mjs
Normal file
@@ -0,0 +1,35 @@
|
||||
import MaleficesItemSheet from "./base-item-sheet.mjs"
|
||||
import { MaleficesUtility } from "../../malefices-utility.js"
|
||||
|
||||
export default class MaleficesArchetypeSheet extends MaleficesItemSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["archetype"],
|
||||
position: { width: 620 },
|
||||
window: { contentClasses: ["archetype-content"] },
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/items/item-archetype-sheet.hbs" },
|
||||
}
|
||||
|
||||
tabGroups = { primary: "details" }
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
details: { id: "details", group: "primary", label: "Détails" },
|
||||
description: { id: "description", group: "primary", label: "Description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
context.tarots = MaleficesUtility.getTarots()
|
||||
return context
|
||||
}
|
||||
}
|
||||
33
modules/applications/sheets/malefices-arme-sheet.mjs
Normal file
33
modules/applications/sheets/malefices-arme-sheet.mjs
Normal file
@@ -0,0 +1,33 @@
|
||||
import MaleficesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class MaleficesArmeSheet extends MaleficesItemSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["arme"],
|
||||
position: { width: 640 },
|
||||
window: { contentClasses: ["arme-content"] },
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/items/item-arme-sheet.hbs" },
|
||||
}
|
||||
|
||||
tabGroups = { primary: "details" }
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
details: { id: "details", group: "primary", label: "Détails" },
|
||||
description: { id: "description", group: "primary", label: "Description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
return context
|
||||
}
|
||||
}
|
||||
225
modules/applications/sheets/malefices-base-actor-sheet.mjs
Normal file
225
modules/applications/sheets/malefices-base-actor-sheet.mjs
Normal file
@@ -0,0 +1,225 @@
|
||||
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||
|
||||
import { MaleficesUtility } from "../../malefices-utility.js"
|
||||
|
||||
export default class MaleficesActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {
|
||||
|
||||
constructor(options = {}) {
|
||||
super(options)
|
||||
this.#dragDrop = this.#createDragDropHandlers()
|
||||
this._editScore = true
|
||||
}
|
||||
|
||||
#dragDrop
|
||||
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["fvtt-malefices", "actor"],
|
||||
position: {
|
||||
width: 640,
|
||||
height: 680,
|
||||
},
|
||||
form: {
|
||||
submitOnChange: true,
|
||||
},
|
||||
window: {
|
||||
resizable: true,
|
||||
},
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
actions: {
|
||||
editImage: MaleficesActorSheet.#onEditImage,
|
||||
toggleSheet: MaleficesActorSheet.#onToggleSheet,
|
||||
editItem: MaleficesActorSheet.#onEditItem,
|
||||
deleteItem: MaleficesActorSheet.#onDeleteItem,
|
||||
createItem: MaleficesActorSheet.#onCreateItem,
|
||||
equipItem: MaleficesActorSheet.#onEquipItem,
|
||||
modifyQuantity: MaleficesActorSheet.#onModifyQuantity,
|
||||
modifyAmmo: MaleficesActorSheet.#onModifyAmmo,
|
||||
rollAttribut: MaleficesActorSheet.#onRollAttribut,
|
||||
rollArme: MaleficesActorSheet.#onRollArme,
|
||||
editSubActor: MaleficesActorSheet.#onEditSubActor,
|
||||
deleteSubActor: MaleficesActorSheet.#onDeleteSubActor,
|
||||
},
|
||||
}
|
||||
|
||||
/** @type {object} */
|
||||
tabGroups = { primary: "main" }
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const actor = this.document
|
||||
return {
|
||||
actor,
|
||||
system: actor.system,
|
||||
source: actor.toObject(),
|
||||
fields: actor.schema.fields,
|
||||
systemFields: actor.system.schema.fields,
|
||||
isEditable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.malefices.config,
|
||||
editScore: this._editScore,
|
||||
}
|
||||
}
|
||||
|
||||
/** @override */
|
||||
_onRender(context, options) {
|
||||
super._onRender(context, options)
|
||||
this.#dragDrop.forEach((d) => d.bind(this.element))
|
||||
|
||||
// Ignore Enter key in text inputs (not textarea)
|
||||
this.element.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter' && e.target.tagName !== 'TEXTAREA') e.preventDefault()
|
||||
})
|
||||
|
||||
// Manual tab navigation
|
||||
const nav = this.element.querySelector('nav.tabs[data-group]')
|
||||
if (nav) {
|
||||
const group = nav.dataset.group
|
||||
const activeTab = this.tabGroups[group] || "main"
|
||||
nav.querySelectorAll('[data-tab]').forEach(link => {
|
||||
link.classList.toggle('active', link.dataset.tab === activeTab)
|
||||
link.addEventListener('click', (event) => {
|
||||
event.preventDefault()
|
||||
this.tabGroups[group] = link.dataset.tab
|
||||
this.render()
|
||||
})
|
||||
})
|
||||
this.element.querySelectorAll(`[data-group="${group}"][data-tab]`).forEach(content => {
|
||||
content.classList.toggle('active', content.dataset.tab === activeTab)
|
||||
})
|
||||
}
|
||||
|
||||
// Handle .update-field change events (legacy support)
|
||||
this.element.querySelectorAll('.update-field').forEach(el => {
|
||||
el.addEventListener('change', (ev) => {
|
||||
const fieldName = ev.currentTarget.dataset.fieldName
|
||||
const value = Number(ev.currentTarget.value)
|
||||
this.actor.update({ [fieldName]: value })
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// #region Drag-and-Drop
|
||||
#createDragDropHandlers() {
|
||||
return this.options.dragDrop.map((d) => {
|
||||
d.permissions = {
|
||||
dragstart: this._canDragStart.bind(this),
|
||||
drop: this._canDragDrop.bind(this),
|
||||
}
|
||||
d.callbacks = {
|
||||
dragstart: this._onDragStart.bind(this),
|
||||
dragover: this._onDragOver.bind(this),
|
||||
drop: this._onDrop.bind(this),
|
||||
}
|
||||
return new foundry.applications.ux.DragDrop.implementation(d)
|
||||
})
|
||||
}
|
||||
|
||||
_canDragStart(selector) { return this.isEditable }
|
||||
_canDragDrop(selector) { return this.isEditable }
|
||||
|
||||
_onDragStart(event) {
|
||||
const li = event.currentTarget.closest('.item')
|
||||
if (!li) return
|
||||
const itemId = li.dataset.itemId
|
||||
const item = this.actor.items.get(itemId)
|
||||
if (item) {
|
||||
event.dataTransfer.setData("text/plain", JSON.stringify({ type: "Item", uuid: item.uuid }))
|
||||
}
|
||||
}
|
||||
|
||||
_onDragOver(event) {}
|
||||
|
||||
async _onDrop(event) {
|
||||
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||
if (data?.type === "Actor") {
|
||||
const actor = await fromUuid(data.uuid)
|
||||
if (actor) this.actor.addSubActor(actor.id)
|
||||
} else {
|
||||
super._onDrop(event)
|
||||
}
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region Actions
|
||||
static async #onEditImage(event, target) {
|
||||
const fp = new FilePicker({
|
||||
type: "image",
|
||||
current: this.document.img,
|
||||
callback: (path) => { this.document.update({ img: path }) },
|
||||
})
|
||||
return fp.browse()
|
||||
}
|
||||
|
||||
static async #onToggleSheet(event, target) {
|
||||
this._editScore = !this._editScore
|
||||
this.render()
|
||||
}
|
||||
|
||||
static async #onEditItem(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const itemId = li?.dataset.itemId
|
||||
if (!itemId) return
|
||||
this.actor.items.get(itemId)?.sheet.render(true)
|
||||
}
|
||||
|
||||
static async #onDeleteItem(event, target) {
|
||||
const li = target.closest(".item")
|
||||
MaleficesUtility.confirmDelete(this, li)
|
||||
}
|
||||
|
||||
static async #onCreateItem(event, target) {
|
||||
const dataType = target.dataset.type
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
|
||||
}
|
||||
|
||||
static async #onEquipItem(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const itemId = li?.dataset.itemId
|
||||
if (!itemId) return
|
||||
await this.actor.equipItem(itemId)
|
||||
this.render()
|
||||
}
|
||||
|
||||
static async #onModifyQuantity(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const itemId = li?.dataset.itemId
|
||||
if (!itemId) return
|
||||
const delta = parseInt(target.dataset.delta) || 0
|
||||
this.actor.incDecQuantity(itemId, delta)
|
||||
}
|
||||
|
||||
static async #onModifyAmmo(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const itemId = li?.dataset.itemId
|
||||
if (!itemId) return
|
||||
const delta = parseInt(target.dataset.delta) || 0
|
||||
this.actor.incDecAmmo(itemId, delta)
|
||||
}
|
||||
|
||||
static async #onRollAttribut(event, target) {
|
||||
const attrKey = target.dataset.attrKey
|
||||
this.actor.rollAttribut(attrKey)
|
||||
}
|
||||
|
||||
static async #onRollArme(event, target) {
|
||||
const armeId = target.dataset.armeId
|
||||
this.actor.rollArme(armeId)
|
||||
}
|
||||
|
||||
static async #onEditSubActor(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const actorId = li?.dataset.actorId
|
||||
if (!actorId) return
|
||||
game.actors.get(actorId)?.sheet.render(true)
|
||||
}
|
||||
|
||||
static async #onDeleteSubActor(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const actorId = li?.dataset.actorId
|
||||
if (!actorId) return
|
||||
this.actor.delSubActor(actorId)
|
||||
}
|
||||
// #endregion
|
||||
}
|
||||
32
modules/applications/sheets/malefices-elementbio-sheet.mjs
Normal file
32
modules/applications/sheets/malefices-elementbio-sheet.mjs
Normal file
@@ -0,0 +1,32 @@
|
||||
import MaleficesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class MaleficesElementbioSheet extends MaleficesItemSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["elementbio"],
|
||||
position: { width: 620 },
|
||||
window: { contentClasses: ["elementbio-content"] },
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/items/item-elementbio-sheet.hbs" },
|
||||
}
|
||||
|
||||
tabGroups = { primary: "description" }
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
description: { id: "description", group: "primary", label: "Description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
return context
|
||||
}
|
||||
}
|
||||
32
modules/applications/sheets/malefices-equipement-sheet.mjs
Normal file
32
modules/applications/sheets/malefices-equipement-sheet.mjs
Normal file
@@ -0,0 +1,32 @@
|
||||
import MaleficesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class MaleficesEquipementSheet extends MaleficesItemSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["equipement"],
|
||||
position: { width: 620 },
|
||||
window: { contentClasses: ["equipement-content"] },
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/items/item-equipement-sheet.hbs" },
|
||||
}
|
||||
|
||||
tabGroups = { primary: "description" }
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
description: { id: "description", group: "primary", label: "Description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
return context
|
||||
}
|
||||
}
|
||||
27
modules/applications/sheets/malefices-npc-actor-sheet.mjs
Normal file
27
modules/applications/sheets/malefices-npc-actor-sheet.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import MaleficesActorSheet from "./malefices-base-actor-sheet.mjs"
|
||||
|
||||
export default class MaleficesNPCActorSheet extends MaleficesActorSheet {
|
||||
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["pnj"],
|
||||
position: { width: 560, height: 460 },
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/actors/npc-sheet.hbs" },
|
||||
}
|
||||
|
||||
/** @override */
|
||||
tabGroups = { primary: "main" }
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.document.system.description ?? "", { async: true }
|
||||
)
|
||||
return context
|
||||
}
|
||||
}
|
||||
48
modules/applications/sheets/malefices-personnage-sheet.mjs
Normal file
48
modules/applications/sheets/malefices-personnage-sheet.mjs
Normal file
@@ -0,0 +1,48 @@
|
||||
import MaleficesActorSheet from "./malefices-base-actor-sheet.mjs"
|
||||
|
||||
export default class MaleficesPersonnageSheet extends MaleficesActorSheet {
|
||||
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["personnage"],
|
||||
position: { width: 640, height: 680 },
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/actors/actor-sheet.hbs" },
|
||||
}
|
||||
|
||||
/** @override */
|
||||
tabGroups = { primary: "main" }
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
const actor = this.document
|
||||
|
||||
context.armes = foundry.utils.duplicate(actor.getArmes())
|
||||
context.tarots = foundry.utils.duplicate(actor.getTarots())
|
||||
context.tarotsCache = foundry.utils.duplicate(actor.getHiddenTarots())
|
||||
context.archetype = foundry.utils.duplicate(actor.getArchetype())
|
||||
context.equipements = foundry.utils.duplicate(actor.getEquipements())
|
||||
context.elementsbio = actor.getElementsBio()
|
||||
context.sorts = actor.getSorts()
|
||||
context.phyMalus = actor.getPhysiqueMalus()
|
||||
context.subActors = foundry.utils.duplicate(actor.getSubActors())
|
||||
|
||||
// Expose nested biodata schema fields for {{formInput}} helper
|
||||
context.biodataFields = actor.system.schema.fields.biodata.fields
|
||||
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
actor.system.biodata?.description ?? "", { async: true }
|
||||
)
|
||||
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
actor.system.biodata?.notes ?? "", { async: true }
|
||||
)
|
||||
context.enrichedEquipementlibre = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
actor.system.equipementlibre ?? "", { async: true }
|
||||
)
|
||||
return context
|
||||
}
|
||||
}
|
||||
33
modules/applications/sheets/malefices-sortilege-sheet.mjs
Normal file
33
modules/applications/sheets/malefices-sortilege-sheet.mjs
Normal file
@@ -0,0 +1,33 @@
|
||||
import MaleficesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class MaleficesSortilegeSheet extends MaleficesItemSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["sortilege"],
|
||||
position: { width: 620 },
|
||||
window: { contentClasses: ["sortilege-content"] },
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/items/item-sortilege-sheet.hbs" },
|
||||
}
|
||||
|
||||
tabGroups = { primary: "details" }
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
details: { id: "details", group: "primary", label: "Détails" },
|
||||
description: { id: "description", group: "primary", label: "Description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
return context
|
||||
}
|
||||
}
|
||||
33
modules/applications/sheets/malefices-tarot-sheet.mjs
Normal file
33
modules/applications/sheets/malefices-tarot-sheet.mjs
Normal file
@@ -0,0 +1,33 @@
|
||||
import MaleficesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class MaleficesTarotSheet extends MaleficesItemSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["tarot"],
|
||||
position: { width: 660, height: 640 },
|
||||
window: { contentClasses: ["tarot-content"] },
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
main: { template: "systems/fvtt-malefices/templates/items/item-tarot-sheet.hbs" },
|
||||
}
|
||||
|
||||
tabGroups = { primary: "details" }
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
details: { id: "details", group: "primary", label: "Détails" },
|
||||
description: { id: "description", group: "primary", label: "Description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
return context
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user