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 @@
+
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 @@
+