const iconMappings = {
about: '',
bookmark: '',
bookPage: '',
compassOutline: '',
dataPrivacy: '',
dice: '',
dotsHorizontal: '',
downloadOutline: '',
favourite: '',
feed: '',
history: '',
local: '',
paletteOutline: '',
sources: '',
services: '',
threeDots: '',
web: ''
}
interface Navigation {
name: string
icon?: string
dependsOn?: string
}
const navigationMappings: Record = {
// Main menus
"main_three_dots": { name: "Three dots", icon: iconMappings.threeDots },
"main_history": { name: "History", icon: iconMappings.history },
"main_favourites": { name: "Favourites", icon: iconMappings.favourite },
"main_explore": { name: "Explore", icon: iconMappings.compassOutline },
"main_feed": { name: "Feed", icon: iconMappings.feed },
"main_settings": { name: "Settings", dependsOn: "main_three_dots" },
// Explore
"explore_local_storage" : { name: "Local storage", icon: iconMappings.local, dependsOn: "main_explore" },
"explore_bookmarks" : { name: "Bookmarks", icon: iconMappings.bookmark, dependsOn: "main_explore" },
"explore_random" : { name: "Random", icon: iconMappings.dice, dependsOn: "main_explore" },
"explore_downloads" : { name: "Downloads", icon: iconMappings.downloadOutline, dependsOn: "main_explore" },
"explore_manage_sources" : { name: "Manage", dependsOn: "main_explore" },
// Details
"details_tracking" : { name: "Tracking", dependsOn: "main_three_dots" },
// Favourites
"favourites_three_dots": { name: "Three dots", icon: iconMappings.threeDots, dependsOn: "main_favourites" },
"favourites_manage_categories" : { name: "Favourite categories", dependsOn: "favourites_three_dots" },
// Settings submenu
"appearance": { name: "Appearance", icon: iconMappings.paletteOutline, dependsOn: "main_settings" },
"sources": { name: "Manga sources", icon: iconMappings.sources, dependsOn: "main_settings" },
"reader": { name: "Reader settings", icon: iconMappings.bookPage, dependsOn: "main_settings" },
"network": { name: "Network", icon: iconMappings.web, dependsOn: "main_settings" },
"data": { name: "Data and privacy", icon: iconMappings.dataPrivacy, dependsOn: "main_settings" },
"downloads": { name: "Downloads", icon: iconMappings.downloadOutline, dependsOn: "main_settings" },
"checking": { name: "Check for new chapters", icon: iconMappings.feed, dependsOn: "main_settings" },
"services": { name: "Services", icon: iconMappings.services, dependsOn: "main_settings" },
"about": { name: "About", icon: iconMappings.about, dependsOn: "main_settings" },
// Sync
"sync_settings": { name: "Synchronization settings", dependsOn: "services" },
"server_address": { name: "Server address", dependsOn: "sync_settings" },
// Backups
"periodic_backups": { name: "Periodic backups", dependsOn: "data" }
}
function generateNavigationHtml(navKey: string) {
const navData = navigationMappings[navKey]
if (!navData) {
return "Unsupported Navigation!"
}
const { name, icon, dependsOn } = navData
const iconHtml = icon ?? ""
let html = `${iconHtml}${name}`
if (dependsOn) {
html = `${generateNavigationHtml(dependsOn)} ${html}`
}
return html
}
const shortcodes = {
nav: {
render({ to }) {
return generateNavigationHtml(to)
},
},
}
export default shortcodes