forked from Minecraft/website
spotlight (#2)
Merge branch 'main' of https://git.birbmc.com/BirbMC/birbmc.com into spotlight # Conflicts: # package.json # pages.js # src/pages.html Add community spotlight and inject extra pages. Signed-off-by: Etzelia <etzelia@hotmail.com> Add pages (#16) Execute anonymous function Signed-off-by: Etzelia <etzelia@hotmail.com> Exclude pages.html, it's only used as a template Signed-off-by: Etzelia <etzelia@hotmail.com> Add pages Signed-off-by: Etzelia <etzelia@hotmail.com> Co-authored-by: Etzelia <etzelia@hotmail.com> Reviewed-on: https://git.etztech.xyz/BirbMC/birbmc.com/pulls/16 Reviewed-by: ZeroHD <joey@ahines.net> Co-Authored-By: Etzelia <etzelia@noreply.example.org> Co-Committed-By: Etzelia <etzelia@noreply.example.org> Co-authored-by: Etzelia <etzelia@noreply.example.org> Reviewed-on: https://git.birbmc.com/BirbMC/birbmc.com/pulls/2 Co-Authored-By: Etzelia <etzelia@hotmail.com> Co-Committed-By: Etzelia <etzelia@hotmail.com>main
parent
39d6149a01
commit
3d5b5da7ad
|
@ -0,0 +1,50 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const pages = require('./pages');
|
||||||
|
|
||||||
|
// Index
|
||||||
|
const srcIndex = 'src/index.html';
|
||||||
|
const srcIndexConfig = 'src/index.json';
|
||||||
|
// Where to put it
|
||||||
|
const distIndex = 'dist/index.html'
|
||||||
|
|
||||||
|
// Actual processing
|
||||||
|
function run() {
|
||||||
|
const config = indexConfig();
|
||||||
|
|
||||||
|
// Community
|
||||||
|
const community = [];
|
||||||
|
const configCommunity = config['community'];
|
||||||
|
Object.keys(configCommunity).forEach((c) => {
|
||||||
|
community.push(`<li><p class="content"><a href="${configCommunity[c]}">${c}</a></p></li>`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Pages
|
||||||
|
const other = [];
|
||||||
|
pages.getPages().forEach((page) => {
|
||||||
|
other.push(`<li><p class="content"><a href="${page.path}">${page.title}</a></p></li>`);
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.writeFileSync(distIndex, buildIndex(community, other))
|
||||||
|
}
|
||||||
|
|
||||||
|
const indexTemplate = fs.readFileSync(srcIndex).toString();
|
||||||
|
|
||||||
|
// Inject the config
|
||||||
|
function buildIndex(community, pages) {
|
||||||
|
return indexTemplate
|
||||||
|
.replace('{{community}}', community)
|
||||||
|
.replace('{{pages}}', pages)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Module stuff
|
||||||
|
function indexConfig() {
|
||||||
|
const contents = fs.readFileSync(srcIndexConfig);
|
||||||
|
return JSON.parse(contents.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { indexConfig };
|
||||||
|
|
||||||
|
// Run the h*ckin' thing
|
||||||
|
if (require.main === module) {
|
||||||
|
run();
|
||||||
|
}
|
|
@ -7,9 +7,10 @@
|
||||||
"sass-noscript": "npx dart-sass -s compressed src/assets/sass/noscript.scss src/assets/css/noscript.css",
|
"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",
|
"sass": "npm run sass-main && npm run sass-noscript",
|
||||||
"webfonts": "npx copyfiles --flat node_modules/@fortawesome/fontawesome-free/webfonts/* src/assets/webfonts/",
|
"webfonts": "npx copyfiles --flat node_modules/@fortawesome/fontawesome-free/webfonts/* src/assets/webfonts/",
|
||||||
"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/",
|
"dist": "npx copyfiles --up 1 src/assets/css/* src/assets/js/* src/assets/webfonts/* src/images/* dist/",
|
||||||
"pages": "node pages.js",
|
"pages": "node pages.js",
|
||||||
"build": "npm run webfonts && npm run sass && npm run dist && npm run pages"
|
"index": "node index.js",
|
||||||
|
"build": "npm run webfonts && npm run sass && npm run dist && npm run pages && npm run index"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
43
pages.js
43
pages.js
|
@ -14,16 +14,10 @@ const requiredMeta = ['title']
|
||||||
// Actual processing
|
// Actual processing
|
||||||
function run() {
|
function run() {
|
||||||
if (!fs.existsSync(distDir)) fs.mkdirSync(distDir);
|
if (!fs.existsSync(distDir)) fs.mkdirSync(distDir);
|
||||||
fs.readdirSync(dir).forEach((file) => {
|
getPages().forEach((page) => {
|
||||||
const filePath = path.join(dir, file)
|
const dirPath = path.join(distDir, page.path);
|
||||||
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);
|
if (!fs.existsSync(dirPath)) fs.mkdirSync(dirPath);
|
||||||
const body = converter.makeHtml(meta.body);
|
fs.writeFileSync(path.join(dirPath, 'index.html'), buildTemplate(page.title, page.body))
|
||||||
fs.writeFileSync(path.join(dirPath, 'index.html'), buildTemplate(meta.attributes.title, body))
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,5 +42,34 @@ function validateMeta(meta) {
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Module stuff
|
||||||
|
class Page {
|
||||||
|
constructor(title, path, body, file) {
|
||||||
|
this.title = title;
|
||||||
|
this.path = path;
|
||||||
|
this.body = body;
|
||||||
|
this.file = file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPages() {
|
||||||
|
const pages = [];
|
||||||
|
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 body = converter.makeHtml(meta.body);
|
||||||
|
pages.push(new Page(meta.attributes.title, 'path' in meta.attributes ? meta.attributes.path : path.basename(file), body, file));
|
||||||
|
});
|
||||||
|
return pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { getPages };
|
||||||
|
|
||||||
// Run the h*ckin' thing
|
// Run the h*ckin' thing
|
||||||
run();
|
if (require.main === module) {
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
.home {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
|
@ -94,3 +94,6 @@ $fa-font-path: "../webfonts";
|
||||||
@import "layout/main";
|
@import "layout/main";
|
||||||
@import "layout/footer";
|
@import "layout/footer";
|
||||||
@import "layout/wrapper";
|
@import "layout/wrapper";
|
||||||
|
|
||||||
|
// BirbMC
|
||||||
|
@import "birbmc";
|
||||||
|
|
|
@ -221,12 +221,26 @@
|
||||||
<p class="content">
|
<p class="content">
|
||||||
Join our
|
Join our
|
||||||
<a href="https://steamcommunity.com/groups/BirbMC"
|
<a href="https://steamcommunity.com/groups/BirbMC"
|
||||||
>Steam Group</a
|
>Steam Group</a
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div style="break-inside: avoid">
|
||||||
|
<h3>Community Spotlight</h3>
|
||||||
|
<ul class="content">
|
||||||
|
{{community}}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="break-inside: avoid">
|
||||||
|
<h3>Other Pages</h3>
|
||||||
|
<ul class="content">
|
||||||
|
{{pages}}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<h3>Donations</h3>
|
<h3>Donations</h3>
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"community": {
|
||||||
|
"Grand River's YouTube": "https://www.youtube.com/c/GrandRiverGaming"
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
<!-- Main -->
|
<!-- Main -->
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
<div class="home"><a href="../"><span class="icon solid style4 fa-home"></span> Home</a></div>
|
||||||
<section id="second" class="main">
|
<section id="second" class="main">
|
||||||
{{body}}
|
{{body}}
|
||||||
</section>
|
</section>
|
||||||
|
|
Loading…
Reference in New Issue