/* Только внешний каркас; формы и таблицы разделов сохраняют свои обработчики. */ (function (window, document) { 'use strict'; function initialize() { var header = document.getElementById('fi-shell-header'); if (!header || header.getAttribute('data-initialized') === '1') { return; } header.setAttribute('data-initialized', '1'); document.body.classList.add('fi-shell-page'); var toggle = header.querySelector('[data-shell-menu-toggle]'); var navigation = document.getElementById('fi-shell-navigation'); function closeMenu(restoreFocus) { header.classList.remove('is-menu-open'); toggle.setAttribute('aria-expanded', 'false'); if (restoreFocus) { toggle.focus(); } } toggle.addEventListener('click', function () { var opened = !header.classList.contains('is-menu-open'); header.classList.toggle('is-menu-open', opened); toggle.setAttribute('aria-expanded', opened ? 'true' : 'false'); }); document.addEventListener('click', function (event) { if (!header.contains(event.target)) { closeMenu(false); } }); navigation.addEventListener('click', function (event) { if (event.target.closest('a')) { closeMenu(false); } }); document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && header.classList.contains('is-menu-open')) { closeMenu(true); } }); window.addEventListener('resize', function () { if (window.matchMedia('(min-width: 721px)').matches) { closeMenu(false); } }); var signIn = header.querySelector('[data-shell-login]'); if (signIn) { var login = document.getElementById('fi-shell-login-panel'); signIn.addEventListener('click', function () { login.hidden = !login.hidden; signIn.setAttribute('aria-expanded', login.hidden ? 'false' : 'true'); if (!login.hidden) { login.querySelector('#email').focus(); } }); } // Перемещаем только корневые контейнеры. Узлы, ID и обработчики внутри не меняются. var roots = document.querySelectorAll('.main_page_box, #admin-modern'); Array.prototype.forEach.call(roots, function (root) { if (root.closest('.fi-shell-main') || root.closest('.modal, dialog') || root.parentElement !== document.body) { return; } var frame = document.createElement('div'); frame.className = 'fi-shell-main'; root.parentElement.insertBefore(frame, root); frame.appendChild(root); }); var footer = document.createElement('footer'); footer.className = 'fi-shell-footer'; var brand = document.createElement('a'); brand.href = '/'; brand.textContent = '© ' + header.getAttribute('data-year') + ' FeisInfo'; var caption = document.createElement('span'); caption.textContent = header.getAttribute('data-footer'); footer.appendChild(brand); footer.appendChild(caption); document.body.appendChild(footer); var form = document.querySelector('[data-shell-event-form]'); var select = form.querySelector('#feis_select'); var nativeSubmit = form.querySelector('[data-shell-native-submit]'); var status = document.querySelector('[data-shell-event-status]'); var previous = select.value; if (!window.jQuery || select.disabled) { return; } nativeSubmit.hidden = true; form.addEventListener('submit', function (event) { event.preventDefault(); }); select.addEventListener('change', function () { if (form.getAttribute('aria-busy') === 'true' || select.value === previous) { return; } var value = select.value; select.disabled = true; form.setAttribute('aria-busy', 'true'); status.textContent = header.getAttribute('data-saving'); window.jQuery.ajax({ url: '/home/select_feis.php', type: 'POST', dataType: 'json', timeout: 15000, data: { feis_id: value, token: header.getAttribute('data-token') }, success: function (response) { if (response && response.status === 'ok' && String(response.feis_id) === value) { var currentUrl = new URL(window.location.href); var spectatorPage = currentUrl.pathname === '/visitor/' || currentUrl.pathname === '/visitor/index.php' || currentUrl.pathname === '/visitor'; if (spectatorPage && currentUrl.searchParams.has('event')) { if (Number(value) > 0) { currentUrl.searchParams.set('event', value); } else { currentUrl.searchParams.delete('event'); } window.location.assign(currentUrl.toString()); } else { window.location.reload(); } } else { select.value = previous; status.textContent = header.getAttribute('data-error'); } }, error: function () { select.value = previous; status.textContent = header.getAttribute('data-error'); }, complete: function () { select.disabled = false; form.setAttribute('aria-busy', 'false'); } }); }); } if (window.jQuery) { // Регистрируем каркас раньше ready-обработчиков вкладок и таблиц раздела. window.jQuery(initialize); } else if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initialize); } else { initialize(); } })(window, document);