Files
shields/lib/badge-data.js
Paul Melnikow f271b82670 Nudge forward style checks a la eslint-config-standard (#1082)
Because I despise nitpicking stuff like indentation and spacing in pull request comments, I'd like to nudge forward our automated style checking, at least for new files being added.

I don't want to totally rewrite server.js just to get automated style checking… the blame tracking is just too useful. So let's it's just take care of that when we start splitting it out.

More discussion in #948.
2017-10-01 21:09:43 -04:00

103 lines
2.2 KiB
JavaScript

'use strict';
const logos = require('./load-logos')();
function toArray(val) {
if (val === undefined) {
return [];
} else if (Object(val) instanceof Array) {
return val;
} else {
return [val];
}
}
function isDataUri(s) {
return s !== undefined && /^(data:)([^;]+);([^,]+),(.+)$/.test(s);
}
function hasPrefix(s, prefix) {
return s !== undefined && s.slice(0, prefix.length) === prefix;
}
function prependPrefix(s, prefix) {
if (s === undefined) {
return undefined;
} else if (hasPrefix(s, prefix)) {
return s;
} else {
return prefix + s;
}
}
function isValidStyle(style) {
const validStyles = ['default', 'plastic', 'flat', 'flat-square', 'social'];
return style ? validStyles.indexOf(style) >= 0 : false;
}
function isSixHex (s){
return s !== undefined && /^[0-9a-fA-F]{6}$/.test(s);
}
function makeColor(color) {
if (isSixHex(color)) {
return '#' + color;
} else {
return color;
}
}
function makeLabel(defaultLabel, overrides) {
return overrides.label || defaultLabel;
}
function makeLogo(defaultNamedLogo, overrides) {
const maybeDataUri = prependPrefix(overrides.logo, 'data:');
const maybeNamedLogo = overrides.logo === undefined ? defaultNamedLogo : overrides.logo;
if (isDataUri(maybeDataUri)) {
return maybeDataUri;
} else {
return logos[maybeNamedLogo];
}
}
// 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: isValidStyle(overrides.style) ? overrides.style : 'default',
logo: makeLogo(undefined, overrides),
logoWidth: +overrides.logoWidth,
links: toArray(overrides.link),
colorA: makeColor(overrides.colorA),
colorB: makeColor(overrides.colorB),
};
}
module.exports = {
hasPrefix,
isDataUri,
isValidStyle,
isSixHex,
makeLabel,
makeLogo,
makeBadgeData,
makeColor
};