From bf31b614e8becb8e414dff974196e399bd7b0d02 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 15 Jul 2012 22:21:25 +0200 Subject: [PATCH] Allow out-of-range signalling with undefined --- src/ol/tileurlfunction.js | 26 +++++++++++++++++++------- src/ol/tileurlfunction_test.js | 3 +++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/ol/tileurlfunction.js b/src/ol/tileurlfunction.js index c6a319a4e5..8135a644c6 100644 --- a/src/ol/tileurlfunction.js +++ b/src/ol/tileurlfunction.js @@ -6,7 +6,7 @@ goog.require('ol.TileCoord'); /** - * @typedef {function(ol.TileCoord): string} + * @typedef {function(ol.TileCoord): string|undefined} */ ol.TileUrlFunctionType; @@ -17,9 +17,13 @@ ol.TileUrlFunctionType; */ ol.TileUrlFunction.createFromTemplate = function(template) { return function(tileCoord) { - return template.replace(/\{z\}/, tileCoord.z) - .replace(/\{x\}/, tileCoord.x) - .replace(/\{y\}/, tileCoord.y); + if (goog.isNull(tileCoord)) { + return undefined; + } else { + return template.replace(/\{z\}/, tileCoord.z) + .replace(/\{x\}/, tileCoord.x) + .replace(/\{y\}/, tileCoord.y); + } }; }; @@ -30,8 +34,12 @@ ol.TileUrlFunction.createFromTemplate = function(template) { */ ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { return function(tileCoord) { - var index = goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length); - return tileUrlFunctions[index](tileCoord); + if (goog.isNull(tileCoord)) { + return undefined; + } else { + var index = goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length); + return tileUrlFunctions[index](tileCoord); + } }; }; @@ -54,6 +62,10 @@ ol.TileUrlFunction.createFromTemplates = function(templates) { ol.TileUrlFunction.withTileCoordTransform = function(transform, tileUrlFunction) { return function(tileCoord) { - return tileUrlFunction(transform(tileCoord)); + if (goog.isNull(tileCoord)) { + return undefined; + } else { + return tileUrlFunction(transform(tileCoord)); + } }; }; diff --git a/src/ol/tileurlfunction_test.js b/src/ol/tileurlfunction_test.js index b009ec49ec..965305eb96 100644 --- a/src/ol/tileurlfunction_test.js +++ b/src/ol/tileurlfunction_test.js @@ -6,6 +6,7 @@ goog.require('ol.TileUrlFunction'); function testCreateFromTemplate() { var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{x}/{y}'); assertEquals('3/2/1', tileUrl(new ol.TileCoord(3, 2, 1))); + assertUndefined(tileUrl(null)); } @@ -16,6 +17,7 @@ function testWithTileCoordTransform() { }, ol.TileUrlFunction.createFromTemplate('{z}/{x}/{y}')); assertEquals('3/2/1', tileUrl(new ol.TileCoord(3, 2, -1))); + assertUndefined(tileUrl(null)); } @@ -27,4 +29,5 @@ function testCreateFromTileUrlFunctions() { var tileUrl1 = tileUrl(new ol.TileCoord(1, 0, 0)); var tileUrl2 = tileUrl(new ol.TileCoord(1, 0, 1)); assertTrue(tileUrl1 != tileUrl2); + assertUndefined(tileUrl(null)); }