Merge pull request #626 from mpriour/zeropad

Consolidate numeric zero padding functions (r=@bartvde)
This commit is contained in:
Bart van den Eijnden
2013-01-09 00:26:17 -08:00
6 changed files with 54 additions and 63 deletions
+19 -1
View File
@@ -295,7 +295,25 @@ OpenLayers.Number = {
str = integer + dsep + rem; str = integer + dsep + rem;
} }
return str; 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;
}
}; };
/** /**
+6 -13
View File
@@ -49,13 +49,6 @@ OpenLayers.Date = {
return date.toISOString(); return date.toISOString();
}; };
} else { } else {
function pad(num, len) {
var str = num + "";
while (str.length < len) {
str = "0" + str;
}
return str;
}
return function(date) { return function(date) {
var str; var str;
if (isNaN(date.getTime())) { if (isNaN(date.getTime())) {
@@ -65,12 +58,12 @@ OpenLayers.Date = {
} else { } else {
str = str =
date.getUTCFullYear() + "-" + date.getUTCFullYear() + "-" +
pad(date.getUTCMonth() + 1, 2) + "-" + OpenLayers.Number.zeroPad(date.getUTCMonth() + 1, 2) + "-" +
pad(date.getUTCDate(), 2) + "T" + OpenLayers.Number.zeroPad(date.getUTCDate(), 2) + "T" +
pad(date.getUTCHours(), 2) + ":" + OpenLayers.Number.zeroPad(date.getUTCHours(), 2) + ":" +
pad(date.getUTCMinutes(), 2) + ":" + OpenLayers.Number.zeroPad(date.getUTCMinutes(), 2) + ":" +
pad(date.getUTCSeconds(), 2) + "." + OpenLayers.Number.zeroPad(date.getUTCSeconds(), 2) + "." +
pad(date.getUTCMilliseconds(), 3) + "Z"; OpenLayers.Number.zeroPad(date.getUTCMilliseconds(), 3) + "Z";
} }
return str; return str;
}; };
+3 -21
View File
@@ -457,9 +457,9 @@ OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, {
url = url + '/tile/${z}/${y}/${x}'; url = url + '/tile/${z}/${y}/${x}';
} else { } else {
// The tile images are stored using hex values on disk. // The tile images are stored using hex values on disk.
x = 'C' + this.zeroPad(x, 8, 16); x = 'C' + OpenLayers.Number.zeroPad(x, 8, 16);
y = 'R' + this.zeroPad(y, 8, 16); y = 'R' + OpenLayers.Number.zeroPad(y, 8, 16);
z = 'L' + this.zeroPad(z, 2, 16); z = 'L' + OpenLayers.Number.zeroPad(z, 2, 16);
url = url + '/${z}/${y}/${x}.' + this.type; 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' CLASS_NAME: 'OpenLayers.Layer.ArcGISCache'
}); });
+8 -23
View File
@@ -116,31 +116,16 @@ OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
var tileZ = this.serverResolutions != null ? var tileZ = this.serverResolutions != null ?
OpenLayers.Util.indexOf(this.serverResolutions, res) : OpenLayers.Util.indexOf(this.serverResolutions, res) :
this.map.getZoom(); 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 = [ var components = [
this.layername, this.layername,
zeroPad(tileZ, 2), OpenLayers.Number.zeroPad(tileZ, 2),
zeroPad(parseInt(tileX / 1000000), 3), OpenLayers.Number.zeroPad(parseInt(tileX / 1000000), 3),
zeroPad((parseInt(tileX / 1000) % 1000), 3), OpenLayers.Number.zeroPad((parseInt(tileX / 1000) % 1000), 3),
zeroPad((parseInt(tileX) % 1000), 3), OpenLayers.Number.zeroPad((parseInt(tileX) % 1000), 3),
zeroPad(parseInt(tileY / 1000000), 3), OpenLayers.Number.zeroPad(parseInt(tileY / 1000000), 3),
zeroPad((parseInt(tileY / 1000) % 1000), 3), OpenLayers.Number.zeroPad((parseInt(tileY / 1000) % 1000), 3),
zeroPad((parseInt(tileY) % 1000), 3) + '.' + this.extension OpenLayers.Number.zeroPad((parseInt(tileY) % 1000), 3) + '.' + this.extension
]; ];
var path = components.join('/'); var path = components.join('/');
var url = this.url; var url = this.url;
+11
View File
@@ -278,6 +278,17 @@
OpenLayers.Number.decimalSeparator = ","; OpenLayers.Number.decimalSeparator = ",";
t.eq(format(num, 3), "12.345,679", "changing thousands/decimal separator globally works"); 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) { function test_Function_bind(t) {
t.plan(12); t.plan(12);
+7 -5
View File
@@ -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) { function test_Layer_ARCGISCACHE_zeroPad(t) {
t.plan(4); t.plan(4);
@@ -195,10 +197,10 @@
var layer = new OpenLayers.Layer.ArcGISCache('test', null, { }); var layer = new OpenLayers.Layer.ArcGISCache('test', null, { });
//some tile examples //some tile examples
t.ok('00000001' == layer.zeroPad(1, 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' == layer.zeroPad(32, 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' == layer.zeroPad(256, 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' == layer.zeroPad(4096, 8, 16), 'zeroPad should generate tile indexes properly '); t.ok('00001000' == OpenLayers.Number.zeroPad(4096, 8, 16), 'zeroPad should generate tile indexes properly ');
} }
/** /**