From 1ea62b57899de7677701b6af5fef40ebb7b7ed33 Mon Sep 17 00:00:00 2001 From: jNullj <15849761+jNullj@users.noreply.github.com> Date: Sat, 8 Feb 2025 20:47:17 +0200 Subject: [PATCH] remove `logoWidth` param Fixes #10285 --- badge-maker/lib/make-badge.js | 15 +++++++++++---- core/base-service/base.js | 5 ----- core/base-service/base.spec.js | 1 - core/base-service/coalesce-badge.js | 21 +++------------------ core/base-service/coalesce-badge.spec.js | 15 --------------- core/base-service/legacy-request-handler.js | 1 - services/endpoint-common.js | 2 +- services/endpoint/endpoint.service.js | 9 --------- services/endpoint/endpoint.tester.js | 3 ++- 9 files changed, 17 insertions(+), 55 deletions(-) diff --git a/badge-maker/lib/make-badge.js b/badge-maker/lib/make-badge.js index 7119670d47ce0..fc87bd2bda1c8 100644 --- a/badge-maker/lib/make-badge.js +++ b/badge-maker/lib/make-badge.js @@ -4,6 +4,7 @@ const { normalizeColor, toSvgColor } = require('./color') const badgeRenderers = require('./badge-renderers') const { stripXmlWhitespace } = require('./xml') const { DEFAULT_LOGO_HEIGHT } = require('./constants') +const { getIconSize } = require('./svg-helpers.js') /* note: makeBadge() is fairly thinly wrapped so if we are making changes here @@ -17,8 +18,8 @@ module.exports = function makeBadge({ color, labelColor, logo, + namedLogo, logoSize, - logoWidth, links = ['', ''], idSuffix, }) { @@ -26,12 +27,20 @@ module.exports = function makeBadge({ label = `${label}`.trim() message = `${message}`.trim() + let logoWidth = logo ? DEFAULT_LOGO_HEIGHT : 0 + if (namedLogo && logoSize === 'auto') { + const iconSize = getIconSize(String(namedLogo).toLowerCase()) + + if (iconSize) { + logoWidth = (iconSize.width / iconSize.height) * DEFAULT_LOGO_HEIGHT + } + } + // This ought to be the responsibility of the server, not `makeBadge`. if (format === 'json') { return JSON.stringify({ label, message, - logoWidth, // Only call normalizeColor for the JSON case: this is handled // internally by toSvgColor in the SVG case. color: normalizeColor(color), @@ -48,8 +57,6 @@ module.exports = function makeBadge({ throw new Error(`Unknown badge style: '${style}'`) } - logoWidth = +logoWidth || (logo ? DEFAULT_LOGO_HEIGHT : 0) - return stripXmlWhitespace( render({ label, diff --git a/core/base-service/base.js b/core/base-service/base.js index fc1f881aac762..6904a113422cb 100644 --- a/core/base-service/base.js +++ b/core/base-service/base.js @@ -47,10 +47,6 @@ const optionalStringWhenNamedLogoPresent = Joi.alternatives().conditional( }, ) -const optionalNumberWhenAnyLogoPresent = Joi.alternatives() - .conditional('namedLogo', { is: Joi.string().required(), then: Joi.number() }) - .conditional('logoSvg', { is: Joi.string().required(), then: Joi.number() }) - const serviceDataSchema = Joi.object({ isError: Joi.boolean(), label: Joi.string().allow(''), @@ -66,7 +62,6 @@ const serviceDataSchema = Joi.object({ logoSvg: Joi.string(), logoColor: optionalStringWhenNamedLogoPresent, logoSize: optionalStringWhenNamedLogoPresent, - logoWidth: optionalNumberWhenAnyLogoPresent, cacheSeconds: Joi.number().integer().min(0), style: Joi.string(), }) diff --git a/core/base-service/base.spec.js b/core/base-service/base.spec.js index 023b30b39b4b7..4e968d07e4f64 100644 --- a/core/base-service/base.spec.js +++ b/core/base-service/base.spec.js @@ -375,7 +375,6 @@ describe('BaseService', function () { style: 'flat', namedLogo: undefined, logo: undefined, - logoWidth: undefined, logoSize: undefined, links: [], labelColor: undefined, diff --git a/core/base-service/coalesce-badge.js b/core/base-service/coalesce-badge.js index 09803310b290f..b840860438261 100644 --- a/core/base-service/coalesce-badge.js +++ b/core/base-service/coalesce-badge.js @@ -2,8 +2,7 @@ import { decodeDataUrlFromQueryParam, prepareNamedLogo, } from '../../lib/logos.js' -import { svg2base64, getIconSize } from '../../lib/svg-helpers.js' -import { DEFAULT_LOGO_HEIGHT } from '../../badge-maker/lib/constants.js' +import { svg2base64 } from '../../lib/svg-helpers.js' import coalesce from './coalesce.js' import toArray from './to-array.js' @@ -20,7 +19,7 @@ import toArray from './to-array.js' // 1. When `?logo=` contains a simple-icons logo or contains a base64-encoded // SVG, that logo is used. When a `&logoColor=` is specified, that color is // used (except for the base64-encoded logos). Otherwise the default color -// is used. The appearance of the logo can be customized using `logoWidth`, +// is used. // When `?logo=` is specified, any logo-related parameters specified // dynamically by the service, or by default in the service, are ignored. // 2. The second precedence is the dynamic logo returned by a service. This is @@ -52,11 +51,7 @@ export default function coalesceBadge( colorB: legacyOverrideColor, colorA: legacyOverrideLabelColor, } = overrides - let { - logoWidth: overrideLogoWidth, - color: overrideColor, - labelColor: overrideLabelColor, - } = overrides + let { color: overrideColor, labelColor: overrideLabelColor } = overrides // Only use the legacy properties if the new ones are not provided if (typeof overrideColor === 'undefined') { @@ -73,7 +68,6 @@ export default function coalesceBadge( if (typeof overrideLabelColor === 'number') { overrideLabelColor = `${overrideLabelColor}` } - overrideLogoWidth = +overrideLogoWidth || undefined const { isError, @@ -85,7 +79,6 @@ export default function coalesceBadge( namedLogo: serviceNamedLogo, logoColor: serviceLogoColor, logoSize: serviceLogoSize, - logoWidth: serviceLogoWidth, link: serviceLink, cacheSeconds: serviceCacheSeconds, style: serviceStyle, @@ -131,7 +124,6 @@ export default function coalesceBadge( // If the logo has been overridden it does not make sense to inherit the // original width or position. logoSize = overrideLogoSize - logoWidth = overrideLogoWidth } else { if (serviceLogoSvg) { logoSvgBase64 = svg2base64(serviceLogoSvg) @@ -143,15 +135,8 @@ export default function coalesceBadge( namedLogoColor = coalesce(overrideLogoColor, serviceLogoColor) } logoSize = coalesce(overrideLogoSize, serviceLogoSize) - logoWidth = coalesce(overrideLogoWidth, serviceLogoWidth) } if (namedLogo) { - const iconSize = getIconSize(String(namedLogo).toLowerCase()) - - if (!logoWidth && iconSize && logoSize === 'auto') { - logoWidth = (iconSize.width / iconSize.height) * DEFAULT_LOGO_HEIGHT - } - logoSvgBase64 = prepareNamedLogo({ name: namedLogo, color: namedLogoColor, diff --git a/core/base-service/coalesce-badge.spec.js b/core/base-service/coalesce-badge.spec.js index a98f05debd24f..425e45aff0c2d 100644 --- a/core/base-service/coalesce-badge.spec.js +++ b/core/base-service/coalesce-badge.spec.js @@ -185,7 +185,6 @@ describe('coalesceBadge', function () { { namedLogo: 'appveyor', logoColor: 'red', - logoWidth: 100, }, {}, ).logo, @@ -246,20 +245,6 @@ describe('coalesceBadge', function () { }) }) - describe('Logo width', function () { - it('overrides the logoWidth', function () { - expect(coalesceBadge({ logoWidth: 20 }, {}, {})).to.include({ - logoWidth: 20, - }) - }) - - it('applies the logo width', function () { - expect( - coalesceBadge({}, { namedLogo: 'npm', logoWidth: 275 }, {}), - ).to.include({ logoWidth: 275 }) - }) - }) - describe('Links', function () { it('overrides the links', function () { expect( diff --git a/core/base-service/legacy-request-handler.js b/core/base-service/legacy-request-handler.js index 83a78fd3fa6e3..3a44642c1240c 100644 --- a/core/base-service/legacy-request-handler.js +++ b/core/base-service/legacy-request-handler.js @@ -12,7 +12,6 @@ const globalQueryParams = new Set([ 'logo', 'logoColor', 'logoSize', - 'logoWidth', 'link', 'colorA', 'colorB', diff --git a/services/endpoint-common.js b/services/endpoint-common.js index 919667655e2f2..1cc0d7c1d0fe2 100644 --- a/services/endpoint-common.js +++ b/services/endpoint-common.js @@ -36,7 +36,6 @@ const endpointSchema = Joi.object({ logoSvg: Joi.string(), logoColor: optionalStringWhenNamedLogoPresent, logoSize: optionalStringWhenNamedLogoPresent, - logoWidth: optionalNumberWhenAnyLogoPresent, style: Joi.string(), cacheSeconds: Joi.number().integer().min(0), /* @@ -45,6 +44,7 @@ const endpointSchema = Joi.object({ passing it should not throw an error */ logoPosition: optionalNumberWhenAnyLogoPresent, + logoWidth: optionalNumberWhenAnyLogoPresent, }) // `namedLogo` or `logoSvg`; not both. .oxor('namedLogo', 'logoSvg') diff --git a/services/endpoint/endpoint.service.js b/services/endpoint/endpoint.service.js index ba7bdfdcfdf39..45860c6ccdc4f 100644 --- a/services/endpoint/endpoint.service.js +++ b/services/endpoint/endpoint.service.js @@ -101,13 +101,6 @@ The endpoint badge takes a single required query param: url, which Supported for simple-icons logos only. - - logoWidth - - Default: none. Same meaning as the query string. Can be overridden by - the query string. - - style @@ -156,7 +149,6 @@ export default class Endpoint extends BaseJsonService { logoSvg, logoColor, logoSize, - logoWidth, style, cacheSeconds, }) { @@ -170,7 +162,6 @@ export default class Endpoint extends BaseJsonService { logoSvg, logoColor, logoSize, - logoWidth, style, // don't allow the user to set cacheSeconds any shorter than this._cacheLength cacheSeconds: Math.max( diff --git a/services/endpoint/endpoint.tester.js b/services/endpoint/endpoint.tester.js index 4cbaf2747aa7f..464833fafb9b4 100644 --- a/services/endpoint/endpoint.tester.js +++ b/services/endpoint/endpoint.tester.js @@ -118,6 +118,8 @@ t.create('custom svg logo') expect(body).to.include(getSimpleIcon({ name: 'npm' })) }) +// The logoWidth param was removed, but passing it should not +// throw a validation error. It should just do nothing. t.create('logoWidth') .get('.json?url=https://example.com/badge') .intercept(nock => @@ -132,7 +134,6 @@ t.create('logoWidth') .expectBadge({ label: 'hey', message: 'yo', - logoWidth: 30, }) // The logoPosition param was removed, but passing it should not