|
|
- import { TVA_CONFIG, updateSettings } from '../scripts/settings.js';
- import { getFileName } from '../scripts/utils.js';
- import { showArtSelect } from '../token-variants.mjs';
-
- export default class MissingImageConfig extends FormApplication {
- constructor() {
- super({}, {});
- }
-
- static get defaultOptions() {
- return mergeObject(super.defaultOptions, {
- id: 'token-variants-missing-images',
- classes: ['sheet'],
- template: 'modules/token-variants/templates/missingImageConfig.html',
- resizable: true,
- minimizable: false,
- title: 'Define Missing Images',
- width: 560,
- height: 'auto',
- });
- }
-
- async getData(options) {
- const data = super.getData(options);
-
- if (!this.missingImages)
- this.missingImages = deepClone(TVA_CONFIG.compendiumMapper.missingImages);
-
- data.missingImages = this.missingImages;
-
- data.documents = ['all', 'Actor', 'Cards', 'Item', 'Macro', 'RollTable'];
- return data;
- }
-
- _processFormData(formData) {
- if (!Array.isArray(formData.document)) {
- formData.document = [formData.document];
- formData.image = [formData.image];
- }
-
- const missingImages = [];
- for (let i = 0; i < formData.document.length; i++) {
- missingImages.push({ document: formData.document[i], image: formData.image[i] });
- }
- return missingImages;
- }
-
- /**
- * @param {JQuery} html
- */
- activateListeners(html) {
- super.activateListeners(html);
-
- html.on('click', '.add-row', () => {
- const formData = this._getSubmitData();
- this.missingImages = this._processFormData(formData);
- this.missingImages.push({ document: 'all', image: CONST.DEFAULT_TOKEN });
- this.render();
- });
-
- html.on('click', '.delete-row', (event) => {
- const formData = this._getSubmitData();
- this.missingImages = this._processFormData(formData);
- const index = $(event.target).closest('li')[0].dataset.index;
- this.missingImages.splice(index, 1);
- this.render();
- });
-
- html.on('click', '.file-picker', (event) => {
- new FilePicker({
- type: 'imagevideo',
- callback: (path) => {
- $(event.target).closest('li').find('[name="image"]').val(path);
- $(event.target).closest('li').find('img').attr('src', path);
- },
- }).render();
- });
-
- html.on('click', '.duplicate-picker', (event) => {
- let content = `<select style="width: 100%;" name="compendium">`;
-
- game.packs.forEach((pack) => {
- content += `<option value='${pack.collection}'>${pack.title}</option>`;
- });
-
- content += `</select>`;
-
- new Dialog({
- title: `Compendiums`,
- content: content,
- buttons: {
- yes: {
- icon: "<i class='far fa-search'></i>",
- label: 'Search for Duplicates',
- callback: (html) => {
- const found = new Set();
- const duplicates = new Set();
- const compendium = game.packs.get(html.find("[name='compendium']").val());
- compendium.index.forEach((k) => {
- if (found.has(k.img)) {
- duplicates.add(k.img);
- }
- found.add(k.img);
- });
- if (!duplicates.size) {
- ui.notifications.info('No duplicates found in: ' + compendium.title);
- }
-
- const images = Array.from(duplicates).map((img) => {
- return { path: img, name: getFileName(img) };
- });
- const allImages = new Map();
- allImages.set('Duplicates', images);
-
- showArtSelect('Duplicates', {
- allImages,
- callback: (img) => {
- $(event.target).closest('li').find('[name="image"]').val(img);
- $(event.target).closest('li').find('img').attr('src', img);
- },
- });
- },
- },
- },
- default: 'yes',
- }).render(true);
- });
- }
-
- async _updateObject(event, formData) {
- updateSettings({
- compendiumMapper: { missingImages: this._processFormData(formData) },
- });
- }
- }
|