[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