From 39d6149a01e6d08eb8b79f84100ac4459566d083 Mon Sep 17 00:00:00 2001 From: Etzelia Date: Fri, 26 Mar 2021 15:10:37 +0000 Subject: [PATCH] pages (#1) Execute anonymous function Signed-off-by: Etzelia Exclude pages.html, it's only used as a template Signed-off-by: Etzelia Add pages Signed-off-by: Etzelia Reviewed-on: https://git.birbmc.com/BirbMC/birbmc.com/pulls/1 Co-Authored-By: Etzelia Co-Committed-By: Etzelia --- .drone.yml | 19 +++- package-lock.json | 198 ++++++++++++++++++++++++++++++++++++++++ package.json | 8 +- pages.js | 52 +++++++++++ src/assets/js/birbmc.js | 44 +++++++++ src/assets/js/main.js | 45 +-------- src/index.html | 97 +------------------- src/pages.html | 52 +++++++++++ src/pages/smp-to-ssp.md | 43 +++++++++ 9 files changed, 412 insertions(+), 146 deletions(-) create mode 100644 pages.js create mode 100644 src/assets/js/birbmc.js create mode 100644 src/pages.html create mode 100644 src/pages/smp-to-ssp.md diff --git a/.drone.yml b/.drone.yml index 75b6a28..d5ecd05 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,5 +1,18 @@ --- kind: pipeline +name: compliance +trigger: + event: + - pull_request +steps: + - name: build + pull: always + image: node:14 + commands: + - npm install + - npm run build +--- +kind: pipeline name: release trigger: event: @@ -12,9 +25,7 @@ steps: image: node:14 commands: - npm install - - npm run webfonts - - npm run sass - - npm run dist + - npm run build - name: archive pull: always image: jolheiser/drone-arc:latest @@ -30,4 +41,4 @@ steps: from_secret: gitea_token base: https://git.etztech.xyz files: - - "dist.tar.gz" \ No newline at end of file + - "dist.tar.gz" diff --git a/package-lock.json b/package-lock.json index 43631bd..f4bb0be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,15 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -162,6 +171,12 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -181,6 +196,15 @@ "path-exists": "^4.0.0" } }, + "front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -281,6 +305,16 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -423,6 +457,170 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "showdown": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", + "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", + "dev": true, + "requires": { + "yargs": "^14.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", diff --git a/package.json b/package.json index 0a11c6a..1fc1fe4 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ "sass-noscript": "npx dart-sass -s compressed src/assets/sass/noscript.scss src/assets/css/noscript.css", "sass": "npm run sass-main && npm run sass-noscript", "webfonts": "npx copyfiles --flat node_modules/@fortawesome/fontawesome-free/webfonts/* src/assets/webfonts/", - "dist": "npx copyfiles --exclude src/elements.html --exclude src/generic.html --up 1 src/* src/assets/css/* src/assets/js/* src/assets/webfonts/* src/images/* dist/" + "dist": "npx copyfiles --exclude src/elements.html --exclude src/generic.html --exclude src/pages.html --up 1 src/* src/assets/css/* src/assets/js/* src/assets/webfonts/* src/images/* dist/", + "pages": "node pages.js", + "build": "npm run webfonts && npm run sass && npm run dist && npm run pages" }, "repository": { "type": "git", @@ -18,6 +20,8 @@ "devDependencies": { "@fortawesome/fontawesome-free": "^5.15.1", "copyfiles": "^2.4.0", - "dart-sass": "^1.25.0" + "dart-sass": "^1.25.0", + "front-matter": "^4.0.2", + "showdown": "^1.9.1" } } diff --git a/pages.js b/pages.js new file mode 100644 index 0000000..c2a3302 --- /dev/null +++ b/pages.js @@ -0,0 +1,52 @@ +const fs = require('fs'); +const path = require('path'); +const showdown = require('showdown'); +const frontmatter = require('front-matter'); +const converter = new showdown.Converter(); + +// Pages to process +const dir = 'src/pages'; +// Where to put them +const distDir = 'dist' +// Required meta +const requiredMeta = ['title'] + +// Actual processing +function run() { + if (!fs.existsSync(distDir)) fs.mkdirSync(distDir); + fs.readdirSync(dir).forEach((file) => { + const filePath = path.join(dir, file) + const contents = fs.readFileSync(filePath); + const meta = frontmatter(contents.toString()) + const errs = validateMeta(meta); + if (errs.length) throw `Errors in ${file}:\n${errs.join('\n')}`; + const dirPath = path.join(distDir, 'path' in meta.attributes ? meta.attributes.path : path.basename(file, '.md')); + if (!fs.existsSync(dirPath)) fs.mkdirSync(dirPath); + const body = converter.makeHtml(meta.body); + fs.writeFileSync(path.join(dirPath, 'index.html'), buildTemplate(meta.attributes.title, body)) + }); +} + + +// Generic template +const template = fs.readFileSync(path.join('src', 'pages.html')).toString(); + +// Inject the title and body +function buildTemplate(title, body) { + return template + .replace('{{title}}', title) + .replace('{{body}}', body) +} + +// Validate a page's metadata +function validateMeta(meta) { + const attr = meta.attributes; + let errs = []; + requiredMeta.forEach((required) => { + if (!(required in attr)) errs.push(`missing ${required}`); + }); + return errs +} + +// Run the h*ckin' thing +run(); diff --git a/src/assets/js/birbmc.js b/src/assets/js/birbmc.js new file mode 100644 index 0000000..afa8bbb --- /dev/null +++ b/src/assets/js/birbmc.js @@ -0,0 +1,44 @@ +(function() { + // Logo Easter Egg + document.querySelector("span.logo").addEventListener("dblclick", (e) => { + e.currentTarget.classList.toggle("rotated"); + }); + + // Konami Code Easter Egg + var pattern = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a']; + var current = 0; + + var keyHandler = function (event) { + + // If the key isn't in the pattern, or isn't the current key in the pattern, reset + if (pattern.indexOf(event.key) < 0 || event.key !== pattern[current]) { + current = 0; + return; + } + + // Update how much of the pattern is complete + current++; + + // If complete, alert and reset + if (pattern.length === current) { + current = 0; + document.querySelector("body").classList.add("animate"); + } + + }; + + // Listen for keydown events + document.addEventListener('keydown', keyHandler, false); + + + // Discord + document.getElementById("discord").addEventListener("click", () => { + let widget = document.querySelector("#discord > .widget"); + + if (widget.style.display === "block") { + widget.style.display = "none"; + } else { + widget.style.display = "block"; + } + }); +})(); diff --git a/src/assets/js/main.js b/src/assets/js/main.js index 757ac05..16424f6 100644 --- a/src/assets/js/main.js +++ b/src/assets/js/main.js @@ -120,47 +120,4 @@ speed: 1000 }); - // Logo Easter Egg - document.querySelector("span.logo").addEventListener("dblclick", (e) => { - e.currentTarget.classList.toggle("rotated"); - }); - - // Konami Code Easter Egg - var pattern = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a']; - var current = 0; - - var keyHandler = function (event) { - - // If the key isn't in the pattern, or isn't the current key in the pattern, reset - if (pattern.indexOf(event.key) < 0 || event.key !== pattern[current]) { - current = 0; - return; - } - - // Update how much of the pattern is complete - current++; - - // If complete, alert and reset - if (pattern.length === current) { - current = 0; - document.querySelector("body").classList.add("animate"); - } - - }; - - // Listen for keydown events - document.addEventListener('keydown', keyHandler, false); - - - // Discord - document.getElementById("discord").addEventListener("click", () => { - let widget = document.querySelector("#discord > .widget"); - - if (widget.style.display === "block") { - widget.style.display = "none"; - } else { - widget.style.display = "block"; - } - }); - -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/src/index.html b/src/index.html index b7be651..5902ef1 100644 --- a/src/index.html +++ b/src/index.html @@ -66,11 +66,6 @@ Please stop by! We have a greylist so anybody can come look around before applying!

- @@ -120,11 +115,6 @@

- @@ -136,28 +126,6 @@ server!

-
@@ -296,75 +264,11 @@

Take a look around and do /apply when you're ready!

-