@@ -72,7 +72,13 @@ export function createMarkdown(options: ResolvedOptions) {
72
72
options . markdownItSetup ( markdown )
73
73
74
74
return ( id : string , raw : string ) : TransformResult => {
75
- const { wrapperClasses, wrapperComponent, transforms, headEnabled, frontmatterPreprocess } = options
75
+ const {
76
+ wrapperClasses,
77
+ wrapperComponent,
78
+ transforms,
79
+ headEnabled,
80
+ frontmatterPreprocess,
81
+ } = options
76
82
77
83
raw = raw . trimStart ( )
78
84
@@ -83,12 +89,32 @@ export function createMarkdown(options: ResolvedOptions) {
83
89
let html = markdown . render ( raw , env )
84
90
const { excerpt = '' , frontmatter : data = null } = env
85
91
86
- if ( wrapperClasses )
87
- html = `<div class="${ wrapperClasses } ">${ html } </div>`
92
+ const wrapperClassesResolved = toArray (
93
+ typeof wrapperClasses === 'function'
94
+ ? wrapperClasses ( id , raw )
95
+ : wrapperClasses ,
96
+ )
97
+ . filter ( Boolean )
98
+ . join ( ' ' )
99
+
100
+ if ( wrapperClassesResolved )
101
+ html = `<div class="${ wrapperClassesResolved } ">${ html } </div>`
88
102
else
89
103
html = `<div>${ html } </div>`
90
- if ( wrapperComponent )
91
- html = `<${ wrapperComponent } ${ options . frontmatter ? ' :frontmatter="frontmatter"' : '' } ${ options . excerpt ? ' :excerpt="excerpt"' : '' } >${ html } </${ wrapperComponent } >`
104
+
105
+ const wrapperComponentName = typeof wrapperComponent === 'function'
106
+ ? wrapperComponent ( id , raw )
107
+ : wrapperComponent
108
+
109
+ if ( wrapperComponentName ) {
110
+ const attrs = [
111
+ options . frontmatter && ':frontmatter="frontmatter"' ,
112
+ options . excerpt && ':excerpt="excerpt"' ,
113
+ wrapperClassesResolved && `class="${ wrapperClassesResolved } "` ,
114
+ ] . filter ( Boolean ) . join ( ' ' )
115
+ html = `<${ wrapperComponentName } ${ attrs } >${ html } </${ wrapperComponent } >`
116
+ }
117
+
92
118
if ( transforms . after )
93
119
html = transforms . after ( html , id )
94
120
0 commit comments