60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
//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
|
|
}; |