diff --git a/lib/badge-data.js b/lib/badge-data.js index 7fd8ef5fe2..8c72bbb393 100644 --- a/lib/badge-data.js +++ b/lib/badge-data.js @@ -105,6 +105,7 @@ function makeBadgeData(defaultLabel, overrides) { colorscheme: 'lightgrey', template: overrides.style, logo: makeLogo(undefined, overrides), + logoPosition: +overrides.logoPosition, logoWidth: +overrides.logoWidth, links: toArray(overrides.link), colorA: makeColor(overrides.colorA), diff --git a/lib/badge-data.spec.js b/lib/badge-data.spec.js index 518ed7e7c5..6cdf3fb9c7 100644 --- a/lib/badge-data.spec.js +++ b/lib/badge-data.spec.js @@ -67,6 +67,7 @@ describe('Badge data helpers', function() { label: 'no, my badge', style: 'flat-square', logo: 'image/svg+xml;base64,PHN2ZyB4bWxu', + logoPosition: 10, logoWidth: '25', link: 'https://example.com/', colorA: 'blue', @@ -76,6 +77,7 @@ describe('Badge data helpers', function() { colorscheme: 'lightgrey', template: 'flat-square', logo: 'data:image/svg+xml;base64,PHN2ZyB4bWxu', + logoPosition: 10, logoWidth: 25, links: ['https://example.com/'], colorA: 'blue', diff --git a/lib/export-supported-features-cli.js b/lib/export-supported-features-cli.js index bed3cc0efd..7757412239 100644 --- a/lib/export-supported-features-cli.js +++ b/lib/export-supported-features-cli.js @@ -12,6 +12,8 @@ const supportedFeatures = { 'flat', 'flat-square', 'for-the-badge', + 'popout', + 'popout-square', 'social', ], }; diff --git a/lib/make-badge.js b/lib/make-badge.js index a0b625d83b..dfe43523ab 100644 --- a/lib/make-badge.js +++ b/lib/make-badge.js @@ -109,6 +109,7 @@ function makeBadge (measurer, { colorA, colorB, logo, + logoPosition, logoWidth, links = ['', ''], }) { @@ -122,6 +123,14 @@ function makeBadge (measurer, { if (!(`${template}-${format}` in templates)) { template = format === 'svg' ? 'flat' : 'default'; } + if (template.startsWith('popout')) { + if (logo){ + logoPosition = (logoPosition <= 10 && logoPosition >= -10) ? logoPosition : 0; + logoWidth = +logoWidth || 32; + } else { + template = template.replace('popout', 'flat'); + } + } if (template === 'social') { text[0] = capitalize(text[0]); } else if (template === 'for-the-badge') { @@ -164,6 +173,7 @@ function makeBadge (measurer, { ], links: links.map(escapeXml), logo, + logoPosition, logoWidth, logoPadding, colorA, diff --git a/lib/request-handler.js b/lib/request-handler.js index d4bc0964e0..998d80e569 100644 --- a/lib/request-handler.js +++ b/lib/request-handler.js @@ -40,6 +40,7 @@ const globalQueryParams = new Set([ 'style', 'link', 'logo', + 'logoPosition', 'logoWidth', 'link', 'colorA', diff --git a/templates/popout-square-template.svg b/templates/popout-square-template.svg new file mode 100644 index 0000000000..c6767fdb81 --- /dev/null +++ b/templates/popout-square-template.svg @@ -0,0 +1,23 @@ + + + + + + + {{?it.logo}} + + {{?}} + {{=it.escapedText[0]}} + {{=it.escapedText[1]}} + + {{?(it.links[0] && it.links[0].length)}} + + + + {{?}} + {{?(it.links[0] && it.links[0].length || it.links[1] && it.links[1].length)}} + + + + {{?}} + diff --git a/templates/popout-template.svg b/templates/popout-template.svg new file mode 100644 index 0000000000..98afc58960 --- /dev/null +++ b/templates/popout-template.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + {{?it.logo}} + + {{?}} + {{=it.escapedText[0]}} + {{=it.escapedText[0]}} + {{=it.escapedText[1]}} + {{=it.escapedText[1]}} + + + {{?(it.links[0] && it.links[0].length)}} + + + + {{?}} + {{?(it.links[0] && it.links[0].length || it.links[1] && it.links[1].length)}} + + + + {{?}} +