Merge pull request #424 from atomiks/emojis

Add emojis to README categories
This commit is contained in:
Angelos Chalaris
2017-12-30 19:09:58 +02:00
committed by GitHub
2 changed files with 113 additions and 88 deletions

View File

@ -4194,4 +4194,3 @@ validateNumber('10'); // true
## Credits ## Credits
*Icons made by [Smashicons](https://www.flaticon.com/authors/smashicons) from [www.flaticon.com](https://www.flaticon.com/) is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).* *Icons made by [Smashicons](https://www.flaticon.com/authors/smashicons) from [www.flaticon.com](https://www.flaticon.com/) is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).*

View File

@ -3,51 +3,64 @@
Run using `npm run builder`. Run using `npm run builder`.
*/ */
// Load modules // Load modules
const fs = require('fs-extra'), const fs = require('fs-extra');
path = require('path'), const path = require('path');
chalk = require('chalk'); const chalk = require('chalk');
// Set variables for paths
const snippetsPath = './snippets', const SNIPPETS_PATH = './snippets';
staticPartsPath = './static-parts'; const STATIC_PARTS_PATH = './static-parts';
// Set variables for script
let snippets = {}, const snippets = {};
startPart = '', const emojis = {
adapter: '🔌',
array: '📚',
browser: '🖥️',
date: '⏱️',
function: '🎛️',
logic: '🔮',
math: '➗',
media: '📺',
node: '📦',
object: '🗃️',
string: '📜',
utility: '💎'
};
let startPart = '',
endPart = '', endPart = '',
output = '', output = '',
tagDbData = {}; tagDbData = {};
// Load helper functions (these are from existing snippets in 30 seconds of code!) // Load helper functions (these are from existing snippets in 30 seconds of code!)
const objectFromPairs = arr => arr.reduce((a, v) => ((a[v[0]] = v[1]), a), {}); const objectFromPairs = arr => arr.reduce((a, v) => ((a[v[0]] = v[1]), a), {});
const capitalize = (str, lowerRest = false) => const capitalize = (str, lowerRest = false) =>
str.slice(0, 1).toUpperCase() + (lowerRest ? str.slice(1).toLowerCase() : str.slice(1)); str.slice(0, 1).toUpperCase() + (lowerRest ? str.slice(1).toLowerCase() : str.slice(1));
// Start the timer of the script
console.time('Builder'); console.time('Builder');
// Synchronously read all snippets and sort them as necessary (case-insensitive) // Synchronously read all snippets and sort them as necessary (case-insensitive)
try { try {
let snippetFilenames = fs.readdirSync(snippetsPath); const snippetFilenames = fs
snippetFilenames.sort((a, b) => { .readdirSync(SNIPPETS_PATH)
a = a.toLowerCase(); .sort((a, b) => a.toLowerCase() - b.toLowerCase());
b = b.toLowerCase();
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
// Store the data read from each snippet in the appropriate object // Store the data read from each snippet in the appropriate object
for (let snippet of snippetFilenames) for (const name of snippetFilenames) {
snippets[snippet] = fs.readFileSync(path.join(snippetsPath, snippet), 'utf8'); snippets[name] = fs.readFileSync(path.join(SNIPPETS_PATH, name), 'utf8');
}
} catch (err) { } catch (err) {
// Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`); console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`);
process.exit(1); process.exit(1);
} }
// Load static parts for the README file // Load static parts for the README file
try { try {
startPart = fs.readFileSync(path.join(staticPartsPath, 'README-start.md'), 'utf8'); startPart = fs.readFileSync(path.join(STATIC_PARTS_PATH, 'README-start.md'), 'utf8');
endPart = fs.readFileSync(path.join(staticPartsPath, 'README-end.md'), 'utf8'); endPart = fs.readFileSync(path.join(STATIC_PARTS_PATH, 'README-end.md'), 'utf8');
} catch (err) { } catch (err) {
// Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During static part loading: ${err}`); console.log(`${chalk.red('ERROR!')} During static part loading: ${err}`);
process.exit(1); process.exit(1);
} }
// Load tag data from the database // Load tag data from the database
try { try {
tagDbData = objectFromPairs( tagDbData = objectFromPairs(
@ -58,48 +71,62 @@ try {
.map(v => v.split(':').slice(0, 2)) .map(v => v.split(':').slice(0, 2))
); );
} catch (err) { } catch (err) {
// Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During tag database loading: ${err}`); console.log(`${chalk.red('ERROR!')} During tag database loading: ${err}`);
process.exit(1); process.exit(1);
} }
// Create the output for the README file // Create the output for the README file
try { try {
const tags = [
...new Set(
Object.entries(tagDbData)
.map(t => t[1])
.filter(v => v)
.sort((a, b) => a.localeCompare(b))
)
];
// Add the start static part // Add the start static part
output += `${startPart + '\n'}`; output += `${startPart + '\n'}`;
// Loop over tags and snippets to create the table of contents
let uncategorizedOutput = ''; let uncategorizedOutput = '';
for (let tag of [...new Set(Object.entries(tagDbData).map(t => t[1]))]
.filter(v => v) // Loop over tags and snippets to create the table of contents
.sort((a, b) => a.localeCompare(b))) { for (const tag of tags) {
if (capitalize(tag, true) == 'Uncategorized') { const capitalizedTag = capitalize(tag, true);
uncategorizedOutput += `### _${capitalize(
tag, if (capitalizedTag === 'Uncategorized') {
true uncategorizedOutput += `### _${capitalizedTag}_\n\n<details>\n<summary>View contents</summary>\n\n`;
)}_\n\n<details>\n<summary>View contents</summary>\n\n`; for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag))
uncategorizedOutput += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`; uncategorizedOutput += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`;
}
uncategorizedOutput += '\n</details>\n\n'; uncategorizedOutput += '\n</details>\n\n';
} else { } else {
output += `### ${capitalize(tag, true)}\n\n<details>\n<summary>View contents</summary>\n\n`; output += `### ${
for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) emojis[tag] || ''
} ${capitalizedTag}\n\n<details>\n<summary>View contents</summary>\n\n`;
for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
output += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`; output += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`;
}
output += '\n</details>\n\n'; output += '\n</details>\n\n';
} }
} }
output += uncategorizedOutput; output += uncategorizedOutput;
uncategorizedOutput = ''; uncategorizedOutput = '';
// Loop over tags and snippets to create the list of snippets // Loop over tags and snippets to create the list of snippets
for (let tag of [...new Set(Object.entries(tagDbData).map(t => t[1]))] for (const tag of tags) {
.filter(v => v) const capitalizedTag = capitalize(tag, true);
.sort((a, b) => a.localeCompare(b))) {
if (capitalize(tag, true) == 'Uncategorized') { if (capitalizedTag == 'Uncategorized') {
uncategorizedOutput += `## _${capitalize(tag, true)}_\n`; uncategorizedOutput += `---\n ## _${capitalizedTag}_\n`;
for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
uncategorizedOutput += `\n${snippets[taggedSnippet[0] + '.md'] + uncategorizedOutput += `\n${snippets[taggedSnippet[0] + '.md'] +
'\n<br>[⬆ back to top](#table-of-contents)\n\n'}`; '\n<br>[⬆ back to top](#table-of-contents)\n\n'}`;
}
} else { } else {
output += `## ${capitalize(tag, true)}\n`; output += `---\n ## ${emojis[tag] || ''} ${capitalizedTag}\n`;
for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) { for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
let data = snippets[taggedSnippet[0] + '.md']; let data = snippets[taggedSnippet[0] + '.md'];
data = data =
data.slice(0, data.lastIndexOf('```js')) + data.slice(0, data.lastIndexOf('```js')) +
@ -111,17 +138,16 @@ try {
} }
} }
} }
output += uncategorizedOutput; output += uncategorizedOutput;
// Add the ending static part // Add the ending static part
output += `\n${endPart + '\n'}`; output += `\n${endPart + '\n'}`;
// Write to the README file // Write to the README file
fs.writeFileSync('README.md', output); fs.writeFileSync('README.md', output);
} catch (err) { } catch (err) {
// Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During README generation: ${err}`); console.log(`${chalk.red('ERROR!')} During README generation: ${err}`);
process.exit(1); process.exit(1);
} }
// Log a success message
console.log(`${chalk.green('SUCCESS!')} README file generated!`); console.log(`${chalk.green('SUCCESS!')} README file generated!`);
// Log the time taken
console.timeEnd('Builder'); console.timeEnd('Builder');