113 lines
2.7 KiB
JavaScript
113 lines
2.7 KiB
JavaScript
import { createRouter, createWebHistory } from 'vue-router';
|
|
import { setHeaderTitle, setHeaderDescription, clearHeaderDescription } from '@/HeaderReference';
|
|
|
|
const Home = () => import('@/views/HomeView.vue');
|
|
const About = () => import('@/views/AboutView.vue');
|
|
const Projects = () => import('@/views/ProjectsView.vue');
|
|
const Project = () => import('@/views/ProjectView.vue');
|
|
const Contact = () => import('@/views/ContactView.vue');
|
|
const NotFound = () => import('@/views/NotFoundView.vue');
|
|
|
|
const mainTitle = 'kamilcraft.com';
|
|
|
|
const routes = [
|
|
{
|
|
path: '/',
|
|
name: 'Home',
|
|
meta: {
|
|
title: 'Dzień dobry! 😊',
|
|
description: [
|
|
'Chciałbym Państwa powitać na mojej stronie!',
|
|
'Przedstawiam tutaj część swojego życia związaną z programowaniem i projektowaniem aplikacji internetowych.',
|
|
],
|
|
},
|
|
component: Home,
|
|
},
|
|
{
|
|
path: '/projects',
|
|
name: 'Projects',
|
|
meta: {
|
|
title: 'Moje projekty',
|
|
description: [
|
|
'Witam Państwa na podstronie z moimi projektami!',
|
|
],
|
|
},
|
|
component: Projects,
|
|
},
|
|
{
|
|
path: '/projects/:id',
|
|
name: 'Project',
|
|
meta: {
|
|
title: 'Projekt',
|
|
},
|
|
component: Project,
|
|
},
|
|
{
|
|
path: '/about',
|
|
name: 'About',
|
|
meta: {
|
|
title: 'O mnie',
|
|
description: [
|
|
'Jestem młodym i ambitnym inżynierem oprogramowania. Specjalizuję się w tworzeniu frontendów i backendów.',
|
|
],
|
|
},
|
|
component: About,
|
|
},
|
|
{
|
|
path: '/contact',
|
|
name: 'Kontakt',
|
|
meta: {
|
|
title: 'Kontakt',
|
|
description: [
|
|
'Chcesz o coś zapytać? Chciałbyś współpracować? Napisz!',
|
|
],
|
|
},
|
|
component: Contact,
|
|
},
|
|
{
|
|
path: '/:pathMatch(.*)*',
|
|
name: '404',
|
|
meta: {
|
|
title: 'Błąd 404',
|
|
},
|
|
component: NotFound,
|
|
}
|
|
]
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory('/'),
|
|
routes,
|
|
scrollBehavior(to, from, savedPosition) {
|
|
if (savedPosition) {
|
|
return savedPosition;
|
|
} else if (to.hash) {
|
|
return new Promise(resolve => {
|
|
setTimeout(() => {
|
|
resolve({
|
|
selector: to.hash
|
|
}, 1000);
|
|
});
|
|
});
|
|
} else {
|
|
return { left: 0, top: 0 };
|
|
}
|
|
}
|
|
});
|
|
|
|
const title = ' :: ' + mainTitle;
|
|
router.beforeEach((to, form, next) => {
|
|
const documentTitle = to.meta.title + title || mainTitle;
|
|
document.title = documentTitle === to.meta.title ? title : documentTitle;
|
|
if (to.meta.title) {
|
|
setHeaderTitle(to.meta.title);
|
|
}
|
|
if (to.meta.description && to.meta.description !== []) {
|
|
setHeaderDescription(to.meta.description);
|
|
} else {
|
|
clearHeaderDescription();
|
|
}
|
|
next();
|
|
});
|
|
|
|
export default router;
|