[GeoNode-users] Create new filter for layers

Melvin Ramos melvin.ramos1991 at gmail.com
Sat Jun 20 13:32:00 PDT 2015


I'm guessing you are saying this:

  module.load_categories = function ($http, $rootScope, $location){
>         var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type':
> FILTER_TYPE};
>         if ($location.search().hasOwnProperty('title__icontains')){
>           params['title__icontains'] =
> $location.search()['title__icontains'];
>         }
>         $http.get(CATEGORIES_ENDPOINT, {params:
> params}).success(function(data){
>
> if($location.search().hasOwnProperty('category__identifier__in')){
>                 data.objects =
> module.set_initial_filters_from_query(data.objects,
>                     $location.search()['category__identifier__in'],
> 'identifier');
>             }
>             $rootScope.categories = data.objects;
>             if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) {
>                 module.haystack_facets($http, $rootScope, $location);
>             }
>         });
>         $http.get(IUCN_CATEGORIES_ENDPOINT, {params:
> params}).success(function(data){
>
> if($location.search().hasOwnProperty('iucn_category__identifier__in')){
>                 data.objects =
> module.set_initial_filters_from_query(data.objects,
>                     $location.search()['iucn_category__identifier__in'],
> 'identifier');
>             }
>             $rootScope.iucn_categories = data.objects;
>             if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) {
>                 module.haystack_facets($http, $rootScope, $location);
>             }
>         });
>     }


where I should also write this:

    if ($('#categories').length > 0 && $('#iucn_categories').length > 0){
>        module.load_categories($http, $rootScope, $location);
>     }


But it doesn't work either way. I was sort of debugging this and I found
out that the rootScope Object is showing that iucn_categories is an
Array[0] against categories (Array[19]). I guess that says that the query
is not getting anything or something but I have no idea where I can check
this






Enviado con MailTrack
<https://mailtrack.io/install?source=signature&lang=es&referral=melvin.ramos1991@gmail.com&idSignature=23>

2015-06-19 2:29 GMT-04:30 Simone Dalmasso <simone.dalmasso at gmail.com>:

> One issue is in the first part of the js. Module.load-ounce-categories.
> Despite the name the original function is used to load also the keywords
> etc. so instead or rewrite the entire function just add the chunk $http.get
> for your categories into the original module.load-categories.
>
> That should help. :)
>
>
> Il venerdì 19 giugno 2015, Melvin Ramos <melvin.ramos1991 at gmail.com> ha
> scritto:
>
>> Hello Simone,
>>
>> "You did well young padawan" (:
>>
>> Thanks. I just checked it out. In theory I replicated everything but
>> still not working. I will go step by step like before:
>>
>> *Modified search_scripts.html in the search templates*
>>
>> I added this line of code:
>>
>> *IUCN_CATEGORIES_ENDPOINT = '{% url 'api_dispatch_list' api_name='api'
>>> resource_name='iucn_categories' %}';*
>>
>>
>> Just like the categories endpoint
>>
>> *Modified the search.js in the static folder*
>>
>> I added in the loaded section the following
>>
>>
>>> *  module.load_iucn_categories = function ($http, $rootScope,
>>> $location){*
>>> *        var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type':
>>> FILTER_TYPE};*
>>> *        if ($location.search().hasOwnProperty('title__icontains')){*
>>> *          params['title__icontains'] =
>>> $location.search()['title__icontains'];*
>>> *        }*
>>> *        $http.get(IUCN_CATEGORIES_ENDPOINT, {params:
>>> params}).success(function(data){*
>>> *
>>> if($location.search().hasOwnProperty('iucn_category__identifier__in')){*
>>> *                data.objects =
>>> module.set_initial_filters_from_query(data.objects,*
>>> *
>>> $location.search()['iucn_category__identifier__in'], 'identifier');*
>>> *            }*
>>> *            $rootScope.categories = data.objects;*
>>> *            if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) {*
>>> *                module.haystack_facets($http, $rootScope, $location);*
>>> *            }*
>>> *        });**    }*
>>
>>
>> Then I added in the module.haystack_facets the following
>>
>>
>>> *      if ("iucn_categories" in $rootScope) {*
>>> *          $rootScope.category_counts = data.meta.facets.category;*
>>> *          for (var id in $rootScope.categories) {*
>>> *              var category = $rootScope.categories[id];*
>>> *              if (category.identifier in $rootScope.category_counts) {*
>>> *                  category.count =
>>> $rootScope.category_counts[category.identifier]*
>>> *              } else {*
>>> *                  category.count = 0;*
>>> *              }*
>>> *          }**      }*
>>
>>
>> Finally, in the module.run I added this
>>
>>
>>> *    if ($('#iucn_categories').length > 0){*
>>> *       module.load_categories($http, $rootScope, $location);**    }*
>>
>>
>> But it didn't work, still shows nothing on the template.What am I
>> missing??
>>
>> Thanks in advance,
>>
>> Melvin
>>
>>
>>
>>
>> Enviado con MailTrack
>> <https://mailtrack.io/install?source=signature&lang=es&referral=melvin.ramos1991@gmail.com&idSignature=23>
>>
>> 2015-06-18 17:01 GMT-04:30 Simone Dalmasso <simone.dalmasso at gmail.com>:
>>
>>> Hi Melvin,
>>> you did well, the only missing thing is here
>>> https://github.com/GeoNode/geonode/blob/master/geonode/static/geonode/js/search/search.js,
>>> javascript part that loads the categories through the api and compiles the
>>> query.
>>>
>>> Ciao
>>>
>>> 2015-06-18 23:17 GMT+02:00 Melvin Ramos <melvin.ramos1991 at gmail.com>:
>>>
>>>> Hello,
>>>>
>>>> I'm trying to duplicate the Categories filter, because I'm need to use
>>>> a new set of categories for my layers, but I'm having a hard time trying to
>>>> find out how the templates gets the data since it uses AngularJS.
>>>>
>>>> So here is what I''ve done so far:
>>>>
>>>> *Modified the models.py of the Base app*
>>>> I added a new class called IUCNCategory
>>>>
>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *class IUCNCategory(models.Model):    """    Metadata regarding IUCN
>>>>> standards    """    identifier = models.CharField(max_length=255)
>>>>> category_type = models.CharField(        choices=(
>>>>> ('risk_criteria', 'Risk Criteria'),            ('bio_realm',
>>>>> 'Biogeographical Realm'),            ('typology', 'Typology')        ),
>>>>>     max_length=255,    )    description = models.TextField(default='')
>>>>> gn_description = models.TextField('RLE description', default='',
>>>>> null=True)    # is_choice = models.BooleanField(default=True)    def
>>>>> __unicode__(self):        return u"{0}".format(self.gn_description)
>>>>> class Meta:        ordering = ("category_type","identifier",)
>>>>> verbose_name_plural = 'IUCN Categories'*
>>>>
>>>>
>>>> It's just like TopicCategory with one different attribute.
>>>>
>>>> I added to the class ResourceBase the following attribute
>>>>
>>>> *iucn_category = models.ForeignKey(IUCNCategory, null=True, blank=True)*
>>>>
>>>>
>>>>
>>>> *Modified the api.py **of the Api app*
>>>> I created a new class called IUCNCategoryResource
>>>>
>>>>
>>>>> *class IUCNCategoryResource(TypeFilteredResource):**    """IUCN
>>>>> Category api"""*
>>>>>
>>>>> *    def serialize(self, request, data, format, options={}):**
>>>>> options['count_type'] = 'iucn_category'*
>>>>> *        return super(IUCNCategoryResource, self).serialize(request,
>>>>> data, format, options)*
>>>>>
>>>>> *    class Meta:*
>>>>> *        queryset = IUCNCategory.objects.all()*
>>>>> *        resource_name = 'iucn_categories'*
>>>>> *        allowed_methods = ['get']*
>>>>> *        filtering = {*
>>>>> *            'identifier': ALL,*
>>>>> *        }**        serializer = CountJSONSerializer()*
>>>>
>>>>
>>>> It's like the class TopicCategoryResource
>>>>
>>>> *Modified the* *resourcebase_api.py **of the Api app*
>>>>
>>>> I added to the class CommonModelApi the following attribute
>>>>
>>>>
>>>>>
>>>>>
>>>>>
>>>>> *iucn_category = fields.ToOneField(        IUCNCategoryResource,
>>>>>   'iucn_category',        null=True,        full=True)*
>>>>
>>>>
>>>> In the definition on the Haystack filters I added the following in the
>>>> proper places:
>>>>
>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *...iucn_category =
>>>>> parameters.getlist("iucn_category__identifier__in")...if iucn_category:
>>>>>         sqs = (SearchQuerySet() if sqs is None else sqs).narrow(
>>>>>     'iucn_category:%s' % ','.join(map(str, iucn_category)))...*
>>>>
>>>>
>>>> Just like the category field.
>>>>
>>>> *Modified the** urls**.py **of the Api app*
>>>>
>>>> I imported the IUCNCategoryResource from the apy.py and wrote
>>>>
>>>> *api.register(IUCNCategoryResource())*
>>>>
>>>>
>>>> *Modified the template _general_filters.html inside the search
>>>> templates*
>>>>
>>>> I added the following code
>>>>
>>>>
>>>>> *<nav class="filter">*
>>>>> *  <h4><a href="#" class="toggle toggle-nav"><i class="fa
>>>>> fa-chevron-right"></i>{% trans "Risk Criteria" %}</a></h4>*
>>>>> *  <ul class="nav closed" id="iucn_categories">*
>>>>> *    {% verbatim %}*
>>>>> *      <li ng-repeat="iucn_category in iucn_categories"
>>>>> ng-if="iucn_category.count > 0">*
>>>>> *        <a data-value="{{ iucn_category.identifier }}"
>>>>> data-filter="iucn_category__identifier__in" *
>>>>> *         ng-click="multiple_choice_listener($event)"
>>>>> class="{{iucn_category.active}}">{{ iucn_category.gn_description | limitTo:
>>>>> 25 }}{{ iucn_category.gn_description.length > 25 ? '...' : ''}}*
>>>>> *          <span class="badge pull-right">{{ iucn_category.count
>>>>> }}</span>*
>>>>> *        </a>*
>>>>> *      </li>*
>>>>> *    {% endverbatim %}*
>>>>> *  </ul>**</nav>*
>>>>
>>>>
>>>> But nothing shows beneath the filter name in the template, even when I
>>>> have one IUCN category stored in database. I'm guessing there is a view
>>>> somewhere or I'm missing something that allows to pass the data and I can't
>>>> find it or just Angular is too mystic for me.
>>>>
>>>> Can anybody help me?
>>>>
>>>> Thanks in advance,
>>>>
>>>> Melvin
>>>>
>>>>
>>>> --
>>>> Melvin David Ramos Macías
>>>> 07-41408
>>>> Ingeniería de Computación
>>>> Universidad Simón Bolívar
>>>>
>>>>
>>>>
>>>> Enviado con MailTrack
>>>> <https://mailtrack.io/install?source=signature&lang=es&referral=melvin.ramos1991@gmail.com&idSignature=23>
>>>>
>>>> _______________________________________________
>>>> geonode-users mailing list
>>>> geonode-users at lists.osgeo.org
>>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/geonode-users
>>>>
>>>>
>>>
>>>
>>> --
>>> Simone
>>>
>>
>>
>>
>> --
>> Melvin David Ramos Macías
>> 07-41408
>> Ingeniería de Computación
>> Universidad Simón Bolívar
>>
>
>
> --
> Simone
>



-- 
Melvin David Ramos Macías
07-41408
Ingeniería de Computación
Universidad Simón Bolívar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geonode-users/attachments/20150620/bb8c2ae3/attachment-0001.html>


More information about the geonode-users mailing list