mirror of
https://github.com/docsifyjs/docsify.git
synced 2025-12-08 19:55:52 +00:00
feat: Emoji build (#1766)
* Fix incorrect file name * Improve build - Display emoji API URL - Display number of emoji entries retrieved from API - Distinguish between creating and updating files - Catch and display errors (gracefully fail for offline work) - Add “DO NOT EDIT” comment to generated output * Add emoji to automated build * Remove emoji plugin from dev index.html
This commit is contained in:
parent
35002c92b7
commit
ba5ee26f00
@ -9,12 +9,15 @@ const filePaths = {
|
|||||||
'src',
|
'src',
|
||||||
'core',
|
'core',
|
||||||
'render',
|
'render',
|
||||||
'emojify-data.js'
|
'emoji-data.js'
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
async function getEmojiData() {
|
async function getEmojiData() {
|
||||||
const emojiDataURL = 'https://api.github.com/emojis';
|
const emojiDataURL = 'https://api.github.com/emojis';
|
||||||
|
|
||||||
|
console.info(`- Fetching emoji data from ${emojiDataURL}`);
|
||||||
|
|
||||||
const response = await axios.get(emojiDataURL);
|
const response = await axios.get(emojiDataURL);
|
||||||
const baseURL = Object.values(response.data)
|
const baseURL = Object.values(response.data)
|
||||||
.find(url => /unicode\//)
|
.find(url => /unicode\//)
|
||||||
@ -26,6 +29,8 @@ async function getEmojiData() {
|
|||||||
([key, value]) => (data[key] = value.replace(baseURL, ''))
|
([key, value]) => (data[key] = value.replace(baseURL, ''))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.info(`- Retrieved ${Object.keys(data).length} emoji entries`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
baseURL,
|
baseURL,
|
||||||
data,
|
data,
|
||||||
@ -33,9 +38,9 @@ async function getEmojiData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function writeEmojiPage(emojiData) {
|
function writeEmojiPage(emojiData) {
|
||||||
|
const isExistingPage = fs.existsSync(filePaths.emojiMarkdown);
|
||||||
const emojiPage =
|
const emojiPage =
|
||||||
(fs.existsSync(filePaths.emojiMarkdown) &&
|
(isExistingPage && fs.readFileSync(filePaths.emojiMarkdown, 'utf8')) ||
|
||||||
fs.readFileSync(filePaths.emojiMarkdown, 'utf8')) ||
|
|
||||||
`<!-- START -->\n\n<!-- END -->`;
|
`<!-- START -->\n\n<!-- END -->`;
|
||||||
const emojiRegEx = /(<!--\s*START.*-->\n)([\s\S]*)(\n<!--\s*END.*-->)/;
|
const emojiRegEx = /(<!--\s*START.*-->\n)([\s\S]*)(\n<!--\s*END.*-->)/;
|
||||||
const emojiMatch = emojiPage.match(emojiRegEx);
|
const emojiMatch = emojiPage.match(emojiRegEx);
|
||||||
@ -53,39 +58,52 @@ function writeEmojiPage(emojiData) {
|
|||||||
if (emojiMarkdown !== newEmojiMarkdown) {
|
if (emojiMarkdown !== newEmojiMarkdown) {
|
||||||
const newEmojiPage = emojiPage.replace(
|
const newEmojiPage = emojiPage.replace(
|
||||||
emojiMatch[0],
|
emojiMatch[0],
|
||||||
`${emojiMarkdownStart}\n${newEmojiMarkdown}\n${emojiMarkdownEnd}`
|
`${emojiMarkdownStart}\n\n${newEmojiMarkdown}\n\n${emojiMarkdownEnd}`
|
||||||
);
|
);
|
||||||
|
|
||||||
fs.writeFileSync(filePaths.emojiMarkdown, newEmojiPage);
|
fs.writeFileSync(filePaths.emojiMarkdown, newEmojiPage);
|
||||||
console.info(`- Created new file: ${filePaths.emojiMarkdown}`);
|
|
||||||
|
console.info(
|
||||||
|
`- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiMarkdown}`
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
console.info(`- No changes to file: ${filePaths.emojiMarkdown}`);
|
console.info(`- No changes: ${filePaths.emojiMarkdown}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeEmojiJS(emojiData) {
|
function writeEmojiJS(emojiData) {
|
||||||
const emojiJS =
|
const isExistingPage = fs.existsSync(filePaths.emojiJS);
|
||||||
fs.existsSync(filePaths.emojiJS) &&
|
const emojiJS = isExistingPage && fs.readFileSync(filePaths.emojiJS, 'utf8');
|
||||||
fs.readFileSync(filePaths.emojiJS, 'utf8');
|
const newEmojiJS = [
|
||||||
const newEmojiJS = `export default ${JSON.stringify(emojiData, {}, 2)}`;
|
'/* eslint-disable */\n',
|
||||||
|
'// =============================================================================',
|
||||||
|
'// DO NOT EDIT: This file is auto-generated by an /build/emoji.js',
|
||||||
|
'// =============================================================================\n',
|
||||||
|
`export default ${JSON.stringify(emojiData, {}, 2)}`,
|
||||||
|
].join('\n');
|
||||||
|
|
||||||
if (!emojiJS || emojiJS !== newEmojiJS) {
|
if (!emojiJS || emojiJS !== newEmojiJS) {
|
||||||
fs.writeFileSync(filePaths.emojiJS, newEmojiJS);
|
fs.writeFileSync(filePaths.emojiJS, newEmojiJS);
|
||||||
console.info(`- Created new file: ${filePaths.emojiJS}`);
|
|
||||||
|
console.info(
|
||||||
|
`- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiJS}`
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
console.info(`- No changes to file: ${filePaths.emojiJS}`);
|
console.info(`- No changes: ${filePaths.emojiJS}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
console.log('Build emoji');
|
console.info('Build emoji');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const emojiData = await getEmojiData();
|
const emojiData = await getEmojiData();
|
||||||
|
|
||||||
|
if (emojiData) {
|
||||||
writeEmojiPage(emojiData);
|
writeEmojiPage(emojiData);
|
||||||
writeEmojiJS(emojiData);
|
writeEmojiJS(emojiData);
|
||||||
} catch (e) {
|
}
|
||||||
console.error(e);
|
} catch (err) {
|
||||||
|
console.warn(`- Error: ${err.message}`);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
@ -4,7 +4,7 @@ Below is a complete list of emoji shorthand codes. Docsify can be configured to
|
|||||||
|
|
||||||
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));">
|
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));">
|
||||||
|
|
||||||
<!-- START: auto-generated emoji markdown (do not edit between these comments) -->
|
<!-- START: Auto-generated content (/build/emoji.js) -->
|
||||||
|
|
||||||
:100: `:100:`
|
:100: `:100:`
|
||||||
|
|
||||||
@ -3754,6 +3754,6 @@ Below is a complete list of emoji shorthand codes. Docsify can be configured to
|
|||||||
|
|
||||||
:zzz: `:zzz:`
|
:zzz: `:zzz:`
|
||||||
|
|
||||||
<!-- END: auto-generated emoji markdown -->
|
<!-- END: Auto-generated content (/build/emoji.js) -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -115,7 +115,6 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/lib/docsify.js"></script>
|
<script src="/lib/docsify.js"></script>
|
||||||
<script src="/lib/plugins/search.js"></script>
|
<script src="/lib/plugins/search.js"></script>
|
||||||
<script src="/lib/plugins/emoji.js"></script>
|
|
||||||
<script src="/lib/plugins/front-matter.js"></script>
|
<script src="/lib/plugins/front-matter.js"></script>
|
||||||
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-bash.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-bash.min.js"></script>
|
||||||
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-markdown.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-markdown.min.js"></script>
|
||||||
|
|||||||
@ -24,11 +24,11 @@
|
|||||||
"build:cover": "node build/cover.js",
|
"build:cover": "node build/cover.js",
|
||||||
"build:css:min": "mkdirp lib/themes && npm run css -- -o lib/themes && node build/mincss.js",
|
"build:css:min": "mkdirp lib/themes && npm run css -- -o lib/themes && node build/mincss.js",
|
||||||
"build:css": "mkdirp themes && npm run css -- -o themes",
|
"build:css": "mkdirp themes && npm run css -- -o themes",
|
||||||
"build:emoji": "node ./build/emoji.js && eslint ./src/core/render/emojify-data.js --fix --quiet",
|
"build:emoji": "node ./build/emoji.js",
|
||||||
"build:js": "cross-env NODE_ENV=production node build/build.js",
|
"build:js": "cross-env NODE_ENV=production node build/build.js",
|
||||||
"build:ssr": "node build/ssr.js",
|
"build:ssr": "node build/ssr.js",
|
||||||
"build:test": "npm run build && npm test",
|
"build:test": "npm run build && npm test",
|
||||||
"build": "rimraf lib themes && run-s build:js build:css build:css:min build:ssr build:cover",
|
"build": "rimraf lib themes && run-s build:js build:css build:css:min build:ssr build:cover build:emoji",
|
||||||
"css": "node build/css",
|
"css": "node build/css",
|
||||||
"dev:ssr": "run-p serve:ssr watch:*",
|
"dev:ssr": "run-p serve:ssr watch:*",
|
||||||
"dev": "run-p serve watch:*",
|
"dev": "run-p serve watch:*",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user