mirror of
https://github.com/ikatyang/emoji-cheat-sheet.git
synced 2026-02-05 22:55:18 +01:00
Add generator
This commit is contained in:
41
scripts/generate.js
Normal file
41
scripts/generate.js
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/bin/env node
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const $ = require('cheerio');
|
||||
const request = require('request');
|
||||
const markdown = require('./markdown');
|
||||
|
||||
const url = 'http://www.emoji-cheat-sheet.com';
|
||||
const title = 'emoji-cheat-sheet';
|
||||
|
||||
const outDir = path.resolve(process.cwd(), './generated');
|
||||
const outFile = path.join(outDir, 'README.md');
|
||||
|
||||
const columnDivisions = 2;
|
||||
|
||||
request.get(url, (error, response, body) => {
|
||||
if (error || response.statusCode !== 200) {
|
||||
throw error || `Unexpected response status code: ${response.statusCode}`;
|
||||
} else {
|
||||
const emojiTable = {};
|
||||
const $html = $.load(body).root();
|
||||
$html.find('h2').each((_, catalogElement) => {
|
||||
const emojis = [];
|
||||
const catalog = $(catalogElement).text();
|
||||
$html.find(`#emoji-${catalog.toLowerCase()} li .name`).each((_, emojiElement) => {
|
||||
const emoji = $(emojiElement).text();
|
||||
emojis.push(emoji);
|
||||
});
|
||||
emojiTable[catalog] = emojis;
|
||||
});
|
||||
if (fs.existsSync(outDir)) {
|
||||
if (!fs.statSync(outDir).isDirectory()) {
|
||||
throw `OutDir '${outDir}' should be a directory.`;
|
||||
}
|
||||
} else {
|
||||
fs.mkdirSync(outDir);
|
||||
}
|
||||
fs.writeFileSync(outFile, markdown.create(title, emojiTable, columnDivisions));
|
||||
}
|
||||
});
|
||||
50
scripts/markdown.js
Normal file
50
scripts/markdown.js
Normal file
@@ -0,0 +1,50 @@
|
||||
const format = str => str.trim().replace(/^ +/mg, '');
|
||||
|
||||
module.exports = class Markdown {
|
||||
|
||||
static create(title, emojiTable, columnDivisions) {
|
||||
return format(`
|
||||
|
||||
# ${title}
|
||||
|
||||
${
|
||||
Object.keys(emojiTable).map(catalog => {
|
||||
const emojis = emojiTable[catalog];
|
||||
return format(`
|
||||
|
||||
#### ${catalog}
|
||||
|
||||
${this.createTable(emojis, columnDivisions)}
|
||||
|
||||
`);
|
||||
}).join(('\n').repeat(2))
|
||||
}
|
||||
|
||||
`);
|
||||
}
|
||||
|
||||
static createTableHead(columnDivisions) {
|
||||
return format(`
|
||||
|
||||
|${(' icon | emoji |').repeat(columnDivisions)}
|
||||
|${(' ---- | ----- |').repeat(columnDivisions)}
|
||||
|
||||
`);
|
||||
}
|
||||
|
||||
static createTable(emojis, columnDivisions) {
|
||||
let table = this.createTableHead(columnDivisions) + '\n';
|
||||
for (let i = 0; i < emojis.length; i += columnDivisions) {
|
||||
const rowEmojis = emojis.slice(i, i + columnDivisions);
|
||||
while (rowEmojis.length < columnDivisions)
|
||||
rowEmojis.push('');
|
||||
table += format(`
|
||||
|
||||
|${rowEmojis.map((emoji) => ` :${emoji}: | \`:${emoji}:\` `).join(' | ')}|
|
||||
|
||||
`) + '\n';
|
||||
}
|
||||
return table;
|
||||
}
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user