svelte-markdown-pages
Version:
Build and render markdown-based content with distributed navigation for Svelte projects
1 lines • 7.93 kB
Source Map (JSON)
{"version":3,"sources":["../../src/renderer/navigation.ts"],"names":[],"mappings":"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","file":"navigation.cjs","sourcesContent":["import { NavigationTree as NavigationTreeType, NavigationItem } from '../types.js';\n\nexport class NavigationTree {\n private _items: NavigationItem[];\n private _flatItems: NavigationItem[] = [];\n private _pathMap: Map<string, NavigationItem> = new Map();\n\n constructor(data: NavigationTreeType) {\n this._items = data.items;\n this._buildIndexes();\n }\n\n get items(): NavigationItem[] {\n return this._items;\n }\n\n get flatItems(): NavigationItem[] {\n return this._flatItems;\n }\n\n findItemByPath(path: string): NavigationItem | undefined {\n return this._pathMap.get(path);\n }\n\n findItemByName(name: string): NavigationItem | undefined {\n return this._findItemByNameRecursive(this._items, name);\n }\n\n getBreadcrumbs(path: string): NavigationItem[] {\n const item = this.findItemByPath(path);\n if (!item) {\n return [];\n }\n\n const breadcrumbs: NavigationItem[] = [];\n let current: NavigationItem | undefined = item;\n\n while (current) {\n breadcrumbs.unshift(current);\n current = current.parent;\n }\n\n return breadcrumbs;\n }\n\n getSiblings(path: string): NavigationItem[] {\n const item = this.findItemByPath(path);\n if (!item || !item.parent) {\n // If no parent, return all root items\n return this._items;\n }\n\n return item.parent.items || [];\n }\n\n getNextSibling(path: string): NavigationItem | undefined {\n const siblings = this.getSiblings(path);\n const currentIndex = siblings.findIndex(item => item.path === path);\n \n if (currentIndex === -1 || currentIndex === siblings.length - 1) {\n return undefined;\n }\n\n return siblings[currentIndex + 1];\n }\n\n getPreviousSibling(path: string): NavigationItem | undefined {\n const siblings = this.getSiblings(path);\n const currentIndex = siblings.findIndex(item => item.path === path);\n \n if (currentIndex <= 0) {\n return undefined;\n }\n\n return siblings[currentIndex - 1];\n }\n\n getChildren(path: string): NavigationItem[] {\n // First try to find by name (for sections)\n let item = this.findItemByName(path);\n \n // If not found by name, try to find by path\n if (!item) {\n item = this.findItemByPath(path);\n }\n \n // If still not found, try to find nested items by path\n if (!item && path.includes('/')) {\n const pathParts = path.split('/');\n const sectionName = pathParts[pathParts.length - 1];\n if (sectionName) {\n item = this.findItemByName(sectionName);\n }\n }\n \n return item?.items || [];\n }\n\n isExpanded(path: string): boolean {\n const item = this.findItemByName(path) || this.findItemByPath(path);\n return item ? !item.collapsed : false;\n }\n\n toggleExpanded(path: string): void {\n const item = this.findItemByName(path) || this.findItemByPath(path);\n if (item) {\n item.collapsed = !item.collapsed;\n }\n }\n\n private _buildIndexes(): void {\n this._flatItems = [];\n this._pathMap.clear();\n this._buildIndexesRecursive(this._items, undefined);\n }\n\n private _buildIndexesRecursive(\n items: NavigationItem[],\n parent: NavigationItem | undefined\n ): void {\n for (const item of items) {\n // Set parent reference\n item.parent = parent || undefined;\n\n // Add to flat list\n this._flatItems.push(item);\n\n // Add to path map if it's a page\n if (item.path) {\n this._pathMap.set(item.path, item);\n }\n\n // Process children\n if (item.items) {\n this._buildIndexesRecursive(item.items, item);\n }\n }\n }\n\n private _findItemByNameRecursive(\n items: NavigationItem[],\n name: string\n ): NavigationItem | undefined {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.items) {\n const found = this._findItemByNameRecursive(item.items, name);\n if (found) {\n return found;\n }\n }\n }\n\n return undefined;\n }\n}\n\nexport function createNavigationTree(data: NavigationTreeType): NavigationTree {\n return new NavigationTree(data);\n}"]}