1*b603bbe1SLORTET(function () { 2*b603bbe1SLORTET function parseTemplates(raw) { 3*b603bbe1SLORTET if (!raw) return []; 4*b603bbe1SLORTET try { 5*b603bbe1SLORTET var parsed = JSON.parse(raw); 6*b603bbe1SLORTET return Array.isArray(parsed) ? parsed : []; 7*b603bbe1SLORTET } catch (e) { 8*b603bbe1SLORTET return []; 9*b603bbe1SLORTET } 10*b603bbe1SLORTET } 11*b603bbe1SLORTET 12*b603bbe1SLORTET function cleanBase(name) { 13*b603bbe1SLORTET name = String(name || '').trim(); 14*b603bbe1SLORTET if (!name) return ''; 15*b603bbe1SLORTET 16*b603bbe1SLORTET var parts = name.split(':'); 17*b603bbe1SLORTET name = parts[parts.length - 1] || ''; 18*b603bbe1SLORTET name = name.replace(/\.[a-z0-9]+$/i, ''); 19*b603bbe1SLORTET name = name.replace(/[^a-zA-Z0-9_\-]/g, '_').replace(/^_+|_+$/g, ''); 20*b603bbe1SLORTET return name; 21*b603bbe1SLORTET } 22*b603bbe1SLORTET 23*b603bbe1SLORTET function updateChoices(variant, filename, pageName, templates) { 24*b603bbe1SLORTET var selected = filename.value; 25*b603bbe1SLORTET filename.innerHTML = ''; 26*b603bbe1SLORTET 27*b603bbe1SLORTET var variantKey = variant.value === 'small' ? 'small' : 'big'; 28*b603bbe1SLORTET var seen = {}; 29*b603bbe1SLORTET 30*b603bbe1SLORTET (templates[variantKey] || []).forEach(function (tpl) { 31*b603bbe1SLORTET var resolved = String(tpl || '').replace(/~pagename~/g, pageName); 32*b603bbe1SLORTET var base = cleanBase(resolved); 33*b603bbe1SLORTET if (!base || seen[base]) return; 34*b603bbe1SLORTET 35*b603bbe1SLORTET seen[base] = true; 36*b603bbe1SLORTET var option = document.createElement('option'); 37*b603bbe1SLORTET option.value = base; 38*b603bbe1SLORTET option.textContent = base + '.ext'; 39*b603bbe1SLORTET filename.appendChild(option); 40*b603bbe1SLORTET }); 41*b603bbe1SLORTET 42*b603bbe1SLORTET for (var i = 0; i < filename.options.length; i++) { 43*b603bbe1SLORTET if (filename.options[i].value === selected) { 44*b603bbe1SLORTET filename.selectedIndex = i; 45*b603bbe1SLORTET return; 46*b603bbe1SLORTET } 47*b603bbe1SLORTET } 48*b603bbe1SLORTET 49*b603bbe1SLORTET filename.selectedIndex = filename.options.length ? 0 : -1; 50*b603bbe1SLORTET } 51*b603bbe1SLORTET 52*b603bbe1SLORTET function initForm(form) { 53*b603bbe1SLORTET var variant = form.querySelector('#pagesicon_icon_variant'); 54*b603bbe1SLORTET var filename = form.querySelector('#pagesicon_icon_filename'); 55*b603bbe1SLORTET if (!variant || !filename) return; 56*b603bbe1SLORTET 57*b603bbe1SLORTET var pageName = form.dataset.pageName || ''; 58*b603bbe1SLORTET var templates = { 59*b603bbe1SLORTET big: parseTemplates(form.dataset.bigTemplates), 60*b603bbe1SLORTET small: parseTemplates(form.dataset.smallTemplates) 61*b603bbe1SLORTET }; 62*b603bbe1SLORTET 63*b603bbe1SLORTET variant.addEventListener('change', function () { 64*b603bbe1SLORTET updateChoices(variant, filename, pageName, templates); 65*b603bbe1SLORTET }); 66*b603bbe1SLORTET 67*b603bbe1SLORTET updateChoices(variant, filename, pageName, templates); 68*b603bbe1SLORTET } 69*b603bbe1SLORTET 70*b603bbe1SLORTET document.addEventListener('DOMContentLoaded', function () { 71*b603bbe1SLORTET document.querySelectorAll('.pagesicon-upload-form').forEach(initForm); 72*b603bbe1SLORTET }); 73*b603bbe1SLORTET})(); 74