diff --git a/ippisite/ippidb/templates/base.html b/ippisite/ippidb/templates/base.html index 95fdda9866de19f98986394d1e9750dae86d129e..ee77814978bdd2bdf3903d39a693788e094aad37 100644 --- a/ippisite/ippidb/templates/base.html +++ b/ippisite/ippidb/templates/base.html @@ -235,6 +235,14 @@ $('#'+paramName+'_textvalue_max').text(slideEvt.value[1]); }); } + var toggleCheckBox = function(id){ + var cb = $('#'+id); + if(cb.prop('checked')==true){ + modifyUrl(id,cb.prop('checked')); + }else{ + modifyUrl(id,null); + } + } </script> </head> diff --git a/ippisite/ippidb/templates/compound_list.html b/ippisite/ippidb/templates/compound_list.html index c5f426234b685d6ef39c7461e9d0fe3d11c1d633..5db30ab9ce9bbb07152fd212ca9dfe0e63787ecc 100644 --- a/ippisite/ippidb/templates/compound_list.html +++ b/ippisite/ippidb/templates/compound_list.html @@ -76,14 +76,22 @@ </div> </div> <div class="dropdown btn-group" style="display: inline-flex;"> - <button class="btn btn-primary dropdown-toggle" type="button" id="elMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - External Links - </button> - <div class="dropdown-menu" aria-labelledby="elMenuButton"> - </div> - </div> - </span> - <span class="border border-primary rounded p-1 m-1"> + <button class="btn btn-primary dropdown-toggle" type="button" id="elMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + External Links + </button> + <div class="dropdown-menu" aria-labelledby="elMenuButton"> + <label class="dropdown-item" onclick="toggleCheckBox('pubchem_id')"> + <input type="checkbox" id="pubchem_id" {% if pubchem_id %}checked{% endif %}/> in PubChem + </label> + <label class="dropdown-item" onclick="toggleCheckBox('chembl_id')"> + <input type="checkbox" id="chembl_id" {% if chembl_id %}checked{% endif %}/> in ChEMBL + </label> + <label class="dropdown-item" onclick="toggleCheckBox('chemspider_id')"> + <input type="checkbox" id="chemspider_id" {% if chemspider_id %}checked{% endif %}/> in ChemSpider + </label> + </div> + </div> + <span class="border border-primary rounded p-1 m-1"> <i class="icon icon-conceptual icon-structures-3d" style="font-size: 1.75rem; vertical-align: middle" title="PPI target filters"></i> <div class="dropdown btn-group" style="display: inline-flex;"> <button class="btn btn-primary dropdown-toggle" type="button" id="ptfMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> diff --git a/ippisite/ippidb/views.py b/ippisite/ippidb/views.py index bc16bc987a1fa29ff0a7c005698c39d313142f90..3b0cc3cee998536f4dabde1ffe4c5212dc29cef9 100644 --- a/ippisite/ippidb/views.py +++ b/ippisite/ippidb/views.py @@ -301,7 +301,28 @@ class CompoundRangeFilterHandler(object): if not self.value: self.filter_context[self.parameter_name+'_max'] = str(int(math.ceil(float(queryset.aggregate(Max(self.parameter_name))[self.parameter_name + '__max'] or 0)))) self.filter_context[self.parameter_name+'_min'] = str(int(math.floor(float(queryset.aggregate(Min(self.parameter_name))[self.parameter_name + '__min'] or 0)))) - print(self.parameter_name, self.filter_context[self.parameter_name+'_min'], self.filter_context[self.parameter_name+'_max']) + +class ExistsFilterHandler(object): + + def __init__(self, parameter_name, filter_context, request_get): + self.parameter_name = parameter_name + self.filter_context = filter_context + self.value = None + if request_get.get(parameter_name): + self.value = request_get.get(parameter_name) + self.filter_context[self.parameter_name] = self.value + + def process(self, queryset): + """ to be called during queryset filtering """ + # if a value has been set for this filter + if self.value: + # filter queryset on the ID values specified + queryset = queryset.exclude(**{self.parameter_name+'__isnull':not(self.value)}) + return queryset + + def post_process(self, compound_ids, queryset): + """ to be called after queryset filtering """ + pass class CompoundListView(ListView): @@ -393,6 +414,9 @@ class CompoundListView(ListView): CompoundRangeFilterHandler('qs_ba', self.filter_context, self.request.GET), CompoundRangeFilterHandler('qs_le', self.filter_context, self.request.GET), CompoundRangeFilterHandler('qs_lle', self.filter_context, self.request.GET), + ExistsFilterHandler('pubchem_id', self.filter_context, self.request.GET), + ExistsFilterHandler('chemspider_id', self.filter_context, self.request.GET), + ExistsFilterHandler('chembl_id', self.filter_context, self.request.GET), CompoundSimilarityFilterHandler('similar_to', self.filter_context, self.request.GET), TextSearchFilterHandler('q', self.filter_context, self.request.GET), ]