summaryrefslogtreecommitdiff
path: root/src/router.ts
blob: c58c25808593ab51bb0372d119e015b42158403d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import Vue from "vue"
import Router from "vue-router"
import Home from "./views/Home.vue"
import NotFound from "./views/NotFound.vue"
import redirects from "./redirects"

Vue.use(Router)

const router = new Router({
	mode: "history",
	base: process.env.BASE_URL,
	routes: [
		{
			path: "/",
			name: "home",
			component: Home,
		},
		{
			path: "/news",
			name: "news",
			component: () => import(/* webpackChunkName: "news" */ "./views/News.vue"),
		},
		{
			path: "/about",
			name: "about",
			component: () => import(/* webpackChunkName: "about" */ "./views/About.vue"),
		},
		{
			path: "/support",
			name: "support",
			component: () => import(/* webpackChunkName: "support" */ "./views/Support.vue"),
		},
		{
			path: "/recover/password",
			alias: ["/recover/username"],
			name: "account recovery",
			component: () => import(/* webpackChunkName: "recovery" */ "./views/AccountRecovery.vue"),
		},
		// BUG: normally we should be able to put this route under alias but aliases cannot have props:
		{
			path: "/recover/password/:emailToken",
			name: "password reset",
			component: () => import(/* webpackChunkName: "recovery" */ "./views/AccountRecovery.vue"),
		},
		{
			path: "/register",
			name: "registration",
			component: () => import(/* webpackChunkName: "registration" */ "./views/Registration.vue"),
		},
		{
			path: "/404",
			alias: "*",
			name: "not found",
			component: NotFound,
		},
		...redirects,
	]
});

router.afterEach((to, from) => {
	const mainTitle = document.querySelector("#app > .content > h1");

	// scroll to the title if we're below it
	if (mainTitle) {
		mainTitle.scrollIntoView({
			block: "nearest", // FIXME: weird behaviour in firefox!
			inline: "nearest",
			behavior: "smooth",
		});
	}

	if (to.name && to.path !== "/") {
		document.title = `${process.env.VUE_APP_TITLE} - ${to.name[0].toUpperCase() + to.name.slice(1)}`;
	} else {
		document.title = process.env.VUE_APP_TITLE;
	}
})

export default router;