/** * Seitenleiste im Mitarbeiterbereich: ein-/ausklappen. Eingeklappt bleibt eine schmale Iconleiste sichtbar. * Die Icons werden hier anhand der Seitenadresse zugeordnet, auch für Menüpunkte von Plugins (sonst ein Puzzle-Teil). */ (function () { var root = document.documentElement, KEY = 'deskhub_sidebar'; var side = document.getElementById('sidebar'); if (!side) return; var P = { grid: '', chart: '', inbox: '', check: '', ban: '', users: '', user: '', phone: '', chat: '', puzzle: '', building: '', flag: '', clock: '', help: '', sliders: '', key: '', link: '', list: '', file: '', mail: '', book: '', bot: '', briefcase: '', shield: '', shieldCheck: '', calendar: '', clipboard: '', branch: '', trend: '', repeat: '', gear: '', db: '', download: '', lock: '', activity: '', megaphone: '', sun: '', userx: '', logout: '', globe: '', filter: '' }; var PAGES = { reports: 'grid', report_builder: 'chart', tickets: 'inbox', tasks: 'check', banlist: 'ban', agent_directory: 'users', apps: 'phone', live_chat: 'chat', departments: 'building', priorities: 'flag', sla_plans: 'clock', help_topics: 'help', custom_fields: 'sliders', api_keys: 'key', webhooks: 'link', custom_lists: 'list', canned_responses: 'file', site_pages: 'file', email_addresses: 'mail', email_templates: 'mail', kb_manage: 'book', assistant: 'bot', plugins: 'puzzle', customers: 'user', organizations: 'briefcase', staff_manage: 'users', teams: 'users', roles: 'shield', availability: 'calendar', security_check: 'shieldCheck', audit_log: 'clipboard', ticket_rules: 'branch', escalation_rules: 'trend', recurring_tickets: 'repeat', time_entries: 'clock', business_hours: 'clock', settings: 'gear', backup: 'db', update: 'download', profile: 'user', logout: 'logout', ticket_templates: 'file', status_page: 'activity', languages: 'globe' }; var PLUGINS = { schichtuebergabe: 'sun', spamfilter: 'filter', vertretung: 'userx', virenscan: 'shieldCheck', datenschutz: 'lock', ueberwachung: 'activity', rundmail: 'megaphone', 'community-bot': 'bot', 'nas-backup': 'db', tagesbericht: 'clipboard' }; function svg(name) { return ''; } function iconFor(a) { var u; try { u = new URL(a.getAttribute('href'), location.href); } catch (e) { return 'puzzle'; } if (/\/staff\/plugin\.php$/.test(u.pathname)) return PLUGINS[u.searchParams.get('p')] || 'puzzle'; var m = u.pathname.match(/\/([a-z_]+)\.php$/); return (m && PAGES[m[1]]) || 'puzzle'; } var links = side.querySelectorAll('nav a[href], .sidebar-footer a[href$="profile.php"], .sidebar-footer a[href$="logout.php"]'); Array.prototype.forEach.call(links, function (a) { if (a.querySelector('.nav-ico')) return; var text = (a.textContent || '').replace(/\s+/g, ' ').trim(); if (!text) return; var ico = document.createElement('span'); ico.className = 'nav-ico'; ico.innerHTML = svg(iconFor(a)); var label = document.createElement('span'); label.className = 'nav-label'; while (a.firstChild) label.appendChild(a.firstChild); a.appendChild(ico); a.appendChild(label); a.setAttribute('title', text.replace(/\s*\d+\s*$/, '')); }); var btn = document.getElementById('sidebar-toggle'); function paint() { var closed = root.classList.contains('sidebar-closed'); btn.innerHTML = closed ? '»' : '«'; var t = closed ? 'Seitenleiste ausklappen' : 'Seitenleiste einklappen'; btn.setAttribute('title', t); btn.setAttribute('aria-label', t); } btn.addEventListener('click', function () { var closed = !root.classList.contains('sidebar-closed'); root.classList.toggle('sidebar-closed', closed); try { localStorage.setItem(KEY, closed ? 'closed' : 'open'); } catch (e) {} paint(); }); paint(); })();