[geojquery] accordion plugin

js at cgeo.eu js at cgeo.eu
Fri Mar 12 07:07:55 EST 2010


Hi list:

regarding the 'two ways' geojquery can be implemented, we would prefer  
the second one, say, to do the same thing geoext/hslayers does but  
with jquery instead of extjs.

That's why our idea is to extend OL with JQuery funcionality and we  
would priorize the plugins/clases of components OL doesn't have like  
trees, accordion or a grid.

Here is a simple example for a plugin, it's just a one day work so we  
are quite shure that it could done better. This plugin doesn't  
implement methods to keep it simple, for shure it could be done (for  
example the mouseovers in http://188.40.69.131/geojquery/index.php ).

Maybe it's better do implement clases inside the plugins to acces  
methods like mouse-overs, ¿what do you think about this idea? ¿Are  
there any examples?

The accordion plugin-example is here:  
http://188.40.69.131/geojquery/index2.php it lists some of the loaded  
hiking trails of tenerife island.
By zooming in, the number of trails in the accordion gets reduced.

First, we generate the accordion en JQuery over a layer like this:

  <div id="accordion">
     <h3><a href="#">First header</a></h3>
     <div>First content</div>
     <h3><a href="#">Second header</a></h3>
     <div>Second content</div>
</div>

we execute:

<script type="text/javascript">
$(function() {
$("#accordion").accordion();
});
</script>


The js-code, first we generate the wfs point layer:
   layerSenderosCentralAntiguos = new OpenLayers.Layer.WFS(
             "SENDEROS_CENTRAL_ANTIGUOS",
             "/cgi-bin/mapserv?map=/var/maps/senderos_antiguos_sel.map",

             {
                 typename: "SENDEROS_CENTRAL_ANTIGUOS"
             },
             {
                 styleMap: s_map,
                 extractAttributes:'true',
                 visibility: true,
                 projections:["epsg:4326","epsg:32628"]
             }
         );
We apply to the div with id=listSenderos el result del plugin AcordionWFS:

$("#listSenderos").AcordionWFS(layerSenderosCentralAntiguos,'nombre','accordion');

This would be all.


This is the code of the jquery plugin (it's done like described in  
http://docs.jquery.com/Plugin#Options)

jQuery.fn.AcordionWFS =  
function(layerWFS,attributes_ppal,acorddionName,options) {
   // define defaults and override with options, if available
   // by extending the default settings, we don't modify the argument
   settings = jQuery.extend({
      name: "defaultName",
      size: 5,
      global: true
   }, options);

   //Search the id of the object for which we want to generate the accordion

   var obj = "#" + this.attr("id")

    //Register the event "loadend" for the layer
    layerWFS.events.register(
     "loadend",
     layerWFS,
     function() {
         var cbc
         var content=''
         var html='<div id="' + acorddionName + '">'

         //for all features of the WFS generate the codigo in function  
del format del accordion needed by jquery

         for(var  obj_aux  in layerWFS.features){

                 for(var  res  in layerWFS.features[obj_aux]['attributes']){

                     switch (res){
                         case attributes_ppal:
                             cbc = '<h3><a href="#">' +  
layerWFS.features[obj_aux]['attributes'][res] + '</a></h3>'
                         break;
                         case 'the_geom':
                         case 'boundedBy':
                         case 'msGeometry':

                         break;
                         default:
                             content += '<b>' + res +":</b>"+  
layerWFS.features[obj_aux]['attributes'][res]+"<br/>"
                         break;
                     }

                 }
                 html +=  cbc + '<div>' + content + '</div>'
                 cbc = ''
                 content = ''

         }
         html += "</div>"

          //insert the HTML in the accordion

         $(obj).html( html)
         var aux = "#" +acorddionName

         //Init the accordion

         $(aux).accordion({
             header: "h3",
             active: false,
             alwaysOpen: false})
        });
}

Well, what do you think about 'this way' of implementing geoJQuery?
Jan



More information about the Geojquery mailing list