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 `
|
|
<div class="form-group">
|
|
<label>${name}</label>
|
|
<div class="form-fields">
|
|
<input type="checkbox" name="model" value="${value}" data-dtype="Boolean" ${
|
|
selected?.find((v) => v === value) ? 'checked' : ''
|
|
}>
|
|
</div>
|
|
</div>
|
|
`;
|
|
};
|
|
|
|
let content = '<form style="overflow-y: scroll; height:400px;">';
|
|
|
|
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 += `</form>`;
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|