From b98b7244f63fada83a98662f5723c5b1082d2053 Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Fri, 11 Mar 2016 09:16:28 +0100 Subject: [PATCH] Correctly serve sprites --- src/serve_style.js | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/serve_style.js b/src/serve_style.js index 5a7022a..b6603df 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -1,6 +1,7 @@ 'use strict'; -var path = require('path'); +var path = require('path'), + fs = require('fs'); var clone = require('clone'), express = require('express'); @@ -23,8 +24,11 @@ module.exports = function(repo, options, id, reportVector) { source.url = 'local://vector/' + identifier + '.json'; } }); - styleJSON.sprite = 'local://styles/{style_id}/sprite'; - styleJSON.glyphs = 'local://fonts/{fonstack}/{range}.pbf'; + + var spritePath = path.join(rootPath, styleJSON.sprite); + + styleJSON.sprite = 'local://styles/' + id + '/sprite'; + styleJSON.glyphs = 'local://fonts/{fontstack}/{range}.pbf'; repo[id] = styleJSON; @@ -44,5 +48,22 @@ module.exports = function(repo, options, id, reportVector) { return res.send(styleJSON_); }); + app.get('/styles/' + id + '/sprite:scale(@[23]x)?\.:format([\\w]+)', + function(req, res, next) { + var scale = req.params.scale, + format = req.params.format; + var filename = spritePath + (scale || '') + '.' + format; + return fs.readFile(filename, function(err, data) { + if (err) { + console.log('Sprite load error:', filename); + return res.status(404).send('File not found'); + } else { + if (format == 'json') res.header('Content-type', 'application/json'); + if (format == 'png') res.header('Content-type', 'image/png'); + return res.send(data); + } + }); + }); + return app; };