@@ -6,5 +6,6 @@ function button(id,icon,label,detail){return '<button type="button" class="mf-a1
function init ( ) { if ( document . querySelector ( '.mf-a11y-trigger' ) ) return ; var trigger = document . createElement ( 'button' ) ; trigger . type = 'button' ; trigger . className = 'mf-a11y-trigger' ; trigger . setAttribute ( 'aria-label' , 'Barrierefreiheit öffnen' ) ; trigger . setAttribute ( 'aria-expanded' , 'false' ) ; trigger . setAttribute ( 'aria-controls' , 'mf-a11y-panel' ) ; trigger . innerHTML = '<svg viewBox="0 0 32 32" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><circle cx="18" cy="5" r="3" fill="currentColor"/><path d="M13 11l5-2 5 4m-7-2-2 7-6 1m8-4 6 2 3 7M13 18a7 7 0 1 0 6 7"/></svg>' ;
var panel = document . createElement ( 'section' ) ; panel . id = 'mf-a11y-panel' ; panel . className = 'mf-a11y-panel' ; panel . hidden = true ; panel . setAttribute ( 'role' , 'dialog' ) ; panel . setAttribute ( 'aria-modal' , 'false' ) ; panel . setAttribute ( 'aria-labelledby' , 'mf-a11y-title' ) ; panel . innerHTML = '<div class="mf-a11y-head"><button type="button" class="mf-a11y-close" aria-label="Barrierefreiheit schließen">× </button><h2 id="mf-a11y-title">Barrierefreiheit</h2></div><div class="mf-a11y-grid">' + button ( 'font' , 'T⁺' , 'Text vergrößern' , '100 %' ) + button ( 'contrast' , '◐' , 'Hochkontrast' ) + button ( 'color' , '◉' , 'Farbenblind-Modus' ) + button ( 'mono' , '◒' , 'Monochrom' ) + button ( 'readable' , 'Aa' , 'Lesemodus (Dyslexie)' , 'Verdana + Abstände' ) + button ( 'links' , '🔗' , 'Links unterstreichen' ) + button ( 'motion' , 'Ⅱ' , 'Animationen stoppen' ) + button ( 'cursor' , '➤' , 'Großer Cursor' ) + button ( 'reset' , '↺' , 'Alles zurücksetzen' ) + '</div>' ;
document . body . appendChild ( trigger ) ; document . body . appendChild ( panel ) ; var close = panel . querySelector ( '.mf-a11y-close' ) ; function paint ( ) { panel . querySelectorAll ( '[data-a11y]' ) . forEach ( function ( b ) { var id = b . dataset . a11y , on = id === 'font' ? state . font > 100 : id === 'motion' ? ! state . motion : id === 'reset' ? false : ! ! state [ id ] ; b . setAttribute ( 'aria-pressed' , on ) ; if ( id === 'font' ) b . querySelector ( 'small' ) . textContent = state . font + ' %' ; } ) ; }
var host = document . querySelector ( '.mf-a11y-host,.mf-tools,.tt-header-tools,.mm-header-tools,.ss-header-tools,.dlg-header-tools,.mf-theme-float' ) ; if ( host ) { host . insertBefore ( trigger , host . firstChild ) ; } else { var utility = document . createElement ( 'div' ) ; utility . className = 'mf-a11y-utility' ; utility . setAttribute ( 'aria-label' , 'Globale Werkzeuge' ) ; utility . appendChild ( trigger ) ; document . body . insertBefore ( utility , document . body . firstChild ) ; }
function hide ( ) { panel . hidden = true ; trigger . setAttribute ( 'aria-expanded' , 'false' ) ; trigger . focus ( ) ; } function show ( ) { panel . hidden = false ; trigger . setAttribute ( 'aria-expanded' , 'true' ) ; paint ( ) ; close . focus ( ) ; } trigger . addEventListener ( 'click' , function ( ) { panel . hidden ? show ( ) : hide ( ) ; } ) ; close . addEventListener ( 'click' , hide ) ; window . addEventListener ( 'keydown' , function ( e ) { if ( e . key === 'Escape' && ! panel . hidden ) hide ( ) ; } ) ; panel . addEventListener ( 'click' , function ( e ) { var b = e . target . closest ( '[data-a11y]' ) ; if ( ! b ) return ; var id = b . dataset . a11y ; if ( id === 'reset' ) state = Object . assign ( { } , defaults ) ; else if ( id === 'font' ) state . font = levels [ ( levels . indexOf ( state . font ) + 1 ) % levels . length ] ; else if ( id === 'motion' ) state . motion = ! state . motion ; else state [ id ] = ! state [ id ] ; apply ( ) ; paint ( ) ; } ) ; paint ( ) ; }
if ( document . readyState === 'loading' ) document . addEventListener ( 'DOMContentLoaded' , init ) ; else init ( ) ; } ) ( ) ;