@mieweb/wikigdrive
Version:
Google Drive to MarkDown synchronization
83 lines (73 loc) • 2.57 kB
text/typescript
import {Tooltip} from 'bootstrap';
import {createApp} from './app.ts';
import {addTelemetry} from './telemetry.ts';
const { app, router } = createApp();
addTelemetry(app);
app.mixin({
mounted() {
new Tooltip(document.body, {
selector: '[data-bs-toggle=tooltip]'
});
},
});
if (!import.meta.env.SSR) {
const appMountEl = document.getElementById('app');
if (appMountEl['__vue_app__'] && appMountEl['__vue_app__'].unmount) {
const vitePressApp = appMountEl['__vue_app__'];
const html = appMountEl.innerHTML;
vitePressApp.unmount();
appMountEl.innerHTML = html;
console.info('Unmounted vitepress app', vitePressApp);
}
}
router.isReady().then(async () => {
const vm = app.mount('#app', true);
await (vm as any).FileClientService.clearCache();
const driveIdParam = router.currentRoute?.value?.params?.driveId;
const driveId = Array.isArray(driveIdParam) ? driveIdParam[0] : driveIdParam;
if (driveId) {
await (vm as any).changeDrive(driveId);
}
router.beforeEach(async (to, from, next) => {
if (to.meta.ssg) {
try {
const response = await fetch(window.location.protocol + '//' + window.location.host + to.path);
const html = await response.text();
const parser = new DOMParser();
const r = parser.parseFromString(html, 'text/html');
const titleElem = r.querySelector('title');
if (titleElem) {
document.title = titleElem.innerText;
}
const mainContent = r.querySelector('.mainbar__content');
const elemContent = document.querySelector('.mainbar__content');
if (mainContent && elemContent) {
setTimeout(() => {
const emitter = (vm as any).emitter;
emitter.emit('html_lazy_content', mainContent.innerHTML);
}, 100);
}
next(true);
return;
} catch (err) {
console.error(err);
}
}
const toDriveId = Array.isArray(to.params?.driveId) ? to.params.driveId[0] : to.params.driveId;
const fromDriveId = Array.isArray(from.params?.driveId) ? from.params.driveId[0] : from.params.driveId;
if (toDriveId !== fromDriveId) {
await (vm as any).FileClientService.clearCache();
await (vm as any).changeDrive(toDriveId);
}
next();
});
router.afterEach(() => {
const elements = document.querySelectorAll('[data-bs-toggle=tooltip]');
elements.forEach(element => {
const tooltip = Tooltip.getInstance(element);
if (tooltip) {
tooltip.hide();
}
});
});
});