From dc93478e6bcc0e827bbfdb7663e743fef6cfdba7 Mon Sep 17 00:00:00 2001 From: Matt Priour Date: Wed, 8 Aug 2012 22:34:26 -0500 Subject: [PATCH 1/3] Move zeroPad function to BaseTypes and add tests for it --- lib/OpenLayers/BaseTypes.js | 20 +++++++++++++++++++- tests/BaseTypes.html | 11 +++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/OpenLayers/BaseTypes.js b/lib/OpenLayers/BaseTypes.js index b0c96956a7..87617da3c5 100644 --- a/lib/OpenLayers/BaseTypes.js +++ b/lib/OpenLayers/BaseTypes.js @@ -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; + } }; /** diff --git a/tests/BaseTypes.html b/tests/BaseTypes.html index cc391003da..045ac65491 100644 --- a/tests/BaseTypes.html +++ b/tests/BaseTypes.html @@ -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); From a83ab56f97f0e73fbea7b4cf08937b90f6443af8 Mon Sep 17 00:00:00 2001 From: Matt Priour Date: Wed, 8 Aug 2012 22:36:39 -0500 Subject: [PATCH 2/3] Modify classes which contained an internal numeric zero padding function to use the one in BaseTypes instead --- lib/OpenLayers/BaseTypes/Date.js | 19 ++++++------------ lib/OpenLayers/Layer/ArcGISCache.js | 24 +++------------------- lib/OpenLayers/Layer/TileCache.js | 31 ++++++++--------------------- 3 files changed, 17 insertions(+), 57 deletions(-) diff --git a/lib/OpenLayers/BaseTypes/Date.js b/lib/OpenLayers/BaseTypes/Date.js index 937b12d108..e7da56eb6f 100644 --- a/lib/OpenLayers/BaseTypes/Date.js +++ b/lib/OpenLayers/BaseTypes/Date.js @@ -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; }; diff --git a/lib/OpenLayers/Layer/ArcGISCache.js b/lib/OpenLayers/Layer/ArcGISCache.js index 27173392c4..8c27c41431 100644 --- a/lib/OpenLayers/Layer/ArcGISCache.js +++ b/lib/OpenLayers/Layer/ArcGISCache.js @@ -443,9 +443,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; } @@ -457,23 +457,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' }); diff --git a/lib/OpenLayers/Layer/TileCache.js b/lib/OpenLayers/Layer/TileCache.js index e4e92e9766..3008979c1f 100644 --- a/lib/OpenLayers/Layer/TileCache.js +++ b/lib/OpenLayers/Layer/TileCache.js @@ -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 Date: Tue, 8 Jan 2013 13:10:15 -0600 Subject: [PATCH 3/3] Use BaseTypes zeropad function in ArcGISCache tests --- tests/Layer/ArcGISCache.html | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/Layer/ArcGISCache.html b/tests/Layer/ArcGISCache.html index 0b54464493..b5ed5d5aaf 100644 --- a/tests/Layer/ArcGISCache.html +++ b/tests/Layer/ArcGISCache.html @@ -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 '); } /**