Skip to content

Commit 040bcc0

Browse files
committed
Use Static Site Generation
1 parent 2345644 commit 040bcc0

File tree

9 files changed

+2552
-366
lines changed

9 files changed

+2552
-366
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ yarn-error.log*
77
pnpm-debug.log*
88
lerna-debug.log*
99

10+
.vite-ssg-temp/
1011
node_modules
1112
.DS_Store
1213
dist

index.html

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
<head>
44
<meta charset="UTF-8">
55
<link rel="icon" href="/favicon.png">
6-
<link rel="prefetch" href="https://nexus.c0d3m4513r.com/custom/forge-ketting-versions.xml" as="fetch">
76
<meta name="viewport" content="width=device-width, initial-scale=1.0">
87
<title>Ketting</title>
98
</head>

package-lock.json

+2,441-278
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+9-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
"version": "0.0.0",
44
"private": true,
55
"type": "module",
6+
"sourceMap": true,
67
"scripts": {
78
"dev": "vite",
8-
"build": "vite build",
9+
"build": "vite-ssg build",
910
"preview": "vite preview"
1011
},
1112
"dependencies": {
@@ -14,11 +15,15 @@
1415
"@fortawesome/free-regular-svg-icons": "^6.5.1",
1516
"@fortawesome/free-solid-svg-icons": "^6.5.1",
1617
"@fortawesome/vue-fontawesome": "^3.0.6",
17-
"vue": "^3.4.21",
18-
"vue-router": "^4.3.0"
18+
"fast-xml-parser": "^4.3.6",
19+
"jquery": "^3.7.1",
20+
"vue": "^3.4.21"
1921
},
2022
"devDependencies": {
2123
"@vitejs/plugin-vue": "^5.0.4",
22-
"vite": "^5.1.5"
24+
"vite": "^5.1.5",
25+
"vite-plugin-pages": "^0.32.1",
26+
"vite-ssg": "^0.23.6",
27+
"vue-router": "^4.3.0"
2328
}
2429
}

src/components/Navigation.vue

+23-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<template>
22
<div class="nav-menu">
33
<div class="mobile-button-group">
4-
<font-awesome-icon :icon="this.showMobileMenu ? 'bars-staggered' : 'bars'" id="mobile-button" @click="showMenu" />
4+
<font-awesome-icon :icon="'bars'" id="mobile-button" @click="showMenu" />
5+
<font-awesome-icon :icon="'bars-staggered'" id="mobile-button" class="hidden" @click="closeMenu" />
56
<Logo id="logo-mobile" />
67
</div>
7-
<div class="nav-content" :class="this.showMobileMenu ? 'open-menu' : 'closed-menu'">
8+
<div class="nav-content closed-menu">
89
<Logo id="logo" />
910
<menu class="nav-items">
1011
<router-link class="nav-item" @click="closeMenu" to="/">Home</router-link>
@@ -26,7 +27,12 @@
2627
</template>
2728

2829
<script>
29-
import Logo from "./Logo.vue";
30+
import $ from 'jquery';
31+
import Logo from './Logo.vue';
32+
33+
const menuOpen = ".nav-menu .mobile-button-group #mobile-button:nth-child(1)";
34+
const menuClosed = ".nav-menu .mobile-button-group #mobile-button:nth-child(2)";
35+
const menuContent = ".nav-menu .nav-content";
3036
3137
export default {
3238
data() {
@@ -36,10 +42,20 @@ export default {
3642
},
3743
methods: {
3844
showMenu() {
39-
this.showMobileMenu = !this.showMobileMenu;
45+
this.showMobileMenu = true;
46+
$(menuOpen).addClass("hidden");
47+
$(menuClosed).removeClass("hidden");
48+
const menuContentObj = $(menuContent);
49+
menuContentObj.removeClass("closed-menu");
50+
menuContentObj.addClass("open-menu");
4051
},
4152
closeMenu() {
4253
this.showMobileMenu = false;
54+
$(menuOpen).removeClass("hidden");
55+
$(menuClosed).addClass("hidden");
56+
const menuContentObj = $(menuContent);
57+
menuContentObj.addClass("closed-menu");
58+
menuContentObj.removeClass("open-menu");
4359
},
4460
},
4561
components: {
@@ -49,6 +65,9 @@ export default {
4965
</script>
5066

5167
<style scoped>
68+
.hidden {
69+
display: none;
70+
}
5271
.nav-menu {
5372
background-color: var(--color-primary);
5473
}

src/main.js

+59-26
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import './assets/main.css'
22

3-
import { createApp } from 'vue'
3+
import { ViteSSG } from 'vite-ssg'
44
import App from './App.vue'
5-
import router from './router'
65

76
/* import the fontawesome core */
87
import { library } from '@fortawesome/fontawesome-svg-core'
@@ -13,30 +12,64 @@ import { fas } from "@fortawesome/free-solid-svg-icons";
1312
import { far } from "@fortawesome/free-regular-svg-icons";
1413
import { fab } from "@fortawesome/free-brands-svg-icons";
1514
library.add(fas, far, fab)
16-
/* ICONS HERE */
17-
18-
const app = createApp(App);
1915

20-
//Create some global properties
21-
app.config.globalProperties.global = {
22-
discordUrl: "https://discord.kettingpowered.org/",
23-
githubUrl: "https://github.com/kettingpowered/",
24-
downloadUrl: "https://nexus.c0d3m4513r.com/custom/forge-ketting-versions.xml",
25-
softwareUrl: function() {
26-
return this.githubUrl + "Ketting-1-20-x/";
27-
},
28-
unsupportedVersions: ["1.20.3"]
29-
};
16+
export const createApp = ViteSSG(
17+
// the root component
18+
App,
19+
// vue-router options
20+
{
21+
routes: [
22+
{
23+
path: '/',
24+
name: 'Home',
25+
component: () => import('@/views/Home.vue')
26+
},
27+
{
28+
path: '/faq',
29+
name: 'FAQ',
30+
component: () => import('@/views/Faq.vue')
31+
},
32+
{
33+
path: '/team',
34+
name: 'Team',
35+
component: () => import('@/views/Team.vue')
36+
},
37+
{
38+
path: '/download',
39+
name: 'Download',
40+
component: () => import('@/views/Download.vue')
41+
},
42+
{
43+
path: '/:catchAll(.*)',
44+
name: 'NotFound',
45+
component: () => import('@/views/NotFound.vue')
46+
}
47+
],
48+
base: import.meta.env.BASE_URL,
49+
},
50+
// function to have custom setups
51+
({ app, router, routes, isClient, initialState }) => {
52+
app.component('font-awesome-icon', FontAwesomeIcon)
53+
//Create some global properties
54+
app.config.globalProperties.global = {
55+
discordUrl: "https://discord.kettingpowered.org/",
56+
githubUrl: "https://github.com/kettingpowered/",
57+
downloadUrl: "https://nexus.c0d3m4513r.com/custom/forge-ketting-versions.xml",
58+
softwareUrl: function() {
59+
return this.githubUrl + "Ketting-1-20-x/";
60+
},
61+
unsupportedVersions: ["1.20.3"]
62+
};
3063

31-
//Discord Roles and their colors
32-
app.config.globalProperties.discordRoles = {
33-
"Owner": "#660000",
34-
"Admin": "#ffcc00",
35-
"Staff": "#ff6633",
36-
"Helper": "#ff3333",
37-
"Contributor": "#33cc99",
38-
}
64+
//Discord Roles and their colors
65+
app.config.globalProperties.discordRoles = {
66+
"Owner": "#660000",
67+
"Admin": "#ffcc00",
68+
"Staff": "#ff6633",
69+
"Helper": "#ff3333",
70+
"Contributor": "#33cc99",
71+
}
3972

40-
app.use(router)
41-
.component('font-awesome-icon', FontAwesomeIcon)
42-
.mount('#app')
73+
// install plugins etc.
74+
}
75+
)

src/router/index.js

-35
This file was deleted.

src/views/Download.vue

+13-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script>
22
import DownloadButton from "@/components/download/DownloadButton.vue";
3+
import {XMLParser} from "fast-xml-parser";
34
45
export default {
56
name: "Download",
@@ -18,26 +19,20 @@ export default {
1819
},
1920
methods: {
2021
async fetchReleases() {
21-
try {
22-
const response = await fetch(this.global.downloadUrl);
23-
if (!response.ok)
24-
throw new Error("Failed to fetch releases");
25-
26-
const xml = await response.text();
27-
this.parseXML(xml);
28-
this.loaded = true;
29-
} catch (error) {
30-
console.error(error);
31-
this.errored = true;
32-
}
22+
const response = await fetch(this.global.downloadUrl);
23+
if (!response.ok)
24+
throw new Error("Failed to fetch releases");
25+
//Don't catch error. We Pre-Generate the Site on the server, so this is thrown build time.
26+
27+
const xml = await response.text();
28+
this.parseXML(xml);
29+
this.loaded = true;
3330
},
3431
parseXML(xml) {
35-
const parser = new DOMParser();
36-
const doc = parser.parseFromString(xml, "application/xml");
37-
const versions = doc.querySelectorAll("version");
38-
versions.forEach((version) => {
39-
this.releases.push(version.textContent);
40-
});
32+
const parser = new XMLParser();
33+
const doc = parser.parse(xml);
34+
// noinspection JSUnresolvedReference
35+
this.releases = doc.metadata.versioning.versions.version;
4136
this.sortReleases();
4237
},
4338
sortReleases() {

vite.config.js

+6
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@ import { fileURLToPath, URL } from 'node:url'
22

33
import { defineConfig } from 'vite'
44
import vue from '@vitejs/plugin-vue'
5+
import Pages from 'vite-plugin-pages'
56

67
// https://vitejs.dev/config/
78
export default defineConfig({
89
plugins: [
10+
Pages({
11+
extensions: ['vue', 'md'],
12+
}),
913
vue(),
1014
],
1115
resolve: {
1216
alias: {
1317
'@': fileURLToPath(new URL('./src', import.meta.url))
1418
}
19+
},
20+
ssgOptions: {
1521
}
1622
})

0 commit comments

Comments
 (0)