Removing the simpleFilterSerializer method on OpenLayers.Protocol in favor of a format for serializing filters for use with query strings. r=sbrunner (closes #3163)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@11758 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -247,7 +247,6 @@
|
|||||||
"OpenLayers/Filter/Function.js",
|
"OpenLayers/Filter/Function.js",
|
||||||
"OpenLayers/Protocol.js",
|
"OpenLayers/Protocol.js",
|
||||||
"OpenLayers/Protocol/HTTP.js",
|
"OpenLayers/Protocol/HTTP.js",
|
||||||
"OpenLayers/Protocol/SimpleFilterSerializer.js",
|
|
||||||
"OpenLayers/Protocol/SQL.js",
|
"OpenLayers/Protocol/SQL.js",
|
||||||
"OpenLayers/Protocol/SQL/Gears.js",
|
"OpenLayers/Protocol/SQL/Gears.js",
|
||||||
"OpenLayers/Protocol/WFS.js",
|
"OpenLayers/Protocol/WFS.js",
|
||||||
@@ -264,6 +263,7 @@
|
|||||||
"OpenLayers/StyleMap.js",
|
"OpenLayers/StyleMap.js",
|
||||||
"OpenLayers/Rule.js",
|
"OpenLayers/Rule.js",
|
||||||
"OpenLayers/Format.js",
|
"OpenLayers/Format.js",
|
||||||
|
"OpenLayers/Format/QueryStringFilter.js",
|
||||||
"OpenLayers/Format/XML.js",
|
"OpenLayers/Format/XML.js",
|
||||||
"OpenLayers/Format/Context.js",
|
"OpenLayers/Format/Context.js",
|
||||||
"OpenLayers/Format/ArcXML.js",
|
"OpenLayers/Format/ArcXML.js",
|
||||||
|
|||||||
180
lib/OpenLayers/Format/QueryStringFilter.js
Normal file
180
lib/OpenLayers/Format/QueryStringFilter.js
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for
|
||||||
|
* full list of contributors). Published under the Clear BSD license.
|
||||||
|
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the
|
||||||
|
* full text of the license. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires OpenLayers/Format.js
|
||||||
|
* @requires OpenLayers/Filter/Comparison.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class: OpenLayers.Format.QueryStringFilter
|
||||||
|
* Parser for reading a query string and creating a simple filter.
|
||||||
|
*
|
||||||
|
* Inherits from:
|
||||||
|
* - <OpenLayers.Format>
|
||||||
|
*/
|
||||||
|
OpenLayers.Format.QueryStringFilter = (function() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map the OpenLayers.Filter.Comparison types to the operation strings of
|
||||||
|
* the protocol.
|
||||||
|
*/
|
||||||
|
var cmpToStr = {};
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.EQUAL_TO] = "eq";
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.NOT_EQUAL_TO] = "ne";
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.LESS_THAN] = "lt";
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO] = "lte";
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.GREATER_THAN] = "gt";
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO] = "gte";
|
||||||
|
cmpToStr[OpenLayers.Filter.Comparison.LIKE] = "ilike";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function: regex2value
|
||||||
|
* Convert the value from a regular expression string to a LIKE/ILIKE
|
||||||
|
* string known to the web service.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* value - {String} The regex string.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* {String} The converted string.
|
||||||
|
*/
|
||||||
|
function regex2value(value) {
|
||||||
|
|
||||||
|
// highly sensitive!! Do not change this without running the
|
||||||
|
// Protocol/HTTP.html unit tests
|
||||||
|
|
||||||
|
// convert % to \%
|
||||||
|
value = value.replace(/%/g, "\\%");
|
||||||
|
|
||||||
|
// convert \\. to \\_ (\\.* occurences converted later)
|
||||||
|
value = value.replace(/\\\\\.(\*)?/g, function($0, $1) {
|
||||||
|
return $1 ? $0 : "\\\\_";
|
||||||
|
});
|
||||||
|
|
||||||
|
// convert \\.* to \\%
|
||||||
|
value = value.replace(/\\\\\.\*/g, "\\\\%");
|
||||||
|
|
||||||
|
// convert . to _ (\. and .* occurences converted later)
|
||||||
|
value = value.replace(/(\\)?\.(\*)?/g, function($0, $1, $2) {
|
||||||
|
return $1 || $2 ? $0 : "_";
|
||||||
|
});
|
||||||
|
|
||||||
|
// convert .* to % (\.* occurnces converted later)
|
||||||
|
value = value.replace(/(\\)?\.\*/g, function($0, $1) {
|
||||||
|
return $1 ? $0 : "%";
|
||||||
|
});
|
||||||
|
|
||||||
|
// convert \. to .
|
||||||
|
value = value.replace(/\\\./g, ".");
|
||||||
|
|
||||||
|
// replace \* with * (watching out for \\*)
|
||||||
|
value = value.replace(/(\\)?\\\*/g, function($0, $1) {
|
||||||
|
return $1 ? $0 : "*";
|
||||||
|
});
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return OpenLayers.Class(OpenLayers.Format, {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Property: wildcarded.
|
||||||
|
* {Boolean} If true percent signs are added around values
|
||||||
|
* read from LIKE filters, for example if the protocol
|
||||||
|
* read method is passed a LIKE filter whose property
|
||||||
|
* is "foo" and whose value is "bar" the string
|
||||||
|
* "foo__ilike=%bar%" will be sent in the query string;
|
||||||
|
* defaults to false.
|
||||||
|
*/
|
||||||
|
wildcarded: false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: srsInBBOX
|
||||||
|
* {Boolean} Include the SRS identifier in BBOX query string parameter.
|
||||||
|
* Default is false. If true and the layer has a projection object set,
|
||||||
|
* any BBOX filter will be serialized with a fifth item identifying the
|
||||||
|
* projection. E.g. bbox=-1000,-1000,1000,1000,EPSG:900913
|
||||||
|
*/
|
||||||
|
srsInBBOX: false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIMethod: write
|
||||||
|
* Serialize an <OpenLayers.Filter> objects using the "simple" filter syntax for
|
||||||
|
* query string parameters. This function must be called as a method of
|
||||||
|
* a protocol instance.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* filter - {<OpenLayers.Filter>} filter to convert.
|
||||||
|
* params - {Object} The parameters object.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* {Object} The resulting parameters object.
|
||||||
|
*/
|
||||||
|
write: function(filter, params) {
|
||||||
|
params = params || {};
|
||||||
|
var className = filter.CLASS_NAME;
|
||||||
|
var filterType = className.substring(className.lastIndexOf(".") + 1);
|
||||||
|
switch (filterType) {
|
||||||
|
case "Spatial":
|
||||||
|
switch (filter.type) {
|
||||||
|
case OpenLayers.Filter.Spatial.BBOX:
|
||||||
|
params.bbox = filter.value.toArray();
|
||||||
|
if (this.srsInBBOX && filter.projection) {
|
||||||
|
params.bbox.push(filter.projection.getCode());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OpenLayers.Filter.Spatial.DWITHIN:
|
||||||
|
params.tolerance = filter.distance;
|
||||||
|
// no break here
|
||||||
|
case OpenLayers.Filter.Spatial.WITHIN:
|
||||||
|
params.lon = filter.value.x;
|
||||||
|
params.lat = filter.value.y;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
OpenLayers.Console.warn(
|
||||||
|
"Unknown spatial filter type " + filter.type);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Comparison":
|
||||||
|
var op = cmpToStr[filter.type];
|
||||||
|
if (op !== undefined) {
|
||||||
|
var value = filter.value;
|
||||||
|
if (filter.type == OpenLayers.Filter.Comparison.LIKE) {
|
||||||
|
value = regex2value(value);
|
||||||
|
if (this.wildcarded) {
|
||||||
|
value = "%" + value + "%";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params[filter.property + "__" + op] = value;
|
||||||
|
params.queryable = params.queryable || [];
|
||||||
|
params.queryable.push(filter.property);
|
||||||
|
} else {
|
||||||
|
OpenLayers.Console.warn(
|
||||||
|
"Unknown comparison filter type " + filter.type);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Logical":
|
||||||
|
if (filter.type === OpenLayers.Filter.Logical.AND) {
|
||||||
|
for (var i=0,len=filter.filters.length; i<len; i++) {
|
||||||
|
params = this.write(filter.filters[i], params);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OpenLayers.Console.warn(
|
||||||
|
"Unsupported logical filter type " + filter.type);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
OpenLayers.Console.warn("Unknown filter type " + filterType);
|
||||||
|
}
|
||||||
|
return params;
|
||||||
|
},
|
||||||
|
|
||||||
|
CLASS_NAME: "OpenLayers.Format.QueryStringFilter"
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: remove this dependency in 3.0
|
* TODO: remove this dependency in 3.0
|
||||||
* @requires OpenLayers/Protocol/SimpleFilterSerializer.js
|
* @requires OpenLayers/Format/QueryStringFilter.js
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -115,10 +115,14 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
|
|||||||
this.headers = {};
|
this.headers = {};
|
||||||
OpenLayers.Protocol.prototype.initialize.apply(this, arguments);
|
OpenLayers.Protocol.prototype.initialize.apply(this, arguments);
|
||||||
|
|
||||||
if (!this.filterToParams && OpenLayers.Protocol.simpleFilterSerializer) {
|
if (!this.filterToParams && OpenLayers.Format.QueryStringFilter) {
|
||||||
this.filterToParams = OpenLayers.Function.bind(
|
var format = new OpenLayers.Format.QueryStringFilter({
|
||||||
OpenLayers.Protocol.simpleFilterSerializer, this
|
wildcarded: this.wildcarded,
|
||||||
);
|
srsInBBOX: this.srsInBBOX
|
||||||
|
});
|
||||||
|
this.filterToParams = function(filter, params) {
|
||||||
|
return format.write(filter, params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,17 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
|
|||||||
*/
|
*/
|
||||||
pendingRequests: null,
|
pendingRequests: null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: srsInBBOX
|
||||||
|
* {Boolean} Include the SRS identifier in BBOX query string parameter.
|
||||||
|
* Setting this property has no effect if a custom filterToParams method
|
||||||
|
* is provided. Default is false. If true and the layer has a
|
||||||
|
* projection object set, any BBOX filter will be serialized with a
|
||||||
|
* fifth item identifying the projection.
|
||||||
|
* E.g. bbox=-1000,-1000,1000,1000,EPSG:900913
|
||||||
|
*/
|
||||||
|
srsInBBOX: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor: OpenLayers.Protocol.Script
|
* Constructor: OpenLayers.Protocol.Script
|
||||||
* A class for giving layers generic Script protocol.
|
* A class for giving layers generic Script protocol.
|
||||||
@@ -113,10 +124,13 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
|
|||||||
this.format = new OpenLayers.Format.GeoJSON();
|
this.format = new OpenLayers.Format.GeoJSON();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.filterToParams && OpenLayers.Protocol.simpleFilterSerializer) {
|
if (!this.filterToParams && OpenLayers.Format.QueryStringFilter) {
|
||||||
this.filterToParams = OpenLayers.Function.bind(
|
var format = new OpenLayers.Format.QueryStringFilter({
|
||||||
OpenLayers.Protocol.simpleFilterSerializer, this
|
srsInBBOX: this.srsInBBOX
|
||||||
);
|
});
|
||||||
|
this.filterToParams = function(filter, params) {
|
||||||
|
return format.write(filter, params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,145 +0,0 @@
|
|||||||
/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for
|
|
||||||
* full list of contributors). Published under the Clear BSD license.
|
|
||||||
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the
|
|
||||||
* full text of the license. */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @requires OpenLayers/Protocol.js
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function: OpenLayers.Protocol.simpleFilterSerializer
|
|
||||||
* Serialize an <OpenLayers.Filter> objects using the "simple" filter syntax for
|
|
||||||
* query string parameters. This function must be called as a method of
|
|
||||||
* a protocol instance.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* filter - {<OpenLayers.Filter>} filter to convert.
|
|
||||||
* params - {Object} The parameters object.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* {Object} The resulting parameters object.
|
|
||||||
*/
|
|
||||||
OpenLayers.Protocol.simpleFilterSerializer = (function() {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Map the OpenLayers.Filter.Comparison types to the operation strings of
|
|
||||||
* the protocol.
|
|
||||||
*/
|
|
||||||
var cmpToStr = {};
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.EQUAL_TO] = "eq";
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.NOT_EQUAL_TO] = "ne";
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.LESS_THAN] = "lt";
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO] = "lte";
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.GREATER_THAN] = "gt";
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO] = "gte";
|
|
||||||
cmpToStr[OpenLayers.Filter.Comparison.LIKE] = "ilike";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function: regex2value
|
|
||||||
* Convert the value from a regular expression string to a LIKE/ILIKE
|
|
||||||
* string known to the web service.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* value - {String} The regex string.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* {String} The converted string.
|
|
||||||
*/
|
|
||||||
function regex2value(value) {
|
|
||||||
|
|
||||||
// highly sensitive!! Do not change this without running the
|
|
||||||
// Protocol/HTTP.html unit tests
|
|
||||||
|
|
||||||
// convert % to \%
|
|
||||||
value = value.replace(/%/g, "\\%");
|
|
||||||
|
|
||||||
// convert \\. to \\_ (\\.* occurences converted later)
|
|
||||||
value = value.replace(/\\\\\.(\*)?/g, function($0, $1) {
|
|
||||||
return $1 ? $0 : "\\\\_";
|
|
||||||
});
|
|
||||||
|
|
||||||
// convert \\.* to \\%
|
|
||||||
value = value.replace(/\\\\\.\*/g, "\\\\%");
|
|
||||||
|
|
||||||
// convert . to _ (\. and .* occurences converted later)
|
|
||||||
value = value.replace(/(\\)?\.(\*)?/g, function($0, $1, $2) {
|
|
||||||
return $1 || $2 ? $0 : "_";
|
|
||||||
});
|
|
||||||
|
|
||||||
// convert .* to % (\.* occurnces converted later)
|
|
||||||
value = value.replace(/(\\)?\.\*/g, function($0, $1) {
|
|
||||||
return $1 ? $0 : "%";
|
|
||||||
});
|
|
||||||
|
|
||||||
// convert \. to .
|
|
||||||
value = value.replace(/\\\./g, ".");
|
|
||||||
|
|
||||||
// replace \* with * (watching out for \\*)
|
|
||||||
value = value.replace(/(\\)?\\\*/g, function($0, $1) {
|
|
||||||
return $1 ? $0 : "*";
|
|
||||||
});
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return function simpleFilterSerializer(filter, params) {
|
|
||||||
params = params || {};
|
|
||||||
var className = filter.CLASS_NAME;
|
|
||||||
var filterType = className.substring(className.lastIndexOf(".") + 1);
|
|
||||||
switch (filterType) {
|
|
||||||
case "Spatial":
|
|
||||||
switch (filter.type) {
|
|
||||||
case OpenLayers.Filter.Spatial.BBOX:
|
|
||||||
params.bbox = filter.value.toArray();
|
|
||||||
if (this.srsInBBOX && filter.projection) {
|
|
||||||
params.bbox.push(filter.projection.getCode());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OpenLayers.Filter.Spatial.DWITHIN:
|
|
||||||
params.tolerance = filter.distance;
|
|
||||||
// no break here
|
|
||||||
case OpenLayers.Filter.Spatial.WITHIN:
|
|
||||||
params.lon = filter.value.x;
|
|
||||||
params.lat = filter.value.y;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
OpenLayers.Console.warn(
|
|
||||||
"Unknown spatial filter type " + filter.type);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "Comparison":
|
|
||||||
var op = cmpToStr[filter.type];
|
|
||||||
if (op !== undefined) {
|
|
||||||
var value = filter.value;
|
|
||||||
if (filter.type == OpenLayers.Filter.Comparison.LIKE) {
|
|
||||||
value = regex2value(value);
|
|
||||||
if (this.wildcarded) {
|
|
||||||
value = "%" + value + "%";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
params[filter.property + "__" + op] = value;
|
|
||||||
params.queryable = params.queryable || [];
|
|
||||||
params.queryable.push(filter.property);
|
|
||||||
} else {
|
|
||||||
OpenLayers.Console.warn(
|
|
||||||
"Unknown comparison filter type " + filter.type);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "Logical":
|
|
||||||
if (filter.type === OpenLayers.Filter.Logical.AND) {
|
|
||||||
for (var i=0,len=filter.filters.length; i<len; i++) {
|
|
||||||
params = this.filterToParams(filter.filters[i], params);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
OpenLayers.Console.warn(
|
|
||||||
"Unsupported logical filter type " + filter.type);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
OpenLayers.Console.warn("Unknown filter type " + filterType);
|
|
||||||
}
|
|
||||||
return params;
|
|
||||||
};
|
|
||||||
|
|
||||||
})();
|
|
||||||
@@ -3,26 +3,33 @@
|
|||||||
<script src="../../lib/OpenLayers.js"></script>
|
<script src="../../lib/OpenLayers.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function test_constructor(t) {
|
||||||
|
t.plan(4);
|
||||||
|
var options = {'foo': 'bar'};
|
||||||
|
var format = new OpenLayers.Format.QueryStringFilter(options);
|
||||||
|
t.ok(format instanceof OpenLayers.Format.QueryStringFilter,
|
||||||
|
"new OpenLayers.Format.QueryStringFilter object");
|
||||||
|
t.eq(format.foo, "bar", "constructor sets options correctly")
|
||||||
|
t.eq(typeof format.write, 'function', 'format has a write function');
|
||||||
|
t.eq(format.options, options, "format.options correctly set");
|
||||||
|
}
|
||||||
|
|
||||||
function test_filterToParams(t) {
|
function test_write(t) {
|
||||||
t.plan(30);
|
t.plan(30);
|
||||||
|
|
||||||
// setup
|
// setup
|
||||||
|
|
||||||
var protocol, filter, params;
|
var format, filter, params;
|
||||||
|
|
||||||
protocol = new OpenLayers.Protocol.HTTP({
|
format = new OpenLayers.Format.QueryStringFilter();
|
||||||
filterToParams: OpenLayers.Protocol.simpleFilterSerializer
|
|
||||||
});
|
|
||||||
|
|
||||||
// 1 test
|
// 1 test
|
||||||
var filter = new OpenLayers.Filter.Spatial({
|
filter = new OpenLayers.Filter.Spatial({
|
||||||
type: OpenLayers.Filter.Spatial.BBOX,
|
type: OpenLayers.Filter.Spatial.BBOX,
|
||||||
value: new OpenLayers.Bounds(0, 1, 2, 3)
|
value: new OpenLayers.Bounds(0, 1, 2, 3)
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.bbox, [0, 1, 2, 3],
|
t.eq(params.bbox, [0, 1, 2, 3], "correct bbox param if passed a BBOX filter");
|
||||||
"filterToParams sets correct bbox param if passed a BBOX filter");
|
|
||||||
|
|
||||||
// 3 tests
|
// 3 tests
|
||||||
var lon = 100, lat = 200, tolerance = 10;
|
var lon = 100, lat = 200, tolerance = 10;
|
||||||
@@ -31,24 +38,19 @@
|
|||||||
value: new OpenLayers.Geometry.Point(lon, lat),
|
value: new OpenLayers.Geometry.Point(lon, lat),
|
||||||
distance: tolerance
|
distance: tolerance
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.lon, lon,
|
t.eq(params.lon, lon, "correct lon param if passed a DWITHIN filter");
|
||||||
"filterToParams sets correct lon param if passed a DWITHIN filter");
|
t.eq(params.lat, lat, "correct lat param if passed a DWITHIN filter");
|
||||||
t.eq(params.lat, lat,
|
t.eq(params.tolerance, tolerance, "correct tolerance param if passed a DWITHIN filter");
|
||||||
"filterToParams sets correct lat param if passed a DWITHIN filter");
|
|
||||||
t.eq(params.tolerance, tolerance,
|
|
||||||
"filterToParams sets correct tolerance param if passed a DWITHIN filter");
|
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Spatial({
|
filter = new OpenLayers.Filter.Spatial({
|
||||||
type: OpenLayers.Filter.Spatial.WITHIN,
|
type: OpenLayers.Filter.Spatial.WITHIN,
|
||||||
value: new OpenLayers.Geometry.Point(lon, lat)
|
value: new OpenLayers.Geometry.Point(lon, lat)
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.lon, lon,
|
t.eq(params.lon, lon, "correct lon param if passed a WITHIN filter");
|
||||||
"filterToParams sets correct lon param if passed a WITHIN filter");
|
t.eq(params.lat, lat, "correct lat param if passed a WITHIN filter");
|
||||||
t.eq(params.lat, lat,
|
|
||||||
"filterToParams sets correct lat param if passed a WITHIN filter");
|
|
||||||
|
|
||||||
// Some bbox filters used in the next tests.
|
// Some bbox filters used in the next tests.
|
||||||
|
|
||||||
@@ -67,9 +69,8 @@
|
|||||||
type: OpenLayers.Filter.Logical.AND,
|
type: OpenLayers.Filter.Logical.AND,
|
||||||
filters: []
|
filters: []
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params, {},
|
t.eq(params, {}, "returns empty object if given empty AND Logical filter");
|
||||||
"filterToParams returns empty object if given empty AND Logical filter");
|
|
||||||
|
|
||||||
// 1 test
|
// 1 test
|
||||||
filter = new OpenLayers.Filter.Logical({
|
filter = new OpenLayers.Filter.Logical({
|
||||||
@@ -78,9 +79,8 @@
|
|||||||
bboxFilter1
|
bboxFilter1
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params, {},
|
t.eq(params, {}, "does not support OR Logical filter");
|
||||||
"filterToParams does not support OR Logical filter");
|
|
||||||
|
|
||||||
// 1 test
|
// 1 test
|
||||||
filter = new OpenLayers.Filter.Logical({
|
filter = new OpenLayers.Filter.Logical({
|
||||||
@@ -89,10 +89,9 @@
|
|||||||
bboxFilter1
|
bboxFilter1
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.bbox, [0, 0, 10, 10],
|
t.eq(params.bbox, [0, 0, 10, 10],
|
||||||
"filterToParams sets correct bbox param if passed " +
|
"correct bbox param if passed a Logical filter containing a BBOX");
|
||||||
"a Logical filter containing a BBOX");
|
|
||||||
|
|
||||||
// 1 test
|
// 1 test
|
||||||
filter = new OpenLayers.Filter.Logical({
|
filter = new OpenLayers.Filter.Logical({
|
||||||
@@ -101,10 +100,9 @@
|
|||||||
bboxFilter1, bboxFilter2
|
bboxFilter1, bboxFilter2
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.bbox, [0, 0, 20, 20],
|
t.eq(params.bbox, [0, 0, 20, 20],
|
||||||
"filterToParams sets correct bbox param if passed " +
|
"correct bbox param if passed multiple BBOX filter in a Logical filter");
|
||||||
"multiple BBOX filter in a Logical filter");
|
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -112,11 +110,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an EQUAL_TO filter");
|
"correct queryable param if passed an EQUAL_TO filter");
|
||||||
t.eq(params["foo__eq"], "bar",
|
t.eq(params["foo__eq"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an EQUAL_TO filter");
|
"correct param key and value if passed an EQUAL_TO filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -124,11 +122,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an NOT_EQUAL_TO filter");
|
"correct queryable param if passed an NOT_EQUAL_TO filter");
|
||||||
t.eq(params["foo__ne"], "bar",
|
t.eq(params["foo__ne"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an NOT_EQUAL_TO filter");
|
"correct param key and value if passed an NOT_EQUAL_TO filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -136,11 +134,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
var params = protocol.filterToParams(filter);
|
var params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an LESS_THAN filter");
|
"correct queryable param if passed an LESS_THAN filter");
|
||||||
t.eq(params["foo__lt"], "bar",
|
t.eq(params["foo__lt"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an LESS_THAN filter");
|
"correct param key and value if passed an LESS_THAN filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -148,11 +146,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
var params = protocol.filterToParams(filter);
|
var params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an LESS_THAN_OR_EQUAL_TO filter");
|
"correct queryable param if passed an LESS_THAN_OR_EQUAL_TO filter");
|
||||||
t.eq(params["foo__lte"], "bar",
|
t.eq(params["foo__lte"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an LESS_THAN_OR_EQUAL_TO filter");
|
"correct param key and value if passed an LESS_THAN_OR_EQUAL_TO filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -160,11 +158,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an GREATER_THAN filter");
|
"correct queryable param if passed an GREATER_THAN filter");
|
||||||
t.eq(params["foo__gt"], "bar",
|
t.eq(params["foo__gt"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an GREATER_THAN filter");
|
"correct param key and value if passed an GREATER_THAN filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -172,11 +170,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an GREATER_THAN_OR_EQUAL_TO filter");
|
"correct queryable param if passed an GREATER_THAN_OR_EQUAL_TO filter");
|
||||||
t.eq(params["foo__gte"], "bar",
|
t.eq(params["foo__gte"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an GREATER_THAN_OR_EQUAL_TO filter");
|
"correct param key and value if passed an GREATER_THAN_OR_EQUAL_TO filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -184,11 +182,11 @@
|
|||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed a LIKE filter");
|
"correct queryable param if passed a LIKE filter");
|
||||||
t.eq(params["foo__ilike"], "bar",
|
t.eq(params["foo__ilike"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an LIKE filter");
|
"correct param key and value if passed an LIKE filter");
|
||||||
|
|
||||||
// 4 tests
|
// 4 tests
|
||||||
filter = new OpenLayers.Filter.Logical({
|
filter = new OpenLayers.Filter.Logical({
|
||||||
@@ -206,28 +204,28 @@
|
|||||||
})
|
})
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed an EQUAL_TO filter within a AND filter");
|
"correct queryable param if passed an EQUAL_TO filter within a AND filter");
|
||||||
t.eq(params["foo__eq"], "bar",
|
t.eq(params["foo__eq"], "bar",
|
||||||
"filterToParams sets correct param key and value if passed an EQUAL_TO filter within a AND filter");
|
"correct param key and value if passed an EQUAL_TO filter within a AND filter");
|
||||||
t.eq(params.queryable[1], "foo2",
|
t.eq(params.queryable[1], "foo2",
|
||||||
"filterToParams sets correct queryable param if passed a LESS_THAN filter within a AND filter");
|
"correct queryable param if passed a LESS_THAN filter within a AND filter");
|
||||||
t.eq(params["foo2__lt"], "baz",
|
t.eq(params["foo2__lt"], "baz",
|
||||||
"filterToParams sets correct param key and value if passed a LESS_THAN filter within a AND filter");
|
"correct param key and value if passed a LESS_THAN filter within a AND filter");
|
||||||
|
|
||||||
// 2 tests
|
// 2 tests
|
||||||
protocol = new OpenLayers.Protocol.HTTP({wildcarded: true});
|
format = new OpenLayers.Format.QueryStringFilter({wildcarded: true});
|
||||||
filter = new OpenLayers.Filter.Comparison({
|
filter = new OpenLayers.Filter.Comparison({
|
||||||
type: OpenLayers.Filter.Comparison.LIKE,
|
type: OpenLayers.Filter.Comparison.LIKE,
|
||||||
property: "foo",
|
property: "foo",
|
||||||
value: "bar"
|
value: "bar"
|
||||||
});
|
});
|
||||||
params = protocol.filterToParams(filter);
|
params = format.write(filter);
|
||||||
t.eq(params.queryable[0], "foo",
|
t.eq(params.queryable[0], "foo",
|
||||||
"filterToParams sets correct queryable param if passed a LIKE filter (wildcarded true)");
|
"correct queryable param if passed a LIKE filter (wildcarded true)");
|
||||||
t.eq(params["foo__ilike"], "%bar%",
|
t.eq(params["foo__ilike"], "%bar%",
|
||||||
"filterToParams sets correct param key and value if passed an LIKE filter (wildcarded true)");
|
"correct param key and value if passed an LIKE filter (wildcarded true)");
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_regex2value(t) {
|
function test_regex2value(t) {
|
||||||
@@ -235,9 +233,7 @@
|
|||||||
|
|
||||||
// setup
|
// setup
|
||||||
|
|
||||||
var protocol = new OpenLayers.Protocol.HTTP({
|
var format = new OpenLayers.Format.QueryStringFilter();
|
||||||
filterToParams: OpenLayers.Protocol.simpleFilterSerializer
|
|
||||||
});
|
|
||||||
|
|
||||||
var value;
|
var value;
|
||||||
var filter = new OpenLayers.Filter.Comparison({
|
var filter = new OpenLayers.Filter.Comparison({
|
||||||
@@ -247,7 +243,7 @@
|
|||||||
|
|
||||||
function serialize(value) {
|
function serialize(value) {
|
||||||
filter.value = value;
|
filter.value = value;
|
||||||
return protocol.filterToParams(filter).prop__ilike;
|
return format.write(filter).prop__ilike;
|
||||||
}
|
}
|
||||||
|
|
||||||
// test
|
// test
|
||||||
@@ -74,6 +74,7 @@
|
|||||||
<li>Format/Filter/v1.html</li>
|
<li>Format/Filter/v1.html</li>
|
||||||
<li>Format/Filter/v1_0_0.html</li>
|
<li>Format/Filter/v1_0_0.html</li>
|
||||||
<li>Format/Filter/v1_1_0.html</li>
|
<li>Format/Filter/v1_1_0.html</li>
|
||||||
|
<li>Format/QueryStringFilter.html</li>
|
||||||
<li>Format/WFS.html</li>
|
<li>Format/WFS.html</li>
|
||||||
<li>Format/WFSCapabilities.html</li>
|
<li>Format/WFSCapabilities.html</li>
|
||||||
<li>Format/WFSCapabilities/v1.html</li>
|
<li>Format/WFSCapabilities/v1.html</li>
|
||||||
@@ -179,7 +180,6 @@
|
|||||||
<li>Protocol.html</li>
|
<li>Protocol.html</li>
|
||||||
<li>Protocol/HTTP.html</li>
|
<li>Protocol/HTTP.html</li>
|
||||||
<li>Protocol/Script.html</li>
|
<li>Protocol/Script.html</li>
|
||||||
<li>Protocol/SimpleFilterSerializer.html</li>
|
|
||||||
<li>Protocol/SQL.html</li>
|
<li>Protocol/SQL.html</li>
|
||||||
<li>Protocol/SQL/Gears.html</li>
|
<li>Protocol/SQL/Gears.html</li>
|
||||||
<li>Protocol/WFS.html</li>
|
<li>Protocol/WFS.html</li>
|
||||||
|
|||||||
Reference in New Issue
Block a user