mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-29 15:06:26 +02:00
General optimations
This commit is contained in:
62
roles/web-svc-simpleicons/templates/server.js.j2
Normal file
62
roles/web-svc-simpleicons/templates/server.js.j2
Normal file
@@ -0,0 +1,62 @@
|
||||
import express from 'express';
|
||||
import * as icons from 'simple-icons';
|
||||
import sharp from 'sharp';
|
||||
|
||||
const app = express();
|
||||
const port = {{ container_port }};
|
||||
|
||||
// Helper: convert 'nextcloud' → 'siNextcloud'
|
||||
function getExportName(slug) {
|
||||
return 'si' + slug
|
||||
.split('-')
|
||||
.map(part => part[0].toUpperCase() + part.slice(1))
|
||||
.join('');
|
||||
}
|
||||
|
||||
// Root: redirect to your documentation
|
||||
app.get('/', (req, res) => {
|
||||
res.redirect('{{ domains | get_url('sphinx', web_protocol) }}/roles/web-app-{{ application_id }}/README.html');
|
||||
});
|
||||
|
||||
// GET /:slug.svg
|
||||
app.get('/:slug.svg', (req, res) => {
|
||||
const slug = req.params.slug.toLowerCase();
|
||||
const exportName = getExportName(slug);
|
||||
const icon = icons[exportName];
|
||||
|
||||
if (!icon) {
|
||||
return res.status(404).send('Icon not found');
|
||||
}
|
||||
|
||||
res.type('image/svg+xml');
|
||||
res.send(icon.svg);
|
||||
});
|
||||
|
||||
// GET /:slug.png?size=...
|
||||
app.get('/:slug.png', async (req, res) => {
|
||||
const slug = req.params.slug.toLowerCase();
|
||||
const size = parseInt(req.query.size, 10) || 128;
|
||||
const exportName = getExportName(slug);
|
||||
const icon = icons[exportName];
|
||||
|
||||
if (!icon) {
|
||||
return res.status(404).send('Icon not found');
|
||||
}
|
||||
|
||||
try {
|
||||
const pngBuffer = await sharp(Buffer.from(icon.svg))
|
||||
.resize(size, size)
|
||||
.png()
|
||||
.toBuffer();
|
||||
|
||||
res.type('image/png');
|
||||
res.send(pngBuffer);
|
||||
} catch (err) {
|
||||
console.error('PNG generation error:', err);
|
||||
res.status(500).send('PNG generation error');
|
||||
}
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Simple-Icons server listening at http://0.0.0.0:${port}`);
|
||||
});
|
Reference in New Issue
Block a user