diff options
author | Neil Williams <neil.williams@linaro.org> | 2013-12-30 15:07:02 +0000 |
---|---|---|
committer | Linaro Code Review <review@review.linaro.org> | 2014-02-19 20:27:41 +0000 |
commit | 5b27e194a476bdfba61dc3b669f3d3a543579498 (patch) | |
tree | 43ab1570dc83ced922fdc9ea2186c23592f6a955 /lava_scheduler_app/templatetags/tables.py | |
parent | 5b801832e9af71edd56d2dc3eb1613b978171233 (diff) |
Multi-column search tables support
Implement multi-column search tables directly implemented
on updated django-tables2 instead of ajax. Search data is
retained in the GET request which allows bookmarking
individual search results.
Multiple types of search are supported: simple text searches, exclusive
term searches and time based filters.
Click on column headers to re-order the table. Sorts are persistent via the query
string. If multiple tables exist on a page, tables use a prefix to distinguish
sort ordering.
Pagination is controlled by the length GET parameter, using a prefix for pages
with more than one table.
The search box only shows if the table supports simple searches - a help text is
displayed showing the fields which are supported.
The LAVA Overview includes a section on LAVA Tables.
Test cases included.
Stevan Radaković: column sort icons support & length selection javascript.
Majority of dashboard tables now migrated.
Change-Id: I6a79bd703da207cbbf9b7704b919e00aad2679c7
Diffstat (limited to 'lava_scheduler_app/templatetags/tables.py')
-rw-r--r-- | lava_scheduler_app/templatetags/tables.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lava_scheduler_app/templatetags/tables.py b/lava_scheduler_app/templatetags/tables.py new file mode 100644 index 000000000..7752e6774 --- /dev/null +++ b/lava_scheduler_app/templatetags/tables.py @@ -0,0 +1,64 @@ +from django import template +from django.db.models import fields +from django.utils.html import escape +from django.utils.safestring import mark_safe + +register = template.Library() + + +@register.filter +def get_prefix_length(table, string): + name = "%s%s" % (table.prefix, "length") + if name in string: + return string[name] + return table.length + + +@register.filter +def get_search_data(data, prefix): + if not data: + return [] + if prefix in data: + return data[prefix] + if 'search' in data: + return data['search'] + return [] + + +@register.filter +def get_terms_data(data, prefix): + if not data: + return [] + if prefix in data: + return data[prefix].values() + if 'terms' in data: + return data['terms'].values() + return [] + + +@register.filter +def get_discrete_data(data, prefix): + if not data: + return [] + if prefix in data: + return data[prefix] + if 'discrete' in data: + return data['discrete'] + return [] + + +@register.filter +def get_length_select(table, string): + select = "" + val = [10, 25, 50, 100] + name = "%s%s" % (table.prefix, "length") + if name in string: + num = int(string[name]) + else: + num = table.length + if num and num not in val: + val.append(num) + val.sort() + for option in val: + select += "<option selected>%d</option>" % option if option == num else "<option>%d</option>" % option + return mark_safe(select) |