@@ -47,7 +47,7 @@ import { Format, FormatExtras } from "../../../config/types.ts";
4747import { kPageTitle , kTitle , kTitlePrefix } from "../../../config/constants.ts" ;
4848import { md5HashAsync } from "../../../core/hash.ts" ;
4949export { type NavigationFooter } from "../../types.ts" ;
50- import { normalizeLogoSpec } from "../../../core/brand/brand.ts" ;
50+ import { resolveLogo } from "../../../core/brand/brand.ts" ;
5151
5252export interface Navigation {
5353 navbar ?: Navbar ;
@@ -127,17 +127,21 @@ export async function websiteNavigationConfig(project: ProjectContext) {
127127 } else if ( typeof navbar !== "object" ) {
128128 navbar = undefined ;
129129 }
130- if ( navbar && navbar . logo ) {
131- let logo = navbar . logo ;
130+
131+ // note no document-level customization of brand logo #11309
132+ const projectBrand = await project . resolveBrand ( ) ;
133+ if ( navbar ) {
134+ let navLogo = navbar . logo ;
132135 if ( navbar [ kLogoAlt ] ) {
133- if ( typeof logo === "string" ) {
134- logo = { path : logo , alt : navbar [ kLogoAlt ] } ;
136+ if ( typeof navLogo === "string" ) {
137+ navLogo = { path : navLogo , alt : navbar [ kLogoAlt ] } ;
135138 }
136139 }
137-
138- // note no document-level customization of brand logo #11309
139- const brand = await project . resolveBrand ( ) ;
140- navbar . logo = await normalizeLogoSpec ( brand , logo ) ;
140+ navbar . logo = resolveLogo ( projectBrand , navLogo , [
141+ "small" ,
142+ "medium" ,
143+ "large" ,
144+ ] ) ;
141145 }
142146 // read sidebar
143147 const sidebar = websiteConfig ( kSiteSidebar , project . config ) ;
@@ -162,37 +166,39 @@ export async function websiteNavigationConfig(project: ProjectContext) {
162166 sidebars [ 0 ] . tools = [ ] ;
163167 }
164168
165- if ( sidebars [ 0 ] . logo ) {
166- let logo = sidebars [ 0 ] . logo ;
169+ let sideLogo = sidebars [ 0 ] . logo ;
170+ if ( sideLogo ) {
167171 if ( sidebars [ 0 ] [ kLogoAlt ] ) {
168172 const alt = sidebars [ 0 ] [ kLogoAlt ] ;
169- if ( typeof logo === "string" ) {
170- logo = { path : logo , alt } ;
173+ if ( typeof sideLogo === "string" ) {
174+ sideLogo = { path : sideLogo , alt } ;
171175 }
172176 // possible but absurd
173- // else if ("path" in logo ) {
174- // logo = { ...logo , alt };
177+ // else if ("path" in sideLogo ) {
178+ // sideLogo = { ...sideLogo , alt };
175179 // } else {
176- // logo = {
177- // light: !logo .light ? undefined : typeof logo .light === "string"
180+ // sideLogo = {
181+ // light: !sideLogo .light ? undefined : typeof sideLogo .light === "string"
178182 // ? {
179- // path: logo .light,
183+ // path: sideLogo .light,
180184 // alt,
181185 // }
182- // : { ...logo .light, alt },
183- // dark: !logo .dark ? undefined : typeof logo .dark === "string"
186+ // : { ...sideLogo .light, alt },
187+ // dark: !sideLogo .dark ? undefined : typeof sideLogo .dark === "string"
184188 // ? {
185- // path: logo .dark,
189+ // path: sideLogo .dark,
186190 // alt,
187191 // }
188- // : { ...logo .dark, alt },
192+ // : { ...sideLogo .dark, alt },
189193 // };
190194 // }
191195 }
192- // note no document-level customization of brand logo #11309
193- const brand = await project . resolveBrand ( ) ;
194- sidebars [ 0 ] . logo = await normalizeLogoSpec ( brand , logo ) ;
195196 }
197+ sidebars [ 0 ] . logo = resolveLogo ( projectBrand , sideLogo , [
198+ "medium" ,
199+ "small" ,
200+ "large" ,
201+ ] ) ;
196202
197203 // convert contents: auto into items
198204 for ( const sb of sidebars ) {
@@ -210,47 +216,6 @@ export async function websiteNavigationConfig(project: ProjectContext) {
210216 }
211217 }
212218
213- const projectBrand = await project . resolveBrand ( ) ;
214- if (
215- projectBrand ?. light ?. processedData . logo && sidebars ?. [ 0 ]
216- ) {
217- if ( sidebars [ 0 ] . logo === undefined ) {
218- const light = projectBrand . light . processedData . logo . medium ??
219- projectBrand . light . processedData . logo . small ??
220- projectBrand . light . processedData . logo . large ;
221- const dark = projectBrand . dark && (
222- projectBrand . dark . processedData . logo . medium ??
223- projectBrand . dark . processedData . logo . small ??
224- projectBrand . dark . processedData . logo . large
225- ) ;
226- if ( light || dark ) {
227- sidebars [ 0 ] . logo = {
228- light,
229- dark,
230- } ;
231- }
232- }
233- }
234-
235- if (
236- projectBrand ?. light ?. processedData . logo && navbar
237- ) {
238- if ( navbar . logo === undefined ) {
239- const light = projectBrand . light . processedData . logo . small ??
240- projectBrand . light . processedData . logo . medium ??
241- projectBrand . light . processedData . logo . large ;
242- const dark = projectBrand . dark ?. processedData . logo . small ??
243- projectBrand . dark ?. processedData . logo . medium ??
244- projectBrand . dark ?. processedData . logo . large ;
245- if ( light || dark ) {
246- navbar . logo = {
247- light,
248- dark,
249- } ;
250- }
251- }
252- }
253-
254219 // if there is more than one sidebar then propagate options from the
255220 // first sidebar to the others
256221 if ( sidebars && sidebars . length > 1 ) {
0 commit comments