@@ -7,6 +7,7 @@ export default (dc, {
77 const el = this ;
88 const classTabActive = props . classactive ;
99 const selectorTab = props . selectortab ;
10+ const prevsel = props . prevsel ;
1011 const { history, _isEditor } = window ;
1112 const attrTabindex = 'tabIndex' ;
1213 const attrSelected = 'ariaSelected' ;
@@ -24,6 +25,11 @@ export default (dc, {
2425 each ( el . querySelectorAll ( roleTabContent ) , i => i . hidden = true ) ;
2526 }
2627
28+ const getTabId = ( item ) => {
29+ return ( prevsel && item . getAttribute ( prevsel ) ) || item . getAttribute ( selectorTab ) ;
30+ }
31+
32+ const qS = ( elem , qs ) => elem . querySelector ( qs ) ;
2733 const getAllTabs = ( ) => el . querySelectorAll ( roleTab ) ;
2834 const upTabIdx = ( item , val ) => ! _isEditor && ( item [ attrTabindex ] = val ) ;
2935
@@ -37,14 +43,15 @@ export default (dc, {
3743 tabEl . className += ' ' + classTabActive ;
3844 tabEl [ attrSelected ] = 'true' ;
3945 upTabIdx ( tabEl , '0' ) ;
40- const tabContentId = tabEl . getAttribute ( selectorTab ) ;
41- const tabContent = tabContentId && el . querySelector ( `#${ tabContentId } ` ) ;
46+ const tabContentId = getTabId ( tabEl ) ;
47+ const tabContent = tabContentId && qS ( el , `#${ tabContentId } ` ) ;
4248 tabContent && ( tabContent . hidden = false ) ;
4349 } ;
4450
4551 const getTabByHash = ( ) => {
4652 const hashId = ( location . hash || '' ) . replace ( '#' , '' ) ;
47- return hashId && el . querySelector ( `${ roleTab } [${ selectorTab } =${ hashId } ]` ) ;
53+ const qrStr = att => `${ roleTab } [${ att } =${ hashId } ]` ;
54+ return hashId && ( qS ( el , qrStr ( prevsel ) ) || qS ( el , qrStr ( selectorTab ) ) ) ;
4855 } ;
4956
5057 const getSelectedTab = ( target ) => {
@@ -56,8 +63,8 @@ export default (dc, {
5663 return found ;
5764 } ;
5865
59- let tabToActive = el . querySelector ( `.${ classTabActive } ${ roleTab } ` ) ;
60- tabToActive = tabToActive || getTabByHash ( ) || el . querySelector ( roleTab ) ;
66+ let tabToActive = qS ( el , `.${ classTabActive } ${ roleTab } ` ) ;
67+ tabToActive = tabToActive || getTabByHash ( ) || qS ( el , roleTab ) ;
6168 tabToActive && activeTab ( tabToActive ) ;
6269
6370 el . addEventListener ( 'click' , ( ev ) => {
@@ -73,7 +80,7 @@ export default (dc, {
7380 ev . preventDefault ( ) ;
7481 ev . __trg = 1 ;
7582 activeTab ( target ) ;
76- const id = target . getAttribute ( selectorTab ) ;
83+ const id = getTabId ( target ) ;
7784 try {
7885 history && history . pushState ( null , null , `#${ id } ` ) ;
7986 } catch ( e ) { }
@@ -100,6 +107,7 @@ export default (dc, {
100107 name : 'Tabs' ,
101108 classactive : config . classTabActive ,
102109 selectortab : config . selectorTab ,
110+ prevsel : config . selectorTabPrev ,
103111 'script-props' : [ 'classactive' , 'selectortab' ] ,
104112 script,
105113 traits,
0 commit comments