feat(plugins/core): add config_octicon support (#838) [skip ci]
This commit is contained in:
21
package-lock.json
generated
21
package-lock.json
generated
@@ -16,6 +16,7 @@
|
|||||||
"@octokit/graphql": "^4.8.0",
|
"@octokit/graphql": "^4.8.0",
|
||||||
"@octokit/rest": "^18.12.0",
|
"@octokit/rest": "^18.12.0",
|
||||||
"@primer/css": "^19.3.0",
|
"@primer/css": "^19.3.0",
|
||||||
|
"@primer/octicons": "^16.3.0",
|
||||||
"axios": "^0.25.0",
|
"axios": "^0.25.0",
|
||||||
"clipboard": "^2.0.10",
|
"clipboard": "^2.0.10",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
@@ -1857,6 +1858,14 @@
|
|||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@primer/octicons": {
|
||||||
|
"version": "16.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-16.3.0.tgz",
|
||||||
|
"integrity": "sha512-kOVIGDkd7s2hx0E4FHyJblzGSTiOX+a//eu9CPSM0hYr26Sr+m0bIiTYHNPVLDh9apF9WdK8ub/eqgrE8U4iEA==",
|
||||||
|
"dependencies": {
|
||||||
|
"object-assign": "^4.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@primer/primitives": {
|
"node_modules/@primer/primitives": {
|
||||||
"version": "7.4.0",
|
"version": "7.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.4.0.tgz",
|
||||||
@@ -7279,7 +7288,6 @@
|
|||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||||
"devOptional": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@@ -11438,6 +11446,14 @@
|
|||||||
"@primer/primitives": "^7.4.0"
|
"@primer/primitives": "^7.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@primer/octicons": {
|
||||||
|
"version": "16.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-16.3.0.tgz",
|
||||||
|
"integrity": "sha512-kOVIGDkd7s2hx0E4FHyJblzGSTiOX+a//eu9CPSM0hYr26Sr+m0bIiTYHNPVLDh9apF9WdK8ub/eqgrE8U4iEA==",
|
||||||
|
"requires": {
|
||||||
|
"object-assign": "^4.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@primer/primitives": {
|
"@primer/primitives": {
|
||||||
"version": "7.4.0",
|
"version": "7.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.4.0.tgz",
|
||||||
@@ -15601,8 +15617,7 @@
|
|||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"object-inspect": {
|
"object-inspect": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
"@octokit/graphql": "^4.8.0",
|
"@octokit/graphql": "^4.8.0",
|
||||||
"@octokit/rest": "^18.12.0",
|
"@octokit/rest": "^18.12.0",
|
||||||
"@primer/css": "^19.3.0",
|
"@primer/css": "^19.3.0",
|
||||||
|
"@primer/octicons": "^16.3.0",
|
||||||
"axios": "^0.25.0",
|
"axios": "^0.25.0",
|
||||||
"clipboard": "^2.0.10",
|
"clipboard": "^2.0.10",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ export default async function metrics({login, q}, {graphql, rest, plugins, conf,
|
|||||||
style:extras.css,
|
style:extras.css,
|
||||||
twemojis:q["config.twemoji"],
|
twemojis:q["config.twemoji"],
|
||||||
gemojis:q["config.gemoji"],
|
gemojis:q["config.gemoji"],
|
||||||
|
octicons:q["config.octicon"],
|
||||||
rest,
|
rest,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -172,6 +173,8 @@ export default async function metrics({login, q}, {graphql, rest, plugins, conf,
|
|||||||
rendered = await imports.svg.twemojis(rendered)
|
rendered = await imports.svg.twemojis(rendered)
|
||||||
if (q["config.gemoji"])
|
if (q["config.gemoji"])
|
||||||
rendered = await imports.svg.gemojis(rendered, {rest})
|
rendered = await imports.svg.gemojis(rendered, {rest})
|
||||||
|
if (q["config.octicon"])
|
||||||
|
rendered = await imports.svg.octicons(rendered)
|
||||||
//Optimize rendering
|
//Optimize rendering
|
||||||
if ((conf.settings?.optimize === true) || (conf.settings?.optimize?.includes?.("css")))
|
if ((conf.settings?.optimize === true) || (conf.settings?.optimize?.includes?.("css")))
|
||||||
rendered = await imports.svg.optimize.css(rendered)
|
rendered = await imports.svg.optimize.css(rendered)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import twemojis from "twemoji-parser"
|
|||||||
import url from "url"
|
import url from "url"
|
||||||
import util from "util"
|
import util from "util"
|
||||||
import xmlformat from "xml-formatter"
|
import xmlformat from "xml-formatter"
|
||||||
|
import octicons from "@primer/octicons"
|
||||||
prism_lang()
|
prism_lang()
|
||||||
|
|
||||||
//Exports
|
//Exports
|
||||||
@@ -367,7 +367,7 @@ export async function imgb64(image, {width, height, fallback = true} = {}) {
|
|||||||
/**SVG utils */
|
/**SVG utils */
|
||||||
export const svg = {
|
export const svg = {
|
||||||
/**Render as pdf */
|
/**Render as pdf */
|
||||||
async pdf(rendered, {paddings = "", style = "", twemojis = false, gemojis = false, rest = null} = {}) {
|
async pdf(rendered, {paddings = "", style = "", twemojis = false, gemojis = false, octicons = false, rest = null} = {}) {
|
||||||
//Instantiate browser if needed
|
//Instantiate browser if needed
|
||||||
if (!svg.resize.browser) {
|
if (!svg.resize.browser) {
|
||||||
svg.resize.browser = await puppeteer.launch()
|
svg.resize.browser = await puppeteer.launch()
|
||||||
@@ -378,6 +378,8 @@ export const svg = {
|
|||||||
rendered = await svg.twemojis(rendered, {custom:false})
|
rendered = await svg.twemojis(rendered, {custom:false})
|
||||||
if ((gemojis) && (rest))
|
if ((gemojis) && (rest))
|
||||||
rendered = await svg.gemojis(rendered, {rest})
|
rendered = await svg.gemojis(rendered, {rest})
|
||||||
|
if (octicons)
|
||||||
|
rendered = await svg.octicons(rendered)
|
||||||
rendered = marked.parse(rendered)
|
rendered = marked.parse(rendered)
|
||||||
//Render through browser and print pdf
|
//Render through browser and print pdf
|
||||||
console.debug("metrics/svg/pdf > loading svg")
|
console.debug("metrics/svg/pdf > loading svg")
|
||||||
@@ -550,6 +552,26 @@ export const svg = {
|
|||||||
rendered = rendered.replace(new RegExp(emoji, "g"), gemoji)
|
rendered = rendered.replace(new RegExp(emoji, "g"), gemoji)
|
||||||
return rendered
|
return rendered
|
||||||
},
|
},
|
||||||
|
/**Render github octicons */
|
||||||
|
async octicons(rendered) {
|
||||||
|
//Load octicons
|
||||||
|
console.debug("metrics/svg/octicons > rendering octicons")
|
||||||
|
const icons = new Map()
|
||||||
|
for (const {name, heights, toSVG} of Object.values(octicons)) {
|
||||||
|
for (const size of Object.keys(heights)) {
|
||||||
|
const octicon = `:octicon-${name}-${size}:`
|
||||||
|
if (new RegExp(`:octicon-${name}(?:-[0-9]+)?:`, "g").test(rendered)) {
|
||||||
|
icons.set(octicon, toSVG({height:size, width:size}))
|
||||||
|
if (Number(size) === 16)
|
||||||
|
icons.set(`:octicon-${name}:`, toSVG({height:size, width:size}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Apply replacements
|
||||||
|
for (const [octicon, image] of icons)
|
||||||
|
rendered = rendered.replace(new RegExp(octicon, "g"), image)
|
||||||
|
return rendered
|
||||||
|
},
|
||||||
/**Optimizers */
|
/**Optimizers */
|
||||||
optimize:{
|
optimize:{
|
||||||
/**CSS optimizer */
|
/**CSS optimizer */
|
||||||
|
|||||||
@@ -243,6 +243,22 @@ inputs:
|
|||||||
default: yes
|
default: yes
|
||||||
global: yes
|
global: yes
|
||||||
|
|
||||||
|
config_octicon:
|
||||||
|
description: |
|
||||||
|
Use GitHub octicons
|
||||||
|
|
||||||
|
Octicons are open-sourced icons provided by GitHub.
|
||||||
|
See full list at https://primer.style/octicons.
|
||||||
|
|
||||||
|
To include an octicon, use the following syntax: `:octicon-{name}-{size}:`.
|
||||||
|
Size must be a supported icon size (12, 16 or 24).
|
||||||
|
16px octicons can omit size and directly use `:octicon-{name}:` syntax.
|
||||||
|
|
||||||
|
May increase filesize
|
||||||
|
type: boolean
|
||||||
|
default: no
|
||||||
|
global: yes
|
||||||
|
|
||||||
config_display:
|
config_display:
|
||||||
description: |
|
description: |
|
||||||
Display width (for image output formats)
|
Display width (for image output formats)
|
||||||
|
|||||||
Reference in New Issue
Block a user