Skip to content

Commit f98596b

Browse files
committed
Fix versioned wiki directory page routing issues
1 parent d2ceda4 commit f98596b

File tree

5 files changed

+57
-49
lines changed

5 files changed

+57
-49
lines changed

apps/web/composables/wiki.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export const useWikiMetadata = () => {
99
watch(
1010
() => route.path,
1111
() => {
12-
const params = parseWikiRouteParams(route.params);
12+
const params = parseWikiRouteParams(route.path);
1313

1414
version.value = params.version;
1515
mod.value = params.mod;

apps/web/modules/redirects.ts

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,34 @@
1-
import { defineNuxtModule, extendRouteRules } from "nuxt/kit";
1+
import {
2+
createResolver,
3+
defineNuxtModule,
4+
extendPages,
5+
extendRouteRules
6+
} from "nuxt/kit";
7+
import { getWikiVersions } from "~/utils/wiki";
28

9+
// prettier-ignore
310
const redirects = {
411
"/mods": "/",
512

6-
"/docs/mysticalagriculture/crafttweaker/infusion-recipes":
7-
"/docs/mysticalagriculture/infusion-recipes",
8-
"/docs/mysticalagriculture/crafttweaker/reprocessor-recipes":
9-
"/docs/mysticalagriculture/reprocessor-recipes",
10-
"/docs/extendedcrafting/crafttweaker/combination-recipes":
11-
"/docs/extendedcrafting/combination-recipes",
12-
"/docs/extendedcrafting/crafttweaker/table-recipes":
13-
"/docs/extendedcrafting/table-recipes",
14-
"/docs/extendedcrafting/crafttweaker/compression-recipes":
15-
"/docs/extendedcrafting/compression-recipes",
16-
"/docs/extendedcrafting/crafttweaker/ender-crafting-recipes":
17-
"/docs/extendedcrafting/ender-crafting-recipes",
18-
"/docs/extendedcrafting/adding-singularities":
19-
"/docs/extendedcrafting/singularities",
20-
"/docs/extendedcrafting/removing-singularities":
21-
"/docs/extendedcrafting/singularities",
22-
"/docs/extendedcrafting/singularities-in-recipes":
23-
"/docs/extendedcrafting/singularities",
13+
"/docs/mysticalagriculture/crafttweaker/infusion-recipes": "/docs/mysticalagriculture/infusion-recipes",
14+
"/docs/mysticalagriculture/crafttweaker/reprocessor-recipes": "/docs/mysticalagriculture/reprocessor-recipes",
15+
"/docs/extendedcrafting/crafttweaker/combination-recipes": "/docs/extendedcrafting/combination-recipes",
16+
"/docs/extendedcrafting/crafttweaker/table-recipes": "/docs/extendedcrafting/table-recipes",
17+
"/docs/extendedcrafting/crafttweaker/compression-recipes": "/docs/extendedcrafting/compression-recipes",
18+
"/docs/extendedcrafting/crafttweaker/ender-crafting-recipes": "/docs/extendedcrafting/ender-crafting-recipes",
19+
"/docs/extendedcrafting/adding-singularities": "/docs/extendedcrafting/singularities",
20+
"/docs/extendedcrafting/removing-singularities": "/docs/extendedcrafting/singularities",
21+
"/docs/extendedcrafting/singularities-in-recipes": "/docs/extendedcrafting/singularities",
2422

2523
"/guides": "/wiki",
2624
"/guides/mysticalagriculture": "/wiki/mysticalagriculture",
27-
"/guides/mysticalagriculture/gameplay/getting-started":
28-
"/wiki/mysticalagriculture/guides/getting-started",
29-
"/guides/mysticalagriculture/gameplay/creating-seeds":
30-
"/wiki/mysticalagriculture/guides/creating-seeds",
31-
"/guides/mysticalagriculture/gameplay/collecting-mob-souls":
32-
"/wiki/mysticalagriculture/guides/collecting-mob-souls",
33-
"/guides/mysticalagriculture/gameplay/speeding-up-crop-growth":
34-
"/wiki/mysticalagriculture/guides/speeding-up-crop-growth",
35-
"/guides/mysticalagriculture/gameplay/upgrading-essence-gear":
36-
"/wiki/mysticalagriculture/guides/upgrading-essence-gear",
25+
"/guides/mysticalagriculture/gameplay/getting-started": "/wiki/mysticalagriculture/guides/getting-started",
26+
"/guides/mysticalagriculture/gameplay/creating-seeds": "/wiki/mysticalagriculture/guides/creating-seeds",
27+
"/guides/mysticalagriculture/gameplay/collecting-mob-souls": "/wiki/mysticalagriculture/guides/collecting-mob-souls",
28+
"/guides/mysticalagriculture/gameplay/speeding-up-crop-growth": "/wiki/mysticalagriculture/guides/speeding-up-crop-growth",
29+
"/guides/mysticalagriculture/gameplay/upgrading-essence-gear": "/wiki/mysticalagriculture/guides/upgrading-essence-gear",
3730

38-
"/wiki/mysticalagriculture/items/watering-can":
39-
"/wiki/mysticalagriculture/items/watering-cans"
31+
"/wiki/mysticalagriculture/items/watering-can": "/wiki/mysticalagriculture/items/watering-cans"
4032
};
4133

4234
export default defineNuxtModule({
@@ -52,5 +44,23 @@ export default defineNuxtModule({
5244
}
5345
});
5446
}
47+
48+
const resolver = createResolver(import.meta.url);
49+
50+
// the /wiki/[[version]] urls get resolved to /wiki/[[version]]/[mod] for some reason, so
51+
// we'll add explicit routes for these pages as a workaround
52+
extendPages(pages => {
53+
const versions = getWikiVersions();
54+
for (const version of versions) {
55+
pages.push({
56+
name: `wiki-directory-${version}`,
57+
path: `/wiki/${version}`,
58+
file: resolver.resolve("../pages/wiki/[[version]]/index.vue"),
59+
meta: {
60+
layout: "wiki"
61+
}
62+
});
63+
}
64+
});
5565
}
5666
});

apps/web/pages/wiki/[[version]]/[mod]/[category]/[slug].vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ definePageMeta({
9595
const route = useRoute();
9696
const toggleSidebar = useEventBus("wiki:toggleSidebar");
9797
98-
const { version, mod: modID } = useWikiMetadata();
98+
const { version, mod: modID, isLatestVersion } = useWikiMetadata();
9999
const mod = getMod(modID.value);
100100
101101
const page = await useWiki();
@@ -147,7 +147,7 @@ const breadcrumbs = computed(() =>
147147
[
148148
{
149149
label: "Wiki",
150-
to: "/wiki"
150+
to: isLatestVersion.value ? "/wiki" : `/wiki/${version.value}`
151151
},
152152
pathParts.length > 2 && {
153153
label: version.value

apps/web/pages/wiki/[[version]]/[mod]/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ const recent = [...data.value]
156156
const breadcrumbs = computed(() => [
157157
{
158158
label: "Wiki",
159-
to: "/wiki"
159+
to: isLatestVersion.value ? "/wiki" : `/wiki/${version.value}`
160160
},
161161
{
162162
label: version.value

apps/web/utils/wiki.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,23 @@ export const getWikiCategories = () => categories;
99
export const getWikiCategoryName = (category: keyof typeof categories) =>
1010
categories[category];
1111

12-
export function parseWikiRouteParams(params: any) {
13-
let version = params.version;
14-
let mod = params.mod;
15-
let category = params.category;
16-
let slug = Array.isArray(params.slug) ? params.slug.join("/") : params.slug;
12+
export function parseWikiRouteParams(path: string) {
13+
const parts = path.split("/").slice(1);
1714

18-
// index page doesn't have a slug or version so we don't want to move the mod
19-
// id to the slug in this case
20-
if (version === "") {
21-
version = getWikiLatestVersion();
22-
}
15+
let version: string, mod: string, category: string, slug: string;
2316

2417
// the latest version won't have the version in the url, which means it will
2518
// be the mod id
26-
if (!semver.valid(semver.coerce(version), true)) {
27-
slug = category;
28-
category = mod;
29-
mod = version;
19+
if (!semver.valid(semver.coerce(parts[1]), true)) {
20+
slug = parts[3];
21+
category = parts[2];
22+
mod = parts[1];
3023
version = getWikiLatestVersion();
24+
} else {
25+
slug = parts[4];
26+
category = parts[3];
27+
mod = parts[2];
28+
version = parts[1];
3129
}
3230

3331
return {

0 commit comments

Comments
 (0)