@@ -12,13 +12,33 @@ export const themeInitScript = `(function() {
1212
1313/** Main page scripts */
1414export const mainScript = `
15+ const HLJS_CDN = 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build';
1516const HLJS_THEMES = {
1617 dark: 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/styles/github-dark.min.css',
1718 light: 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/styles/github.min.css'
1819};
1920
21+ function loadScript(src) {
22+ return new Promise((resolve, reject) => {
23+ const script = document.createElement('script');
24+ script.src = src;
25+ script.async = true;
26+ script.onload = resolve;
27+ script.onerror = reject;
28+ document.head.appendChild(script);
29+ });
30+ }
31+
32+ async function ensureHljs() {
33+ if (window.hljs) return;
34+ await loadScript(\`\${HLJS_CDN}/highlight.min.js\`);
35+ await loadScript(\`\${HLJS_CDN}/languages/typescript.min.js\`);
36+ }
37+
2038function updateHljsTheme(theme) {
21- document.getElementById('hljs-theme').href = HLJS_THEMES[theme];
39+ const themeLink = document.getElementById('hljs-theme');
40+ if (!themeLink) return;
41+ themeLink.href = HLJS_THEMES[theme];
2242}
2343
2444function toggleTheme() {
@@ -57,9 +77,11 @@ function initCarousel() {
5777 tabs[index].classList.add('active');
5878 slides.forEach(s => s.classList.remove('active'));
5979 slides[index].classList.add('active');
60- slides[index].querySelectorAll('pre code:not([data-highlighted])').forEach(block => {
61- hljs.highlightElement(block);
62- });
80+ if (window.hljs) {
81+ slides[index].querySelectorAll('pre code:not([data-highlighted])').forEach(block => {
82+ hljs.highlightElement(block);
83+ });
84+ }
6385 }
6486
6587 function getCurrentIndex() {
@@ -152,12 +174,19 @@ function initSignatureScrollFade() {
152174 });
153175}
154176
155- document.addEventListener('DOMContentLoaded', () => {
156- hljs.highlightAll();
177+ document.addEventListener('DOMContentLoaded', async () => {
157178 updateHljsTheme(document.documentElement.getAttribute('data-theme') || 'dark');
158179 initCarousel();
159180 initScrollableNavFade();
160181 initCodeCopyButtons();
161182 initSignatureScrollFade();
183+ try {
184+ await ensureHljs();
185+ if (window.hljs) {
186+ hljs.highlightAll();
187+ }
188+ } catch (err) {
189+ console.warn('Failed to load highlight.js', err);
190+ }
162191});
163192` ;
0 commit comments