aboutsummaryrefslogtreecommitdiff
path: root/lava_scheduler_app/templatetags/tables.py
diff options
context:
space:
mode:
authorNeil Williams <neil.williams@linaro.org>2013-12-30 15:07:02 +0000
committerLinaro Code Review <review@review.linaro.org>2014-02-19 20:27:41 +0000
commit5b27e194a476bdfba61dc3b669f3d3a543579498 (patch)
tree43ab1570dc83ced922fdc9ea2186c23592f6a955 /lava_scheduler_app/templatetags/tables.py
parent5b801832e9af71edd56d2dc3eb1613b978171233 (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.py64
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)