Compare commits

...

2 Commits

Author SHA1 Message Date
nightly a1957ff4b7 IT CAN NOW COMPILE! 2022-10-19 13:07:30 +02:00
nightly 26fdd9e57c Fix a trailing comma. 2022-10-19 12:45:23 +02:00
17 changed files with 994 additions and 61 deletions

View File

@ -77,7 +77,7 @@
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended"
],
// Enable if you need jsx support

View File

@ -12,7 +12,7 @@ const PARTIALS_DIRECTORY = path.join(__dirname, "partials");
const PUBLIC_DIRECTORY = path.join(__dirname, "public");
const VIEWS_DIRECTORY = path.join(__dirname, "views");
export function startWebserver(config:any) {
export function startWebserver(config: any) {
const app = express();
app.disable("x-powered-by");
@ -38,7 +38,7 @@ export function startWebserver(config:any) {
// Routes
app.use("/", indexRoutes());
// 404 handler
app.use((req, res) => {
if (req.accepts("html")) return res.status(404).render("404", { url: req.url, errorCode: 404 });
@ -49,4 +49,4 @@ export function startWebserver(config:any) {
app.listen(3430, "0.0.0.0", () => {
console.log(`Webserver running on port 3430`);
});
}
}

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
{% include "head" %} {% block head %} {% endblock %}
</head>
<body>
<!-- Main content -->
{% block content %} {% endblock %}
<!-- Footer -->
{% include "footer" %}
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<title>{{ error }}</title>
</head>
<body>
{% block content %} {% endblock %}
</body>
</html>

View File

@ -0,0 +1,12 @@
<!-- Metadata -->
<meta charset="utf-8" />
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<!-- Resources -->
<link rel="stylesheet" href="/public/global.css" type="text/css" />
<!-- Metadata -->
/>
<title>{{ pageTitle }}</title>

View File

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
<h1>{{title}}</h1>
{% block %}{% endblock %}
<footer> {% block footer %}{% endblock %} </footer>
</body>
</html>

View File

@ -1 +0,0 @@
{{id}} - {{todo}}

View File

@ -0,0 +1,3 @@
body {
background-color: darkcyan;
}

View File

@ -0,0 +1,3 @@
body {
background-color: darkcyan;
}

View File

@ -8,35 +8,34 @@ import express from "express";
import rateLimit from "express-rate-limit";
const router = express.Router();
const indexRateLimit = rateLimit({
windowMs: 1 * 60 * 1000,
max: 50,
message: "Too many requests in a short period of time.",
windowMs: 1 * 60 * 1000,
max: 50,
message: "Too many requests in a short period of time.",
});
export function indexRoutes() {
// Index
router.get("/", indexRateLimit,async (req,res) => {
const todos = ['fork and clone', 'make it better', 'make a pull request']
res.render("index", {
//locales: getWebLocale(bot, locale),
todos: todos,
page: req.url,
//user: user,
});
})
// Gitea
router.get("/gitea/", async (_req, res) => {
res.redirect(301, "https://tea.nightly.town/Mangoberry/MangoRecipe");
// Index
router.get("/", indexRateLimit, async (req, res) => {
const todos = ["fork and clone", "make it better", "make a pull request"];
res.render("index", {
//locales: getWebLocale(bot, locale),
todos: todos,
page: req.url,
//user: user,
});
});
// robots.txt
router.get("/robots.txt", async (_req, res) => {
res.type("text/plain");
res.send("User-agent: *\nCrawl-delay: 5\nDisallow: /public/\nDisallow: /auth/");
});
return router;
};
// Gitea
router.get("/gitea/", async (_req, res) => {
res.redirect(301, "https://tea.nightly.town/Mangoberry/MangoRecipe");
});
// robots.txt
router.get("/robots.txt", async (_req, res) => {
res.type("text/plain");
res.send("User-agent: *\nCrawl-delay: 5\nDisallow: /public/\nDisallow: /auth/");
});
return router;
}

View File

@ -2,10 +2,8 @@
<ul>
{% for todo in todos %}
<li>{% include 'todo', id:forloop.index %}</li>
<li>{% include 'todo', id:forloop.index %}</li>
{% endfor %}
</ul>
{% block 'footer' %}
Copyright @ 2016, Harttle
{% endblock %}
{% block 'footer' %} Copyright @ 2016, Harttle {% endblock %}

View File

@ -3,10 +3,10 @@ import { startWebserver } from "../Webserver/index";
import config from "../../config.json";
export class MangoRecipe {
config: typeof config;
// Starts webservers at first boot
constructor() {
this.config = config;
startWebserver(this);
}
}
config: typeof config;
// Starts webservers at first boot
constructor() {
this.config = config;
startWebserver(this);
}
}

View File

@ -7,4 +7,4 @@
import { MangoRecipe } from "./classes/Main";
import config from "../config.json";
new MangoRecipe();
new MangoRecipe();

View File

@ -0,0 +1 @@
{}

884
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,10 +4,19 @@
"description": "A recipe manager with nextjs",
"main": "index.js",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
"build": "tsc",
"build:purgecss": "cross-env purgecss -c purgecss.config.js -o ./Source/Webserver/public/css/",
"build:scss": "cross-env sass --no-source-map ./Source/Webserver/public/scss/:./Source/Webserver/public/css/ && npm run build:purgecss",
"build:static": "cross-env copyfiles './Source/Webserver/**/**/*.{css,liquid,jpg,js,png}' './dist/'",
"dev": "cross-env concurrently \"cross-env sass ./Source/Webserver/public/scss/:./Source/Webserver/public/css/ --watch\" \"cross-env nodemon\"",
"format": "cross-env prettier --config .prettierrc 'Source/**/*.{liquid,js,json,scss,ts}' --write",
"lint": "eslint --fix .",
"prebuild": "cross-env rimraf ./dist/",
"postbuild": "npm run build:scss && npm run build:static",
"postinstall": "cross-env copyfiles './node_modules/bulmaselect/dist/index.js' './Source/Webserver/public/js/bulmaselect/' -f",
"start": "npm run build && cross-env NODE_ENV=production node dist/Source/index.js",
"pm2": "npm run build && pm2 start pm2.config.json",
"test": "tsc && eslint ."
},
"repository": {
"type": "git",
@ -27,12 +36,16 @@
},
"dependencies": {
"@typescript-eslint/eslint-plugin": "^5.40.1",
"copyfiles": "^2.4.1",
"cross-env": "^7.0.3",
"express": "^4.18.2",
"express-rate-limit": "^6.6.0",
"express-session": "^1.17.3",
"liquidjs": "^9.42.0",
"path": "^0.12.7",
"prettier": "^2.7.1",
"purgecss": "^5.0.0",
"sass": "^1.55.0",
"terser": "^5.15.1"
}
}

8
purgecss.config.js Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
content: ["./Source/Webserver/**/**/*.{liquid,js}"],
css: ["./Source/Webserver/**/**/*.css"],
fontFace: true,
variables: true,
keyframes: true,
};