Allow more than one digit range in ol.TileUrlFunction.expandUrl

To be able to have number range like `{9-13}`
This commit is contained in:
Frederic Junod
2016-09-05 11:03:03 +02:00
parent bdced57162
commit 2591f61fd3
2 changed files with 31 additions and 3 deletions
+13 -3
View File
@@ -107,16 +107,26 @@ ol.TileUrlFunction.nullTileUrlFunction = function(tileCoord, pixelRatio, project
*/ */
ol.TileUrlFunction.expandUrl = function(url) { ol.TileUrlFunction.expandUrl = function(url) {
var urls = []; var urls = [];
var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); var match = /\{([a-z])-([a-z])\}/.exec(url);
if (match) { if (match) {
// char range
var startCharCode = match[1].charCodeAt(0); var startCharCode = match[1].charCodeAt(0);
var stopCharCode = match[2].charCodeAt(0); var stopCharCode = match[2].charCodeAt(0);
var charCode; var charCode;
for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) { for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {
urls.push(url.replace(match[0], String.fromCharCode(charCode))); urls.push(url.replace(match[0], String.fromCharCode(charCode)));
} }
} else { return urls;
urls.push(url);
} }
match = match = /\{(\d+)-(\d+)\}/.exec(url);
if (match) {
// number range
var stop = parseInt(match[2], 10);
for (var i = parseInt(match[1], 10); i <= stop; i++) {
urls.push(url.replace(match[0], i.toString()));
}
return urls;
}
urls.push(url);
return urls; return urls;
}; };
+18
View File
@@ -18,6 +18,15 @@ describe('ol.TileUrlFunction', function() {
'http://tile-3/{z}/{x}/{y}' 'http://tile-3/{z}/{x}/{y}'
]); ]);
}); });
it('creates expected URLs', function() {
var template = 'http://tile-{9-11}/{z}/{x}/{y}';
var urls = ol.TileUrlFunction.expandUrl(template);
expect(urls).to.eql([
'http://tile-9/{z}/{x}/{y}',
'http://tile-10/{z}/{x}/{y}',
'http://tile-11/{z}/{x}/{y}'
]);
});
}); });
describe('with character range', function() { describe('with character range', function() {
it('creates expected URLs', function() { it('creates expected URLs', function() {
@@ -30,6 +39,15 @@ describe('ol.TileUrlFunction', function() {
]); ]);
}); });
}); });
describe('without range', function() {
it('creates expected URLs', function() {
var template = 'http://tiles.example.com/{z}/{x}/{y}';
var urls = ol.TileUrlFunction.expandUrl(template);
expect(urls).to.eql([
'http://tiles.example.com/{z}/{x}/{y}'
]);
});
});
}); });
describe('createFromTemplate', function() { describe('createFromTemplate', function() {