@@ -140,14 +140,24 @@ export function codeToolsPostprocessor(format: Format) {
140140 const codeTools = resolveCodeTools ( format , doc ) ;
141141 if ( codeTools . source || codeTools . toggle ) {
142142 const title = doc . querySelector ( "#title-block-header h1" ) ;
143- if ( title ) {
144- const header = ( title as Element ) . parentElement ;
143+ const header = title !== null
144+ ? ( title as Element ) . parentElement
145+ : doc . querySelector ( "main.content" ) ;
146+
147+ if ( header ) {
145148 const titleDiv = doc . createElement ( "div" ) ;
146149 titleDiv . classList . add ( "quarto-title-block" ) ;
147150 const layoutDiv = doc . createElement ( "div" ) ;
148151 titleDiv . appendChild ( layoutDiv ) ;
149- header ?. replaceChild ( titleDiv , title ) ;
150- layoutDiv . appendChild ( title ) ;
152+ if ( title ) {
153+ header ?. replaceChild ( titleDiv , title ) ;
154+ layoutDiv . appendChild ( title ) ;
155+ } else {
156+ // create an empty title
157+ const h1El = doc . createElement ( "h1" ) ;
158+ layoutDiv . appendChild ( h1El ) ;
159+ layoutDiv . classList . add ( "quarto-title-tools-only" ) ;
160+ }
151161 const button = doc . createElement ( "button" ) ;
152162 button . setAttribute ( "type" , "button" ) ;
153163 button . classList . add ( "btn" ) ;
@@ -159,7 +169,13 @@ export function codeToolsPostprocessor(format: Format) {
159169 button . appendChild ( doc . createTextNode ( " " + codeTools . caption ) ) ;
160170 }
161171 layoutDiv . appendChild ( button ) ;
162- header ! . appendChild ( titleDiv ) ;
172+
173+ if ( title ) {
174+ header ! . appendChild ( titleDiv ) ;
175+ } else {
176+ header ! . prepend ( titleDiv ) ;
177+ }
178+
163179 if ( codeTools . toggle ) {
164180 button . setAttribute ( "id" , kCodeToolsMenuButtonId ) ;
165181 button . classList . add ( "dropdown-toggle" ) ;
0 commit comments