From 8fb35571fe02f7a45d72c77a97d01a933e2b67b0 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Tue, 17 May 2016 15:00:18 +0200 Subject: [PATCH] Adds support for mapnik substitution token at turbo-carto level Goes green and fixes #455 --- lib/cartodb/api/overviews_metadata_api.js | 22 +++++++------------ .../utils/style/turbo-carto-adapter.js | 10 ++++++++- lib/cartodb/utils/substitution-tokens.js | 19 ++++++++++++++++ 3 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 lib/cartodb/utils/substitution-tokens.js diff --git a/lib/cartodb/api/overviews_metadata_api.js b/lib/cartodb/api/overviews_metadata_api.js index 2cec6bbb..55b4966f 100644 --- a/lib/cartodb/api/overviews_metadata_api.js +++ b/lib/cartodb/api/overviews_metadata_api.js @@ -1,24 +1,18 @@ +var SubstitutionTokens = require('../utils/substitution-tokens'); + function OverviewsMetadataApi(pgQueryRunner) { this.pgQueryRunner = pgQueryRunner; } module.exports = OverviewsMetadataApi; -// TODO: share this with QueryTablesApi? ... or maintain independence? -var affectedTableRegexCache = { - bbox: /!bbox!/g, - scale_denominator: /!scale_denominator!/g, - pixel_width: /!pixel_width!/g, - pixel_height: /!pixel_height!/g -}; - function prepareSql(sql) { - return sql && sql - .replace(affectedTableRegexCache.bbox, 'ST_MakeEnvelope(0,0,0,0)') - .replace(affectedTableRegexCache.scale_denominator, '0') - .replace(affectedTableRegexCache.pixel_width, '1') - .replace(affectedTableRegexCache.pixel_height, '1') - ; + return sql && SubstitutionTokens.replace(sql, { + bbox: 'ST_MakeEnvelope(0,0,0,0)', + scale_denominator: '0', + pixel_width: '1', + pixel_height: '1' + }); } OverviewsMetadataApi.prototype.getOverviewsMetadata = function (username, sql, callback) { diff --git a/lib/cartodb/utils/style/turbo-carto-adapter.js b/lib/cartodb/utils/style/turbo-carto-adapter.js index 7475c44a..d1c0c81f 100644 --- a/lib/cartodb/utils/style/turbo-carto-adapter.js +++ b/lib/cartodb/utils/style/turbo-carto-adapter.js @@ -1,6 +1,7 @@ 'use strict'; var queue = require('queue-async'); +var SubstitutionTokens = require('../substitution-tokens'); function TurboCartoAdapter(turboCartoParser) { this.turboCartoParser = turboCartoParser; @@ -37,7 +38,14 @@ TurboCartoAdapter.prototype._parseCartoCss = function (username, layer, callback }); } - this.turboCartoParser.process(username, layer.options.cartocss, layer.options.sql, function (err, cartocss) { + var sql = SubstitutionTokens.replace(layer.options.sql, { + bbox: 'ST_MakeEnvelope(-20037508.34,-20037508.34,20037508.34,20037508.34,3857)', + scale_denominator: '500000001', + pixel_width: '156412', + pixel_height: '156412' + }); + + this.turboCartoParser.process(username, layer.options.cartocss, sql, function (err, cartocss) { // Only return turbo-carto errors if (err && err.name === 'TurboCartoError') { err = new Error('turbo-carto: ' + err.message); diff --git a/lib/cartodb/utils/substitution-tokens.js b/lib/cartodb/utils/substitution-tokens.js new file mode 100644 index 00000000..af09f838 --- /dev/null +++ b/lib/cartodb/utils/substitution-tokens.js @@ -0,0 +1,19 @@ +var SUBSTITUTION_TOKENS = { + bbox: /!bbox!/g, + scale_denominator: /!scale_denominator!/g, + pixel_width: /!pixel_width!/g, + pixel_height: /!pixel_height!/g +}; + +var SubstitutionTokens = { + replace: function(sql, replaceValues) { + Object.keys(replaceValues).forEach(function(token) { + if (SUBSTITUTION_TOKENS[token]) { + sql = sql.replace(SUBSTITUTION_TOKENS[token], replaceValues[token]); + } + }); + return sql; + } +}; + +module.exports = SubstitutionTokens;