1jQuery(document).ready(function($){ 2 function setAccordionHeaderState($header, isExpanded) { 3 $header.attr('aria-expanded', isExpanded ? 'true' : 'false'); 4 } 5 6 function initExpandAllMode($accordion) { 7 const $headers = $accordion.find('> .advgb-accordion-item > .advgb-accordion-header'); 8 9 $headers.each(function() { 10 const $header = $(this); 11 const $body = $header.next('.advgb-accordion-body'); 12 13 $body.show(); 14 setAccordionHeaderState($header, true); 15 $header.attr({ tabindex: '0', role: 'button' }); 16 }); 17 18 function toggleItem($header) { 19 const $body = $header.next('.advgb-accordion-body'); 20 const isExpanded = $header.attr('aria-expanded') === 'true'; 21 if (isExpanded) { 22 $body.stop(true, true).slideUp(200); 23 setAccordionHeaderState($header, false); 24 } else { 25 $body.stop(true, true).slideDown(200); 26 setAccordionHeaderState($header, true); 27 } 28 } 29 30 $headers.on('click', function() { 31 toggleItem($(this)); 32 }); 33 34 $headers.on('keydown', function(e) { 35 const $header = $(this); 36 const idx = $headers.index($header); 37 switch (e.key) { 38 case 'Enter': 39 case ' ': 40 e.preventDefault(); 41 toggleItem($header); 42 break; 43 case 'ArrowDown': 44 e.preventDefault(); 45 $headers.eq((idx + 1) % $headers.length).focus(); 46 break; 47 case 'ArrowUp': 48 e.preventDefault(); 49 $headers.eq((idx - 1 + $headers.length) % $headers.length).focus(); 50 break; 51 case 'Home': 52 e.preventDefault(); 53 $headers.first().focus(); 54 break; 55 case 'End': 56 e.preventDefault(); 57 $headers.last().focus(); 58 break; 59 } 60 }); 61 } 62 63 $(".advgb-accordion-wrapper").each(function() { 64 const $wrapper = $(this); 65 66 if ($wrapper.data('expand-all')) { 67 initExpandAllMode($wrapper); 68 return; 69 } 70 71 $wrapper.accordion({ 72 header: "> div > .advgb-accordion-header", 73 heightStyle: "content", 74 collapsible: true, 75 active: $wrapper.data("collapsed") ? false : 0, 76 }); 77 78 // Override jQuery UI's roving tabindex so Tab visits every header 79 const $headers = $wrapper.find('> .advgb-accordion-item > .advgb-accordion-header'); 80 81 function restoreTabIndex() { 82 $headers.attr('tabindex', '0'); 83 } 84 restoreTabIndex(); 85 $wrapper.on('accordionactivate', restoreTabIndex); 86 }); 87});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.