@@ -15,6 +15,8 @@ function checkWrapped () {
1515}
1616
1717document . addEventListener ( 'DOMContentLoaded' , function ( ) {
18+ const contentDataset = document . querySelector ( 'article.doc' ) . dataset
19+
1820 var camelCased = function ( str ) {
1921 return str . split ( / - | \. / )
2022 . map ( ( text ) => text . substr ( 0 , 1 ) . toUpperCase ( ) + text . substr ( 1 ) )
@@ -34,32 +36,53 @@ document.addEventListener('DOMContentLoaded', function () {
3436
3537 // so if the role is a single word, we use the role as is - ie deprecated
3638 // if it is longer we test to see if it is a 'versionable' roke - ie deprecated-5.20
37- // if it is a versionable role, and a veresion is specified, we remove the version and use the remaining text as the label class
38- if ( labelParts . length > 1 ) {
39- label = ( rolesData [ label ] && rolesData [ label ] . labelCategory !== 'version' ) ? label : labelParts . slice ( 0 , - 1 ) . join ( '-' )
39+ // if it is a versionable role, and a version is specified, we remove the version and use the remaining text as the label class
40+ // if (labelParts.length > 1) {
41+ // label = (rolesData[label] && rolesData[label].labelCategory !== 'version') ? label : labelParts.slice(0, -1).join('-')
42+ // }
43+
44+ let dataLabel , dataProduct , dataVersion
45+ const dataExtras = [ ]
46+
47+ // what about roles like new-bolt-5.20 if we want to use a product name in the label?
48+ while ( ! dataLabel && labelParts . length > 0 ) {
49+ const labelCandidate = labelParts . join ( '-' )
50+ if ( rolesData [ labelCandidate ] ) {
51+ dataLabel = labelCandidate
52+ } else {
53+ dataExtras . push ( labelParts . pop ( ) )
54+ }
4055 }
4156
4257 // ignore labels that are not defined in rolesData
43- if ( ! rolesData [ label ] ) {
58+ if ( ! dataLabel ) {
4459 return
4560 }
4661
62+ if ( dataExtras . length > 0 ) {
63+ dataVersion = dataExtras . shift ( )
64+ }
65+
66+ if ( dataExtras . length > 0 ) {
67+ dataProduct = camelCased ( dataExtras . join ( ' ' ) )
68+ }
69+
4770 var labelDetails = {
48- class : label ,
49- role : label ,
50- text : rolesData [ label ] . displayText || '' ,
71+ class : dataLabel ,
72+ role : dataLabel ,
73+ text : rolesData [ dataLabel ] . displayText || '' ,
74+ joinText : dataVersion ? rolesData [ dataLabel ] . joinText || 'in' : '' ,
5175 data : {
52- labelCategory : rolesData [ label ] . labelCategory || '' ,
53- product : rolesData [ label ] . product || '' ,
54- function : rolesData [ label ] . function || '' ,
76+ product : dataVersion ? dataProduct || rolesData [ dataLabel ] . product || contentDataset . product || '' : '' ,
77+ version : dataVersion || '' ,
78+ function : rolesData [ dataLabel ] . function || '' ,
79+ event : rolesData [ dataLabel ] . labelCategory === 'version' ? dataLabel : '' ,
5580 } ,
5681 }
5782
58- // get version number for version labels
59- if ( ( rolesData [ label ] . labelCategory === 'version' || rolesData [ label ] . versionText ) && labelParts [ 1 ] ) {
60- labelDetails . data . version = labelParts . pop ( )
61- const joinText = rolesData [ label ] . versionText ? rolesData [ label ] . versionText : 'in'
62- labelDetails . text = [ labelDetails . text , joinText , labelDetails . data . version ] . join ( ' ' )
83+ // update label text for versioned labels
84+ if ( ( rolesData [ dataLabel ] . labelCategory === 'version' || ( rolesData [ dataLabel ] . joinText && dataVersion ) ) ) {
85+ labelDetails . text = [ labelDetails . text , labelDetails . joinText , labelDetails . data . product , labelDetails . data . version ] . join ( ' ' )
6386 }
6487
6588 return labelDetails
@@ -104,9 +127,9 @@ document.addEventListener('DOMContentLoaded', function () {
104127 const labelSpan = createElement ( 'span' , `label content-label label--${ labelDetails . class } ` )
105128
106129 // add dataset to the label
107- if ( labelDetails . data . version ) labelSpan . dataset . version = labelDetails . data . version
108- if ( labelDetails . data . product !== '' ) labelSpan . dataset . product = labelDetails . data . product
109- if ( labelDetails . data . function !== '' ) labelSpan . dataset . function = labelDetails . data . function
130+ for ( var d in labelDetails . data ) {
131+ if ( labelDetails . data [ d ] !== '' ) labelSpan . dataset [ d ] = labelDetails . data [ d ]
132+ }
110133
111134 labelSpan . appendChild ( document . createTextNode ( labelDetails . text ) )
112135
@@ -125,8 +148,10 @@ document.addEventListener('DOMContentLoaded', function () {
125148 label . classList . add ( 'header-label' )
126149 }
127150 labelsDiv . append ( label )
128- const contentLabel = Array . from ( label . classList ) . find ( ( c ) => c . startsWith ( 'label--' ) ) . replace ( 'label--' , '' )
129- roleDiv . dataset [ camelCased ( contentLabel ) ] = contentLabel
151+
152+ for ( var d in label . dataset ) {
153+ roleDiv . dataset [ d ] = label . dataset [ d ]
154+ }
130155 }
131156
132157 if ( roleDiv . nodeName === 'H1' || headings . includes ( roleDiv . firstElementChild . nodeName ) ) {
0 commit comments