1
- ! function ( ) { /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
2
- "use strict" ; var t , r = ( document . currentScript || { } ) . dataset || { } , d = Array . prototype . forEach ; function u ( t ) { var e , a = this . tab , n = this . tabs || ( this . tabs = a . closest ( ".tabs" ) ) , s = this . panel || ( this . panel = document . getElementById ( a . getAttribute ( "aria-controls" ) ) ) ; i ( n , ".tablist .tab" , "tab" ) . forEach ( function ( t ) { p ( t , t === a ) } ) , i ( n , ".tabpanel" , "tabpanel" ) . forEach ( function ( t ) { y ( t , t !== s ) } ) , ! this . isSync && "syncStorageKey" in r && "syncGroupId" in n . dataset && ( n = r . syncStorageKey + "-" + n . dataset . syncGroupId , window [ ( r . syncStorageScope || "local" ) + "Storage" ] . setItem ( n , a . dataset . syncId ) ) , t && ( ~ ( e = ( n = window . location ) . hash ?n . href . indexOf ( "#" ) :- 1 ) && window . history . replaceState ( null , "" , n . href . slice ( 0 , e ) ) , t . preventDefault ( ) ) } function b ( t ) { u . call ( this , t ) ; var a = this . tabs , n = this . tab , t = a . getBoundingClientRect ( ) . y , t = ( d . call ( document . querySelectorAll ( ".tabs" ) , function ( e ) { e !== a && e . dataset . syncGroupId === a . dataset . syncGroupId && i ( e , ".tablist .tab" , "tab" ) . forEach ( function ( t ) { t . dataset . syncId === n . dataset . syncId && u . call ( { tabs :e , tab :t , isSync :! 0 } ) } ) } ) , a . getBoundingClientRect ( ) . y - t ) ; ( t = t && Math . round ( t ) ) && window . scrollBy ( { top :t , behavior :"instant" } ) } function i ( t , e , a ) { var n = t . querySelector ( e ) ; if ( ! n ) return [ ] ; for ( var s = [ n ] ; ( n = n . nextElementSibling ) && n . classList . contains ( a ) ; ) s . push ( n ) ; return s } function e ( t , e , a ) { d . call ( t , function ( t ) { t . classList [ a ] ( e ) } ) } function y ( t , e ) { t . classList [ ( t . hidden = e ) ?"add" :"remove" ] ( "is-hidden" ) } function p ( t , e ) { t . setAttribute ( "aria-selected" , "" + e ) , t . classList [ e ?"add" :"remove" ] ( "is-selected" ) , t . tabIndex = e ?0 :- 1 } function a ( ) { var t = window . location . hash . slice ( 1 ) ; t && ( t = document . getElementById ( ~ t . indexOf ( "%" ) ?decodeURIComponent ( t ) :t ) ) && t . classList . contains ( "tab" ) && ( "syncId" in t . dataset ?b :u ) . call ( { tab :t } ) } ( t = document . querySelectorAll ( ".tabs" ) ) . length && ( d . call ( t , function ( i ) { var o , c = i . classList . contains ( "is-sync" ) ?{ } :void 0 , t = i . querySelector ( ".tablist ul" ) ; if ( t . setAttribute ( "role" , "tablist" ) , d . call ( t . querySelectorAll ( "li" ) , function ( t , e ) { t . tabIndex = - 1 , t . setAttribute ( "role" , t . classList . add ( "tab" ) || "tab" ) ; var a , n = ( s = ! ( s = t . id ) && ( n = t . querySelector ( "a[id]" ) ) ?t . id = n . parentNode . removeChild ( n ) . id :s ) && i . querySelector ( '.tabpanel[aria-labelledby~="' + s + '"]' ) ; if ( ! n ) return e ?void 0 :p ( t , ! 0 ) ; c && ( ( a = t . textContent . trim ( ) ) in c ?a = void 0 :c [ t . dataset . syncId = a ] = t ) , e || c && ( o = { tab :t , panel :n } ) ?y ( n , ! 0 ) :p ( t , ! 0 ) , t . setAttribute ( "aria-controls" , n . id ) , n . setAttribute ( "role" , "tabpanel" ) ; var s = void 0 === a ?u :b ; t . addEventListener ( "click" , s . bind ( { tabs :i , tab :t , panel :n } ) ) } ) , i . closest ( ".tabpanel" ) || d . call ( i . querySelectorAll ( ".tabpanel table.tableblock" ) , function ( t ) { var e = Object . assign ( document . createElement ( "div" ) , { className :"tablecontainer" } ) ; t . parentNode . insertBefore ( e , t ) . appendChild ( t ) } ) , o ) { for ( var e , a , n = 0 , s = i . classList , l = s . length ; n !== l ; n ++ ) if ( ( a = s . item ( n ) ) . startsWith ( "data-sync-group-id=" ) ) { i . dataset . syncGroupId = e = s . remove ( a ) || a . slice ( 19 ) . replace ( / \u00a0 / g, " " ) ; break } void 0 === e && ( i . dataset . syncGroupId = e = Object . keys ( c ) . sort ( ) . join ( "|" ) ) ; t = "syncStorageKey" in r && window [ ( r . syncStorageScope || "local" ) + "Storage" ] . getItem ( r . syncStorageKey + "-" + e ) , t = t && c [ t ] ; t && Object . assign ( o , { tab :t , panel :document . getElementById ( t . getAttribute ( "aria-controls" ) ) } ) , p ( o . tab , ! 0 ) , y ( o . panel , ! 1 ) } } ) , a ( ) , e ( t , "is-loading" , "remove" ) , window . setTimeout ( e . bind ( null , t , "is-loaded" , "add" ) , 0 ) , window . addEventListener ( "hashchange" , a ) ) } ( ) ;
1
+ ( function ( ) {
2
+ var _$tabs_1 = { } ;
3
+ ; ( function ( ) { /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
4
+ 'use strict'
5
+
6
+ var config = ( document . currentScript || { } ) . dataset || { }
7
+ var forEach = Array . prototype . forEach
8
+
9
+ init ( document . querySelectorAll ( '.tabs' ) )
10
+
11
+ function init ( tabsBlocks ) {
12
+ if ( ! tabsBlocks . length ) return
13
+ forEach . call ( tabsBlocks , function ( tabs ) {
14
+ var syncIds = tabs . classList . contains ( 'is-sync' ) ? { } : undefined
15
+ var tablist = tabs . querySelector ( '.tablist ul' )
16
+ tablist . setAttribute ( 'role' , 'tablist' )
17
+ var start
18
+ forEach . call ( tablist . querySelectorAll ( 'li' ) , function ( tab , idx ) {
19
+ tab . tabIndex = - 1
20
+ tab . setAttribute ( 'role' , tab . classList . add ( 'tab' ) || 'tab' )
21
+ var id , anchor , syncId
22
+ if ( ! ( id = tab . id ) && ( anchor = tab . querySelector ( 'a[id]' ) ) ) {
23
+ id = tab . id = anchor . parentNode . removeChild ( anchor ) . id
24
+ }
25
+ var panel = id && tabs . querySelector ( '.tabpanel[aria-labelledby~="' + id + '"]' )
26
+ if ( ! panel ) return idx ? undefined : toggleSelected ( tab , true ) // invalid state
27
+ syncIds && ( ( ( syncId = tab . textContent . trim ( ) ) in syncIds ) ? ( syncId = undefined ) : true ) &&
28
+ ( syncIds [ ( tab . dataset . syncId = syncId ) ] = tab )
29
+ idx || ( syncIds && ( start = { tab : tab , panel : panel } ) ) ? toggleHidden ( panel , true ) : toggleSelected ( tab , true )
30
+ tab . setAttribute ( 'aria-controls' , panel . id )
31
+ panel . setAttribute ( 'role' , 'tabpanel' )
32
+ var onClick = syncId === undefined ? activateTab : activateTabSync
33
+ tab . addEventListener ( 'click' , onClick . bind ( { tabs : tabs , tab : tab , panel : panel } ) )
34
+ } )
35
+ if ( ! tabs . closest ( '.tabpanel' ) ) {
36
+ forEach . call ( tabs . querySelectorAll ( '.tabpanel table.tableblock' ) , function ( table ) {
37
+ var container = Object . assign ( document . createElement ( 'div' ) , { className : 'tablecontainer' } )
38
+ table . parentNode . insertBefore ( container , table ) . appendChild ( table )
39
+ } )
40
+ }
41
+ if ( start ) {
42
+ var syncGroupId
43
+ for ( var i = 0 , lst = tabs . classList , len = lst . length , className ; i !== len ; i ++ ) {
44
+ if ( ! ( className = lst . item ( i ) ) . startsWith ( 'data-sync-group-id=' ) ) continue
45
+ tabs . dataset . syncGroupId = syncGroupId = lst . remove ( className ) || className . slice ( 19 ) . replace ( / \u00a0 / g, ' ' )
46
+ break
47
+ }
48
+ if ( syncGroupId === undefined ) tabs . dataset . syncGroupId = syncGroupId = Object . keys ( syncIds ) . sort ( ) . join ( '|' )
49
+ var preferredSyncId = 'syncStorageKey' in config &&
50
+ window [ ( config . syncStorageScope || 'local' ) + 'Storage' ] . getItem ( config . syncStorageKey + '-' + syncGroupId )
51
+ var tab = preferredSyncId && syncIds [ preferredSyncId ]
52
+ tab && Object . assign ( start , { tab : tab , panel : document . getElementById ( tab . getAttribute ( 'aria-controls' ) ) } )
53
+ toggleSelected ( start . tab , true ) || toggleHidden ( start . panel , false )
54
+ }
55
+ } )
56
+ onHashChange ( )
57
+ toggleClassOnEach ( tabsBlocks , 'is-loading' , 'remove' )
58
+ window . setTimeout ( toggleClassOnEach . bind ( null , tabsBlocks , 'is-loaded' , 'add' ) , 0 )
59
+ window . addEventListener ( 'hashchange' , onHashChange )
60
+ }
61
+
62
+ function activateTab ( e ) {
63
+ var tab = this . tab
64
+ var tabs = this . tabs || ( this . tabs = tab . closest ( '.tabs' ) )
65
+ var panel = this . panel || ( this . panel = document . getElementById ( tab . getAttribute ( 'aria-controls' ) ) )
66
+ querySelectorWithSiblings ( tabs , '.tablist .tab' , 'tab' ) . forEach ( function ( el ) {
67
+ toggleSelected ( el , el === tab )
68
+ } )
69
+ querySelectorWithSiblings ( tabs , '.tabpanel' , 'tabpanel' ) . forEach ( function ( el ) {
70
+ toggleHidden ( el , el !== panel )
71
+ } )
72
+ if ( ! this . isSync && 'syncStorageKey' in config && 'syncGroupId' in tabs . dataset ) {
73
+ var storageKey = config . syncStorageKey + '-' + tabs . dataset . syncGroupId
74
+ window [ ( config . syncStorageScope || 'local' ) + 'Storage' ] . setItem ( storageKey , tab . dataset . syncId )
75
+ }
76
+ if ( ! e ) return
77
+ var loc = window . location
78
+ var hashIdx = loc . hash ? loc . href . indexOf ( '#' ) : - 1
79
+ if ( ~ hashIdx ) window . history . replaceState ( null , '' , loc . href . slice ( 0 , hashIdx ) )
80
+ e . preventDefault ( )
81
+ }
82
+
83
+ function activateTabSync ( e ) {
84
+ activateTab . call ( this , e )
85
+ var thisTabs = this . tabs
86
+ var thisTab = this . tab
87
+ var initialY = thisTabs . getBoundingClientRect ( ) . y
88
+ forEach . call ( document . querySelectorAll ( '.tabs' ) , function ( tabs ) {
89
+ if ( tabs === thisTabs || tabs . dataset . syncGroupId !== thisTabs . dataset . syncGroupId ) return
90
+ querySelectorWithSiblings ( tabs , '.tablist .tab' , 'tab' ) . forEach ( function ( tab ) {
91
+ if ( tab . dataset . syncId === thisTab . dataset . syncId ) activateTab . call ( { tabs : tabs , tab : tab , isSync : true } )
92
+ } )
93
+ } )
94
+ var shiftedBy = thisTabs . getBoundingClientRect ( ) . y - initialY
95
+ if ( shiftedBy && ( shiftedBy = Math . round ( shiftedBy ) ) ) window . scrollBy ( { top : shiftedBy , behavior : 'instant' } )
96
+ }
97
+
98
+ function querySelectorWithSiblings ( scope , selector , siblingClass ) {
99
+ var el = scope . querySelector ( selector )
100
+ if ( ! el ) return [ ]
101
+ var result = [ el ]
102
+ while ( ( el = el . nextElementSibling ) && el . classList . contains ( siblingClass ) ) result . push ( el )
103
+ return result
104
+ }
105
+
106
+ function toggleClassOnEach ( elements , className , method ) {
107
+ forEach . call ( elements , function ( el ) {
108
+ el . classList [ method ] ( className )
109
+ } )
110
+ }
111
+
112
+ function toggleHidden ( el , state ) {
113
+ el . classList [ ( el . hidden = state ) ? 'add' : 'remove' ] ( 'is-hidden' )
114
+ }
115
+
116
+ function toggleSelected ( el , state ) {
117
+ el . setAttribute ( 'aria-selected' , '' + state )
118
+ el . classList [ state ? 'add' : 'remove' ] ( 'is-selected' )
119
+ el . tabIndex = state ? 0 : - 1
120
+ }
121
+
122
+ function onHashChange ( ) {
123
+ var id = window . location . hash . slice ( 1 )
124
+ if ( ! id ) return
125
+ var tab = document . getElementById ( ~ id . indexOf ( '%' ) ? decodeURIComponent ( id ) : id )
126
+ if ( ! ( tab && tab . classList . contains ( 'tab' ) ) ) return
127
+ 'syncId' in tab . dataset ? activateTabSync . call ( { tab : tab } ) : activateTab . call ( { tab : tab } )
128
+ }
129
+ } ) ( )
130
+
131
+ var _$tabsBundle_2 = { } ;
132
+ _$tabs_1
133
+
134
+ } ( ) ) ;
0 commit comments