Initial project and page setup.
This commit is contained in:
parent
f40df6a196
commit
6c05cbba7b
3
.editorconfig
Normal file
3
.editorconfig
Normal file
@ -0,0 +1,3 @@
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
32
.eslintrc.js
Normal file
32
.eslintrc.js
Normal file
@ -0,0 +1,32 @@
|
||||
module.exports = {
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2021": true,
|
||||
"node": true,
|
||||
},
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:vue/vue3-recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 13,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": [
|
||||
"vue"
|
||||
],
|
||||
"rules": {
|
||||
"linebreak-style": [
|
||||
"error",
|
||||
"unix"
|
||||
],
|
||||
"quotes": [
|
||||
"error",
|
||||
"double"
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always"
|
||||
]
|
||||
}
|
||||
};
|
5
jsconfig.json
Normal file
5
jsconfig.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
13215
package-lock.json
generated
Normal file
13215
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
45
package.json
Normal file
45
package.json
Normal file
@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "ent.reslate.xyz",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"serve": "webpack serve --config webpack.dev.js",
|
||||
"build": "webpack --config webpack.prod.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@dev.sys.reslate.xyz:ydeng/ent.reslate.xyz.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Reslate",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.16.7",
|
||||
"@babel/preset-env": "^7.16.8",
|
||||
"@vue/compiler-sfc": "^3.2.26",
|
||||
"babel-loader": "^8.2.3",
|
||||
"css-loader": "^6.5.1",
|
||||
"eslint": "^8.6.0",
|
||||
"eslint-plugin-vue": "^8.3.0",
|
||||
"eslint-webpack-plugin": "^3.1.1",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"inject-body-webpack-plugin": "^1.3.0",
|
||||
"sass": "^1.48.0",
|
||||
"sass-loader": "^12.4.0",
|
||||
"style-loader": "^3.3.1",
|
||||
"vue-loader": "^17.0.0",
|
||||
"vue-style-loader": "^4.1.3",
|
||||
"webpack": "^5.66.0",
|
||||
"webpack-cli": "^4.9.1",
|
||||
"webpack-dev-server": "^4.7.3",
|
||||
"webpack-merge": "^5.8.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bootstrap": "^5.1.3",
|
||||
"bootstrap-icons": "^1.7.2",
|
||||
"vue": "^3.2.26",
|
||||
"vue-router": "^4.0.12"
|
||||
}
|
||||
}
|
73
src/App.vue
Normal file
73
src/App.vue
Normal file
@ -0,0 +1,73 @@
|
||||
<template>
|
||||
<header>
|
||||
<nav class="navbar">
|
||||
<div class="container-fluid">
|
||||
<a
|
||||
class="navbar-brand"
|
||||
href="/"
|
||||
>RES</a>
|
||||
<button
|
||||
class="navbar-toggler"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#navigation"
|
||||
aria-expanded="false"
|
||||
aria-label="Toggle navigation"
|
||||
>
|
||||
<i class="bi bi-list" />
|
||||
</button>
|
||||
<div
|
||||
id="navigation"
|
||||
class="collapse navbar-collapse"
|
||||
>
|
||||
<div class="navbar-nav">
|
||||
<router-link
|
||||
class="nav-link"
|
||||
:to="{name: 'IntroPortal'}"
|
||||
active-class="active"
|
||||
>
|
||||
Info
|
||||
</router-link>
|
||||
<router-link
|
||||
class="nav-link"
|
||||
:to="{name: 'steam'}"
|
||||
active-class="active"
|
||||
>
|
||||
Steam
|
||||
</router-link>
|
||||
<router-link
|
||||
class="nav-link"
|
||||
:to="{name: 'remcs'}"
|
||||
active-class="active"
|
||||
>
|
||||
Minecraft
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main>
|
||||
<router-view />
|
||||
</main>
|
||||
<footer>
|
||||
<!-- TODO: Proper footer. -->
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
greeting: "Hello World!"
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.greeting {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
BIN
src/assets/images/about.png
Normal file
BIN
src/assets/images/about.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 MiB |
BIN
src/assets/images/controller.png
Normal file
BIN
src/assets/images/controller.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.2 MiB |
BIN
src/assets/images/minecraft.png
Normal file
BIN
src/assets/images/minecraft.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 MiB |
12
src/main.js
Normal file
12
src/main.js
Normal file
@ -0,0 +1,12 @@
|
||||
import "@/styles/global.scss";
|
||||
import "bootstrap/dist/js/bootstrap";
|
||||
import App from "./App.vue";
|
||||
import { createApp } from "vue";
|
||||
|
||||
import { router } from "./router/router";
|
||||
|
||||
document.body.classList.add("theme-light");
|
||||
|
||||
const app = createApp(App);
|
||||
app.use(router);
|
||||
app.mount("body");
|
15
src/pages/MinecraftServer.vue
Normal file
15
src/pages/MinecraftServer.vue
Normal file
@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<main>
|
||||
<h1>REMCS</h1>
|
||||
</main>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
67
src/pages/OverviewInfo.vue
Normal file
67
src/pages/OverviewInfo.vue
Normal file
@ -0,0 +1,67 @@
|
||||
<template>
|
||||
<div class="sections">
|
||||
<div class="section">
|
||||
<div class="panels">
|
||||
<div
|
||||
id="steam"
|
||||
class="panel"
|
||||
>
|
||||
<div class="contained-title">
|
||||
<h2>Steam System</h2>
|
||||
<hr>
|
||||
<p>Access the RES Steam web interface for establishing connections to the game system and viewing some statistics.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
id="minecraft"
|
||||
class="panel"
|
||||
>
|
||||
<div class="contained-title">
|
||||
<h2>Minecraft Server</h2>
|
||||
<hr>
|
||||
<p> Access the RES Minecraft Server web interface for interacting with a variety of game utilities and information.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
id="about"
|
||||
class="section"
|
||||
>
|
||||
<div class="contained-title">
|
||||
<h1>What is this?</h1>
|
||||
<p>This is the web interface for Reslate Entertainment Systems. This is <b>not</b> a public service and you may be on this page by mistake. Alternatively, you may be this page completely intentionally!</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@use "@/styles/themer";
|
||||
|
||||
#steam {
|
||||
background-size: cover;
|
||||
background-image: radial-gradient(circle at center, rgba(0,0,0,0.55) 0%, rgba(0, 0, 0, 0.5) 60%, rgba(0,0,0,1) 100%), url("@/assets/images/controller.png");
|
||||
|
||||
.contained-title {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
#minecraft {
|
||||
background-size: cover;
|
||||
background-image: radial-gradient(circle at center, rgba(0,0,0,0.25) 0%, rgba(0, 0, 0, 0.10) 60%, rgba(0,0,0,1) 100%), url("@/assets/images/minecraft.png");
|
||||
|
||||
.contained-title {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
#about {
|
||||
background-size: cover;
|
||||
background-image: radial-gradient(circle at center, rgba(0,0,0,0.55) 0%, rgba(0, 0, 0, 0.5) 60%, rgba(0,0,0,1) 100%), url("@/assets/images/about.png");
|
||||
.contained-title {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
</style>
|
13
src/pages/SteamServer.vue
Normal file
13
src/pages/SteamServer.vue
Normal file
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<h1>Steam System</h1>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
7
src/router/router.js
Normal file
7
src/router/router.js
Normal file
@ -0,0 +1,7 @@
|
||||
import { createRouter, createWebHashHistory } from "vue-router";
|
||||
import { routes } from "./routes";
|
||||
|
||||
export const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
routes: routes
|
||||
});
|
21
src/router/routes.js
Normal file
21
src/router/routes.js
Normal file
@ -0,0 +1,21 @@
|
||||
import OverviewInfo from "@/pages/OverviewInfo.vue";
|
||||
import MinecraftServer from "@/pages/MinecraftServer.vue";
|
||||
import SteamServer from "@/pages/SteamServer.vue";
|
||||
|
||||
export const routes = [
|
||||
{
|
||||
path: "/",
|
||||
name: "IntroPortal",
|
||||
component: OverviewInfo,
|
||||
},
|
||||
{
|
||||
path: "/remcs",
|
||||
name: "remcs",
|
||||
component: MinecraftServer,
|
||||
},
|
||||
{
|
||||
path: "/steam",
|
||||
name: "steam",
|
||||
component: SteamServer,
|
||||
}
|
||||
];
|
17
src/styles/_themer.scss
Normal file
17
src/styles/_themer.scss
Normal file
@ -0,0 +1,17 @@
|
||||
@use "sass:map";
|
||||
@use "variables";
|
||||
|
||||
// Applied Dmitry Borody's method for theming with modifications. - https://medium.com/@dmitriy.borodiy/easy-color-theming-with-scss-bc38fd5734d1
|
||||
@mixin themed($themes: variables.$themes) {
|
||||
@each $theme, $vars in $themes {
|
||||
.theme-#{$theme} &, &.theme-#{$theme} {
|
||||
$theme-values: $vars !global;
|
||||
@content;
|
||||
$theme-values: null !global;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@function color-of($type) {
|
||||
@return map.get($theme-values, $type);
|
||||
}
|
14
src/styles/_variables.scss
Normal file
14
src/styles/_variables.scss
Normal file
@ -0,0 +1,14 @@
|
||||
$themes: (
|
||||
"light": (
|
||||
"background": #ebf0ef,
|
||||
"navbar": #fef6ff,
|
||||
"navbar-brand": #8a2be2,
|
||||
"navbar-link": #684eff,
|
||||
"navbar-active": #3f28c0,
|
||||
"main": #8a2be2,
|
||||
"footer": #e2762b,
|
||||
"text": #1a1a1a,
|
||||
"special": #94e22b,
|
||||
"muted": #797a7e,
|
||||
),
|
||||
);
|
2
src/styles/dependencies.scss
Normal file
2
src/styles/dependencies.scss
Normal file
@ -0,0 +1,2 @@
|
||||
@use "/node_modules/bootstrap/scss/bootstrap";
|
||||
@import "/node_modules/bootstrap-icons/font/bootstrap-icons.css"; // @use introduces errors. Perhaps webpack is missing a loader?
|
95
src/styles/global.scss
Normal file
95
src/styles/global.scss
Normal file
@ -0,0 +1,95 @@
|
||||
@use "themer";
|
||||
@use "sass:color";
|
||||
@use "/node_modules/bootstrap/scss/bootstrap";
|
||||
@import "/node_modules/bootstrap-icons/font/bootstrap-icons.css"; // @use introduces errors. Perhaps webpack is missing a loader?
|
||||
|
||||
header > nav {
|
||||
@extend .navbar;
|
||||
@extend .navbar-expand-lg;
|
||||
@extend .border-bottom;
|
||||
|
||||
position: fixed !important;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
|
||||
@include themer.themed {
|
||||
background-color: themer.color-of("navbar");
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
@include themer.themed {
|
||||
color: themer.color-of("navbar-brand");
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
@include themer.themed {
|
||||
color: themer.color-of("navbar-link");
|
||||
}
|
||||
&.active {
|
||||
@include themer.themed {
|
||||
color: themer.color-of("navbar-active");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
@include themer.themed {
|
||||
color: color.invert(themer.color-of("navbar"), 100%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sections {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
flex-direction: column;
|
||||
|
||||
.section {
|
||||
min-height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
.contained-title {
|
||||
text-align: center;
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
.panels {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
flex-wrap: wrap;
|
||||
width: 100%;
|
||||
.panel {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-grow: 1;
|
||||
@include themer.themed {
|
||||
color: themer.color-of("text");
|
||||
}
|
||||
}
|
63
webpack.common.js
Normal file
63
webpack.common.js
Normal file
@ -0,0 +1,63 @@
|
||||
const path = require("path");
|
||||
const { VueLoaderPlugin } = require("vue-loader");
|
||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
||||
|
||||
module.exports = {
|
||||
entry: path.resolve("./src/main.js"),
|
||||
output: {
|
||||
filename: "[name].bundle.js",
|
||||
path: path.resolve("./dist"),
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: "vue-loader",
|
||||
},
|
||||
{
|
||||
test: /\.css$/i,
|
||||
use: ["style-loader", "css-loader"],
|
||||
},
|
||||
{
|
||||
test: /\.s[ac]ss$/i,
|
||||
use: [
|
||||
"vue-style-loader",
|
||||
"css-loader",
|
||||
{
|
||||
loader: "sass-loader",
|
||||
options: {
|
||||
sassOptions: {
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: file => (
|
||||
/node_modules/.test(file) &&
|
||||
!/\.vue\.js/.test(file)
|
||||
),
|
||||
use: {
|
||||
loader: "babel-loader",
|
||||
options: {
|
||||
presets: ["@babel/preset-env"]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff|woff2|eot|ttf|otf)$/i,
|
||||
type: "asset/resource",
|
||||
},
|
||||
]
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": path.resolve(__dirname, "src/")
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
new HtmlWebpackPlugin(),
|
||||
new VueLoaderPlugin(),
|
||||
]
|
||||
};
|
8
webpack.dev.js
Normal file
8
webpack.dev.js
Normal file
@ -0,0 +1,8 @@
|
||||
const { merge } = require("webpack-merge");
|
||||
const common = require("./webpack.common");
|
||||
|
||||
let config = {
|
||||
mode: "development",
|
||||
};
|
||||
|
||||
module.exports = merge(common, config);
|
8
webpack.prod.js
Normal file
8
webpack.prod.js
Normal file
@ -0,0 +1,8 @@
|
||||
const { merge } = require("webpack-merge");
|
||||
const common = require("./webpack.common");
|
||||
|
||||
let config = {
|
||||
mode: "production",
|
||||
};
|
||||
|
||||
module.exports = merge(common, config);
|
Loading…
Reference in New Issue
Block a user