From 3a7a69e622b8664a9790c1c3b422a843be35cc89 Mon Sep 17 00:00:00 2001 From: Amio Date: Fri, 20 Jul 2018 10:55:51 +0800 Subject: [PATCH] feat: add icon support --- lib/index.js | 24 ++++++++++++++---------- preview/docker.svg | 1 + preview/preview.md | 11 +++++++++-- preview/serve.js | 11 ++++++++--- 4 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 preview/docker.svg diff --git a/lib/index.js b/lib/index.js index aecbea2..ccab0cf 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,33 +1,33 @@ const calcWidth = require('./calc-text-width.js').Verdana11 const colorPresets = require('./color-presets.js') -module.exports = function ({subject, status, color, style, emoji}) { +module.exports = function ({subject, status, color, style, emoji, icon}) { color = colorPresets[color] || color || colorPresets['blue'] const stTextWidth = calcWidth(status, emoji) - const sbRectWidth = calcWidth(subject, emoji) + 10 + const sbRectWidth = calcWidth(subject, emoji) + 10 + (icon ? 15 : 0) const stRectWidth = stTextWidth + 10 const width = sbRectWidth + stRectWidth if (style === 'flat') { return ` - + - ${subject} - ${subject} + ${subject} + ${subject} ${status} ${status} - + ${icon ? genIconMarkup(icon) : ''} ` } return ` - + @@ -39,11 +39,15 @@ module.exports = function ({subject, status, color, style, emoji}) { - ${subject} - ${subject} + ${subject} + ${subject} ${status} ${status} - + ${icon ? genIconMarkup(icon) : ''} ` } + +function genIconMarkup (iconB64) { + return `` +} diff --git a/preview/docker.svg b/preview/docker.svg new file mode 100644 index 0000000..d5b6e37 --- /dev/null +++ b/preview/docker.svg @@ -0,0 +1 @@ + diff --git a/preview/preview.md b/preview/preview.md index 32cedb0..c23c865 100644 --- a/preview/preview.md +++ b/preview/preview.md @@ -34,5 +34,12 @@ | Badge | URL | | --- | --- | -|![](/emoji/💩🤱🦄/cyan?style=flat&emoji=1) | [/emoji/💩🤱🦄/cyan?style=flat&emoji=1](/emoji/💩🤱🦄/cyan?style=flat&emoji=1) | -|![](/emoji/💩🤱🦄/cyan?emoji=1) | [/emoji/💩🤱🦄/cyan?emoji=1](/emoji/💩🤱🦄/cyan?emoji=1) | +|![](/emoji/💩🤱🦄/DDD?emoji=1) | [/emoji/💩🤱🦄/DDD?emoji=1](/emoji/💩🤱🦄/DDD?emoji=1) | +|![](/emoji/💩🤱🦄/DDD?style=flat&emoji=1) | [/emoji/💩🤱🦄/DDD?style=flat&emoji=1](/emoji/💩🤱🦄/DDD?style=flat&emoji=1) | + +## Icon + +| Badge | URL | +| --- | --- | +| ![](/docker/badge?docker=1) | [/docker/badge?docker=1](/docker/badge?docker=1) +| ![](/docker/badge?docker=1&style=flat) | [/docker/badge?docker=1&style=flat](/docker/badge?docker=1&style=flat) diff --git a/preview/serve.js b/preview/serve.js index 1cf0b8c..c1c0968 100644 --- a/preview/serve.js +++ b/preview/serve.js @@ -1,21 +1,26 @@ -const http = require('http') +const fs = require('fs') const path = require('path') +const http = require('http') const url = require('url') const qs = require('querystring') const serveMarked = require('serve-marked') const badgen = require('..') +const dockerSVG = fs.readFileSync(path.join(__dirname, 'docker.svg')) +const dockerIcon = 'data:image/svg+xml;base64,' + dockerSVG.toString('base64') + // @example // http://localhost:3000/npm/v1.2.3 const serveBadge = (req, res) => { const { pathname, query } = url.parse(req.url) - const { style, emoji } = qs.parse(query) + const { style, emoji, docker } = qs.parse(query) + const icon = docker && dockerIcon const [ subject, status, color ] = pathname.split('/') .filter(Boolean) .map(s => qs.unescape(s)) res.writeHead(200, { 'Content-Type': 'image/svg+xml;charset=utf-8' }) - res.end(badgen({subject, status, color, style, emoji})) + res.end(badgen({subject, status, color, style, emoji, icon})) } // @example