| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | import Vue from "vue";import VueRouter from "vue-router";import store from "./store";import App from "./App.vue";import io from "./io";const handleMetadata = attrs => {	document.title = `Musare | ${attrs.title}`;};Vue.component("metadata", {	watch: {		$attrs: {			handler: attrs => {				handleMetadata(attrs);			},			deep: true,			immediate: true		}	},	render() {		return null;	}});Vue.use(VueRouter);const router = new VueRouter({	mode: "history",	routes: [		{			path: "/",			component: () => import("./components/pages/Home.vue")		},		{			path: "*",			component: () => import("./components/404.vue")		},		{			path: "/404",			component: () => import("./components/404.vue")		},		{			path: "/terms",			component: () => import("./components/pages/Terms.vue")		},		{			path: "/privacy",			component: () => import("./components/pages/Privacy.vue")		},		{			path: "/team",			component: () => import("./components/pages/Team.vue")		},		{			path: "/news",			component: () => import("./components/pages/News.vue")		},		{			path: "/about",			component: () => import("./components/pages/About.vue")		},		{			name: "profile",			path: "/u/:username",			component: () => import("./components/User/Show.vue")		},		{			path: "/settings",			component: () => import("./components/User/Settings.vue"),			meta: {				loginRequired: true			}		},		{			path: "/reset_password",			component: () => import("./components/User/ResetPassword.vue")		},		{			path: "/login",			component: () => import("./components/Modals/Login.vue")		},		{			path: "/register",			component: () => import("./components/Modals/Register.vue")		},		{			path: "/admin",			component: () => import("./components/pages/Admin.vue"),			meta: {				adminRequired: true			}		},		{			path: "/admin/:page",			component: () => import("./components/pages/Admin.vue"),			meta: {				adminRequired: true			}		},		{			name: "station",			path: "/:id",			component: () => import("./components/Station/Station.vue")		}	]});lofig.folder = "../config/default.json";lofig.get("serverDomain", res => {	io.init(res);	io.getSocket(socket => {		socket.on("ready", (loggedIn, role, username, userId) => {			store.dispatch("user/auth/authData", {				loggedIn,				role,				username,				userId			});		});		socket.on("keep.event:banned", ban => {			store.dispatch("user/auth/banned", ban);		});		socket.on("event:user.username.changed", username => {			store.dispatch("user/auth/updateUsername", username);		});	});});router.beforeEach((to, from, next) => {	if (window.stationInterval) {		clearInterval(window.stationInterval);		window.stationInterval = 0;	}	if (window.socket) io.removeAllListeners();	io.clear();	if (to.meta.loginRequired || to.meta.adminRequired) {		const gotData = () => {			if (to.loginRequired && !store.state.user.auth.loggedIn)				next({ path: "/login" });			else if (to.adminRequired && store.state.user.auth.role !== "admin")				next({ path: "/" });			else next();		};		if (store.state.user.auth.gotData) gotData();		else {			const watcher = store.watch(				state => state.user.auth.gotData,				() => {					watcher();					gotData();				}			);		}	} else next();	if (to.name === "station") {		io.getSocket(socket => {			socket.emit("stations.findByName", to.params.id, res => {				if (res.status === "success") {					next();				}			});		});	}});// eslint-disable-next-line no-newnew Vue({	router,	store,	el: "#root",	render: wrapper => wrapper(App)});
 |