From 22903770c4342885d76b85cc8908ed6d39abf0b4 Mon Sep 17 00:00:00 2001 From: atomiks Date: Sun, 31 Dec 2017 03:55:27 +1100 Subject: [PATCH] Add emojis --- README.md | 48 +++++++++---------- scripts/build.js | 122 ++++++++++++++++++++++++++++------------------- 2 files changed, 98 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index d2303ccd5..16e26af95 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ ## Table of Contents -### Adapter +### 🔌 Adapter
View contents @@ -28,7 +28,7 @@
-### Array +### 📚 Array
View contents @@ -76,7 +76,7 @@
-### Browser +### 🖥️ Browser
View contents @@ -102,7 +102,7 @@
-### Date +### ⏱️ Date
View contents @@ -114,7 +114,7 @@
-### Function +### 🎛️ Function
View contents @@ -128,7 +128,7 @@
-### Logic +### 🔮 Logic
View contents @@ -137,7 +137,7 @@
-### Math +### ➗ Math
View contents @@ -173,7 +173,7 @@
-### Media +### 📺 Media
View contents @@ -182,7 +182,7 @@
-### Node +### 📦 Node
View contents @@ -193,7 +193,7 @@
-### Object +### 🗃️ Object
View contents @@ -209,7 +209,7 @@
-### String +### 📜 String
View contents @@ -236,7 +236,7 @@
-### Utility +### 💎 Utility
View contents @@ -263,7 +263,7 @@
--- - ## Adapter + ## 🔌 Adapter ### call @@ -426,7 +426,7 @@ arrayMax([1, 2, 4]); // 4
[⬆ Back to top](#table-of-contents) --- - ## Array + ## 📚 Array ### chunk @@ -1440,7 +1440,7 @@ zipObject(['a', 'b'], [1, 2, 3]); // {a: 1, b: 2}
[⬆ Back to top](#table-of-contents) --- - ## Browser + ## 🖥️ Browser ### arrayToHtmlList @@ -1892,7 +1892,7 @@ UUIDGeneratorBrowser(); // '7982fcfe-5721-4632-bede-6000885be57d'
[⬆ Back to top](#table-of-contents) --- - ## Date + ## ⏱️ Date ### getDaysDiffBetweenDates @@ -1993,7 +1993,7 @@ tomorrow(); // 2017-12-27 (if current date is 2017-12-26)
[⬆ Back to top](#table-of-contents) --- - ## Function + ## 🎛️ Function ### chainAsync @@ -2157,7 +2157,7 @@ async function sleepyWork() {
[⬆ Back to top](#table-of-contents) --- - ## Logic + ## 🔮 Logic ### negate @@ -2182,7 +2182,7 @@ negate(isOdd)(1); // false
[⬆ Back to top](#table-of-contents) --- - ## Math + ## ➗ Math ### average @@ -2888,7 +2888,7 @@ sum([1, 2, 3, 4]); // 10
[⬆ Back to top](#table-of-contents) --- - ## Media + ## 📺 Media ### speechSynthesis @@ -2919,7 +2919,7 @@ speechSynthesis('Hello, World'); // // plays the message
[⬆ Back to top](#table-of-contents) --- - ## Node + ## 📦 Node ### JSONToFile @@ -3009,7 +3009,7 @@ UUIDGeneratorNode(); // '79c7c136-60ee-40a2-beb2-856f1feabefc'
[⬆ Back to top](#table-of-contents) --- - ## Object + ## 🗃️ Object ### cleanObj @@ -3225,7 +3225,7 @@ truthCheckCollection([{ user: 'Tinky-Winky', sex: 'male' }, { user: 'Dipsy', sex
[⬆ Back to top](#table-of-contents) --- - ## String + ## 📜 String ### anagrams @@ -3750,7 +3750,7 @@ words('python, javaScript & coffee'); // ["python", "javaScript", "coffee"]
[⬆ Back to top](#table-of-contents) --- - ## Utility + ## 💎 Utility ### coalesce diff --git a/scripts/build.js b/scripts/build.js index a6e6d607d..1f400a04e 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -3,51 +3,64 @@ Run using `npm run builder`. */ // Load modules -const fs = require('fs-extra'), - path = require('path'), - chalk = require('chalk'); -// Set variables for paths -const snippetsPath = './snippets', - staticPartsPath = './static-parts'; -// Set variables for script -let snippets = {}, - startPart = '', +const fs = require('fs-extra'); +const path = require('path'); +const chalk = require('chalk'); + +const SNIPPETS_PATH = './snippets'; +const STATIC_PARTS_PATH = './static-parts'; + +const snippets = {}; +const emojis = { + adapter: '🔌', + array: '📚', + browser: '🖥️', + date: '⏱️', + function: '🎛️', + logic: '🔮', + math: '➗', + media: '📺', + node: '📦', + object: '🗃️', + string: '📜', + utility: '💎' +}; + +let startPart = '', endPart = '', output = '', tagDbData = {}; + // 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 capitalize = (str, lowerRest = false) => str.slice(0, 1).toUpperCase() + (lowerRest ? str.slice(1).toLowerCase() : str.slice(1)); -// Start the timer of the script + console.time('Builder'); + // Synchronously read all snippets and sort them as necessary (case-insensitive) try { - let snippetFilenames = fs.readdirSync(snippetsPath); - snippetFilenames.sort((a, b) => { - a = a.toLowerCase(); - b = b.toLowerCase(); - if (a < b) return -1; - if (a > b) return 1; - return 0; - }); + const snippetFilenames = fs + .readdirSync(SNIPPETS_PATH) + .sort((a, b) => a.toLowerCase() - b.toLowerCase()); // Store the data read from each snippet in the appropriate object - for (let snippet of snippetFilenames) - snippets[snippet] = fs.readFileSync(path.join(snippetsPath, snippet), 'utf8'); + for (const name of snippetFilenames) { + snippets[name] = fs.readFileSync(path.join(SNIPPETS_PATH, name), 'utf8'); + } } catch (err) { - // Handle errors (hopefully not!) console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`); process.exit(1); } + // Load static parts for the README file try { - startPart = fs.readFileSync(path.join(staticPartsPath, 'README-start.md'), 'utf8'); - endPart = fs.readFileSync(path.join(staticPartsPath, 'README-end.md'), 'utf8'); + startPart = fs.readFileSync(path.join(STATIC_PARTS_PATH, 'README-start.md'), 'utf8'); + endPart = fs.readFileSync(path.join(STATIC_PARTS_PATH, 'README-end.md'), 'utf8'); } catch (err) { - // Handle errors (hopefully not!) console.log(`${chalk.red('ERROR!')} During static part loading: ${err}`); process.exit(1); } + // Load tag data from the database try { tagDbData = objectFromPairs( @@ -58,48 +71,62 @@ try { .map(v => v.split(':').slice(0, 2)) ); } catch (err) { - // Handle errors (hopefully not!) console.log(`${chalk.red('ERROR!')} During tag database loading: ${err}`); process.exit(1); } + // Create the output for the README file 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 output += `${startPart + '\n'}`; - // Loop over tags and snippets to create the table of contents let uncategorizedOutput = ''; - for (let tag of [...new Set(Object.entries(tagDbData).map(t => t[1]))] - .filter(v => v) - .sort((a, b) => a.localeCompare(b))) { - if (capitalize(tag, true) == 'Uncategorized') { - uncategorizedOutput += `### _${capitalize( - tag, - true - )}_\n\n
\nView contents\n\n`; - for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) + + // Loop over tags and snippets to create the table of contents + for (const tag of tags) { + const capitalizedTag = capitalize(tag, true); + + if (capitalizedTag === 'Uncategorized') { + uncategorizedOutput += `### _${capitalizedTag}_\n\n
\nView contents\n\n`; + for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) { uncategorizedOutput += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`; + } uncategorizedOutput += '\n
\n\n'; } else { - output += `### ${capitalize(tag, true)}\n\n
\nView contents\n\n`; - for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) + output += `### ${ + emojis[tag] + } ${capitalizedTag}\n\n
\nView contents\n\n`; + for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) { output += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`; + } output += '\n
\n\n'; } } + output += uncategorizedOutput; uncategorizedOutput = ''; + // Loop over tags and snippets to create the list of snippets - for (let tag of [...new Set(Object.entries(tagDbData).map(t => t[1]))] - .filter(v => v) - .sort((a, b) => a.localeCompare(b))) { - if (capitalize(tag, true) == 'Uncategorized') { - uncategorizedOutput += `## _${capitalize(tag, true)}_\n`; - for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) + for (const tag of tags) { + const capitalizedTag = capitalize(tag, true); + + if (capitalizedTag == 'Uncategorized') { + uncategorizedOutput += `---\n ## _${capitalizedTag}_\n`; + for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) { uncategorizedOutput += `\n${snippets[taggedSnippet[0] + '.md'] + '\n
[⬆ back to top](#table-of-contents)\n\n'}`; + } } else { - output += `## ${capitalize(tag, true)}\n`; - for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) { + output += `---\n ## ${emojis[tag]} ${capitalizedTag}\n`; + for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) { let data = snippets[taggedSnippet[0] + '.md']; data = data.slice(0, data.lastIndexOf('```js')) + @@ -111,17 +138,16 @@ try { } } } + output += uncategorizedOutput; // Add the ending static part output += `\n${endPart + '\n'}`; // Write to the README file fs.writeFileSync('README.md', output); } catch (err) { - // Handle errors (hopefully not!) console.log(`${chalk.red('ERROR!')} During README generation: ${err}`); process.exit(1); } -// Log a success message + console.log(`${chalk.green('SUCCESS!')} README file generated!`); -// Log the time taken console.timeEnd('Builder');