(function() { var initAccordionDropdown = function() { // Target Categories and Job Types var dropdowns = document.querySelectorAll('select[name="categories[]"], select[name="JobCategory[]"]'); dropdowns.forEach(function(el) { if (el.dataset.accordionActive === 'true') return; var $el = window.jQuery ? jQuery(el) : null; // Step 1: Structural Reengineering (Turn headers into optgroups) if ($el && $el.data("ech-multiselect")) { $el.multiselect('destroy'); } var group = null; Array.from(el.options).forEach(function(opt) { if (opt.text.indexOf('(Do NOT select') !== -1) { var label = opt.text.split(':')[0].trim(); group = document.createElement('optgroup'); group.label = label; el.insertBefore(group, opt); opt.remove(); } else if (opt.text.indexOf('---') !== -1) { opt.remove(); } else if (group && opt.value !== "") { group.appendChild(opt); } }); el.dataset.accordionActive = 'true'; // Step 2: Initialize Widget with Accordion Logic if ($el) { $el.multiselect({ selectedText: "# selected", noneSelectedText: "Click to select", header: false, menuHeight: 'auto', open: function() { var $widget = $el.multiselect("widget"); // Add [+] if not present $widget.find('.ui-multiselect-optgroup a').each(function() { if (!jQuery(this).find('.toggle-icon').length) { jQuery(this).prepend(''); } }); // Start with sub-items hidden $widget.find('li:not(.ui-multiselect-optgroup)').hide(); } }); var $w = $el.multiselect("widget"); // Step 3: Click to Expand/Collapse Logic $w.off('click.accordion').on('click.accordion', '.ui-multiselect-optgroup a', function(e) { e.preventDefault(); e.stopPropagation(); // Prevents dropdown from closing var $header = jQuery(this); var $items = $header.parent().nextUntil('.ui-multiselect-optgroup'); if ($items.is(':visible')) { $items.hide(); $header.find('.toggle-icon').text('[+]'); } else { $items.show(); $header.find('.toggle-icon').text('[-]'); } }); } }); }; // Auto-run logic window.addEventListener('load', function() { setTimeout(initAccordionDropdown, 500); new MutationObserver(initAccordionDropdown).observe(document.body, { childList: true, subtree: true }); }); })();