[Commits] r1995 - in core/trunk/geoext: lib/GeoExt/widgets lib/GeoExt/widgets/form tests/lib/GeoExt/widgets

commits at geoext.org commits at geoext.org
Wed Mar 17 15:28:08 CET 2010


Author: bartvde
Date: 2010-03-17 15:28:07 +0100 (Wed, 17 Mar 2010)
New Revision: 1995

Modified:
   core/trunk/geoext/lib/GeoExt/widgets/form.js
   core/trunk/geoext/lib/GeoExt/widgets/form/SearchAction.js
   core/trunk/geoext/tests/lib/GeoExt/widgets/form.html
Log:
provide an option to append/prepend wildcards in GeoExt forms, r=elemoine (closes #154)

Modified: core/trunk/geoext/lib/GeoExt/widgets/form/SearchAction.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/form/SearchAction.js	2010-03-17 14:26:02 UTC (rev 1994)
+++ core/trunk/geoext/lib/GeoExt/widgets/form/SearchAction.js	2010-03-17 14:28:07 UTC (rev 1995)
@@ -112,7 +112,7 @@
      */
     run: function() {
         var o = this.options;
-        var f = GeoExt.form.toFilter(this.form);
+        var f = GeoExt.form.toFilter(this.form, o.logicalOp, o.wildcard);
         if(o.clientValidation === false || this.form.isValid()){
 
             if (o.abortPrevious && this.form.prevResponse) {

Modified: core/trunk/geoext/lib/GeoExt/widgets/form.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/form.js	2010-03-17 14:26:02 UTC (rev 1994)
+++ core/trunk/geoext/lib/GeoExt/widgets/form.js	2010-03-17 14:28:07 UTC (rev 1995)
@@ -13,13 +13,15 @@
  *  :param logicalOp: ``String`` Either ``OpenLayers.Filter.Logical.AND`` or
  *      ``OpenLayers.Filter.Logical.OR``, set to
  *      ``OpenLayers.Filter.Logical.AND`` if null or undefined
+ *  :param wildcard: ``Integer`` Determines the wildcard behaviour of like
+ *      queries. This behaviour can either be: none, prepend, append or both.
  *      
  *  :return: ``OpenLayers.Filter``
  *  
  *  Create an {OpenLayers.Filter} object from a {Ext.form.BasicForm}
  *      or a {Ext.form.FormPanel} instance.
  */
-GeoExt.form.toFilter = function(form, logicalOp) {
+GeoExt.form.toFilter = function(form, logicalOp, wildcard) {
     if(form instanceof Ext.form.FormPanel) {
         form = form.getForm();
     }
@@ -36,6 +38,23 @@
             type = OpenLayers.Filter.Comparison.EQUAL_TO;
         }
 
+        if (type === OpenLayers.Filter.Comparison.LIKE) {
+            switch(wildcard) {
+                case GeoExt.form.ENDS_WITH:
+                    value = '.*' + value;
+                    break;
+                case GeoExt.form.STARTS_WITH:
+                    value += '.*';
+                    break;
+                case GeoExt.form.CONTAINS:
+                    value = '.*' + value + '.*';
+                    break;
+                default:
+                    // do nothing, just take the value
+                    break;
+            }
+        }
+
         filters.push(
             new OpenLayers.Filter.Comparison({
                 type: type,
@@ -64,3 +83,7 @@
     "ge": OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,
     "like": OpenLayers.Filter.Comparison.LIKE
 };
+
+GeoExt.form.ENDS_WITH = 1;
+GeoExt.form.STARTS_WITH = 2;
+GeoExt.form.CONTAINS = 3;

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/form.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/form.html	2010-03-17 14:26:02 UTC (rev 1994)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/form.html	2010-03-17 14:28:07 UTC (rev 1995)
@@ -140,6 +140,40 @@
              ["GeoExt.form.filterFormForm returns a logical OR filter if",
               "logicalOp is OpenLayers.Filter.Logical.OR"].join(" "));
     }
+
+    function test_toFilter_Wildcard(t) {
+        t.plan(4);
+
+        /*
+         * Set up
+         */
+
+        var form, filter, fields = [];
+
+        fields.push(new Ext.form.TextField({
+            name: "foo__like",
+            value: "bar"
+        }));
+
+        form = new Ext.form.FormPanel({
+            renderTo: "form",
+            items: fields
+        });
+
+        /*
+         * Test
+         */
+
+        filter = GeoExt.form.toFilter(form, null, GeoExt.form.STARTS_WITH);
+        t.eq(filter.filters[0].value, "bar.*", "GeoExt.form.STARTS_WITH appends a wildcard");
+        filter = GeoExt.form.toFilter(form, null, GeoExt.form.ENDS_WITH);
+        t.eq(filter.filters[0].value, ".*bar", "GeoExt.form.ENDS_WITH prepends a wildcard");
+        filter = GeoExt.form.toFilter(form, null, GeoExt.form.CONTAINS);
+        t.eq(filter.filters[0].value, ".*bar.*", "GeoExt.form.CONTAINS appends *and* prepends a wildcard");
+        filter = GeoExt.form.toFilter(form);
+        t.eq(filter.filters[0].value, "bar", "Default behaviour is to not add any wildcards");
+    }
+
     </script>
   <body>
     <div id="form"></div>



More information about the Commits mailing list