[Checkins] SVN: Sandbox/luciano/kirbi/src/kirbi/ title search
implemented in the public catalog
Luciano Ramalho
luciano at ramalho.org
Sun Jul 8 18:14:57 EDT 2007
Log message for revision 77634:
title search implemented in the public catalog
Changed:
U Sandbox/luciano/kirbi/src/kirbi/app.py
U Sandbox/luciano/kirbi/src/kirbi/app_templates/index.pt
U Sandbox/luciano/kirbi/src/kirbi/app_templates/master.pt
U Sandbox/luciano/kirbi/src/kirbi/book.py
U Sandbox/luciano/kirbi/src/kirbi/book_templates/details.pt
U Sandbox/luciano/kirbi/src/kirbi/pac.py
U Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt
U Sandbox/luciano/kirbi/src/kirbi/static/master.css
-=-
Modified: Sandbox/luciano/kirbi/src/kirbi/app.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/app.py 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/app.py 2007-07-08 22:14:57 UTC (rev 77634)
@@ -1,7 +1,7 @@
import grok
+from grok import index
from kirbi.pac import Pac
from kirbi.book import Book
-from grok import index
from zope.interface import Interface
class Kirbi(grok.Application, grok.Container):
@@ -21,4 +21,5 @@
isbn13 = index.Field()
class Master(grok.View):
- grok.context(Interface)
\ No newline at end of file
+ """ The master page template macro """
+ grok.context(Interface)
Modified: Sandbox/luciano/kirbi/src/kirbi/app_templates/index.pt
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/app_templates/index.pt 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/app_templates/index.pt 2007-07-08 22:14:57 UTC (rev 77634)
@@ -3,11 +3,12 @@
<title metal:fill-slot="title">Main</title>
</head>
<body>
- <div metal:fill-slot="body">
-
- <p><a tal:attributes="href python:view.url('pac')">
- Book Catalog
- </a></p>
+ <span metal:fill-slot="content_title">Main</span>
+
+ <div metal:fill-slot="content">
+
+ Main page stuff will be here.
+
</div>
</body>
</html>
Modified: Sandbox/luciano/kirbi/src/kirbi/app_templates/master.pt
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/app_templates/master.pt 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/app_templates/master.pt 2007-07-08 22:14:57 UTC (rev 77634)
@@ -28,10 +28,22 @@
<li><a tal:attributes="href python:view.application_url()">leases</a></li>
</ul>
</div>
- <div class="body">
<div metal:define-slot="body">
- Your content here...
+ <div class="content_menu">
+ <span metal:define-slot="content_menu">
+ <span class="content_title">
+ <span metal:define-slot="content_title">
+ Content title
+ </span>
+ </span>
+ <span metal:define-slot="content_actions" />
+ </span>
+ </div>
+ <div class="content">
+ <div metal:define-slot="content">
+ Your content here...
+ </div>
+ </div>
</div>
- </div>
</body>
</html>
Modified: Sandbox/luciano/kirbi/src/kirbi/book.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/book.py 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/book.py 2007-07-08 22:14:57 UTC (rev 77634)
@@ -179,6 +179,8 @@
sub_title = property(getSubTitle)
+ def creatorsLine(self):
+ return '; '.join(self.creators)
class Edit(grok.EditForm):
pass
@@ -198,9 +200,6 @@
self.sub_title = self.context.sub_title
self.isbn13 = self.context.isbn13
- def creatorsLine(self):
- return '; '.join(self.context.creators)
-
def coverUrl(self):
cover_name = 'covers/medium/'+self.context.__name__+'.jpg'
return self.static.get(cover_name,
Modified: Sandbox/luciano/kirbi/src/kirbi/book_templates/details.pt
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/book_templates/details.pt 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/book_templates/details.pt 2007-07-08 22:14:57 UTC (rev 77634)
@@ -5,17 +5,25 @@
</title>
</head>
<body>
- <div metal:fill-slot="body">
+ <span metal:fill-slot="content_title">Book details</span>
+ <span metal:fill-slot="content_actions">
+ <form class="search" tal:attributes="action python:view.url('edit')">
+ <input type="submit" name="submit" value="edit">
+ </form>
+ </span>
+
+ <div metal:fill-slot="content">
+
<div class="details">
- <img id="cover" tal:attributes="src view/coverUrl">
+ <img class="cover" tal:attributes="src view/coverUrl">
<h1 tal:content="view/main_title">Main Title</h1>
<h2 tal:content="view/sub_title">sub-title</h2>
<table>
<tr><th>Creators</th>
- <td tal:content="view/creatorsLine">Joe Doe</td>
+ <td tal:content="context/creatorsLine">Joe Doe</td>
</tr>
<tr><th>ISBN-13</th>
<td tal:content="view/isbn13">9780123456789</td>
@@ -34,10 +42,8 @@
</tr>
</table>
- <p><a tal:attributes="href python:view.url('edit')">
- Edit
- </a></p>
- </div>
- </div>
+ </div><!-- /details -->
+
+ </div><!-- /content -->
</body>
</html>
Modified: Sandbox/luciano/kirbi/src/kirbi/pac.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/pac.py 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/pac.py 2007-07-08 22:14:57 UTC (rev 77634)
@@ -5,6 +5,9 @@
from zope.interface import implements
from operator import attrgetter
+from zope.app.catalog.interfaces import ICatalog
+from zope.component import getUtility, queryUtility
+
class Pac(grok.Container):
""" Pac (public access catalog)
@@ -19,9 +22,31 @@
"""
class Index(grok.View):
- def sortedList(self):
- return sorted(self.context.values(), key=attrgetter('filing_title'))
+
+ def update(self, query=None):
+ if not query:
+ # XXX: if the query is empty, return all books; this should change
+ # to some limited default search criteria or none at all
+ results = self.context.values()
+ self.results_title = 'All %s books' % len(results)
+ else:
+ catalog = getUtility(ICatalog)
+ # Note: to sort the results, we must cast the result iterable
+ # to a list, which can be very expensive
+ results = list(catalog.searchResults(title=query))
+ if len(results) == 0:
+ qty = 'No t'
+ s = 's'
+ elif len(results) == 1:
+ qty = 'T'
+ s = ''
+ else:
+ qty = '%s t' % len(results)
+ s = 's'
+ self.results_title = '%sitle%s matching "%s"' % (qty, s, query)
+ self.results = sorted(results, key=attrgetter('filing_title'))
+
def coverUrl(self, name):
cover_name = 'covers/medium/'+name+'.jpg'
return self.static.get(cover_name,
Modified: Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt 2007-07-08 22:14:57 UTC (rev 77634)
@@ -3,25 +3,46 @@
<title metal:fill-slot="title">
Public Catalog
</title>
+ <script metal:fill-slot="headers" type="text/javascript">
+ function setfocus() { document.forms[0].query.focus() }
+ </script>
+
</head>
<body>
- <div metal:fill-slot="body">
- <h1>Public Catalog</h1>
+ <span metal:fill-slot="content_title">Collective catalog</span>
+ <span metal:fill-slot="content_actions">
+ <form class="search" action=".">
+ <input type="text" name="query">
+ <input type="submit" name="submit" value="search">
+ </form>
+ </span>
+ <div metal:fill-slot="content">
+ <h3 tal:content="view/results_title">999 items matched the query</h3>
+ <table tal:condition="view/results">
+ <tr tal:repeat="item view/results">
+ <th align="right" tal:content="repeat/item/number" />
+ <td align="center">
+ <img class="cover"
+ tal:attributes="src python:view.coverUrl(item.__name__)"
+ height="53" />
+ </td>
+ <td>
+ <dl>
+ <dt><a tal:attributes="href python:view.url(item)+'/details'"
+ tal:content="item/filing_title">title goes here</a>
+ </dt>
+ <dd tal:content="item/creatorsLine">
+ </dd>
+ </dl>
+ </td>
+ </tr>
+ </table>
+
<p><a tal:attributes="href python:view.url('addbook')">
Add Book
</a></p>
- <table>
- <tr tal:repeat="item view/sortedList">
- <td align="right" tal:content="repeat/item/number" />
- <td align="center"><img tal:attributes="src python:view.coverUrl(item.__name__)" height="53" /></td>
- <td><a tal:attributes="href python:view.url(item)+'/details'"
- tal:content="item/filing_title">title goes here</a>
- </td>
- </tr>
- </table>
-
</div>
</body>
</html>
Modified: Sandbox/luciano/kirbi/src/kirbi/static/master.css
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/static/master.css 2007-07-08 18:52:04 UTC (rev 77633)
+++ Sandbox/luciano/kirbi/src/kirbi/static/master.css 2007-07-08 22:14:57 UTC (rev 77634)
@@ -1,6 +1,19 @@
body {
margin: 0px;
}
+
+a:link {
+ color: #3030a8;
+ text-decoration: none;
+}
+a:visited {
+ color: #6060a8;
+ text-decoration: none;
+}
+a:hover {
+ text-decoration: underline;
+}
+
div.top {
background-color: #6060a8;
width: 100%;
@@ -29,31 +42,53 @@
padding-bottom: 1px;
border-bottom: 1px solid yellow;
}
-h1, h2, h3, dt {
+h1, h2, h3, dt, .content_title {
font-family: sans-serif;
font-weight: bold;
}
+
h1 { font-size: 16pt; }
-h2 { font-size: 13pt; }
-h3 { font-size: 11pt; }
-dt, th { font-size: 10pt; }
+h2, .content_title { font-size: 14pt; }
+h3 {
+ font-size: 12pt;
+ color: gray;
+}
+dt { font-size: 12pt; }
+th { font-size: 10pt; }
+dd { font-size: 11pt; }
-div.body {
+div.content_menu {
+ background-color: lightgray;
+ padding-left: 10px;
+ padding-bottom: 3px;
+ margin-top: 1px;
+}
+
+div.content {
margin: 20px;
}
-.details img#cover {
+form.search {
+ display: inline;
+ position: absolute;
+ right: 10px;
+}
+
+img.cover {
+ border: 1px solid lightgray;
+ margin-right: 10px;
+}
+
+.details img.cover {
margin-left: 5px;
- margin-right: 20px;
float: left;
- border: 1px solid lightgray;
}
.details h1, h2, h3, dt {
font-family: sans-serif;
font-weight: bold;
}
-.details th {
+th {
font-family: sans-serif;
font-weight: bold;
font-size: 10pt;
More information about the Checkins
mailing list