Patchwork [4/9] error-report: add 'Edit columns' menu

login
register
mail settings
Submitter Roxana
Date Aug. 22, 2014, 8:49 a.m.
Message ID <3d0b8f9ba07b12983b53db7531bfb7e6ac4bbf79.1408696291.git.roxana.ciobanu@intel.com>
Download mbox | patch
Permalink /patch/78817/
State New
Headers show

Comments

Roxana - Aug. 22, 2014, 8:49 a.m.
Add 'Edit columns' menu.

[YOCTO #6538]

Signed-off-by: Roxana Ciobanu <roxana.ciobanu@intel.com>
---
 Post/templatetags/__init__.py    |   0
 Post/templatetags/projecttags.py |  12 +++++
 Post/views.py                    |  26 +++++++++-
 templates/search-details.html    | 105 ++++++++++++++++++++++++++-------------
 4 files changed, 108 insertions(+), 35 deletions(-)
 create mode 100644 Post/templatetags/__init__.py
 create mode 100644 Post/templatetags/projecttags.py

Patch

diff --git a/Post/templatetags/__init__.py b/Post/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Post/templatetags/projecttags.py b/Post/templatetags/projecttags.py
new file mode 100644
index 0000000..cd2e0bd
--- /dev/null
+++ b/Post/templatetags/projecttags.py
@@ -0,0 +1,12 @@ 
+from datetime import datetime, timedelta
+import re
+from django import template
+from django.utils import timezone
+from django.template.defaultfilters import filesizeformat
+
+register = template.Library()
+
+@register.filter(name = 'sortcols')
+def sortcols(tablecols):
+    return sorted(tablecols, key = lambda t: t['name'])
+
diff --git a/Post/views.py b/Post/views.py
index 02f80fc..f9c6655 100644
--- a/Post/views.py
+++ b/Post/views.py
@@ -84,7 +84,31 @@  def search(request, template_name, items = None, page = None, query = None):
     else:
         index = paginator.page_range.index(c.number) - 2
         end = index + 5
-    return render_to_response(template_name, {'details':c, 'd' : query, "no" : no, 'list' : paginator.page_range[index:end], 'items' : items}, RequestContext(request))
+
+    context = {
+        'details':c,
+        'd' : query,
+        "no" : no,
+        'list' : paginator.page_range[index:end],
+        'items' : items,
+        'objectname' : 'errors',
+        'tablecols' : [
+        {'name': 'Submitted on', 'clclass': 'submitted_on'},
+        {'name': 'Recipe'},
+        {'name': 'Recipe version', 'clclass': 'recipe_version'},
+        {'name': 'Task'},
+        {'name': 'Machine'},
+        {'name': 'Distro'},
+        {'name': 'Build system', 'clclass': 'build_sys', 'hidden': 1},
+        {'name': 'Target system', 'clclass': 'target_sys', 'hidden': 1},
+        {'name': 'Host distro', 'clclass': 'host_distro'},
+        {'name': 'Branch', 'clclass': 'branch'},
+        {'name': 'Commit', 'clclass': 'commit'},
+        {'name': 'Submitter', 'clclass': 'submitter','hidden': 1}],
+    }
+
+    return render_to_response(template_name, context, RequestContext(request))
+
 
 def searchDetails(request, template_name, pk, page = None, query = None, items = None):
     results=''
diff --git a/templates/search-details.html b/templates/search-details.html
index b6c2b7e..269aa62 100644
--- a/templates/search-details.html
+++ b/templates/search-details.html
@@ -1,58 +1,88 @@ 
 {% extends "base.html" %}
 {% load i18n %}
 {% load staticfiles %}
+{% load projecttags %}
 <!DOCTYPE html>
 <html>
 	<body>
-
 		{% block content %}
+		<script>$
+		function showhideTableColumn( clname, sh) {
+			if ( sh ) {
+				$('.' + clname ).show( 100 );
+			}
+			else {
+				$('.' + clname ).hide( 100 );
+			}
+		}
+		</script>
+
 			<div class="row-fluid">
 				<div class="page-header">
 					{% if no %}
 						<h1>{{ no }} errors found for "{{ d }}"</h1>
 					{% endif %}
 				</div>
-				{% if details %}
+				<div class="navbar">
+					<div class="navbar-inner">
+						{% if tablecols %}
+							<div class="btn-group pull-right">
+								<button class="btn dropdown-toggle" data-toggle="dropdown">Edit columns
+									<span class="caret"></span>
+								</button>
+								<ul id='editcol' class="dropdown-menu">
+									{% for i in tablecols|sortcols %}
+									<li>
+									<label {% if not i.clclass %} class="checkbox muted" {%else%} class="checkbox" {%endif%}>
+										<input type="checkbox" class="chbxtoggle"
+										{% if i.clclass %}
+											id="{{i.clclass}}"
+											value="ct{{i.name}}"
+											{% if not i.hidden %}
+												checked="checked"
+											{%endif%}
+											onclick="showhideTableColumn($(this).attr('id'), $(this).is(':checked'))"
+										{%else%}
+											checked disabled
+										{% endif %}/>   {{i.name}}
+									</label>
+									</li>
+									{% endfor %}
+								</ul>
+						{% endif %}
+					</div>
+				</div> <!-- navbar-inner -->
+			</div>
+			{% if details %}
 					<table class="table table-bordered table-hover">
 						<thead>
 							<tr>
-								<th>Submitted on</th>
-								<th>Recipe</th>
-								<th>Recipe version</th>
-								<th>Task</th>
-								<th>Machine</th>
-								<th>Distro</th>
-								<th>Build system</th>
-								<th>Target system</th>
-								<th>Host distro</th>
-								<th>Branch</th>
-								<th>Commit</th>
-								<th>Submitter</th>
+								{% for i in tablecols %} <th class="{{i.dclass}} {{i.clclass}}"> {{i.name}} </th> {%endfor%}
 							</tr>
 						</thead>
 						<tbody>
 							{%for detail in details %}
-								<tr>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.DATE|date:"d/m/y H:i"}}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.RECIPE }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.RECIPE_VERSION }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.TASK }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.MACHINE }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.DISTRO }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.BUILD_SYS }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.TARGET_SYS }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.NATIVELSBSTRING }}</a></td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.BRANCH }} </a></td>
+								<tr class="data">
+									<td class="submitted_on"> <a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.DATE|date:"d/m/y H:i"}}</a></td>
+									<td class="recipe"><a href="{% url id detail.id details.number items d %}">{{ detail.RECIPE }}</a></td>
+									<td class="recipe_version"><a href="{% url id detail.id details.number items d %}">{{ detail.RECIPE_VERSION }}</a></td>
+									<td class="task"><a href="{% url id detail.id details.number items d %}">{{ detail.TASK }}</a></td>
+									<td class="machine"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.MACHINE }}</a></td>
+									<td class="distro"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.DISTRO }}</a></td>
+									<td class="build_sys"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.BUILD_SYS }}</a></td>
+									<td class="target_sys"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.TARGET_SYS }}</a></td>
+									<td class="host_distro"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.NATIVELSBSTRING }}</a></td>
+									<td class="branch"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.BRANCH }} </a></td>
 									<td class="commit">
 										{% autoescape off %}
 											<div class="btn" rel="popover" data-content= {{ detail.BUILD.COMMIT|escape}} title="">
 												{% endautoescape %}
-												{{ detail.BUILD.COMMIT|truncatechars:10}}
+											{{ detail.BUILD.COMMIT|truncatechars:10}}
 											</div>
-						            </td>
-									<td><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.NAME }} </a></td>
+									</td>
+									<td class="submitter"><a href="{% url id detail.id details.number items d %}">{{ detail.BUILD.NAME }} </a></td>
 								</tr>
-							 {%endfor%}
+							{%endfor%}
 						</tbody>
 					</table>
 						<div class="pagination pagination-centered">
@@ -130,11 +160,18 @@ 
 				           <h4>Nothing matches your search!</h4>
 				{% endif %}
 			</div>
-		    <script>
-		    $(document).ready(function() {
-		    	$('.commit > div').popover({placement:'left'})
-		    });
-		    </script>
+				<script>
+				$(document).ready(function() {
+					$('.commit > div').popover({placement:'left'})
+					$('.chbxtoggle').each(function () {
+						showhideTableColumn($(this).attr('id'), $(this).is(':checked'))
+					});
+					//turn edit columns dropdown into a multi-select menu$
+					$('.dropdown-menu input, .dropdown-menu label').click(function(e) {
+						e.stopPropagation();
+					});$
+				});
+			</script>
 		{% endblock %}
 	</body>
 </html>