This simplifies and further optimizes text-width computation by computing the entire width table in advance, and serializing it in the style of QuickTextMeasurer (#1390). This entirely removes the need for PDFKit at runtime. This has the advantage of fixing #1305 – more generally: producing the same result everywhere – without having to deploy a copy of Verdana. The lifting is delegated to these three libraries, which are housed in a monorepo: https://github.com/metabolize/anafanafo I'd be happy to move it into the badges org if folks want to collaborate on maintaining them. QuickTextMeasurer took kerning pairs into account, whereas this implementation does not. I was thinking kerning would be a necessary refinement, though this seems to work well enough. I dropped in a binary-search package to traverse the data structure, in part to conserve space. This causes a moderate performance regression, though there is ample room for improving on that: https://github.com/badges/shields/pull/2311#issuecomment-439182704
35 lines
786 B
JavaScript
35 lines
786 B
JavaScript
'use strict'
|
|
|
|
const makeBadge = require('./make-badge')
|
|
|
|
class BadgeFactory {
|
|
constructor(options) {
|
|
if (options !== undefined) {
|
|
console.error(
|
|
'BadgeFactory: Constructor options are deprecated and will be ignored'
|
|
)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a badge
|
|
*
|
|
* @param {object} format - Object specifying badge data
|
|
* @param {string[]} format.text
|
|
* @param {string} format.colorscheme
|
|
* @param {string} format.colorA
|
|
* @param {string} format.colorB
|
|
* @param {string} format.format
|
|
* @param {string} format.template
|
|
* @return {string} Badge in SVG or JSON format
|
|
* @see https://github.com/badges/shields/tree/master/gh-badges/README.md
|
|
*/
|
|
create(format) {
|
|
return makeBadge(format)
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
BadgeFactory,
|
|
}
|