@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
88 lines • 3.32 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Navigation = void 0;
exports.newNavigation = newNavigation;
const log_1 = require("../../../../pkg/log");
const menu_1 = require("../valueobject/menu");
// Create domain-specific logger for navigation operations
const log = (0, log_1.getDomainLogger)('site', { component: 'navigation' });
/**
* Navigation - TypeScript equivalent of Go's Navigation entity
* Handles navigation and taxonomy functionality with menu generation support
*/
class Navigation {
constructor(langSvc) {
this.taxonomiesBuilder = null;
this.taxonomiesCache = new Map(); // Track which languages have generated taxonomies
this.menuBuilder = null;
this.menuCache = new Map(); // Track which languages have generated menus
this.taxonomies = new Map();
this.menus = new Map();
// Initialize menus for each language
for (const lang of langSvc.languageKeys()) {
this.menus.set(lang, (0, menu_1.newEmptyMenus)());
this.menuCache.set(lang, false); // Mark as not generated
}
}
setMenuBuilder(menuBuilder) {
this.menuBuilder = menuBuilder;
}
setTaxonomiesBuilder(taxonomiesBuilder) {
this.taxonomiesBuilder = taxonomiesBuilder;
}
async generateMenusForLanguage(lang, langIndex) {
if (!this.menuBuilder) {
log.error('Menu builder not set, cannot generate menus');
return;
}
// Check if menus are already generated for this language
if (this.menuCache.get(lang) === true) {
return;
}
try {
const generatedMenus = await this.menuBuilder.buildMenusForLanguage(langIndex);
this.menus.set(lang, generatedMenus);
this.menuCache.set(lang, true); // Mark as generated
}
catch (error) {
log.error(`Failed to generate menus for language ${lang}: ${error}`);
}
}
async generateTaxonomiesForLanguage(lang, langIndex, site) {
if (!this.taxonomiesBuilder) {
log.error('Taxonomies builder not set, cannot generate taxonomies');
return;
}
// Check if taxonomies are already generated for this language
if (this.taxonomiesCache.get(lang) === true) {
return;
}
try {
const generatedTaxonomies = await this.taxonomiesBuilder.buildTaxonomiesForLanguage(langIndex, site);
this.taxonomies.set(lang, generatedTaxonomies);
this.taxonomiesCache.set(lang, true); // Mark as generated
}
catch (error) {
log.error(`Failed to generate taxonomies for language ${lang}: ${error}`);
}
}
getMenus(lang) {
let menus = this.menus.get(lang);
if (menus === undefined) {
menus = (0, menu_1.newEmptyMenus)(); // Return empty menus if not found
}
return menus;
}
getTaxonomies(lang) {
return this.taxonomies.get(lang);
}
}
exports.Navigation = Navigation;
/**
* Factory function to create new Navigation
* TypeScript equivalent of NewNavigation function from Go
*/
function newNavigation(langSvc) {
return new Navigation(langSvc);
}
//# sourceMappingURL=navigation.js.map