All user data for FoundryVTT. Includes worlds, systems, modules, and any asset in the "foundryuserdata" directory. Does NOT include the FoundryVTT installation itself.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

109 lines
3.6 KiB

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);
}
}
}