Merge pull request #626 from mpriour/zeropad
Consolidate numeric zero padding functions (r=@bartvde)
This commit is contained in:
@@ -295,7 +295,25 @@ OpenLayers.Number = {
|
||||
str = integer + dsep + rem;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: zeroPad
|
||||
* Create a zero padded string optionally with a radix for casting numbers.
|
||||
*
|
||||
* Parameters:
|
||||
* num - {Number} The number to be zero padded.
|
||||
* len - {Number} The length of the string to be returned.
|
||||
* radix - {Number} An integer between 2 and 36 specifying the base to use
|
||||
* for representing numeric values.
|
||||
*/
|
||||
zeroPad: function(num, len, radix) {
|
||||
var str = num.toString(radix || 10);
|
||||
while (str.length < len) {
|
||||
str = "0" + str;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -49,13 +49,6 @@ OpenLayers.Date = {
|
||||
return date.toISOString();
|
||||
};
|
||||
} else {
|
||||
function pad(num, len) {
|
||||
var str = num + "";
|
||||
while (str.length < len) {
|
||||
str = "0" + str;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
return function(date) {
|
||||
var str;
|
||||
if (isNaN(date.getTime())) {
|
||||
@@ -65,12 +58,12 @@ OpenLayers.Date = {
|
||||
} else {
|
||||
str =
|
||||
date.getUTCFullYear() + "-" +
|
||||
pad(date.getUTCMonth() + 1, 2) + "-" +
|
||||
pad(date.getUTCDate(), 2) + "T" +
|
||||
pad(date.getUTCHours(), 2) + ":" +
|
||||
pad(date.getUTCMinutes(), 2) + ":" +
|
||||
pad(date.getUTCSeconds(), 2) + "." +
|
||||
pad(date.getUTCMilliseconds(), 3) + "Z";
|
||||
OpenLayers.Number.zeroPad(date.getUTCMonth() + 1, 2) + "-" +
|
||||
OpenLayers.Number.zeroPad(date.getUTCDate(), 2) + "T" +
|
||||
OpenLayers.Number.zeroPad(date.getUTCHours(), 2) + ":" +
|
||||
OpenLayers.Number.zeroPad(date.getUTCMinutes(), 2) + ":" +
|
||||
OpenLayers.Number.zeroPad(date.getUTCSeconds(), 2) + "." +
|
||||
OpenLayers.Number.zeroPad(date.getUTCMilliseconds(), 3) + "Z";
|
||||
}
|
||||
return str;
|
||||
};
|
||||
|
||||
@@ -457,9 +457,9 @@ OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, {
|
||||
url = url + '/tile/${z}/${y}/${x}';
|
||||
} else {
|
||||
// The tile images are stored using hex values on disk.
|
||||
x = 'C' + this.zeroPad(x, 8, 16);
|
||||
y = 'R' + this.zeroPad(y, 8, 16);
|
||||
z = 'L' + this.zeroPad(z, 2, 16);
|
||||
x = 'C' + OpenLayers.Number.zeroPad(x, 8, 16);
|
||||
y = 'R' + OpenLayers.Number.zeroPad(y, 8, 16);
|
||||
z = 'L' + OpenLayers.Number.zeroPad(z, 2, 16);
|
||||
url = url + '/${z}/${y}/${x}.' + this.type;
|
||||
}
|
||||
|
||||
@@ -471,23 +471,5 @@ OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, {
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: zeroPad
|
||||
* Create a zero padded string optionally with a radix for casting numbers.
|
||||
*
|
||||
* Parameters:
|
||||
* num - {Number} The number to be zero padded.
|
||||
* len - {Number} The length of the string to be returned.
|
||||
* radix - {Number} An integer between 2 and 36 specifying the base to use
|
||||
* for representing numeric values.
|
||||
*/
|
||||
zeroPad: function(num, len, radix) {
|
||||
var str = num.toString(radix || 10);
|
||||
while (str.length < len) {
|
||||
str = "0" + str;
|
||||
}
|
||||
return str;
|
||||
},
|
||||
|
||||
CLASS_NAME: 'OpenLayers.Layer.ArcGISCache'
|
||||
});
|
||||
|
||||
@@ -116,31 +116,16 @@ OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
||||
var tileZ = this.serverResolutions != null ?
|
||||
OpenLayers.Util.indexOf(this.serverResolutions, res) :
|
||||
this.map.getZoom();
|
||||
/**
|
||||
* Zero-pad a positive integer.
|
||||
* number - {Int}
|
||||
* length - {Int}
|
||||
*
|
||||
* Returns:
|
||||
* {String} A zero-padded string
|
||||
*/
|
||||
function zeroPad(number, length) {
|
||||
number = String(number);
|
||||
var zeros = [];
|
||||
for(var i=0; i<length; ++i) {
|
||||
zeros.push('0');
|
||||
}
|
||||
return zeros.join('').substring(0, length - number.length) + number;
|
||||
}
|
||||
|
||||
var components = [
|
||||
this.layername,
|
||||
zeroPad(tileZ, 2),
|
||||
zeroPad(parseInt(tileX / 1000000), 3),
|
||||
zeroPad((parseInt(tileX / 1000) % 1000), 3),
|
||||
zeroPad((parseInt(tileX) % 1000), 3),
|
||||
zeroPad(parseInt(tileY / 1000000), 3),
|
||||
zeroPad((parseInt(tileY / 1000) % 1000), 3),
|
||||
zeroPad((parseInt(tileY) % 1000), 3) + '.' + this.extension
|
||||
OpenLayers.Number.zeroPad(tileZ, 2),
|
||||
OpenLayers.Number.zeroPad(parseInt(tileX / 1000000), 3),
|
||||
OpenLayers.Number.zeroPad((parseInt(tileX / 1000) % 1000), 3),
|
||||
OpenLayers.Number.zeroPad((parseInt(tileX) % 1000), 3),
|
||||
OpenLayers.Number.zeroPad(parseInt(tileY / 1000000), 3),
|
||||
OpenLayers.Number.zeroPad((parseInt(tileY / 1000) % 1000), 3),
|
||||
OpenLayers.Number.zeroPad((parseInt(tileY) % 1000), 3) + '.' + this.extension
|
||||
];
|
||||
var path = components.join('/');
|
||||
var url = this.url;
|
||||
|
||||
@@ -278,6 +278,17 @@
|
||||
OpenLayers.Number.decimalSeparator = ",";
|
||||
t.eq(format(num, 3), "12.345,679", "changing thousands/decimal separator globally works");
|
||||
}
|
||||
|
||||
function test_Number_zeroPad(t) {
|
||||
t.plan(6);
|
||||
var pad = OpenLayers.Number.zeroPad;
|
||||
t.eq(pad(15, 4), "0015", "left padding works");
|
||||
t.eq(pad(15, 2), "15", "no left padding when equal to number of digits");
|
||||
t.eq(pad(15, 1), "15", "no left padding when less than number of digits");
|
||||
t.eq(pad(10, 5, 2), "01010", "radix modified and padding works");
|
||||
t.eq(pad(10, 5, 8), "00012", "radix modified and padding works");
|
||||
t.eq(pad(10, 5, 36), "0000a", "radix modified and padding works");
|
||||
}
|
||||
|
||||
function test_Function_bind(t) {
|
||||
t.plan(12);
|
||||
|
||||
@@ -187,7 +187,9 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* Check our utility function for generating tile indexes against a file cache
|
||||
* Check the utility function for generating tile indexes against a file cache
|
||||
* This is already tested in BaseTypes test, but these are specific,
|
||||
* common conversions that this class will rely on, so the tests are retained
|
||||
*/
|
||||
function test_Layer_ARCGISCACHE_zeroPad(t) {
|
||||
t.plan(4);
|
||||
@@ -195,10 +197,10 @@
|
||||
var layer = new OpenLayers.Layer.ArcGISCache('test', null, { });
|
||||
|
||||
//some tile examples
|
||||
t.ok('00000001' == layer.zeroPad(1, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00000020' == layer.zeroPad(32, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00000100' == layer.zeroPad(256, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00001000' == layer.zeroPad(4096, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00000001' == OpenLayers.Number.zeroPad(1, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00000020' == OpenLayers.Number.zeroPad(32, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00000100' == OpenLayers.Number.zeroPad(256, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
t.ok('00001000' == OpenLayers.Number.zeroPad(4096, 8, 16), 'zeroPad should generate tile indexes properly ');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user