bloodhound-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From g..@apache.org
Subject svn commit: r1339541 - /incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
Date Thu, 17 May 2012 10:23:19 GMT
Author: gjm
Date: Thu May 17 10:23:18 2012
New Revision: 1339541

URL: http://svn.apache.org/viewvc?rev=1339541&view=rev
Log:
dashboard: reusable templets for query web UI - towards #51 (from olemis)

Added:
    incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
  (with props)

Added: incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
URL: http://svn.apache.org/viewvc/incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html?rev=1339541&view=auto
==============================================================================
--- incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
(added)
+++ incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
Thu May 17 10:23:18 2012
@@ -0,0 +1,133 @@
+<!--!
+       groups    - a dict, where:
+                     key       - is the value shared by all results in this group
+                     value     - is the list of corresponding tickets
+
+       headers   - a sequence of header structure:
+                     .name     - field name for this header
+                     .label    - what to display for this header
+
+       fields    - dict of field name to field structure:
+                     .label    - field label
+
+       query     - the actual Query instance used to perform the query
+
+-->
+<div xmlns="http://www.w3.org/1999/xhtml"
+     xmlns:py="http://genshi.edgewall.org/"
+     xmlns:i18n="http://genshi.edgewall.org/i18n"
+     xmlns:xi="http://www.w3.org/2001/XInclude">
+  <div py:if="paginator.has_more_pages">
+    <div class="report-result" style="float: left; margin-right: 1.6em;">
+      Results <span class="numresults">(${paginator.displayed_items()})</span>
+    </div>
+    <xi:include py:if="paginator.show_index" href="page_index.html" />
+  </div>
+  <py:def function="group_heading(groupname, results, is_first=False)">
+    <div class="report-result" py:if="groupname is not None"
+        style="${'border: 1px #DDDDDD solid; border-bottom: none; font-weight: bold; padding:
4px 5px;' if is_first else None}"
+        i18n:msg="grouplabel, groupname, count"
+        py:with="grouplabel = fields[query.group].label;
+                 groupname = authorinfo(groupname) if query.group in ['owner', 'reporter']
else (groupname or _('None'));
+                 count = ngettext('%(num)s match', '%(num)s matches', len(results))">
+      ${grouplabel}: ${groupname} <span class="numrows">(${count})</span>
+    </div>
+  </py:def>
+  <py:def function="column_headers()">
+    <tr class="trac-columns">
+      <th py:for="header in headers"
+          class="$header.name${(' desc' if query.desc else ' asc') if query.order == header.name
else ''}" py:with="">
+        <?python asc = _('(ascending)'); desc = _('(descending)') ?>
+        <a title="${_('Sort by %(col)s %(direction)s', col=header.label,
+                      direction=(desc if query.order == header.name and not query.desc else
asc))}"
+            href="$header.href">
+          ${header.label}
+          <i py:if="query.order == header.name" 
+              class="${'icon-chevron-down' if query.desc else 'icon-chevron-up'}"></i>
+        </a>
+      </th>
+    </tr>
+  </py:def>
+  <!--! TODO: Find an elegant solution for styling -->
+  <style>
+    .table-bordered.query thead:first-child tr:first-child th:first-child, 
+    .table-bordered.query tbody:first-child tr:first-child td:first-child {
+      border-top-left-radius: 0px;
+    }
+  </style>
+  ${group_heading(*groups[0], is_first=True) if groups else None}
+  <table class="listing tickets table table-bordered table-condensed query"
+      style="border-radius: 0px 0px 4px 4px">
+    <thead py:strip="group_index">
+      ${column_headers()}
+    </thead>
+    <py:for each="group_index, (groupname, results) in enumerate(groups)">
+      <tbody py:if="group_index">
+        <tr py:if="groupname is not None" class="trac-group">
+          <th colspan="${len(headers)}">
+            ${group_heading(groupname, results)}
+          </th>
+        </tr>
+        ${column_headers()}
+      </tbody>
+      <tbody>
+        <tr py:if="not results" class="even">
+          <td colspan="${len(headers)}">
+            No tickets found
+          </td>
+        </tr>
+        <py:for each="idx, result in enumerate(results)">
+          <py:with vars="ticket_context = context.child('ticket', result.id)">
+            <py:if test="'TICKET_VIEW' in perm(ticket_context.resource)">
+
+              <tr class="${'odd' if idx % 2 else 'even'} prio${result.priority_value}${
+                ' added' if 'added' in result else ''}${
+                ' changed' if 'changed' in result else ''}${
+                ' removed' if 'removed' in result else ''}">
+                <py:for each="idx, header in enumerate(headers)" py:choose="">
+                  <py:with vars="name = header.name; value = result[name]">
+                    <td py:when="name == 'id'" class="id"><a href="$result.href"
title="View ticket"
+                        class="${classes(closed=result.status == 'closed')}">#$result.id</a></td>
+                    <td py:otherwise="" class="$name" py:choose="">
+                      <a py:when="name == 'summary'" href="$result.href" title="View ticket">$value</a>
+                      <py:when test="isinstance(value, datetime)">${pretty_dateinfo(value,
dateonly=True)}</py:when>
+                      <py:when test="name == 'reporter'">${authorinfo(value)}</py:when>
+                      <py:when test="name == 'cc'">${format_emails(ticket_context,
value)}</py:when>
+                      <py:when test="name == 'owner' and value">${authorinfo(value)}</py:when>
+                      <py:when test="name == 'milestone'"><a py:if="value" title="View
milestone" href="${href.milestone(value)}">${value}</a></py:when>
+                      <py:when test="header.wikify">${wiki_to_oneliner(ticket_context,
value)}</py:when>
+                      <py:otherwise>$value</py:otherwise>
+                    </td>
+                  </py:with>
+                </py:for>
+              </tr>
+
+              <py:with vars="result_rows = [t for t in row if result[t]]">
+                <py:choose>
+                  <tr py:when="ticket_context.resource in context" class="fullrow">
+                    <td colspan="${len(headers)}">
+                      <p class="meta"><em>(this ticket)</em></p>
+                    </td>
+                  </tr>
+                  <tr py:otherwise="" py:for="r in result_rows" class="fullrow">
+                    <th class="meta">${fields.get(r, {'label': r or 'none'}).label}</th>
+                    <td colspan="${len(headers)-1}" xml:space="preserve">
+                      ${wiki_to_html(ticket_context, result[r])}
+                    </td>
+                  </tr>
+                </py:choose>
+              </py:with>
+            </py:if>
+          </py:with>
+        </py:for>
+        <tr py:if="group_index == len(groups)-1 and last_group_is_partial">
+          <td colspan="${len(headers)}">
+            <i>(more results for this group on next page)</i>
+          </td>
+        </tr>
+      </tbody>
+    </py:for>
+  </table>
+  <xi:include py:if="paginator.show_index" href="page_index.html" />
+</div>
+

Propchange: incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/bloodhound/trunk/bloodhound_dashboard/bhdashboard/widgets/templates/widget_query_results.html
------------------------------------------------------------------------------
    svn:mime-type = text/html



Mime
View raw message