32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const badgePath = path.join(__dirname, '..', 'assets', 'spine-badge.png');
|
|
let cachedDataUrl = null;
|
|
|
|
function dataUrl() {
|
|
if (!cachedDataUrl) {
|
|
cachedDataUrl = 'data:image/png;base64,' + fs.readFileSync(badgePath).toString('base64');
|
|
}
|
|
return cachedDataUrl;
|
|
}
|
|
|
|
function drawVersion(ctx, width, height, version) {
|
|
version = String(version || '');
|
|
if (version.length > 40 || !/^\d+\.\d+(?:\.\d+)?(?:[-+][a-z0-9][a-z0-9.-]*)?$/i.test(version)) return;
|
|
const fontSize = Math.max(12, Math.round(Math.min(width, height) * 0.055));
|
|
const margin = Math.max(10, Math.round(Math.min(width, height) * 0.03));
|
|
ctx.save();
|
|
try {
|
|
ctx.font = '600 ' + fontSize + 'px sans-serif';
|
|
ctx.textAlign = 'left'; ctx.textBaseline = 'middle';
|
|
const boxHeight = fontSize + 12;
|
|
const y = height - margin - boxHeight;
|
|
ctx.fillStyle = 'rgba(0,0,0,0.65)';
|
|
ctx.fillRect(margin, y, ctx.measureText(version).width + 16, boxHeight);
|
|
ctx.fillStyle = '#ffffff'; ctx.fillText(version, margin + 8, y + boxHeight / 2);
|
|
} finally { ctx.restore(); }
|
|
}
|
|
|
|
module.exports = { path: badgePath, dataUrl, drawVersion };
|