[Repoze-checkins] r1629 - in repoze.shootout/trunk/repoze/shootout: . templates
Carlos de la Guardia
cguardia at yahoo.com
Mon Aug 18 17:53:24 EDT 2008
Author: Carlos de la Guardia <cguardia at yahoo.com>
Date: Mon Aug 18 17:53:23 2008
New Revision: 1629
Log:
added controller and view for tags and tag display support to all idea display views. Also, simplified main view template by using a loop to display top 10 lists
Added:
repoze.shootout/trunk/repoze/shootout/templates/tag.pt
Modified:
repoze.shootout/trunk/repoze/shootout/configure.zcml
repoze.shootout/trunk/repoze/shootout/templates/idea.pt
repoze.shootout/trunk/repoze/shootout/templates/main.pt
repoze.shootout/trunk/repoze/shootout/views.py
Modified: repoze.shootout/trunk/repoze/shootout/configure.zcml
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/configure.zcml (original)
+++ repoze.shootout/trunk/repoze/shootout/configure.zcml Mon Aug 18 17:53:23 2008
@@ -25,6 +25,12 @@
/>
<bfg:view
+ for="repoze.bfg.interfaces.IRoutesContext"
+ view=".views.tag_view"
+ name="tags"
+ />
+
+ <bfg:view
for=".models.IRange"
view=".views.main_view"
permission="view"
Modified: repoze.shootout/trunk/repoze/shootout/templates/idea.pt
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/templates/idea.pt (original)
+++ repoze.shootout/trunk/repoze/shootout/templates/idea.pt Mon Aug 18 17:53:23 2008
@@ -7,6 +7,7 @@
</div>
<div tal:replace="structure toolbar" />
<h1>${idea.title}</h1>
+ <p>Tags: <ul class="tag-list"><li tal:repeat="tag idea.tags"><a href="${app_url}/tags/${tag.name}">${tag.name}</a></li></ul></p>
<p>By <a href="${app_url}/users/${poster.username}">${poster.name}</a>.</p>
<p>Hits: <b>${idea.hits}</b>.</p>
<p>Misses: <b>${idea.misses}</b>.</p>
@@ -25,7 +26,7 @@
<div tal:condition="comments">
<h3>Comments</h3>
<ul>
- <li tal:repeat="comment comments"><a href="${app_url}/ideas/${comment.idea_id}">${comment.title}</a>, by ${comment.author} (+${comment.hits}, -${comment.misses}).</li>
+ <li tal:repeat="comment comments"><span class="tags"><a tal:repeat="tag comment.tags" href="${app_url}/tags/${tag.name}">${tag.name}</a></span> <a href="${app_url}/ideas/${comment.idea_id}">${comment.title}</a>, by ${comment.users.name} (+${comment.hits}, -${comment.misses}).</li>
</ul>
</div>
</body>
Modified: repoze.shootout/trunk/repoze/shootout/templates/main.pt
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/templates/main.pt (original)
+++ repoze.shootout/trunk/repoze/shootout/templates/main.pt Mon Aug 18 17:53:23 2008
@@ -9,29 +9,13 @@
<h1>The Shooting Range</h1>
<p>This is a place to discuss and vote on ideas of all kind. Want to know what others think about your idea? Give it a shot.</p>
<p><a href="idea_add">What's your idea?</a></p>
- <div tal:condition="last10">
- <h3>Latest shots</h3>
- <ul>
- <li tal:repeat="idea last10"><a href="${app_url}/ideas/${idea.idea_id}">${idea.title}</a>, by <a href="${app_url}/users/${idea.users.username}">${idea.users.name}</a> (+${idea.hits}, -${idea.misses}).</li>
- </ul>
- </div>
- <div tal:condition="top">
- <h3>Most hits</h3>
- <ul>
- <li tal:repeat="idea top"><a href="${app_url}/ideas/${idea.idea_id}">${idea.title}</a>, by <a href="${app_url}/users/${idea.users.username}">${idea.users.name}</a> (+${idea.hits}, -${idea.misses}).</li>
- </ul>
- </div>
- <div tal:condition="bottom">
- <h3>Most misses</h3>
- <ul>
- <li tal:repeat="idea bottom"><a href="${app_url}/ideas/${idea.idea_id}">${idea.title}</a>, by <a href="${app_url}/users/${idea.users.username}">${idea.users.name}</a> (+${idea.hits}, -${idea.misses}).</li>
- </ul>
- </div>
- <div tal:condition="hitpct">
- <h3>Best performance</h3>
- <ul>
- <li tal:repeat="idea hitpct"><a href="${app_url}/ideas/${idea.idea_id}">${idea.title}</a>, by <a href="${app_url}/users/${idea.users.username}">${idea.users.name}</a> (+${idea.hits}, -${idea.misses}).</li>
- </ul>
+ <div tal:condition="toplists">
+ <div tal:repeat="toplist toplists">
+ <h3>${toplist['title']}</h3>
+ <ul>
+ <li tal:repeat="idea toplist['items']"><span class="tags"><a tal:repeat="tag idea.tags" href="${app_url}/tags/${tag.name}">${tag.name}</a></span> <a href="${app_url}/ideas/${idea.idea_id}">${idea.title}</a>, by <a href="${app_url}/users/${idea.users.username}">${idea.users.name}</a> (+${idea.hits}, -${idea.misses}).</li>
+ </ul>
+ </div>
</div>
</body>
</html>
Added: repoze.shootout/trunk/repoze/shootout/templates/tag.pt
==============================================================================
--- (empty file)
+++ repoze.shootout/trunk/repoze/shootout/templates/tag.pt Mon Aug 18 17:53:23 2008
@@ -0,0 +1,14 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:tal="http://xml.zope.org/namespaces/tal">
+<head></head>
+<body>
+ <div id="home_link">
+ <p><a href="${app_url}">Back to home page</a></p>
+ </div>
+ <div tal:replace="structure toolbar" />
+ <h1>${tag}</h1>
+ <ul>
+ <li tal:repeat="idea ideas"><span class="tags"><a tal:repeat="tag idea.tags" href="${app_url}/tags/${tag.name}">${tag.name}</a></span> <a href="${app_url}/ideas/${idea.idea_id}">${idea.title}</a>, by ${idea.users.name} (+${idea.hits}, -${idea.misses}).</li>
+ </ul>
+</body>
+</html>
Modified: repoze.shootout/trunk/repoze/shootout/views.py
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/views.py (original)
+++ repoze.shootout/trunk/repoze/shootout/views.py Mon Aug 18 17:53:23 2008
@@ -19,14 +19,17 @@
top = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.hits.desc()).all()[:10]
bottom = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.misses.desc()).all()[:10]
last10 = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.idea_id.desc()).all()[:10]
+ toplists=[
+ {'title':'Latest shots','items':last10},
+ {'title':'Most hits','items':top},
+ {'title':'Most misses','items':bottom},
+ {'title':'Best performance','items':hitpct},
+ ]
return render_template_to_response('templates/main.pt',
app_url=request.application_url,
message=message,
toolbar=toolbar_view(context,request),
- hitpct=hitpct,
- top=top,
- bottom=bottom,
- last10=last10)
+ toplists=toplists)
def idea_vote(context, request):
app_url = request.application_url
@@ -86,11 +89,12 @@
if '' in tags:
tags.remove('')
for tagname in tags:
- tag = DBSession.query(Tag).filter(Tag.name==tagname).all()
- if not tag:
+ existent = DBSession.query(Tag).filter(Tag.name==tagname).all()
+ if not existent:
tag = Tag(name=tagname)
idea.tags.append(tag)
- DBSession.save(idea)
+ else:
+ idea.tags.append(existent[0])
DBSession.commit()
url = "%s/ideas/%s" % (app_url,idea.idea_id)
return HTTPFound(location=url)
@@ -168,6 +172,14 @@
viewer_username=viewer_username,
idea=idea)
+def tag_view(context, request):
+ ideas = DBSession.query(Idea).filter(Idea.tags.any(name=context.tag)).all()
+ return render_template_to_response('templates/tag.pt',
+ tag=context.tag,
+ app_url=request.application_url,
+ toolbar=toolbar_view(context,request),
+ ideas=ideas)
+
def logout_view(context, request):
response = webob.Response()
response.status = '401 Unauthorized'
More information about the Repoze-checkins
mailing list