@@ -47,8 +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 { projectResolveBrand } from "../../project-shared.ts" ;
51- import { normalizeLogoSpec } from "../../../core/brand/brand.ts" ;
50+ import { resolveLogo } from "../../../core/brand/brand.ts" ;
5251
5352export interface Navigation {
5453 navbar ?: Navbar ;
@@ -128,17 +127,21 @@ export async function websiteNavigationConfig(project: ProjectContext) {
128127 } else if ( typeof navbar !== "object" ) {
129128 navbar = undefined ;
130129 }
131- if ( navbar && navbar . logo ) {
132- 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 ;
133135 if ( navbar [ kLogoAlt ] ) {
134- if ( typeof logo === "string" ) {
135- logo = { path : logo , alt : navbar [ kLogoAlt ] } ;
136+ if ( typeof navLogo === "string" ) {
137+ navLogo = { path : navLogo , alt : navbar [ kLogoAlt ] } ;
136138 }
137139 }
138-
139- // note no document-level customization of brand logo #11309
140- const brand = await projectResolveBrand ( project ) ;
141- navbar . logo = await normalizeLogoSpec ( brand , logo ) ;
140+ navbar . logo = resolveLogo ( projectBrand , navLogo , [
141+ "small" ,
142+ "medium" ,
143+ "large" ,
144+ ] ) ;
142145 }
143146 // read sidebar
144147 const sidebar = websiteConfig ( kSiteSidebar , project . config ) ;
@@ -163,37 +166,39 @@ export async function websiteNavigationConfig(project: ProjectContext) {
163166 sidebars [ 0 ] . tools = [ ] ;
164167 }
165168
166- if ( sidebars [ 0 ] . logo ) {
167- let logo = sidebars [ 0 ] . logo ;
169+ let sideLogo = sidebars [ 0 ] . logo ;
170+ if ( sideLogo ) {
168171 if ( sidebars [ 0 ] [ kLogoAlt ] ) {
169172 const alt = sidebars [ 0 ] [ kLogoAlt ] ;
170- if ( typeof logo === "string" ) {
171- logo = { path : logo , alt } ;
173+ if ( typeof sideLogo === "string" ) {
174+ sideLogo = { path : sideLogo , alt } ;
172175 }
173176 // possible but absurd
174- // else if ("path" in logo ) {
175- // logo = { ...logo , alt };
177+ // else if ("path" in sideLogo ) {
178+ // sideLogo = { ...sideLogo , alt };
176179 // } else {
177- // logo = {
178- // light: !logo .light ? undefined : typeof logo .light === "string"
180+ // sideLogo = {
181+ // light: !sideLogo .light ? undefined : typeof sideLogo .light === "string"
179182 // ? {
180- // path: logo .light,
183+ // path: sideLogo .light,
181184 // alt,
182185 // }
183- // : { ...logo .light, alt },
184- // dark: !logo .dark ? undefined : typeof logo .dark === "string"
186+ // : { ...sideLogo .light, alt },
187+ // dark: !sideLogo .dark ? undefined : typeof sideLogo .dark === "string"
185188 // ? {
186- // path: logo .dark,
189+ // path: sideLogo .dark,
187190 // alt,
188191 // }
189- // : { ...logo .dark, alt },
192+ // : { ...sideLogo .dark, alt },
190193 // };
191194 // }
192195 }
193- // note no document-level customization of brand logo #11309
194- const brand = await projectResolveBrand ( project ) ;
195- sidebars [ 0 ] . logo = await normalizeLogoSpec ( brand , logo ) ;
196196 }
197+ sidebars [ 0 ] . logo = resolveLogo ( projectBrand , sideLogo , [
198+ "medium" ,
199+ "small" ,
200+ "large" ,
201+ ] ) ;
197202
198203 // convert contents: auto into items
199204 for ( const sb of sidebars ) {
@@ -211,47 +216,6 @@ export async function websiteNavigationConfig(project: ProjectContext) {
211216 }
212217 }
213218
214- const projectBrand = await project . resolveBrand ( ) ;
215- if (
216- projectBrand ?. light ?. processedData . logo && sidebars ?. [ 0 ]
217- ) {
218- if ( sidebars [ 0 ] . logo === undefined ) {
219- const light = projectBrand . light . processedData . logo . medium ??
220- projectBrand . light . processedData . logo . small ??
221- projectBrand . light . processedData . logo . large ;
222- const dark = projectBrand . dark && (
223- projectBrand . dark . processedData . logo . medium ??
224- projectBrand . dark . processedData . logo . small ??
225- projectBrand . dark . processedData . logo . large
226- ) ;
227- if ( light || dark ) {
228- sidebars [ 0 ] . logo = {
229- light,
230- dark,
231- } ;
232- }
233- }
234- }
235-
236- if (
237- projectBrand ?. light ?. processedData . logo && navbar
238- ) {
239- if ( navbar . logo === undefined ) {
240- const light = projectBrand . light . processedData . logo . small ??
241- projectBrand . light . processedData . logo . medium ??
242- projectBrand . light . processedData . logo . large ;
243- const dark = projectBrand . dark ?. processedData . logo . small ??
244- projectBrand . dark ?. processedData . logo . medium ??
245- projectBrand . dark ?. processedData . logo . large ;
246- if ( light || dark ) {
247- navbar . logo = {
248- light,
249- dark,
250- } ;
251- }
252- }
253- }
254-
255219 // if there is more than one sidebar then propagate options from the
256220 // first sidebar to the others
257221 if ( sidebars && sidebars . length > 1 ) {
0 commit comments