42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
import { loadContent, loadImageConfig } from "./core/data.js";
|
|
import { detectLanguage, setupLanguageDropdown } from "./ui/language.js";
|
|
import { setupThemeToggle } from "./ui/theme.js";
|
|
import { createNavbar, setupMobileNavbar, hideMobileNavbar } from "./ui/navbar.js";
|
|
import { setupScrollRestoration, restoreScroll, setupScrollSpy } from "./ui/scroll.js";
|
|
import { renderSidebarTop } from "./sections/sidebar.js";
|
|
import { renderIntroduction } from "./sections/introduction.js";
|
|
import { renderWork } from "./sections/work.js";
|
|
import { renderProjects } from "./sections/projects.js";
|
|
|
|
const lang = detectLanguage();
|
|
|
|
// Each control exists twice: sidebar (desktop) and mobile bar.
|
|
setupThemeToggle("themeToggle", ["themeToggle2"]);
|
|
setupThemeToggle("themeToggle2", ["themeToggle"]);
|
|
setupLanguageDropdown(lang, "lang-button", "lang-menu", "lang-dropdown");
|
|
setupLanguageDropdown(lang, "lang-button2", "lang-menu2", "lang-dropdown2");
|
|
|
|
setupScrollRestoration();
|
|
|
|
async function init() {
|
|
const data = await loadContent(lang);
|
|
const imageConfig = await loadImageConfig();
|
|
|
|
document.getElementById("website_title").textContent = data.title_website;
|
|
|
|
setupMobileNavbar();
|
|
const navbar = createNavbar();
|
|
const container = document.getElementById("projects-section");
|
|
|
|
renderSidebarTop(data);
|
|
renderIntroduction(data, navbar);
|
|
renderWork(container, navbar, data);
|
|
renderProjects(container, navbar, data, imageConfig);
|
|
|
|
restoreScroll();
|
|
setupScrollSpy();
|
|
hideMobileNavbar();
|
|
}
|
|
|
|
init();
|