EvalueTonSavoir/server/models/utils.js

36 lines
1,011 B
JavaScript
Raw Permalink Normal View History

// utils.js
async function generateUniqueTitle(baseTitle, existsCallback) {
// console.log(`generateUniqueTitle(${baseTitle})`);
let newTitle = baseTitle;
let counter = 1;
const titleRegex = /(.*?)(\((\d+)\))?$/;
const match = baseTitle.match(titleRegex);
if (match) {
baseTitle = match[1].trim();
counter = match[3] ? parseInt(match[3], 10) + 1 : 1;
}
// If the base title does not end with a parentheses expression, start with "(1)"
if (!match[2]) {
newTitle = `${baseTitle} (${counter})`;
} else {
// else increment the counter in the parentheses expression as a first try
newTitle = `${baseTitle} (${counter})`;
}
// console.log(`first check of newTitle: ${newTitle}`);
while (await existsCallback(newTitle)) {
counter++;
newTitle = `${baseTitle} (${counter})`;
// console.log(`trying newTitle: ${newTitle}`);
}
return newTitle;
}
module.exports = {
generateUniqueTitle
};