Added replacement.js

This commit is contained in:
2019-06-13 11:57:17 +10:00
parent 68f0018f9d
commit cd0496a690
4 changed files with 75 additions and 4 deletions
+60
View File
@@ -0,0 +1,60 @@
//replacement(options)(key [, args...])
//options - the json object containing all options
//key - one of the keys in options
//data (optional) - a number of arguments that are substituted into the resulting string
const replacement = (options) => (key, ...data) => {
let result;
//randomize arrays
if (Array.isArray(options[key])) {
result = options[key][Math.floor(Math.random() * options[key].length)];
} else {
result = options[key];
}
//handle no result
if (result === undefined) {
const noResult = options["noResult"];
if (noResult === undefined) {
return ""; //nothing at all to show
}
//randomized noResult array
if (Array.isArray(noResult)) {
result = noResult[Math.floor(Math.random() * noResult.length)];
} else {
result = noResult;
}
}
//replacement engine
let counter = 0;
data.map((dat) => {
counter++;
result = result.replace(/\{([1-9][0-9]*)\}/g, a => a === "{" + counter + "}" ? dat : a);
});
//return the final result
return result;
};
//templateReplacement(templateString [, args...])
//templateString - the string to act as a template
//data (optional) - a number of arguments that are substituted into the template string
const stringReplacement = (templateString, ...data) => {
let result = templateString;
//replacement engine
let counter = 0;
data.map((dat) => {
counter++;
result = result.replace(/\{([1-9][0-9]*)\}/g, a => a === "{" + counter + "}" ? dat : a);
});
//return the final result
return result;
}
module.exports = {
replacement: replacement,
stringReplacement: stringReplacement
};
+2 -2
View File
@@ -7,7 +7,7 @@
<link rel="stylesheet" href="/styles/shared.css"/> <link rel="stylesheet" href="/styles/shared.css"/>
<title>Kingdom Battles!</title> <title>Kingdom Battles!</title>
<meta name="description" content="Build Your Kingdom!" /> <meta name="description" content="{1}" />
<meta name="author" content="Kayne Ruse" /> <meta name="author" content="Kayne Ruse" />
<meta name="keywords" content="gaming, browser game, persistent browser based game, free game" /> <meta name="keywords" content="gaming, browser game, persistent browser based game, free game" />
<!-- <!--
@@ -19,7 +19,7 @@
<meta property="og:image" content="https://kingdombattles.net/img/flag_scaled.png" /> <meta property="og:image" content="https://kingdombattles.net/img/flag_scaled.png" />
<meta property="og:title" content="Kingdom Battles!" /> <meta property="og:title" content="Kingdom Battles!" />
<meta property="og:description" content="Build Your Kingdom!" /> <meta property="og:description" content="{1}" />
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script> <script>
+7 -2
View File
@@ -6,10 +6,12 @@ let express = require('express');
let app = express(); let app = express();
let http = require('http').Server(app); let http = require('http').Server(app);
let bodyParser = require('body-parser'); let bodyParser = require('body-parser');
let fs = require('fs');
let path = require('path'); let path = require('path');
//utilities //utilities
let { log } = require('../common/utilities.js'); let { log } = require('../common/utilities.js');
let { replacement, stringReplacement } = require('../common/replacement.js');
app.use(bodyParser.json()); app.use(bodyParser.json());
@@ -90,9 +92,12 @@ app.get('/app.bundle.js.map', (req, res) => {
res.sendFile(path.resolve(__dirname + `/../public/${req.originalUrl}`)); res.sendFile(path.resolve(__dirname + `/../public/${req.originalUrl}`));
}); });
//fallback //fallback to index.html template (with randomization)
const indexTemplate = fs.readFileSync(path.resolve(__dirname + '/../public/index.html.t'), 'utf8');
const replacementEngine = replacement(require('./website_descriptions.json'));
app.get('*', (req, res) => { app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname + '/../public/index.html')); res.send(stringReplacement(indexTemplate, replacementEngine('description') ));
}); });
//startup //startup
+6
View File
@@ -0,0 +1,6 @@
{
"description": [
"Build Your Kingdom!",
"These Descriptions Are Random!"
]
}