Mercurial > genshi > mirror
changeset 49:6d1f79b2f7ef trunk
convert Trac search page to Markup
author | mgood |
---|---|
date | Tue, 04 Jul 2006 05:08:22 +0000 |
parents | a5d585dd38c4 |
children | d3842cd76e92 |
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 ''}"> + ← <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> → + </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> — + <span class="date">${item.date}</span> + <span py:if="item.keywords" py:strip=""> —</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}">←</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}&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}">→</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