Merge lp:~sinzui/launchpad/answers-portlets into lp:launchpad

Proposed by Curtis Hovey
Status: Merged
Merged at revision: not available
Proposed branch: lp:~sinzui/launchpad/answers-portlets
Merge into: lp:launchpad
Diff against target: None lines
To merge this branch: bzr merge lp:~sinzui/launchpad/answers-portlets
Reviewer Review Type Date Requested Status
Eleanor Berger (community) Approve
Review via email: mp+9862@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Curtis Hovey (sinzui) wrote :
Download full text (4.5 KiB)

This is my branch to update portlets used by pillars to UI 3.0.

    lp:~sinzui/launchpad/answers-portlets
    Diff size: 508
    Launchpad bug: https://bugs.launchpad.net/bugs/answers-portlets
    Test command: ./bin/test -vv \
      -t "faq-views|question-overview|xx-announcements|xx-karmacontext-topcontributors"
    Pre-implementation: beuno
    Target release: 2.2.8

= Update portlets used by pillars to UI 3.0 =

There are several portlets that need updating to the new project UI.
These portlets will also be used by Distributions and ProjectGroups: top
contributors, announcements, and latest questions. They also need a new
portlet to show the latest FAQs.

== Rules ==

    * Create an FAQ portlet.
    * Update the latest questions portlet.
      * Remove it from teams, they cannot ask questions.
      * Remove it from SourcePackages, the questions really belong
        to the DistributionSourcePackage.
    * Update the top contributors portlet.
    * Update the announcements portlet.

== QA ==

Describe the steps to verify that the project behaves correctly

== Lint ==

Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.

Linting changed files:
  lib/lp/answers/browser/configure.zcml
  lib/lp/answers/browser/faqcollection.py
  lib/lp/answers/browser/questiontarget.py
  lib/lp/answers/browser/tests/faq-views.txt
  lib/lp/answers/stories/question-overview.txt
  lib/lp/answers/templates/faqcollection-portlet-faqs.pt
  lib/lp/answers/templates/questiontarget-portlet-latestquestions.pt
  lib/lp/registry/stories/announcements/xx-announcements.txt
  lib/lp/registry/stories/standalone/xx-karmacontext-topcontributors.txt
  lib/lp/registry/templates/hasannouncements-portlet-latest.pt
  lib/lp/registry/templates/karmacontext-portlet-top-contributors.pt
  lib/lp/registry/templates/sourcepackage-index.pt
  lib/lp/registry/templates/team-index.pt

== Test ==

    * lib/lp/answers/browser/tests/faq-views.txt
      * Added a test to verify that latest faqs portlet works.
      * The original test did not make sense. There are already model
        tests for creating an FAQ. I think this was an incomplete test
        that was committed. I repurposed it to do a real view test.
    * lib/lp/answers/stories/question-overview.txt
      * Updated the test to verify the information presented in the
        latest questions portlet.
    * lib/lp/registry/stories/announcements/xx-announcements.txt
      * Revised the test to verify the layout of the links.
    * lib/lp/registry/stories/standalone/xx-karmacontext-topcontributors.txt
      * Revised the test because the headings changed for 3.0.

== Implementation ==

    * lib/lp/answers/browser/configure.zcml
      * Registered +portlet-listfaqs on the existing SearchFAQsView.
    * lib/lp/answers/browser/faqcollection.py
      * Added a create_faq link. The templates were/are making this link.
        They can be updated when they are converted to 3.0
      * Added 2 properties to SearchFAQsView to support it's reuse as a
        portlet.
    * lib/lp/answers/browser/questiontarget.py
      * Added a property to the LatestQuestio...

Read more...

Revision history for this message
Eleanor Berger (intellectronica) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/answers/browser/configure.zcml'
--- lib/lp/answers/browser/configure.zcml 2009-07-13 18:15:02 +0000
+++ lib/lp/answers/browser/configure.zcml 2009-08-07 15:27:51 +0000
@@ -281,7 +281,13 @@
281 permission="zope.Public"281 permission="zope.Public"
282 template="../templates/faq-listing.pt"282 template="../templates/faq-listing.pt"
283 />283 />
284284 <browser:page
285 for="lp.answers.interfaces.faqcollection.IFAQCollection"
286 class=".faqcollection.SearchFAQsView"
287 name="+portlet-listfaqs"
288 permission="zope.Public"
289 template="../templates/faqcollection-portlet-faqs.pt"
290 />
285 <browser:page291 <browser:page
286 name="+createfaq"292 name="+createfaq"
287 for="lp.answers.interfaces.faqtarget.IFAQTarget"293 for="lp.answers.interfaces.faqtarget.IFAQTarget"
288294
=== modified file 'lib/lp/answers/browser/faqcollection.py'
--- lib/lp/answers/browser/faqcollection.py 2009-06-24 23:10:46 +0000
+++ lib/lp/answers/browser/faqcollection.py 2009-08-07 21:43:36 +0000
@@ -12,14 +12,18 @@
1212
13from urllib import urlencode13from urllib import urlencode
1414
15from canonical.cachedproperty import cachedproperty
15from canonical.launchpad import _16from canonical.launchpad import _
16from canonical.launchpad.interfaces import (17from lp.answers.interfaces.faqcollection import (
17 IFAQCollection, ISearchFAQsForm, QUESTION_STATUS_DEFAULT_SEARCH,18 IFAQCollection, ISearchFAQsForm, FAQSort)
18 QuestionSort)19from lp.answers.interfaces.questionenums import QuestionSort
20from lp.answers.interfaces.questioncollection import (
21 QUESTION_STATUS_DEFAULT_SEARCH)
19from canonical.launchpad.webapp import (22from canonical.launchpad.webapp import (
20 action, ApplicationMenu, canonical_url, LaunchpadFormView, Link,23 action, ApplicationMenu, canonical_url, LaunchpadFormView, Link,
21 safe_action)24 safe_action)
22from canonical.launchpad.webapp.batching import BatchNavigator25from canonical.launchpad.webapp.batching import BatchNavigator
26from canonical.launchpad.webapp.menu import enabled_with_permission
2327
2428
25class FAQCollectionMenu(ApplicationMenu):29class FAQCollectionMenu(ApplicationMenu):
@@ -27,7 +31,7 @@
2731
28 usedfor = IFAQCollection32 usedfor = IFAQCollection
29 facet = 'answers'33 facet = 'answers'
30 links = ['list_all']34 links = ['list_all', 'create_faq']
3135
32 def list_all(self):36 def list_all(self):
33 """Return a Link to list all FAQs."""37 """Return a Link to list all FAQs."""
@@ -36,7 +40,14 @@
36 # which an adapter exists that gives the proper context.40 # which an adapter exists that gives the proper context.
37 collection = IFAQCollection(self.context)41 collection = IFAQCollection(self.context)
38 url = canonical_url(collection, rootsite='answers') + '/+faqs'42 url = canonical_url(collection, rootsite='answers') + '/+faqs'
39 return Link(url, 'List all FAQs')43 return Link(url, 'List all FAQs', icon='info')
44
45 @enabled_with_permission('launchpad.Moderate')
46 def create_faq(self):
47 """Return a Link to create a new FAQ."""
48 collection = IFAQCollection(self.context)
49 url = canonical_url(collection, rootsite='answers') + '/+createfaq'
50 return Link(url, 'Create a new FAQ', icon='add')
4051
4152
42class SearchFAQsView(LaunchpadFormView):53class SearchFAQsView(LaunchpadFormView):
@@ -81,6 +92,23 @@
81 faqs = self.context.searchFAQs(search_text=self.search_text)92 faqs = self.context.searchFAQs(search_text=self.search_text)
82 return BatchNavigator(faqs, self.request)93 return BatchNavigator(faqs, self.request)
8394
95 @property
96 def portlet_action(self):
97 """The action URL of the portlet form."""
98 return canonical_url(
99 self.context, view_name='+faqs', rootsite='answers')
100
101 @cachedproperty
102 def latest_faqs(self):
103 """Return the latest faqs created for this target.
104
105 This is used by the +portlet-listfaqs view.
106 """
107 quantity = 5
108 faqs = self.context.searchFAQs(
109 search_text=self.search_text, sort=FAQSort.NEWEST_FIRST)
110 return faqs[:quantity]
111
84 @safe_action112 @safe_action
85 @action(_('Search'), name='search')113 @action(_('Search'), name='search')
86 def search_action(self, action, data):114 def search_action(self, action, data):
87115
=== modified file 'lib/lp/answers/browser/questiontarget.py'
--- lib/lp/answers/browser/questiontarget.py 2009-06-24 23:10:46 +0000
+++ lib/lp/answers/browser/questiontarget.py 2009-08-07 15:27:51 +0000
@@ -108,6 +108,11 @@
108 """View used to display the latest questions on a question target."""108 """View used to display the latest questions on a question target."""
109109
110 @cachedproperty110 @cachedproperty
111 def latest_questions_url(self):
112 """The link to the latest questions."""
113 return canonical_url(self.context, rootsite='answers')
114
115 @cachedproperty
111 def getLatestQuestions(self, quantity=5):116 def getLatestQuestions(self, quantity=5):
112 """Return <quantity> latest questions created for this target. This117 """Return <quantity> latest questions created for this target. This
113 is used by the +portlet-latestquestions view.118 is used by the +portlet-latestquestions view.
114119
=== modified file 'lib/lp/answers/browser/tests/faq-views.txt'
--- lib/lp/answers/browser/tests/faq-views.txt 2009-03-24 12:43:49 +0000
+++ lib/lp/answers/browser/tests/faq-views.txt 2009-08-07 21:43:36 +0000
@@ -1,10 +1,67 @@
1= Answer Tracker FAQ Pages =1Answer Tracker FAQ Pages
22========================
3 >>> from canonical.launchpad.interfaces import ILaunchBag, IProductSet3
4 >>> from lp.registry.interfaces.product import IProductSet
5
4 >>> firefox = getUtility(IProductSet).getByName('firefox')6 >>> firefox = getUtility(IProductSet).getByName('firefox')
57 >>> login_person(firefox.owner)
6 >>> login('foo.bar@canonical.com')
7 >>> foo_bar = getUtility(ILaunchBag).user
8 >>> firefox_faq = firefox.newFAQ(8 >>> firefox_faq = firefox.newFAQ(
9 ... foo_bar, 'A FAQ', 'FAQ for test purpose')9 ... firefox.owner, 'A FAQ', 'FAQ for test purpose')
1010
11
12Latest FAQs portlet
13-------------------
14
15The latest FAQs portlet allows an `IFAQTarget` to show the latest FAQs.
16It's view provided latest_faqs to get the FAQs to display.
17
18 >>> from canonical.launchpad.testing.pages import (
19 ... extract_text, find_tag_by_id)
20
21 >>> view = create_initialized_view(
22 ... firefox, '+portlet-listfaqs', principal=firefox.owner)
23 >>> for faq in view.latest_faqs:
24 ... print faq.title
25 A FAQ
26 What's the keyboard shortcut for [random feature]?
27 How do I install plugins (Shockwave, QuickTime, etc.)?
28 How do I troubleshoot problems with extensions/themes?
29 How do I install Extensions?
30
31 >>> content = find_tag_by_id(view.render(), 'portlet-latest-faqs')
32 >>> print content.h2
33 <h2>...FAQs for Mozilla Firefox </h2>
34
35 >>> print extract_text(content.ul)
36 A FAQ
37 What's the keyboard shortcut for [random feature]?...
38
39Each FAQ is linked.
40
41 >>> print content.find('a', {'class': 'sprite question'})
42 <a class="..." href="http://answers.../firefox/+faq/...">A FAQ</a>
43
44The portlet has a form to search FAQs. The view provides the action URL so
45that the form works from any page.
46
47 >>> print view.portlet_action
48 http://answers.launchpad.dev/firefox/+faqs
49
50 >>> print content.form['action']
51 http://answers.launchpad.dev/firefox/+faqs
52
53The portlet provides a link to create a faq when the user that has moderate
54permission such as the project owner.
55
56 >>> print content.find('a', {'class': 'menu-link-create_faq sprite add'})
57 <a href=".../firefox/+createfaq" class="...">Create a new FAQ</a>
58
59Other users do not see the link.
60
61 >>> user = factory.makePerson(name='a-user')
62 >>> login_person(user)
63 >>> view = create_initialized_view(
64 ... firefox, '+portlet-listfaqs', principal=user)
65 >>> content = find_tag_by_id(view.render(), 'portlet-latest-faqs')
66 >>> print content.find('a', {'class': 'menu-link-create_faq sprite add'})
67 None
1168
=== modified file 'lib/lp/answers/stories/question-overview.txt'
--- lib/lp/answers/stories/question-overview.txt 2009-06-02 08:20:49 +0000
+++ lib/lp/answers/stories/question-overview.txt 2009-08-07 18:20:14 +0000
@@ -165,14 +165,15 @@
165165
166 >>> user_browser.open('http://launchpad.dev/mozilla')166 >>> user_browser.open('http://launchpad.dev/mozilla')
167167
168 >>> questions = find_portlet(user_browser.contents, 'Latest questions')168 >>> questions = find_tag_by_id(
169 >>> print extract_text(169 ... user_browser.contents, 'portlet-latest-questions')
170 ... questions.find('div')).encode('ASCII', 'backslashreplace')170 >>> print extract_text(questions).encode('ASCII', 'backslashreplace')
171 [Open] Problemas de Impress\xe3o no Firefox171 Latest questions
172 [Answered] Newly installed plug-in doesn't seem to be used172 Problemas de Impress\xe3o no Firefox ...
173 [Open] Firefox loses focus and gets stuck173 Newly installed plug-in doesn't seem to be used ...
174 [Open] Problem showing the SVG demo on W3C site174 Firefox loses focus and gets stuck ...
175 [Open] Firefox cannot render Bank Site175 Problem showing the SVG demo on W3C site ...
176 Firefox cannot render Bank Site ...
176177
177 >>> user_browser.getLink('Ask a question').click()178 >>> user_browser.getLink('Ask a question').click()
178 >>> print user_browser.title179 >>> print user_browser.title
179180
=== added file 'lib/lp/answers/templates/faqcollection-portlet-faqs.pt'
--- lib/lp/answers/templates/faqcollection-portlet-faqs.pt 1970-01-01 00:00:00 +0000
+++ lib/lp/answers/templates/faqcollection-portlet-faqs.pt 2009-08-07 21:43:36 +0000
@@ -0,0 +1,34 @@
1<div
2 xmlns:tal="http://xml.zope.org/namespaces/tal"
3 class="portlet" id="portlet-latest-faqs"
4 tal:define="faqs view/latest_faqs"
5 tal:condition="faqs">
6 <h2>
7 <span class="see-all"><a
8 tal:replace="structure view/menu:answers/list_all/fmt:link" /></span>
9 FAQs for <tal:name replace="context/displayname" />
10 </h2>
11
12 <form id="question-search-form" method="get" accept-charset="UTF-8"
13 tal:attributes="action view/portlet_action">
14 <p>
15 <tal:searchbox replace="structure view/widgets/search_text" />
16 <input tal:replace="structure view/search_action/render" />
17 </p>
18 </form>
19
20 <ul tal:condition="faqs">
21 <li tal:repeat="faq faqs">
22 <a class="sprite question"
23 tal:attributes="href faq/fmt:url"
24 tal:content="faq/title">How do I do this?</a>
25 </li>
26 </ul>
27
28 <ul class="horizontal"
29 tal:condition="context/required:launchpad.Moderate">
30 <li>
31 <a tal:replace="structure view/menu:answers/create_faq/fmt:link" />
32 </li>
33 </ul>
34</div>
035
=== modified file 'lib/lp/answers/templates/questiontarget-portlet-latestquestions.pt'
--- lib/lp/answers/templates/questiontarget-portlet-latestquestions.pt 2009-07-17 17:59:07 +0000
+++ lib/lp/answers/templates/questiontarget-portlet-latestquestions.pt 2009-08-07 22:14:06 +0000
@@ -1,15 +1,27 @@
1<div class="portlet" id="portlet-latest-questions"1<div
2 tal:condition="view/getLatestQuestions">2 xmlns:tal="http://xml.zope.org/namespaces/tal"
3 <h2>Latest questions</h2>3 class="portlet" id="portlet-latest-questions"
4 <div class="portletBody portletContent">4 tal:define="questions view/getLatestQuestions"
55 tal:condition="questions">
6 <ul>6 <h2>
7 <li tal:repeat="question view/getLatestQuestions">7 <span class="see-all" tal:condition="nothing"><a
8 <span tal:attributes="class string:questionstatus${question/status/name} ${question/image:sprite_css}"8 tal:attributes="href view/latest_questions_url">All questions</a></span>
9 >[<tal:block tal:replace="structure question/status/title" />]</span>9 Latest questions
10 <a tal:content="question/title/fmt:shorten/80"10 </h2>
11 tal:attributes="href question/fmt:url">question title</a>11
12 </li>12 <ul tal:condition="questions">
13 </ul>13 <li tal:repeat="question questions">
14 </div>14 <a
15 tal:attributes="class string: ${question/image:sprite_css};
16 href question/fmt:url;"
17 tal:content="question/title/fmt:shorten/80">question title</a>
18 <br />Posted <tal:when replace="question/datecreated/fmt:displaydate" />
19 </li>
20 </ul>
21
22 <tal:comment condition="nothing">
23 # XXX sinzui 2009-08-07 bug=410501: Remove this link and enable the
24 # see all link when the distribution source package index page is 3.0.
25 </tal:comment>
26 <a tal:attributes="href view/latest_questions_url">All questions</a>
15</div>27</div>
1628
=== modified file 'lib/lp/registry/stories/announcements/xx-announcements.txt'
--- lib/lp/registry/stories/announcements/xx-announcements.txt 2009-08-01 02:04:55 +0000
+++ lib/lp/registry/stories/announcements/xx-announcements.txt 2009-08-07 17:29:08 +0000
@@ -90,8 +90,8 @@
90 >>> print latest_news(priv_browser.contents).encode(90 >>> print latest_news(priv_browser.contents).encode(
91 ... 'ascii', 'backslashreplace')91 ... 'ascii', 'backslashreplace')
92 Announcements92 Announcements
93 20...: Apache announcement headline93 Apache announcement headline...
94 ...More announcements94 More announcements
95 Make announcement95 Make announcement
9696
97Add another one, this time specifying a date in the past, which should97Add another one, this time specifying a date in the past, which should
@@ -115,9 +115,9 @@
115 >>> print latest_news(priv_browser.contents).encode(115 >>> print latest_news(priv_browser.contents).encode(
116 ... 'ascii', 'backslashreplace')116 ... 'ascii', 'backslashreplace')
117 Announcements117 Announcements
118 20...: Apache announcement headline118 Apache announcement headline ...
119 2007-11-24: Tomcat announcement headline119 Tomcat announcement headline on 2007-11-24 ...
120 ...More announcements120 More announcements
121 Make announcement121 Make announcement
122122
123Let's make sure that the announcement is presented as a link.123Let's make sure that the announcement is presented as a link.
124124
=== modified file 'lib/lp/registry/stories/standalone/xx-karmacontext-topcontributors.txt'
--- lib/lp/registry/stories/standalone/xx-karmacontext-topcontributors.txt 2009-04-17 10:32:16 +0000
+++ lib/lp/registry/stories/standalone/xx-karmacontext-topcontributors.txt 2009-08-07 15:47:52 +0000
@@ -56,7 +56,7 @@
56 >>> print find_portlet(56 >>> print find_portlet(
57 ... anon_browser.contents, 'Top contributors').renderContents()57 ... anon_browser.contents, 'Top contributors').renderContents()
58 <BLANKLINE>58 <BLANKLINE>
59 <h2>Top contributors</h2>59 <h2> Top contributors </h2>
60 ...Sample Person...60 ...Sample Person...
61 ...Mark Shuttleworth...61 ...Mark Shuttleworth...
62 ...Foo Bar...62 ...Foo Bar...
@@ -92,7 +92,7 @@
92 >>> print find_portlet(92 >>> print find_portlet(
93 ... anon_browser.contents, 'Top contributors').renderContents()93 ... anon_browser.contents, 'Top contributors').renderContents()
94 <BLANKLINE>94 <BLANKLINE>
95 <h2>Top contributors</h2>95 <h2> Top contributors </h2>
96 ...Sample Person...96 ...Sample Person...
97 ...Mark Shuttleworth...97 ...Mark Shuttleworth...
98 ...Foo Bar...98 ...Foo Bar...
9999
=== modified file 'lib/lp/registry/templates/hasannouncements-portlet-latest.pt'
--- lib/lp/registry/templates/hasannouncements-portlet-latest.pt 2009-07-17 17:59:07 +0000
+++ lib/lp/registry/templates/hasannouncements-portlet-latest.pt 2009-08-07 22:14:06 +0000
@@ -4,36 +4,43 @@
4 xmlns:i18n="http://xml.zope.org/namespaces/i18n"4 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
5 omit-tag="">5 omit-tag="">
6<tal:news define="announcements view/latest_announcements;6<tal:news define="announcements view/latest_announcements;
7 has_announcements announcements/count;
7 overview_menu context/menu:overview">8 overview_menu context/menu:overview">
8<div9<div id="portlet-latest-announcements" class="portlet announcements">
9 class="portlet"10 <h2>
10 id="portlet-latest-announcements">11 <span style="float: right;"><a title="Atom 1.0 feed"
11 <h2>Announcements</h2>12 tal:attributes="href view/feed_url"><img src="/@@/rss.png"/></a></span>
12 <div class="portletBody portletContent">13 Announcements
13 <a title="Atom 1.0 feed"14 </h2>
14 tal:attributes="href view/feed_url">15
15 </a>16 <p tal:condition="not: has_announcements">
17 <tal:name replace="context/displayname" /> has no announcements.
18 </p>
19
20 <tal:announcements condition="has_announcements">
16 <ul>21 <ul>
17 <li tal:repeat="announcement announcements" class="news">22 <li tal:repeat="announcement announcements">
18 <img src="/@@/warning" alt="[Not published]"23 <div class="latest-announcement"
19 title="This is not yet a public announcement"24 tal:omit-tag="not: repeat/announcement/start">
20 tal:condition="not: announcement/published" />25 <img src="/@@/warning" alt="[Not published]"
21 <a tal:attributes="href announcement/fmt:url">26 title="This is not yet a public announcement"
22 <span27 tal:condition="not: announcement/published" />
28 <a tal:attributes="href announcement/fmt:url"
29 tal:content="announcement/title" />
30 <strong
23 tal:condition="announcement/date_announced"31 tal:condition="announcement/date_announced"
24 tal:replace="string:${announcement/date_announced/fmt:date}:" />32 tal:content="announcement/date_announced/fmt:displaydate" />
25 <span tal:replace="announcement/title" />33 <br /> <tal:extract replace="announcement/summary/fmt:shorten/80" />
26 </a>34 </div>
27 </li>35 </li>
28 </ul>36 </ul>
29 <div37
30 tal:content="structure overview_menu/announcements/render"38 <div class="see-all"
31 />39 tal:content="structure overview_menu/announcements/render" />
32 <div40 </tal:announcements>
33 class="actions"41
34 tal:content="structure overview_menu/announce/render"42 <div class="actions"
35 />43 tal:content="structure overview_menu/announce/render" />
36 </div>
37</div>44</div>
38</tal:news>45</tal:news>
39</tal:root>46</tal:root>
4047
=== modified file 'lib/lp/registry/templates/karmacontext-portlet-top-contributors.pt'
--- lib/lp/registry/templates/karmacontext-portlet-top-contributors.pt 2009-07-17 17:59:07 +0000
+++ lib/lp/registry/templates/karmacontext-portlet-top-contributors.pt 2009-08-07 22:14:06 +0000
@@ -1,27 +1,30 @@
1<div1<div
2 xmlns:tal="http://xml.zope.org/namespaces/tal"2 xmlns:tal="http://xml.zope.org/namespaces/tal"
3 xmlns:metal="http://xml.zope.org/namespaces/metal"
4 xmlns:i18n="http://xml.zope.org/namespaces/i18n"3 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
5 class="portlet" id="portlet-top-contributors"4 class="portlet" id="portlet-top-contributors"
6 tal:condition="view/getTopFiveContributors">5 tal:define="contributors view/getTopFiveContributors"
7 <h2>Top contributors</h2>6 tal:condition="contributors">
87 <h2>
9 <table>8 <span class="see-all" tal:condition="nothing"><a
10 <tr tal:repeat="contributor view/getTopFiveContributors">9 tal:replace="structure context/menu:overview/top_contributors/fmt:link" /></span>
11 <td>10 Top contributors
12 <a tal:replace="structure contributor/person/fmt:link">11 </h2>
13 Guilherme Salgado12
14 </a>13 <dl>
15 </td>14 <tal:contributor tal:repeat="contributor contributors">
16 <td align="right">15 <dt>
17 <span tal:replace="contributor/karmavalue" /> points16 <a tal:replace="structure contributor/person/fmt:link">
18 </td>17 Guilherme Salgado</a>
19 </tr>18 <strong>
20 </table>19 <tal:karma replace="contributor/karmavalue" /> points
2120 </strong>
22 <div21 </dt>
23 tal:define="link context/menu:overview/top_contributors"22 </tal:contributor>
24 tal:content="structure link/render"23 </dl>
25 class="actions"24
26 />25 <tal:comment condition="nothing">
26 # XXX sinzui 2009-08-07 bug=410491: Remove this link and enable the
27 # see all link when the distribution index page is 3.0.
28 </tal:comment>
29 <a tal:replace="structure context/menu:overview/top_contributors/fmt:link" />
27</div>30</div>
2831
=== modified file 'lib/lp/registry/templates/sourcepackage-index.pt'
--- lib/lp/registry/templates/sourcepackage-index.pt 2009-07-17 17:59:07 +0000
+++ lib/lp/registry/templates/sourcepackage-index.pt 2009-08-07 22:14:06 +0000
@@ -19,7 +19,6 @@
19 </metal:leftportlets>19 </metal:leftportlets>
2020
21 <metal:rightportlets fill-slot="portlets_two">21 <metal:rightportlets fill-slot="portlets_two">
22 <div tal:replace="structure context/@@+portlet-latestquestions" />
23 <div tal:replace="structure context/@@+portlet-releases" />22 <div tal:replace="structure context/@@+portlet-releases" />
24 <div tal:replace="structure context/@@+portlet-upstream" />23 <div tal:replace="structure context/@@+portlet-upstream" />
25 </metal:rightportlets>24 </metal:rightportlets>
2625
=== modified file 'lib/lp/registry/templates/team-index.pt'
--- lib/lp/registry/templates/team-index.pt 2009-07-17 17:59:07 +0000
+++ lib/lp/registry/templates/team-index.pt 2009-08-07 15:29:15 +0000
@@ -328,8 +328,6 @@
328 replace="structure overview_menu/received_invitations/fmt:link" />328 replace="structure overview_menu/received_invitations/fmt:link" />
329 </p>329 </p>
330 </div>330 </div>
331
332 <div tal:replace="structure context/@@+portlet-latestquestions" />
333 </div>331 </div>
334</body>332</body>
335</html>333</html>
336334