From c28c3ba57ba84dc78b5ce31265c9d67105275b77 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Sat, 25 Aug 2018 13:41:43 -0400 Subject: [PATCH] Test vector tile templates against OSM's imagery blacklist --- modules/renderer/background.js | 5 +---- modules/svg/data.js | 32 +++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/modules/renderer/background.js b/modules/renderer/background.js index 2754c1001..4b71ddfe1 100644 --- a/modules/renderer/background.js +++ b/modules/renderer/background.js @@ -172,10 +172,7 @@ export function rendererBackground(context) { var data = context.layers().layer('data'); if (data && data.enabled() && data.hasData()) { - // Include a string like '.gpx data file' or '.geojson data file' - var match = data.getSrc().match(/(kml|gpx|pbf|mvt|(?:geo)?json)$/i); - var extension = match ? ('.' + match[0].toLowerCase() + ' ') : ''; - imageryUsed.push(extension + 'data file'); + imageryUsed.push(data.getSrc()); } var streetside = context.layers().layer('streetside'); diff --git a/modules/svg/data.js b/modules/svg/data.js index 8be1a551c..0193c90f0 100644 --- a/modules/svg/data.js +++ b/modules/svg/data.js @@ -350,7 +350,7 @@ export function svgData(projection, context, dispatch) { if (!_isEmpty(gj)) { _geojson = ensureIDs(gj); - _src = src || 'unknown.geojson'; + _src = extension + ' data file'; this.fitZoom(); } @@ -387,13 +387,39 @@ export function svgData(projection, context, dispatch) { }; - drawData.template = function(val) { + drawData.template = function(val, src) { if (!arguments.length) return _template; + // test source against OSM imagery blacklists.. + var osm = context.connection(); + if (osm) { + var blacklists = osm.imageryBlacklists(); + var fail = false; + var tested = 0; + var regex; + + for (var i = 0; i < blacklists.length; i++) { + try { + regex = new RegExp(blacklists[i]); + fail = regex.test(val); + tested++; + if (fail) break; + } catch (e) { + /* noop */ + } + } + + // ensure at least one test was run. + if (!tested) { + regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'); + fail = regex.test(val); + } + } + _template = val; _fileList = null; _geojson = null; - _src = 'vector tiles'; + _src = src || 'vectortile:' + val; dispatch.call('change'); return this;