change to ejs

This commit is contained in:
biglyderv 2024-09-18 18:47:09 -04:00
parent d8f720856c
commit 68aed02187
No known key found for this signature in database
GPG key ID: 33AC87E9ACE66954
11 changed files with 62 additions and 74 deletions

View file

@ -1,12 +1,14 @@
import Route from "../route.js"; import Route from "../route.js";
import form from "../comp/form.js";
// TODO: rewrite // TODO: rewrite
let main = new Route([], async function (req, res, input) { let main = new Route([], async function (req, res, input) {
return form([ return res.render('form', {
data: [
{ label: "Username", type: "text", name: "user" }, { label: "Username", type: "text", name: "user" },
{ label: "Password", type: "password", name: "pass" } { label: "Password", type: "password", name: "pass" }
],'/api/form/register') ],
'route': '/api/form/login'
});
}); });
export default main; export default main;

View file

@ -1,23 +1,11 @@
import Route from "../route.js"; import Route from "../route.js";
import auth from "../form/auth.js"; import auth from "../form/auth.js";
import format from "../common/format.js";
let main = new Route([auth], async function (req, res, input) { let main = new Route([auth], async function (req, res, input) {
let { username } = input; let { username } = input;
let cta = (username == '!nobody') ? return res.render('main', {
'<div class="button"><a href="/client/register">Join</a></div>' : username
'<div class="button"><a href="/client/chat?channel=main">Chat</a></div>'; });
return `<div class='area'>
<h1>About</h1>
<p>
<b>BiglyChat</b> is a chat service built on <a href='https://codeberg.org/onezDerv/bigly-chat'>free software</a>.
</p>
<p>
Anyone can selfhost an instance to take control of their community.
</p>
${cta}
</div>`
}); });
export default main; export default main;

View file

@ -1,13 +1,15 @@
import Route from "../route.js"; import Route from "../route.js";
import form from "../comp/form.js";
// TODO: rewrite // TODO: rewrite
let main = new Route([], async function (req, res, input) { let main = new Route([], async function (req, res, input) {
return form([ return res.render('form', {
data: [
{ label: "Username", type: "text", name: "user" }, { label: "Username", type: "text", name: "user" },
{ label: "Password", type: "password", name: "pass" }, { label: "Password", type: "password", name: "pass" },
{ label: "Password (again)", type: "password", name: "pass2" }, { label: "Password (again)", type: "password", name: "pass2" }
],'/api/form/register') ],
'route': '/api/form/register'
});
}); });
export default main; export default main;

View file

@ -1,18 +0,0 @@
const escapeCodes = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
"'": '&#39;',
'"': '&quot;'
};
let format = {};
format.escape = function (str) {
return str.replaceAll(
/[&<>'"]/g,
tag => escapeCodes[tag]
)
};
export default format;

View file

@ -1,15 +0,0 @@
function form(elems, action) {
elems.push({
'label': 'Submit',
'type': 'Submit',
'name': 'submit'
});
let mapped = elems.map(elem =>
`<span class='form-entry'> <span class='form-key'>${elem.label}</span> <input type='${elem.type}' name='${elem.name}'></span>`
).join('\n');
return `<form enctype='multipart/form-data' method='POST' action='${action}'><div class='form-message'></div>${mapped}</form>`
}
export default form;

View file

@ -2,28 +2,18 @@ import express from 'express';
import multer from 'multer'; import multer from 'multer';
import iterate from './routes.js'; import iterate from './routes.js';
import cookieParser from 'cookie-parser'; import cookieParser from 'cookie-parser';
import ejs from "ejs";
const port = process.env.PORT || 3000; const port = process.env.PORT || 3000;
const header = `<!DOCTYPE HTML>
<html>
<head>
<script src='/static/main.js'></script>
<link rel='stylesheet' href='/static/main.css'>
</head>
<body>
`
const footer = `
</body>
</html>
`;
const app = express(); const app = express();
const upload = multer({ dest: 'uploads/' }); const upload = multer({ dest: 'uploads/' });
app.use(cookieParser()); app.use(cookieParser());
app.use('/static', express.static('static')); app.use('/static', express.static('static'));
app.engine('.ejs', ejs.__express);
app.set('views', './views');
app.set('view engine', 'ejs');
app.get('/', (req, res) => { app.get('/', (req, res) => {
res.status(301).redirect('/client/main'); res.status(301).redirect('/client/main');
@ -31,7 +21,7 @@ app.get('/', (req, res) => {
app.get('/client/:route', async (req, res) => { app.get('/client/:route', async (req, res) => {
let dat = await iterate(req, res, 'client'); let dat = await iterate(req, res, 'client');
res.send(header + dat + footer); //res.send(dat);
}) })
app.get('/api/get/:route', async (req, res) => { app.get('/api/get/:route', async (req, res) => {

View file

@ -10,6 +10,7 @@
"dependencies": { "dependencies": {
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"ejs": "^3.1.10",
"express": "^4.19.2", "express": "^4.19.2",
"sqlite": "^5.1.1", "sqlite": "^5.1.1",
"sqlite3": "^5.1.7", "sqlite3": "^5.1.7",

2
views/footer.ejs Normal file
View file

@ -0,0 +1,2 @@
</body>
</html>

11
views/form.ejs Normal file
View file

@ -0,0 +1,11 @@
<%- include('header.ejs') -%>
<form enctype='multipart/form-data' method='POST' action='<%= route %>'>
<div class='form-message'></div>
<% for (let elem of data) { %>
<span class='form-entry'> <span class='form-key'>
<%= elem.label %>
</span> <input type='<%= elem.type %>' name='<%= elem.name %>'></span>
<% } %>
<input type='Submit' name='Submit'>
</form>
<%- include('footer.ejs') -%>

9
views/header.ejs Normal file
View file

@ -0,0 +1,9 @@
<!DOCTYPE HTML>
<html>
<head>
<script src='/static/main.js'></script>
<link rel='stylesheet' href='/static/main.css'>
</head>
<body>

16
views/main.ejs Normal file
View file

@ -0,0 +1,16 @@
<%- include('header.ejs') -%>
<div class='area'>
<h1>About</h1>
<p>
<b>BiglyChat</b> is a project sharing communtiy built on <a href='https://scratch.mit.edu/'>Scratch</a> and
<a href='https://turbowarp.org'>TurboWarp</a>
. The source code is <a href='https://codeberg.org/onezDerv/bigly-chat'>free software</a>.
</p>
<p>
Anyone can selfhost an instance to take control of their community.
</p>
<%if (username=='!nobody' ) { %>
<div class="button"><a href="/client/register">Join</a></div>
<% } %>
</div>
<%- include('footer.ejs') -%>