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

commits at geoext.org commits at geoext.org
Tue Oct 25 14:18:06 CEST 2011


Author: ahocevar
Date: 2011-10-25 14:18:06 +0200 (Tue, 25 Oct 2011)
New Revision: 2860

Modified:
   core/trunk/geoext/lib/GeoExt/widgets/LayerLegend.js
   core/trunk/geoext/lib/GeoExt/widgets/UrlLegend.js
   core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js
   core/trunk/geoext/lib/GeoExt/widgets/WMSLegend.js
   core/trunk/geoext/tests/lib/GeoExt/widgets/LayerLegend.html
   core/trunk/geoext/tests/lib/GeoExt/widgets/UrlLegend.html
Log:
Score instead of true/false for LayerLegend.supports. Thanks bartvde for updating the tests. r=bartvde (closes #452)

Modified: core/trunk/geoext/lib/GeoExt/widgets/LayerLegend.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/LayerLegend.js	2011-10-25 07:20:45 UTC (rev 2859)
+++ core/trunk/geoext/lib/GeoExt/widgets/LayerLegend.js	2011-10-25 12:18:06 UTC (rev 2860)
@@ -146,8 +146,8 @@
  *      legend types for. If not provided, all registered types will be
  *      returned.
  *  :param preferredTypes: ``Array(String)`` Types that should be considered.
- *      first. If not provided, all legend types will be returned in the order
- *      they were registered.
+ *      first. If not provided, all registered legend types will be returned
+ *      in the order of their score for support of the provided layerRecord.
  *  :return: ``Array(String)`` xtypes of legend types that can be used with
  *      the provided ``layerRecord``.
  *  
@@ -155,17 +155,30 @@
  *  with optionally provided preferred types listed first.
  */
 GeoExt.LayerLegend.getTypes = function(layerRecord, preferredTypes) {
-    var types = (preferredTypes || []).concat();
-    var goodTypes = [];
-    for(var type in GeoExt.LayerLegend.types) {
-        if(GeoExt.LayerLegend.types[type].supports(layerRecord)) {
-            // add to goodTypes if not preferred
-            types.indexOf(type) == -1 && goodTypes.push(type);
+    var types = (preferredTypes || []).concat(),
+        scoredTypes = [], score, type;
+    for (type in GeoExt.LayerLegend.types) {
+        score = GeoExt.LayerLegend.types[type].supports(layerRecord);
+        if(score > 0) {
+            // add to scoredTypes if not preferred
+            if (types.indexOf(type) == -1) {
+                scoredTypes.push({
+                    type: type,
+                    score: score
+                });
+            }
         } else {
             // preferred, but not supported
             types.remove(type);
         }
     }
+    scoredTypes.sort(function(a, b) {
+        return a.score < b.score ? 1 : (a.score == b.score ? 0 : -1);
+    });
+    var len = scoredTypes.length, goodTypes = new Array(len);
+    for (var i=0; i<len; ++i) {
+        goodTypes[i] = scoredTypes[i].type;
+    }
     // take the remaining preferred types, and add other good types 
     return types.concat(goodTypes);
 };
@@ -173,8 +186,8 @@
 /** private: method[supports]
  *  :param layerRecord: :class:`GeoExt.data.LayerRecord` The layer record
  *      to check support for.
- *  :return: ``Boolean`` true if this legend type supports the layer
- *      record.
+ *  :return: ``Integer`` score indicating how good the legend supports the
+ *      provided record. 0 means not supported.
  *  
  *  Checks whether this legend type supports the provided layerRecord.
  */

Modified: core/trunk/geoext/lib/GeoExt/widgets/UrlLegend.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/UrlLegend.js	2011-10-25 07:20:45 UTC (rev 2859)
+++ core/trunk/geoext/lib/GeoExt/widgets/UrlLegend.js	2011-10-25 12:18:06 UTC (rev 2860)
@@ -54,7 +54,7 @@
  *  Private override
  */
 GeoExt.UrlLegend.supports = function(layerRecord) {
-    return layerRecord.get("legendURL") != null;
+    return layerRecord.get("legendURL") == null ? 0 : 10;
 };
 
 /** api: legendtype = gx_urllegend */

Modified: core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js	2011-10-25 07:20:45 UTC (rev 2859)
+++ core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js	2011-10-25 12:18:06 UTC (rev 2860)
@@ -662,7 +662,7 @@
  *  Private override
  */
 GeoExt.VectorLegend.supports = function(layerRecord) {
-    return layerRecord.getLayer() instanceof OpenLayers.Layer.Vector;
+    return layerRecord.getLayer() instanceof OpenLayers.Layer.Vector ? 1 : 0;
 };
 
 /** api: legendtype = gx_vectorlegend */

Modified: core/trunk/geoext/lib/GeoExt/widgets/WMSLegend.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/WMSLegend.js	2011-10-25 07:20:45 UTC (rev 2859)
+++ core/trunk/geoext/lib/GeoExt/widgets/WMSLegend.js	2011-10-25 12:18:06 UTC (rev 2860)
@@ -232,7 +232,7 @@
  *  Private override
  */
 GeoExt.WMSLegend.supports = function(layerRecord) {
-    return layerRecord.getLayer() instanceof OpenLayers.Layer.WMS;
+    return layerRecord.getLayer() instanceof OpenLayers.Layer.WMS ? 1 : 0;
 };
 
 /** api: legendtype = gx_wmslegend */

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/LayerLegend.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/LayerLegend.html	2011-10-25 07:20:45 UTC (rev 2859)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/LayerLegend.html	2011-10-25 12:18:06 UTC (rev 2860)
@@ -101,7 +101,7 @@
                 layer: new OpenLayers.Layer.WMS(),
                 legendURL: "foo"
             });
-            t.eq(GeoExt.LayerLegend.getTypes(rec), ["gx_urllegend","gx_wmslegend"], "a layer record with WMS layer and legendURL is supported by gx_urllegend and gx_wmslegend.");
+            t.eq(GeoExt.LayerLegend.getTypes(rec), ["gx_urllegend","gx_wmslegend"], "a layer record with WMS layer and legendURL is supported by gx_urllegend and gx_wmslegend, with a higher priority of gx_urllegend.");
             t.eq(GeoExt.LayerLegend.getTypes(rec, ["gx_wmslegend"]), ["gx_wmslegend","gx_urllegend"], "a layer record with WMS layer and legendURL and gx_wmslegend as preferred type lists  gx_wmslegend first, then gx_urllegend.");
             rec = new Rec({
                 layer: new OpenLayers.Layer.WMS()

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/UrlLegend.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/UrlLegend.html	2011-10-25 07:20:45 UTC (rev 2859)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/UrlLegend.html	2011-10-25 12:18:06 UTC (rev 2860)
@@ -76,16 +76,16 @@
                 layer: new OpenLayers.Layer(),
                 legendURL: "foo"
             });
-            t.eq(GeoExt.UrlLegend.supports(rec), true, "layer record with a legendURL property is supported.");
+            t.ok(GeoExt.UrlLegend.supports(rec) > 0, "layer record with a legendURL property is supported.");
 
             var rec = new Rec({
                 layer: new OpenLayers.Layer()
             });
-            t.eq(GeoExt.UrlLegend.supports(rec), false, "layer record without a legendURL property is not supported.");
+            t.eq(GeoExt.UrlLegend.supports(rec), 0, "layer record without a legendURL property is not supported.");
         }
 
     </script>
   <body>
     <div id="legend"></div>
   </body>
-</html>
\ No newline at end of file
+</html>



More information about the Commits mailing list