1+ jQuery ( document ) . ready ( function ( $ ) {
2+ let firstItem = window . location . hash ;
3+ const tabGroups = document . querySelectorAll ( '.mc-tabs' ) ;
4+ for ( let i = 0 ; i < tabGroups . length ; i ++ ) {
5+ const panel = $ ( tabGroups [ i ] ) . find ( firstItem ) ;
6+ if ( panel . length !== 0 ) {
7+ showPanel ( firstItem ) ;
8+ } else {
9+ firstItem = $ ( tabGroups [ i ] ) . find ( '[role=tablist]' ) . attr ( 'data-default' ) ;
10+ showPanel ( '#' + firstItem ) ;
11+ }
12+ }
13+ const tabs = document . querySelectorAll ( '.mc-tabs [role=tab]' ) ; // get all role=tab elements as a variable.
14+ for ( let i = 0 ; i < tabs . length ; i ++ ) {
15+ tabs [ i ] . addEventListener ( 'click' , showTabPanel ) ;
16+ tabs [ i ] . addEventListener ( 'keydown' , handleKeyPress ) ;
17+ } // add click event to each tab to run the showTabPanel function.
18+ /**
19+ * Activate a panel from the click event.
20+ *
21+ * @param event Click event.
22+ */
23+ function showTabPanel ( e ) {
24+ const tabContainer = $ ( e . currentTarget ) . closest ( '.tabs' ) ;
25+ const tabs = tabContainer . find ( '[role=tab]' ) ;
26+ const container = $ ( e . currentTarget ) . closest ( '.mc-tabs' ) ;
27+ const inside = $ ( e . currentTarget ) . parents ( '.inside' ) ;
28+ const tabPanelToOpen = e . target . getAttribute ( 'aria-controls' ) ;
29+ const iframes = $ ( 'iframe.mc-iframe' ) ;
30+ let tabPanels = [ ] ;
31+ if ( inside . length == 0 && ! container . hasClass ( 'mcs-tabs' ) ) {
32+ tabPanels = container . find ( '.ui-sortable > [role=tabpanel]' ) ;
33+ } else {
34+ tabPanels = container . find ( '[role=tabpanel]' ) ;
35+ }
36+ for ( let i = 0 ; i < tabs . length ; i ++ ) {
37+ tabs [ i ] . setAttribute ( 'aria-selected' , 'false' ) ;
38+ } // reset all tabs to aria-selected=false and normal font weight
39+ e . target . setAttribute ( 'aria-selected' , 'true' ) ; //set aria-selected=true for clicked tab
40+ for ( let i = 0 ; i < tabPanels . length ; i ++ ) {
41+ tabPanels [ i ] . setAttribute ( 'aria-hidden' , 'true' ) ;
42+ } // hide all tabpanels
43+ // If this is an inner tab panel, don't set the window location.
44+ if ( inside . length == 0 ) {
45+ window . location . hash = tabPanelToOpen ;
46+ }
47+ document . getElementById ( tabPanelToOpen ) . setAttribute ( 'aria-hidden' , 'false' ) ; //show tabpanel
48+ for ( let i = 0 ; i < iframes . length ; i ++ ) {
49+ let iframe = iframes [ i ] ;
50+ resizeIframe ( iframe ) ;
51+ }
52+ $ ( '#' + tabPanelToOpen ) . attr ( 'tabindex' , '-1' ) . trigger ( 'focus' ) ;
53+ window . scrollTo ( 0 , 0 ) ;
54+ }
55+
56+ /**
57+ * Activate a panel from panel ID.
58+ *
59+ * @param string hash Item ID.
60+ */
61+ function showPanel ( hash ) {
62+ let id = hash . replace ( '#' , '' ) ;
63+ const control = $ ( 'button[aria-controls=' + id + ']' ) ;
64+ const tabContainer = $ ( hash ) . closest ( '.tabs' ) ;
65+ const tabs = tabContainer . find ( '[role=tab]' ) ;
66+ const container = $ ( hash ) . closest ( '.mc-tabs' ) ;
67+ const tabPanels = container . find ( '[role=tabpanel]' ) ;
68+ const currentPanel = document . getElementById ( id ) ;
69+
70+ for ( let i = 0 ; i < tabs . length ; i ++ ) {
71+ tabs [ i ] . setAttribute ( 'aria-selected' , 'false' ) ;
72+ } //reset all tabs to aria-selected=false and normal font weight
73+ control . attr ( 'aria-selected' , 'true' ) ; //set aria-selected=true for clicked tab
74+ for ( let i = 0 ; i < tabPanels . length ; i ++ ) {
75+ tabPanels [ i ] . setAttribute ( 'aria-hidden' , 'true' ) ;
76+ }
77+ if ( null !== currentPanel ) {
78+ currentPanel . setAttribute ( 'aria-hidden' , 'false' ) ; //show tabpanel
79+ }
80+ }
81+
82+ // Arrow key handlers.
83+ function handleKeyPress ( e ) {
84+ if ( e . keyCode == 37 ) { // left arrow
85+ $ ( e . currentTarget ) . prev ( ) . trigger ( 'click' ) . trigger ( 'focus' ) ;
86+ e . preventDefault ( ) ;
87+ }
88+ if ( e . keyCode == 38 ) { // up arrow
89+ $ ( e . currentTarget ) . prev ( ) . trigger ( 'click' ) . trigger ( 'focus' ) ;
90+ e . preventDefault ( ) ;
91+ }
92+ if ( e . keyCode == 39 ) { // right arrow
93+ $ ( e . currentTarget ) . next ( ) . trigger ( 'click' ) . trigger ( 'focus' ) ;
94+ e . preventDefault ( ) ;
95+ }
96+ if ( e . keyCode == 40 ) { // down arrow.
97+ $ ( e . currentTarget ) . next ( ) . trigger ( 'click' ) . trigger ( 'focus' ) ;
98+ e . preventDefault ( ) ;
99+ }
100+ } ;
101+ } ) ;
0 commit comments