import { insertArtSelectButton } from '../../applications/artSelect.js'; import { FEATURE_CONTROL, TVA_CONFIG } from '../settings.js'; import { SEARCH_TYPE, updateTokenImage } from '../utils.js'; import { registerHook, unregisterHook } from './hooks.js'; const feature_id = 'Wildcards'; export function registerWildcardHooks() { if (!FEATURE_CONTROL[feature_id]) { ['renderTokenConfig', 'preCreateToken'].forEach((name) => unregisterHook(feature_id, name)); return; } // Insert default random image field registerHook(feature_id, 'renderTokenConfig', _renderTokenConfig); // Set Default Wildcard images if needed registerHook(feature_id, 'preCreateToken', _preCreateToken); } async function _renderTokenConfig(config, html) { const checkboxRandomize = html.find('input[name="randomImg"]'); if (checkboxRandomize.length && !html.find('.token-variants-proto').length) { const defaultImg = config.actor?.prototypeToken?.flags['token-variants']?.['randomImgDefault'] || config.actor?.prototypeToken?.flags['token-hud-wildcard']?.['default'] || ''; const field = await renderTemplate('/modules/token-variants/templates/protoTokenElement.html', { defaultImg, disableHUDButton: config.object?.getFlag('token-variants', 'disableHUDButton'), }); checkboxRandomize.closest('.form-group').after(field); const tvaFieldset = html.find('.token-variants-proto'); tvaFieldset.find('button').click((event) => { event.preventDefault(); const input = tvaFieldset.find('input'); new FilePicker({ current: input.val(), field: input[0] }).browse(defaultImg); }); insertArtSelectButton(tvaFieldset, 'flags.token-variants.randomImgDefault', { search: config.object.name, searchType: SEARCH_TYPE.TOKEN, }); // Hide/Show Default Img Form Group const rdmImgFormGroup = tvaFieldset.find('.imagevideo').closest('.form-group'); const showHideGroup = function (checked) { if (checked) { rdmImgFormGroup.show(); } else { rdmImgFormGroup.hide(); } config.setPosition(); }; checkboxRandomize.on('click', (event) => showHideGroup(event.target.checked)); showHideGroup(checkboxRandomize.is(':checked')); } } function _preCreateToken(tokenDocument, data, options, userId) { if (game.user.id !== userId) return; const update = {}; if (tokenDocument.actor?.prototypeToken?.randomImg) { const defaultImg = tokenDocument.actor?.prototypeToken?.flags['token-variants']?.['randomImgDefault'] || tokenDocument.actor?.prototypeToken?.flags['token-hud-wildcard']?.['default'] || ''; if (defaultImg) update['texture.src'] = defaultImg; } if (TVA_CONFIG.imgNameContainsDimensions || TVA_CONFIG.imgNameContainsFADimensions) { updateTokenImage(update['texture.src'] ?? tokenDocument.texture.src, { token: tokenDocument, update, }); } if (!isEmpty(update)) tokenDocument.updateSource(update); }