emoji-cheat-sheet/src/markdown.ts

61 lines
1.7 KiB
TypeScript
Raw Normal View History

2017-03-18 01:10:09 +08:00
const format = str => str.trim().replace(/^ +/mg, '');
module.exports = class Markdown {
static create(urls, title, emojiTable, columnDivisions) {
const categories = Object.keys(emojiTable);
const urlDescriptions = Object.keys(urls).map((site) => `[${site}](${urls[site]})`).join(' and ');
2017-03-18 01:10:09 +08:00
return format(`
# ${title}
2017-03-18 17:14:04 +08:00
[![build](https://travis-ci.org/ikatyang/emoji-cheat-sheet.svg?branch=generator)](https://travis-ci.org/ikatyang/emoji-cheat-sheet)
2017-03-18 15:32:44 +08:00
This cheat sheet is auto-generated from ${urlDescriptions} using [emoji-cheat-sheet-generator](https://github.com/ikatyang/emoji-cheat-sheet/tree/generator).
## Table of Contents
${categories.map(category => `- [${category}](#${category.toLowerCase()})`).join('\n')}
2017-03-18 01:10:09 +08:00
${
categories.map(category => {
const emojis = emojiTable[category];
2017-03-18 01:10:09 +08:00
return format(`
### ${category}
2017-03-18 01:10:09 +08:00
${this.createTable(emojis, columnDivisions)}
`);
}).join(('\n').repeat(2))
}
`);
}
static createTableHead(columnDivisions) {
return format(`
| |${(' ico | emoji |').repeat(columnDivisions)}
| - |${(' --- | ----- |').repeat(columnDivisions)}
2017-03-18 01:10:09 +08:00
`);
}
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(`
| [top](#table-of-contents) |${rowEmojis.map((emoji) => emoji ? ` :${emoji}: | \`:${emoji}:\` ` : ' | ').join(' | ')}|
2017-03-18 01:10:09 +08:00
`) + '\n';
}
return table;
}
};