This commit is contained in:
@@ -826,41 +826,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
updateAvatarOptionPreviews(form, getActiveAvatarField(form));
|
||||
};
|
||||
|
||||
const renderAvatarSeedChoices = (form, seeds) => {
|
||||
const picker = form.querySelector('[data-avatar-seed-picker]');
|
||||
const grid = form.querySelector('[data-avatar-seed-picker-grid]');
|
||||
if (!picker || !grid) return;
|
||||
|
||||
grid.innerHTML = '';
|
||||
seeds.forEach((seed, index) => {
|
||||
const params = buildAvatarParams(form, { avatar_preset: seed });
|
||||
if (!params) return;
|
||||
|
||||
const card = document.createElement('button');
|
||||
card.type = 'button';
|
||||
card.className = 'avatar-seed-card';
|
||||
card.setAttribute('data-avatar-seed-option', seed);
|
||||
card.innerHTML = `
|
||||
<span class="avatar-seed-card__thumb">
|
||||
<img src="${avatarEndpoint}?${params.toString()}" alt="Grundvariante ${index + 1}">
|
||||
</span>
|
||||
<span class="avatar-seed-card__label">Variante ${index + 1}</span>
|
||||
`;
|
||||
card.addEventListener('click', () => {
|
||||
const seedField = form.querySelector('[data-avatar-field="avatar_preset"]');
|
||||
if (!(seedField instanceof HTMLInputElement)) return;
|
||||
seedField.value = seed;
|
||||
picker.hidden = true;
|
||||
ensureAvatarBuilderLoaded(form);
|
||||
updateAvatarPreview(form);
|
||||
updateAvatarOptionPreviews(form, getActiveAvatarField(form));
|
||||
});
|
||||
grid.appendChild(card);
|
||||
});
|
||||
|
||||
picker.hidden = false;
|
||||
};
|
||||
|
||||
document.querySelectorAll('[data-avatar-builder]').forEach((form) => {
|
||||
form.querySelectorAll('[data-avatar-field]').forEach((field) => {
|
||||
field.addEventListener('change', () => {
|
||||
@@ -925,23 +890,22 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
return slugifySeed(`${prefix}-${suffix}-${tail}`);
|
||||
};
|
||||
|
||||
form.querySelector('[data-avatar-reroll]')?.addEventListener('click', () => {
|
||||
form.querySelector('[data-avatar-random]')?.addEventListener('click', () => {
|
||||
const seedField = form.querySelector('[data-avatar-field="avatar_preset"]');
|
||||
if (!(seedField instanceof HTMLInputElement)) return;
|
||||
const currentSeed = readAvatarValue(form, 'avatar_preset');
|
||||
const seeds = [];
|
||||
while (seeds.length < 8) {
|
||||
const candidate = buildSeed();
|
||||
if (candidate === currentSeed || seeds.includes(candidate)) continue;
|
||||
seeds.push(candidate);
|
||||
}
|
||||
seedField.value = buildSeed();
|
||||
|
||||
renderAvatarSeedChoices(form, seeds);
|
||||
});
|
||||
avatarComponentFields.forEach((field) => {
|
||||
const options = Array.from(form.querySelectorAll(`[data-avatar-field="${field}"]`));
|
||||
if (!options.length) return;
|
||||
const randomOption = options[Math.floor(Math.random() * options.length)];
|
||||
if (!(randomOption instanceof HTMLInputElement)) return;
|
||||
randomOption.checked = true;
|
||||
});
|
||||
|
||||
form.querySelector('[data-avatar-seed-picker-close]')?.addEventListener('click', () => {
|
||||
const picker = form.querySelector('[data-avatar-seed-picker]');
|
||||
if (picker) picker.hidden = true;
|
||||
ensureAvatarBuilderLoaded(form);
|
||||
updateAvatarPreview(form);
|
||||
updateAvatarOptionPreviews(form, getActiveAvatarField(form));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user