better first time xp

This commit is contained in:
deadvey 2025-07-13 00:21:53 +01:00
parent bcaa3487dd
commit f2f244eb9d
4 changed files with 168 additions and 9 deletions

64
app.js
View File

@ -1,23 +1,73 @@
const fs = require('fs');
if (process.argv[0] == "--first-time") {
initialise()
}
const express = require('express');
const showdown = require('showdown')
const crypto = require('crypto'); // For encrypting passwords
const { fromUnixTime, format, getUnixTime } = require("date-fns")
const fs = require('fs');
const users = require('./users.js');
const posts = require('./posts.js');
const comments = require('./comments.js');
const config = require('./config.js');
let converter = new showdown.Converter({simpleLineBreaks: true, tables: true, strikethrough: true, tasklists: true, encodeEmails: true})
let users
let posts
let comments
let config
try {
users = require('./users.js');
posts = require('./posts.js');
comments = require('./comments.js');
config = require('./config.js');
}
catch (error) {
console.log("A file is missing!")
console.log("Run with --first-time to initialise the program")
console.log("Error output:\n", error)
process.exit(1)
}
let converter = new showdown.Converter({
simpleLineBreaks: true,
tables: true,
strikethrough: true,
tasklists: true,
encodeEmails: true
})
const app = express();
let footer_div = config.site_wide_footer
footer_div = replace_format_indicators(footer_div)
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(express.static(config.root_path));
function initialise() {
try {
const users = require("./users.js");
}
catch (error) {
fs.writeFileSync(`${__dirname}/users.js`, `export const users = []`)
}
try {
const posts = require("./posts.js");
}
catch (error) {
fs.writeFileSync(`${__dirname}/posts.js`, `export const posts = []`)
}
try {
const users = require("./comments.js");
}
catch (error) {
fs.writeFileSync(`${__dirname}/comments.js`, `export const comments = []\nexport const counter = 0`)
}
try {
const users = require("./config.js");
}
catch (error) {
fs.copyFile('example-config.js', 'config.js')
}
}
function get_userID(username) {
for (let i = 0; i < users.users.length; i++) {
if (users.users[i]['username'] == username) {

View File

@ -43,9 +43,9 @@ export const time_zone = "+0000"
// %S - post seperator as defined by post_seperator
// %T - Title
// %U - URL the the user (poster)
// %W - Site Description as defined by site_description
// %X - Comment submission box
// %Y - Site Name as defined by site_name
// %W - Site Description as defined by site_description
// %Z - Attribution (to me) and source code link and license
export const timeline_header = `<h1>%Y</h1>
@ -63,6 +63,8 @@ export const user_post_format = `<h2>%T</h2>
<p>%C</p>
<i>%B</i><br/>
<a href="%L">Permalink</a><br/>
%X
%M
%S`
export const post_page_format = `<h1>%T</h1>
<p>%C</p>
@ -79,6 +81,8 @@ export const timeline_post_format = `<h3>%T</h3>
<p>%C</p>
<a href="%L">Permalink</a><br/>
<i>By <a href="%U">%N</a></i>
%X
%M
%S`
export const tag_post_format = `<h3>%T</h3>
<p>%C</p>

105
example-config.js Executable file
View File

@ -0,0 +1,105 @@
export const seperator = "<hr/>"
export const site_name = "My Blog"
export const site_url = "https://example.com"
export const port = 8080
export const site_description = "Read my blogs!"
export const timeline_length = 20
export const enable_hitcount = true // Can slow down page loading a bit
export const charset = "UTF-8" // Don't change unless you know why
// Anything in this directory will be in the webroot, so put favicon.ico and anything else here.
export const root_path = "/path/to/root/of/website"
// Default username if no username is inputted in comment submission
export const default_username = "Anon"
// RSS feeds
export const rss = true
export const rss_path = "/rss"
// Dates
// https://date-fns.org/v4.1.0/docs/format
export const date_format = "yyyy-MM-dd"
export const time_zone = "+0000"
//// Format /////
// The syntax for this is pretty simple
// %% - A literal %
// %A - List of tags
// %B - List of tags, each one with a hyperlink to that tag page
// %C - Post content
// %D - Published date in the format specified by date_format
// %E - Edited date in the format specified by date_format
// %F - Pretty name
// %G - Tag name (used for the tag page only)
// %H - Frontpage hit count
// %I - User description
// %L - URL Permanent link to the post
// %M - comments
// %N - the username of the user (poster)
// %P - URL to create a new post
// %O - URL to edit this post
// %R - Site wide RSS feed
// %S - post seperator as defined by post_seperator
// %T - Title
// %U - URL the the user (poster)
// %W - Site Description as defined by site_description
// %X - Comment submission box
// %Y - Site Name as defined by site_name
// %Z - Attribution (to me) and source code link and license
export const timeline_header = `<h1>%Y</h1>
<h2>%W</h2>
<a href="%P">Create Post</a><br/>
<a href="%R">RSS Feed</a><br/>
Hit count: %H
%S`
export const user_page_header = `<h1>%F's posts:</h1>
%I
%S`
export const tag_page_header = `<h1>Posts tagged: %G</h1>%S`
// ---------------------------------------------
export const user_post_format = `<h2>%T</h2>
<p>%C</p>
<i>%B</i><br/>
<a href="%L">Permalink</a><br/>
%X
%M
%S`
export const post_page_format = `<h1>%T</h1>
<p>%C</p>
<i>%B</i><br/>
<i>By <a href="%U">%N</a></i><br/>
<a href="%O">Edit Post</a><br/>
<i>Posted: %D</i><br/>
<i>Edited: %E</i>
%S
%X
%M
%S`
export const timeline_post_format = `<h3>%T</h3>
<p>%C</p>
<a href="%L">Permalink</a><br/>
<i>By <a href="%U">%N</a></i>
%X
%M
%S`
export const tag_post_format = `<h3>%T</h3>
<p>%C</p>
<i>%B</i><br/>
<a href="%L">Permalink</a><br/>
<i>By <a href="%U">%N</a></i>
%S`
// -------------------------------------
export const site_wide_footer = `Site is ran by DeaDvey<br/>
%Z`
/// Custom CSS to be applied to every page
export const css = `
/* Put you custom CSS here,
Read about existing classes and ID's in the docs (coming soon)*\
`
// pretty please don't change this
export const attribution = "Powered by blogger-nodejs: <a href='https://git.javalsai.tuxcord.net/deadvey/blogger-nodejs'>Source Code</a>, <a href='https://git.javalsai.tuxcord.net/deadvey/blogger-nodejs/raw/branch/master/LICENSE'>license (WTFPL)</a>"

View File

@ -1 +1 @@
228
240