changeset 49:9b5255d72e33

convert Trac search page to Markup
author mgood
date Tue, 04 Jul 2006 05:08:22 +0000
parents 06c642ba2b08
children a053ffb834cb
files examples/trac/templates/search.html examples/trac/trac/Search.py
diffstat 2 files changed, 110 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/examples/trac/templates/search.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:py="http://purl.org/kid/ns#"
+      xmlns:xi="http://www.w3.org/2001/XInclude">
+  <xi:include href="layout.html"><xi:fallback/></xi:include>
+  <head>
+    <title>Search<span py:if="search.q" py:strip=""> Results</span></title>
+    <script type="text/javascript">
+      addEvent(window, 'load', function() { document.getElementById('q').focus()}); 
+    </script>
+  </head>
+
+  <body>
+    <div id="ctxtnav" class="nav">
+      <ul py:if="chrome.links.prev or chrome.links.next">
+        <li py:if="chrome.links.prev"
+            class="first${not (chrome.links.up or chrome.links.next) and ' last' or ''}">
+          &larr; <a href="${chrome.links.prev[0].href}">${chrome.links.prev[0].title}</a>
+        </li>
+        <li py:if="chrome.links.next"
+            class="${not (chrome.links.prev or chrome.links.up) and 'first ' or ''}last">
+          <a href="${chrome.links.next[0].href}">${chrome.links.next[0].title}</a> &rarr;
+        </li>
+      </ul>
+    </div>
+
+    <div id="content" class="search">
+
+      <h1><label for="q">Search</label></h1>
+      <form action="${href.search()}" method="get">
+        <p>
+          <input type="text" id="q" name="q" size="40" value="${search.q}" />
+          <input type="hidden" name="noquickjump" value="1" />
+          <input type="submit" value="Search" />
+        </p>
+        <p>
+          <span py:for="filter in search.filters" py:strip="">
+          <input type="checkbox" id="${filter.name}" name="${filter.name}"
+                 checked="${filter.active and 'checked' or None}" />
+          <label for="${filter.name}">${filter.label}</label>
+          </span>
+       </p>
+      </form>
+      <div py:if="search.result or search.quickjump" py:strip="">
+      <hr />
+      <h2 py:if="search.result">Search results
+        <span py:if="search.n_pages > 1" py:strip="">(${(search.page-1) * search.page_size + 1} - ${(search.page-1) * search.page_size + len(search.result)} of ${search.n_hits})</span>
+      </h2>
+      <div id="searchable">
+        <dl id="results">
+          <dt id="quickjump" py:if="search.quickjump"><a href="${search.quickjump.href}">Quickjump to ${search.quickjump.name}</a></dt>
+          <dd py:if="search.quickjump">${search.quickjump.description}</dd>
+          <div py:for="item in search.result" py:strip="">
+          <dt><a href="${item.href}">${item.title}</a></dt>
+          <dd>${item.excerpt}</dd>
+          <dd>
+            <span class="author">By ${item.author}</span> &mdash;
+            <span class="date">${item.date}</span>
+            <span py:if="item.keywords" py:strip=""> &mdash;</span>
+            <span class="keywords" py:if="item.keywords">Keywords: <em>${item.keywords}</em></span>
+          </dd>
+          </div>
+        </dl>
+        <hr />
+      </div>
+      </div>
+
+      <div py:choose="" py:strip="">
+      <div id="paging" py:when="search.n_pages > 1">
+        <a py:if="chrome.links.prev" href="${chrome.links.prev[0].href}"
+           title="${chrome.links.prev[0].title}">&larr;</a>
+        <!-- need span for spacing around links -->
+        <span py:for="page in xrange(1, search.n_pages+1)" py:strip="">
+        <a href="${search.page_href}&amp;page=${page}"
+           py:strip="page == search.page">${page}</a>
+        </span>
+        <a py:if="chrome.links.next" href="${chrome.links.next[0].href}"
+           title="${chrome.links.next[0].title}">&rarr;</a>
+      </div>
+      <div id="notfound" py:when="search.q and not search.quickjump">No matches found.</div>
+      </div>
+
+      <div id="help">
+        <strong>Note:</strong> See <a href="${href.wiki('TracSearch')}">TracSearch</a> for help on searching.
+      </div>
+
+    </div>
+  </body>
+</html>
--- a/examples/trac/trac/Search.py
+++ b/examples/trac/trac/Search.py
@@ -156,14 +156,15 @@
             filters = [f[0] for f in available_filters
                        if len(f) < 3 or len(f) > 2 and f[2]]
                 
-        req.hdf['search.filters'] = [
-            { 'name': filter[0],
-              'label': filter[1],
-              'active': filter[0] in filters
-            } for filter in available_filters]
+        data = {
+            'filters': [
+                { 'name': filter[0],
+                  'label': filter[1],
+                  'active': filter[0] in filters
+                } for filter in available_filters
+            ]
+        }
                 
-        req.hdf['title'] = 'Search'
-
         query = req.args.get('q')
         if query:
             page = int(req.args.get('page', '1'))
@@ -172,7 +173,7 @@
             if link_elt is not None:
                 quickjump_href = link_elt.attr['href']
                 if noquickjump:
-                    req.hdf['search.quickjump'] = {
+                    data['quickjump'] = {
                         'href': quickjump_href,
                         'name': html.EM(link_elt.children),
                         'description': link_elt.attr.get('title', '')
@@ -196,12 +197,11 @@
             n_pages = (n-1) / page_size + 1
             results = results[(page-1) * page_size: page * page_size]
 
-            req.hdf['title'] = 'Search Results'
-            req.hdf['search.q'] = req.args.get('q')
-            req.hdf['search.page'] = page
-            req.hdf['search.n_hits'] = n
-            req.hdf['search.n_pages'] = n_pages
-            req.hdf['search.page_size'] = page_size
+            data['q'] = req.args.get('q')
+            data['page'] = page
+            data['n_hits'] = n
+            data['n_pages'] = n_pages
+            data['page_size'] = page_size
             if page < n_pages:
                 next_href = req.href.search(zip(filters, ['on'] * len(filters)),
                                             q=req.args.get('q'), page=page + 1)
@@ -210,9 +210,10 @@
                 prev_href = req.href.search(zip(filters, ['on'] * len(filters)),
                                             q=req.args.get('q'), page=page - 1)
                 add_link(req, 'prev', prev_href, 'Previous Page')
-            req.hdf['search.page_href'] = req.href.search(zip(filters, ['on'] * len(filters)),
-                                                          q=req.args.get('q'))
-            req.hdf['search.result'] = [
+            data['page_href'] = req.href.search(zip(filters,
+                                                    ['on'] * len(filters)),
+                                                q=req.args.get('q'))
+            data['result'] = [
                 { 'href': result[0],
                   'title': result[1],
                   'date': format_datetime(result[2]),
@@ -221,7 +222,7 @@
                 } for result in results]
 
         add_stylesheet(req, 'common/css/search.css')
-        return 'search.cs', None
+        return 'search.html', {'search': data}, None
 
     def quickjump(self, req, kwd):
         # Source quickjump
Copyright (C) 2012-2017 Edgewall Software