import { createRouter, createWebHistory } from 'vue-router' import EditNote from "@/views/EditNote.vue"; import ViewNote from "@/views/ViewNote.vue"; import ViewMdNote from "@/views/ViewMdNote.vue"; import ErrorRoute from "@/views/ErrorRoute.vue"; import ErrorNote from "@/views/ErrorNote.vue"; import { getNoteMeta } from "@/api/note"; import { getStoreKey } from "@/api/lock"; import storage from "@/libs/storage"; var keyMeta = null; var noteMeta = null; var errorMeta = null; function getKeyMetaParam() { return keyMeta; } function getNoteMetaParam() { return noteMeta; } function getErrorMetaParam() { return errorMeta; } function getNoteView() { if (errorMeta) { return; } let path = location.pathname; let key = path.substring(1, path.length); let isMd = path.endsWith(".md"); if (isMd) { key = path.substring(1, path.length - 3); } keyMeta = storage.local.getObject(key + ".keyMeta"); if (keyMeta && keyMeta.key) { key = keyMeta.key; } let regKey = /^[abcdefhikmnopqstuvwxyz23456789]{16}$/; if (!regKey.test(key)) { errorMeta = 100002; return ErrorNote; } if (keyMeta && keyMeta.key && !isMd) { //firstEdit return EditNote; } //set noteMeta noteMeta = getNoteMeta(key); //server error if (!noteMeta) { errorMeta = 100006; return ErrorNote; } //invalidated key if (!noteMeta.key) { errorMeta = 100002; return ErrorNote; } //validated state if (1 == noteMeta.state) { if(isMd){ return ViewMdNote; }else{ return ViewNote; } } //deleted if (0 == noteMeta.state) { let storeKey = getStoreKey(key); storage.local.delete(storeKey); // user deleted if (noteMeta.ttl > 0) { errorMeta = 100003; return ErrorNote; } else {// timeout errorMeta = 100004; return ErrorNote; } } if (null == noteMeta.state) { let storeKey = getStoreKey(key); //if has storage , then edit if (storage.local.getText(storeKey)) { return EditNote; } else { //storage is empty let df = storage.session.getText(storeKey + "_delete") if (df) {//unsubmitted,user deleted. errorMeta = 100003; return ErrorNote; } else {//unsubmitted errorMeta = 100005; return ErrorNote; } } } // other exception errorMeta = 100001; return ErrorNote; } const routes = [ { path: "/error_:code([0-9]{6})", component: ErrorNote }, { path: "/:name([a-z0-9]{10,20})", name: "note", component: getNoteView(), meta: { keyMeta: getKeyMetaParam(), noteMeta: getNoteMetaParam(), errorMeta: getErrorMetaParam() }, }, { path: "/:name([a-z0-9]{10,20}).md", name: "md", component: getNoteView(), meta: { keyMeta: getKeyMetaParam(), noteMeta: getNoteMetaParam(), errorMeta: getErrorMetaParam() }, }, { path: "/:path(.*)", component: ErrorRoute } ]; const router = createRouter({ history: createWebHistory(process.env.VUE_APP_URL_BASE_PATH), linkExactActiveClass: "active", mode: "history", routes }) export default router;