export default class FlagsConfig extends FormApplication { constructor(obj) { super({}, {}); if (obj instanceof Tile) { this.objectToFlag = obj.document; this.isTile = true; } else { this.objectToFlag = game.actors.get(obj.document.actorId) || obj.document; } } static get defaultOptions() { return mergeObject(super.defaultOptions, { id: 'token-variants-token-flags', classes: ['sheet'], template: 'modules/token-variants/templates/flagsConfig.html', resizable: true, minimizable: false, title: 'Flags', width: 500, }); } async getData(options) { const data = super.getData(options); const popups = this.objectToFlag.getFlag('token-variants', 'popups'); const disableNameSearch = this.objectToFlag.getFlag('token-variants', 'disableNameSearch'); const directory = this.objectToFlag.getFlag('token-variants', 'directory') || {}; return mergeObject(data, { popups: popups, popupsSetFlag: popups != null, disableNameSearch: disableNameSearch, disableNameSearchSetFlag: disableNameSearch != null, directory: directory.path, directorySource: directory.source, directorySetFlag: !isEmpty(directory), tile: this.isTile, }); } /** * @param {JQuery} html */ activateListeners(html) { super.activateListeners(html); html.find('.controlFlag').click((e) => { $(e.target).siblings('.flag').prop('disabled', !e.target.checked); }); html.find('.directory-fp').click((event) => { new FilePicker({ type: 'folder', activeSource: 'data', callback: (path, fp) => { html.find('[name="directory"]').val(fp.result.target); $(event.target) .closest('button') .attr('title', 'Directory: ' + fp.result.target); const sourceEl = html.find('[name="directorySource"]'); if (fp.activeSource === 's3') { sourceEl.val(`s3:${fp.result.bucket}`); } else { sourceEl.val(fp.activeSource); } }, }).render(true); }); } /** * @param {Event} event * @param {Object} formData */ async _updateObject(event, formData) { if ('directory' in formData) { formData.directory = { path: formData.directory, source: formData.directorySource }; } ['popups', 'disableNameSearch', 'directory'].forEach((flag) => { if (flag in formData) { this.objectToFlag.setFlag('token-variants', flag, formData[flag]); } else { this.objectToFlag.unsetFlag('token-variants', flag); } }); } }