Skip to content

Commit 196b519

Browse files
authored
Merge pull request #97 from cloudlinux/bogdan-TCR-566-stage2
Update client.ts
2 parents a9ab571 + b1511d9 commit 196b519

File tree

1 file changed

+66
-14
lines changed

1 file changed

+66
-14
lines changed

docs/.vuepress/client.ts

+66-14
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,84 @@
1-
import {provide} from "vue";
2-
import {defineClientConfig} from "@vuepress/client";
1+
import { provide, onMounted, onBeforeUnmount, nextTick } from "vue";
2+
import { defineClientConfig } from "@vuepress/client";
33
import mitt from 'mitt';
4-
54
import Layout from "./theme/layouts/Layout.vue";
65
import HomeLayout from "./theme/layouts/HomeLayout.vue";
76
import NotFound from "./theme/layouts/NotFound.vue";
8-
97
import bottomLinks from "./config-client/bottomLinks";
108
import navbarLinks from "./config-client/navbarLinks";
119
import documents from "./config-client/documents";
1210
import sidebar from "./config-client/sidebar";
1311
import social from "./config-client/social";
1412
import Chat from "./components/Chat.vue";
1513

14+
declare const __VUEPRESS_DEV__: boolean;
15+
1616
export default defineClientConfig({
17-
rootComponents: [
17+
rootComponents: [
1818
Chat,
1919
],
20-
async enhance({ app }) {
20+
async enhance({ app, router }) {
21+
// Existing event bus setup
2122
app.config.globalProperties.$eventBus = mitt();
23+
24+
// Add anchor navigation handling
25+
if (!__VUEPRESS_DEV__) {
26+
const handleAnchorClick = (event: MouseEvent) => {
27+
const target = event.target as HTMLElement;
28+
const anchor = target.closest('a');
29+
30+
if (anchor?.hash && anchor.origin === window.location.origin) {
31+
event.preventDefault();
32+
33+
const hash = anchor.hash;
34+
nextTick(() => {
35+
const element = document.querySelector(hash);
36+
if (element) {
37+
// Add offset for fixed header if needed
38+
const headerOffset = 80; // Adjust based on your header height
39+
const elementPosition = element.getBoundingClientRect().top;
40+
const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
41+
42+
window.scrollTo({
43+
top: offsetPosition,
44+
behavior: 'smooth'
45+
});
46+
47+
// Update URL without full page reload
48+
window.history.pushState(null, '', hash);
49+
}
50+
});
51+
}
52+
};
53+
54+
// Handle initial hash on page load
55+
router.afterEach(() => {
56+
if (window.location.hash) {
57+
nextTick(() => {
58+
const element = document.querySelector(window.location.hash);
59+
if (element) {
60+
const headerOffset = 80; // Adjust based on your header height
61+
const elementPosition = element.getBoundingClientRect().top;
62+
const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
63+
64+
window.scrollTo({
65+
top: offsetPosition,
66+
behavior: 'smooth'
67+
});
68+
}
69+
});
70+
}
71+
});
72+
73+
// Add event listeners
74+
onMounted(() => {
75+
document.addEventListener('click', handleAnchorClick);
76+
});
77+
78+
onBeforeUnmount(() => {
79+
document.removeEventListener('click', handleAnchorClick);
80+
});
81+
}
2282
},
2383
layouts: {
2484
Layout,
@@ -35,10 +95,8 @@ export default defineClientConfig({
3595
githubMainDir: "docs",
3696
githubRepository: "cloudlinux/imunify360-documentation",
3797
MOBILE_BREAKPOINT: 767,
38-
3998
//docs cards
4099
documents,
41-
42100
// icons
43101
arrowDownIcon: "arrows/arrow-down.svg",
44102
githubEditIcon: 'global/pen.svg',
@@ -47,11 +105,9 @@ export default defineClientConfig({
47105
siteLogo: "global/logo.svg",
48106
searchSelectIcon: 'arrows/select-down.svg',
49107
headerSearchIcon: 'global/header-search.svg',
50-
51108
// Header
52109
headerSearch: "Imunify360 Product Documentation",
53110
headerSearchPlaceholder: "Search across all Imunify360 product documentation",
54-
55111
//locales
56112
locales: {
57113
bottomLinks,
@@ -61,22 +117,18 @@ export default defineClientConfig({
61117
stayInTouch: "Stay in touch",
62118
navbarLinks: navbarLinks,
63119
},
64-
65120
// Products
66121
productsList: ['Cloudlinux', 'Imunify', 'TuxCare'],
67122
productsTitle: 'Products',
68123
productsURLs: ['https://docs.cloudlinux.com', 'https://docs.imunify360.com', 'https://docs.tuxcare.com'],
69-
70124
//social links for footer
71125
social,
72-
73126
// Algolia
74127
algoliaOptions: {
75128
apiKey: "e6b9d79daf71aa98e2e2a51d4556f9d4",
76129
indexName: "imunify360-unified",
77130
appId: "0TCNL6CGX8",
78131
},
79-
80132
MAX_VISIBLE_RESULT: 12,
81133
MAX_VISIBLE_ROWS: 12,
82134
MAX_HITS_PER_PAGE: 12,

0 commit comments

Comments
 (0)