export default class RandomizerConfig extends FormApplication { constructor(obj) { super({}, {}); this.actor = game.actors.get(obj.actorId); } static get defaultOptions() { return mergeObject(super.defaultOptions, { id: 'token-variants-token-flags', classes: ['sheet'], template: 'modules/token-variants/templates/randomizerConfig.html', resizable: true, minimizable: false, title: 'Randomizer', width: 500, }); } async getData(options) { const data = super.getData(options); const settings = this.actor.getFlag('token-variants', 'randomizerSettings') || {}; data.randomizer = settings; data.hasSettings = !isEmpty(settings); data.nameForgeActive = game.modules.get('nameforge')?.active; if (data.randomizer.nameForge?.models && Array.isArray(data.randomizer.nameForge.models)) { data.randomizer.nameForge.models = data.randomizer.nameForge.models.join(','); } return data; } /** * @param {JQuery} html */ activateListeners(html) { super.activateListeners(html); html.find('.selectNameForgeModels').click(this._selectNameForgeModels.bind(this)); // Can't have both tokenName and actorName checkboxes checked at the same time const tokenName = html.find('input[name="randomizer.tokenName"]'); const actorName = html.find('input[name="randomizer.actorName"]'); tokenName.change(() => { if (tokenName.is(':checked')) actorName.prop('checked', false); }); actorName.change(() => { if (actorName.is(':checked')) tokenName.prop('checked', false); }); } _selectNameForgeModels(event) { const inputSelected = $(event.target).siblings('input'); const selected = inputSelected.val().split(','); const genCheckbox = function (name, value) { return `
v === value) ? 'checked' : '' }>
`; }; let content = '
'; const models = game.modules.get('nameforge').models; for (const [k, v] of Object.entries(models.defaultModels)) { content += genCheckbox(v.name, 'defaultModels.' + k); } for (const [k, v] of Object.entries(models.userModels)) { content += genCheckbox(v.name, 'userModels.' + k); } content += `
`; new Dialog({ title: `Name Forge Models`, content: content, buttons: { Ok: { label: `Select`, callback: async (html) => { const selectedModels = []; html.find('input[type="checkbox"]').each(function () { if (this.checked) selectedModels.push(this.value); }); inputSelected.val(selectedModels.join(',')); }, }, }, }).render(true); } /** * @param {Event} event * @param {Object} formData */ async _updateObject(event, formData) { if (event.submitter.value === 'remove') { await this.actor.unsetFlag('token-variants', 'randomizerSettings'); } else { const expanded = expandObject(formData); if (expanded.randomizer.nameForge?.models) { expanded.randomizer.nameForge.models = expanded.randomizer.nameForge.models.split(','); } this.actor.setFlag('token-variants', 'randomizerSettings', expanded.randomizer); } } }