Files
Basalt2/docs/.vitepress/theme/index.js
Robert Jelic 9c7186011b SSR fixes
2025-09-14 11:41:26 +02:00

50 lines
1.6 KiB
JavaScript

import CopyButton from 'vitepress-copy-helper';
import 'vitepress-copy-helper/style.css'
import DefaultTheme from 'vitepress/theme'
import './styles.css'
/** @type {import('vitepress').Theme} */
export default {
extends: DefaultTheme,
enhanceApp({ app, router, siteData }) {
app.component('C', CopyButton)
if (typeof window !== 'undefined') {
import('./components/BasaltDemo.vue').then((module) => {
app.component('BasaltDemo', module.default)
})
import('./components/BasaltDemoWithCode.vue').then((module) => {
app.component('BasaltDemoWithCode', module.default)
})
}
},
setup() {
if (typeof window !== 'undefined') {
window.runCodeBlock = function(button) {
const container = button.closest('.code-block-with-run')
const codeContent = container.querySelector('.code-content')
const dataCode = codeContent.getAttribute('data-code')
const code = atob(dataCode)
const languageBadge = container.querySelector('.language-badge')
const language = languageBadge && languageBadge.textContent ? languageBadge.textContent : 'lua'
if (!window.runCodeInEmulator) {
import('./emulator.js').then(({ initEmulator }) => {
initEmulator()
setTimeout(() => window.runCodeBlock(button), 100)
})
} else {
window.runCodeInEmulator(code, `Code Demo (${language})`)
}
}
import('vue').then(({ onMounted }) => {
onMounted(() => {
import('./emulator.js').then(({ initEmulator }) => {
initEmulator()
})
})
})
}
}
}