Files
shields/lib/badge-data.js
Paul Melnikow 83ac6ff1b3 Enforce use of template literals (#2242)
This is consistent with what we're pretty much already doing, and saves us from making the request during code review.

These were all autofixed and most of them seem easier to read. Some in the legacy services should be rewritten in more legible forms during refactor (ie using intermediate variables, or using request’s qs option). There are some in helper functions and elsewhere that should get rewritten separately. I don't want to change them in this PR because the changes will get lost in this diff, though we could identify them here and fix them before or just after.
2018-11-02 17:11:44 -04:00

163 lines
3.8 KiB
JavaScript

'use strict'
const isCSSColor = require('is-css-color')
const logos = require('./load-logos')()
const simpleIcons = require('./load-simple-icons')()
const { svg2base64, isDataUri } = require('./logo-helper')
const colorschemes = require('./colorscheme.json')
function toArray(val) {
if (val === undefined) {
return []
} else if (Object(val) instanceof Array) {
return val
} else {
return [val]
}
}
function prependPrefix(s, prefix) {
if (s === undefined) {
return undefined
}
s = `${s}`
if (s.startsWith(prefix)) {
return s
} else {
return prefix + s
}
}
function isHexColor(s = '') {
return /^([\da-f]{3}){1,2}$/i.test(s)
}
function makeColor(color) {
if (isHexColor(color)) {
return `#${color}`
} else if (colorschemes[color] !== undefined) {
return colorschemes[color].colorB
} else if (isCSSColor(color)) {
return color
} else {
return undefined
}
}
function makeColorB(defaultColor, overrides) {
return makeColor(overrides.colorB || defaultColor)
}
function setBadgeColor(badgeData, color) {
if (isHexColor(color)) {
badgeData.colorB = `#${color}`
delete badgeData.colorscheme
} else if (colorschemes[color] !== undefined) {
badgeData.colorscheme = color
delete badgeData.colorB
} else if (isCSSColor(color)) {
badgeData.colorB = color
delete badgeData.colorscheme
} else {
badgeData.colorscheme = 'red'
delete badgeData.colorB
}
return badgeData
}
function makeLabel(defaultLabel, overrides) {
return `${
overrides.label === undefined
? (defaultLabel || '').toLowerCase()
: overrides.label
}`
}
function getShieldsIcon(icon = '', color = '') {
icon = typeof icon === 'string' ? icon.toLowerCase() : ''
if (!logos[icon]) {
return undefined
}
color = makeColor(color)
return color
? logos[icon].svg.replace(/fill="(.+?)"/g, `fill="${color}"`)
: logos[icon].base64
}
function getSimpleIcon(icon = '', color = null) {
icon = typeof icon === 'string' ? icon.toLowerCase().replace(/ /g, '-') : ''
if (!simpleIcons[icon]) {
return undefined
}
color = makeColor(color)
return color
? simpleIcons[icon].svg.replace('<svg', `<svg fill="${color}"`)
: simpleIcons[icon].base64
}
function makeLogo(defaultNamedLogo, overrides) {
if (overrides.logo === undefined) {
return svg2base64(
getShieldsIcon(defaultNamedLogo, overrides.logoColor) ||
getSimpleIcon(defaultNamedLogo, overrides.logoColor)
)
}
// +'s are replaced with spaces when used in query params, this returns them to +'s, then removes remaining whitespace - #1546
const maybeDataUri = prependPrefix(overrides.logo, 'data:')
.replace(/ /g, '+')
.replace(/\s/g, '')
if (isDataUri(maybeDataUri)) {
return maybeDataUri
} else {
return svg2base64(
getShieldsIcon(overrides.logo, overrides.logoColor) ||
getSimpleIcon(overrides.logo, overrides.logoColor)
)
}
}
// Generate the initial badge data. Pass the URL query parameters, which
// override the default label.
//
// The following parameters are supported:
//
// - label
// - style
// - logo
// - logoWidth
// - link
// - colorA
// - colorB
// - maxAge
//
// Note: maxAge is handled by cache(), not this function.
function makeBadgeData(defaultLabel, overrides) {
return {
text: [makeLabel(defaultLabel, overrides), 'n/a'],
colorscheme: 'lightgrey',
template: overrides.style,
logo: makeLogo(undefined, overrides),
logoPosition: +overrides.logoPosition,
logoWidth: +overrides.logoWidth,
links: toArray(overrides.link),
colorA: makeColor(overrides.colorA),
colorB: makeColor(overrides.colorB),
}
}
module.exports = {
toArray,
prependPrefix,
isHexColor,
makeLabel,
makeLogo,
makeBadgeData,
makeColor,
makeColorB,
setBadgeColor,
}