Merge lp:~salgado/launchpad/person-three-o into lp:launchpad

Proposed by Guilherme Salgado
Status: Merged
Approved by: Curtis Hovey
Approved revision: no longer in the source branch.
Merged at revision: not available
Proposed branch: lp:~salgado/launchpad/person-three-o
Merge into: lp:launchpad
Diff against target: None lines
To merge this branch: bzr merge lp:~salgado/launchpad/person-three-o
Reviewer Review Type Date Requested Status
Curtis Hovey (community) code Approve
Review via email: mp+11817@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Guilherme Salgado (salgado) wrote :

= Summary =

Convert person-index.pt to UI 3.0

Some screenshots:

http://people.canonical.com/~salgado/person1.png
http://people.canonical.com/~salgado/person2.png
http://people.canonical.com/~salgado/person3.png

= Launchpad lint =

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

Linting changed files:
  lib/lp/registry/templates/person-portlet-contributions.pt
  lib/lp/registry/browser/configure.zcml
  lib/canonical/launchpad/pagetitles.py
  lib/lp/registry/templates/person-portlet-memberships.pt
  lib/lp/registry/templates/person-portlet-contact-details.pt
  lib/lp/registry/templates/person-portlet-currentfocus.pt
  lib/lp/registry/templates/team-members.pt
  lib/lp/registry/templates/teammembership-listing-simple.pt
  lib/lp/registry/templates/teammembership-index.pt
  lib/lp/registry/templates/person-index.pt
  lib/lp/registry/browser/person.py
  lib/lp/soyuz/templates/person-portlet-ppas.pt

== Pylint notices ==

lib/lp/registry/browser/person.py
    119: [F0401] Unable to import 'lazr.delegates' (No module named
delegates)
    120: [F0401] Unable to import 'lazr.config' (No module named config)
    121: [F0401] Unable to import 'lazr.restful.interface' (No module
named restful)

Revision history for this message
Curtis Hovey (sinzui) wrote :
Download full text (7.3 KiB)

Hi Salgado.

This branch is great. I think we need to add a lot of links to the info section
and because of this I have not marked this branch approved. We already discussed
adding the oauth link on IRC, as well as moving content out of the heading slot.

> === modified file 'lib/lp/registry/browser/person.py'
> --- lib/lp/registry/browser/person.py 2009-09-15 01:13:15 +0000
> +++ lib/lp/registry/browser/person.py 2009-09-15 14:32:37 +0000

...

> @@ -5670,6 +5654,17 @@
> return 'Contact this user'
>
>
> +class IPersonIndexMenu(Interface):
> + """A marker interface for the +index navigation menu."""
> +
> +
> +class PersonIndexMenu(NavigationMenu, PersonMenuMixin):
> + usedfor = IPersonIndexMenu
> + facet = 'overview'
> + title = 'Change person'
> + links = ('edit', 'administer')

Add Change password to this. Any edit form we cannot work into the
page should be in here. Change branding too. I think we can inline all
others

> === modified file 'lib/lp/registry/templates/person-index.pt'
> --- lib/lp/registry/templates/person-index.pt 2009-07-20 15:27:26 +0000
> +++ lib/lp/registry/templates/person-index.pt 2009-09-15 18:02:40 +0000

...

> +<div metal:fill-slot="heading"
> + tal:condition="context/is_valid_person_or_team">
> + <div
> + class="description"
> + tal:condition="context/homepage_content"
> + tal:content="structure context/homepage_content/fmt:text-to-html"
> + />

I wonder if we should put a link to edit the homepage content? No I think
not, I expect this link to be off of the edit page...near where I set
the description.

> + <ul class="horizontal">
> + <li
> + tal:define="link context/menu:overview/projects"
> + tal:condition="link/enabled"
> + tal:content="structure link/fmt:link" />
> + <li
> + tal:define="link context/menu:overview/maintained"
> + tal:condition="link/enabled"
> + tal:content="structure link/fmt:link" />
> + <li
> + tal:define="link context/menu:overview/ppa"
> + tal:condition="link/enabled"
> + tal:content="structure link/fmt:link" />
> + </ul>

Please add a link for the user to manage his oauth-tokens. This will fix
Bug #316731: [provide a link to the +oauth-tokens page on users page]

> +</div>
> +
> +<div metal:fill-slot="main"
> tal:define="overview_menu context/menu:overview">

...

The heading-slot is deprecated since barry has solved the header issue. We
want to remove it. I don't think it should be reused for non-heading content.

Move the person/team narrative and list of links here, as the first
content in the main slot, above the first <div class="yui-g">

+ <div class="yui-g">

+ <div tal:content="structure context/@@+portlet-contact-details"/>

+ </div>

+

+ <div tal:content="structure context/@@+portlet-currentfocus"/>

+

+ <div class="yui-g">

+ <!-- First portlet column. -->

+ <div class="first yui-u">

+ <div tal:content="structure context/@@+portlet-ppas"/>

+ <div tal:content="structure context/@@+portlet-memberships"/>

+ </div>

+ <div class="yui-u">

+ <div tal:content="structure context/@@+portlet-contributions"...

Read more...

review: Needs Fixing (code)
Revision history for this message
Guilherme Salgado (salgado) wrote :
Download full text (20.0 KiB)

On Tue, 2009-09-15 at 20:45 +0000, Curtis Hovey wrote:
> Review: Needs Fixing code
> Hi Salgado.
>
> This branch is great. I think we need to add a lot of links to the info section
> and because of this I have not marked this branch approved. We already discussed
> adding the oauth link on IRC, as well as moving content out of the heading slot.
>
> > === modified file 'lib/lp/registry/browser/person.py'
> > --- lib/lp/registry/browser/person.py 2009-09-15 01:13:15 +0000
> > +++ lib/lp/registry/browser/person.py 2009-09-15 14:32:37 +0000
>
>
> ...
>
>
> > @@ -5670,6 +5654,17 @@
> > return 'Contact this user'
> >
> >
> > +class IPersonIndexMenu(Interface):
> > + """A marker interface for the +index navigation menu."""
> > +
> > +
> > +class PersonIndexMenu(NavigationMenu, PersonMenuMixin):
> > + usedfor = IPersonIndexMenu
> > + facet = 'overview'
> > + title = 'Change person'
> > + links = ('edit', 'administer')
>
>
> Add Change password to this. Any edit form we cannot work into the
> page should be in here. Change branding too. I think we can inline all
> others

Good catch. Both added.

>
>
> > === modified file 'lib/lp/registry/templates/person-index.pt'
> > --- lib/lp/registry/templates/person-index.pt 2009-07-20 15:27:26 +0000
> > +++ lib/lp/registry/templates/person-index.pt 2009-09-15 18:02:40 +0000

> > +<div metal:fill-slot="heading"
> > + tal:condition="context/is_valid_person_or_team">
> > + <div
> > + class="description"
> > + tal:condition="context/homepage_content"
> > + tal:content="structure context/homepage_content/fmt:text-to-html"
> > + />
>
> I wonder if we should put a link to edit the homepage content? No I think
> not, I expect this link to be off of the edit page...near where I set
> the description.

Actually, the homepage content can be edited from the +edit page, which
makes +edithomepage redundant: <https://bugs.launchpad.net/bugs/430680>

>
> > + <ul class="horizontal">
> > + <li
> > + tal:define="link context/menu:overview/projects"
> > + tal:condition="link/enabled"
> > + tal:content="structure link/fmt:link" />
> > + <li
> > + tal:define="link context/menu:overview/maintained"
> > + tal:condition="link/enabled"
> > + tal:content="structure link/fmt:link" />
> > + <li
> > + tal:define="link context/menu:overview/ppa"
> > + tal:condition="link/enabled"
> > + tal:content="structure link/fmt:link" />
> > + </ul>
>
> Please add a link for the user to manage his oauth-tokens. This will fix
> Bug #316731: [provide a link to the +oauth-tokens page on users page]

Added. Shown only when the user has launchpad.Edit and there are any
claimed/unclaimed tokens for the context.

>
>
> > +</div>
> > +
> > +<div metal:fill-slot="main"
> > tal:define="overview_menu context/menu:overview">
>
> ...
>
>
> The heading-slot is deprecated since barry has solved the header issue. We
> want to remove it. I don't think it should be reused for non-heading content.
>
> Move the person/team narrative and list of links here, as the first
> content in the main slot, above the first <div class="yui-g">

Right, I did tha...

Revision history for this message
Curtis Hovey (sinzui) wrote :

This looks great. I have a minor qualm regarding the multiple irc nicks. I think the presentation may be better if each was a <dd> instead of making each a <div> in a single <dd>.

This is good enough to land. We need to see this with production data, and I do not expect many issues, so please land this.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/canonical/launchpad/pagetitles.py'
2--- lib/canonical/launchpad/pagetitles.py 2009-09-15 05:45:10 +0000
3+++ lib/canonical/launchpad/pagetitles.py 2009-09-15 14:32:37 +0000
4@@ -681,13 +681,6 @@
5
6 person_images = ContextDisplayName(smartquote("%s's hackergotchi and emblem"))
7
8-def person_index(context, view):
9- """Return the page title to the person index page."""
10- if context.is_valid_person_or_team:
11- return '%s in Launchpad' % context.displayname
12- else:
13- return "%s does not use Launchpad" % context.displayname
14-
15 person_karma = ContextDisplayName(smartquote("%s's karma in Launchpad"))
16
17 person_mentoringoffers = ContextTitle('Mentoring offered by %s')
18
19=== modified file 'lib/lp/registry/browser/configure.zcml'
20--- lib/lp/registry/browser/configure.zcml 2009-09-15 05:45:10 +0000
21+++ lib/lp/registry/browser/configure.zcml 2009-09-15 14:32:37 +0000
22@@ -741,8 +741,8 @@
23 PersonBugsMenu
24 PersonEditNavigationMenu
25 PersonFacets
26+ PersonIndexMenu
27 PersonOverviewMenu
28- PersonOverviewNavigationMenu
29 PersonRelatedSoftwareNavigationMenu
30 PersonSetActionNavigationMenu
31 PersonSetContextMenu
32@@ -862,8 +862,8 @@
33 name="+portlet-emails"
34 template="../templates/person-portlet-emails.pt"/>
35 <browser:page
36- name="+portlet-details"
37- template="../templates/person-portlet-details.pt"/>
38+ name="+portlet-involvement"
39+ template="../templates/person-portlet-involvement.pt"/>
40 <browser:page
41 name="+portlet-contact-details"
42 template="../templates/person-portlet-contact-details.pt"/>
43
44=== modified file 'lib/lp/registry/browser/person.py'
45--- lib/lp/registry/browser/person.py 2009-09-15 01:13:15 +0000
46+++ lib/lp/registry/browser/person.py 2009-09-15 14:32:37 +0000
47@@ -37,13 +37,13 @@
48 'PersonEditWikiNamesView',
49 'PersonFacets',
50 'PersonGPGView',
51+ 'PersonIndexMenu',
52 'PersonIndexView',
53 'PersonKarmaView',
54 'PersonLanguagesView',
55 'PersonLatestQuestionsView',
56 'PersonNavigation',
57 'PersonOAuthTokensView',
58- 'PersonOverviewNavigationMenu',
59 'PersonOverviewMenu',
60 'PersonRdfContentsView',
61 'PersonRdfView',
62@@ -899,7 +899,22 @@
63 return Link(target, text, icon='info')
64
65
66-class PersonOverviewMenu(ApplicationMenu, CommonMenuLinks):
67+class PersonMenuMixin(CommonMenuLinks):
68+
69+ @enabled_with_permission('launchpad.Edit')
70+ def edit(self):
71+ target = '+edit'
72+ text = 'Change details'
73+ return Link(target, text, icon='edit')
74+
75+ @enabled_with_permission('launchpad.Admin')
76+ def administer(self):
77+ target = '+review'
78+ text = 'Administer'
79+ return Link(target, text, icon='edit')
80+
81+
82+class PersonOverviewMenu(ApplicationMenu, PersonMenuMixin):
83
84 usedfor = IPerson
85 facet = 'overview'
86@@ -909,13 +924,7 @@
87 'editsshkeys', 'editpgpkeys', 'editlocation', 'memberships',
88 'mentoringoffers', 'codesofconduct', 'karma',
89 'administer', 'projects', 'activate_ppa', 'maintained',
90- 'view_ppa_subscriptions']
91-
92- @enabled_with_permission('launchpad.Edit')
93- def edit(self):
94- target = '+edit'
95- text = 'Change details'
96- return Link(target, text, icon='edit')
97+ 'view_ppa_subscriptions', 'ppa']
98
99 @enabled_with_permission('launchpad.Edit')
100 def branding(self):
101@@ -1011,12 +1020,6 @@
102 'Agreements to abide by the rules of a distribution or project')
103 return Link(target, text, summary, icon='edit')
104
105- @enabled_with_permission('launchpad.Admin')
106- def administer(self):
107- target = '+review'
108- text = 'Administer'
109- return Link(target, text, icon='edit')
110-
111 @enabled_with_permission('launchpad.Edit')
112 def view_ppa_subscriptions(self):
113 target = "+archivesubscriptions"
114@@ -1054,33 +1057,6 @@
115 return Link(target, text, enabled=enabled)
116
117
118-class PersonOverviewNavigationMenu(NavigationMenu, PPANavigationMenuMixIn):
119- """The top-level menu of actions a Person may take."""
120-
121- usedfor = IPerson
122- facet = 'overview'
123- links = ('profile', 'related_software', 'karma', 'ppas')
124-
125- def __init__(self, context):
126- context = IPerson(context)
127- super(PersonOverviewNavigationMenu, self).__init__(context)
128-
129- def profile(self):
130- target = ''
131- text = 'Profile'
132- return Link(target, text, menu=IPersonEditMenu)
133-
134- def related_software(self):
135- target = '+related-software'
136- text = 'Related software'
137- return Link(target, text, menu=IPersonRelatedSoftwareMenu)
138-
139- def karma(self):
140- target = '+karma'
141- text = 'Karma'
142- return Link(target, text)
143-
144-
145 class PersonRelatedSoftwareNavigationMenu(NavigationMenu, CommonMenuLinks):
146
147 usedfor = IPersonRelatedSoftwareMenu
148@@ -3054,6 +3030,14 @@
149 if self.request.method == "POST":
150 self.processForm()
151
152+ @property
153+ def page_title(self):
154+ context = self.context
155+ if context.is_valid_person_or_team:
156+ return '%s in Launchpad' % context.displayname
157+ else:
158+ return "%s does not use Launchpad" % context.displayname
159+
160 @cachedproperty
161 def enable_xrds_discovery(self):
162 """Only enable discovery if person is OpenID enabled."""
163@@ -5670,6 +5654,17 @@
164 return 'Contact this user'
165
166
167+class IPersonIndexMenu(Interface):
168+ """A marker interface for the +index navigation menu."""
169+
170+
171+class PersonIndexMenu(NavigationMenu, PersonMenuMixin):
172+ usedfor = IPersonIndexMenu
173+ facet = 'overview'
174+ title = 'Change person'
175+ links = ('edit', 'administer')
176+
177+
178 class ITeamIndexMenu(Interface):
179 """A marker interface for the +index navigation menu."""
180
181@@ -5707,3 +5702,4 @@
182
183 classImplements(TeamIndexView, ITeamIndexMenu)
184 classImplements(TeamEditView, ITeamEditMenu)
185+classImplements(PersonIndexView, IPersonIndexMenu)
186
187=== modified file 'lib/lp/registry/templates/person-index.pt'
188--- lib/lp/registry/templates/person-index.pt 2009-07-20 15:27:26 +0000
189+++ lib/lp/registry/templates/person-index.pt 2009-09-15 18:02:40 +0000
190@@ -3,10 +3,7 @@
191 xmlns:tal="http://xml.zope.org/namespaces/tal"
192 xmlns:metal="http://xml.zope.org/namespaces/metal"
193 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
194- xml:lang="en"
195- lang="en"
196- dir="ltr"
197- metal:use-macro="view/macro:page/onecolumn"
198+ metal:use-macro="view/macro:page/main_side"
199 i18n:domain="launchpad"
200 >
201
202@@ -45,46 +42,97 @@
203
204 <body>
205
206-<div metal:fill-slot="main" class="pillar"
207+<div metal:fill-slot="side" tal:define="overview_menu context/menu:overview">
208+ <tal:menu replace="structure view/@@+global-actions" />
209+
210+ <div class="portlet"
211+ tal:condition="view/can_contact">
212+ <a href="+contactuser" class="sprite mail"
213+ tal:attributes="title view/contact_link_title"
214+ tal:content="view/specific_contact_text">Contact
215+ this person</a>
216+ </div>
217+
218+ <div id="participation" class="portlet involvement"
219+ tal:condition="context/is_valid_person">
220+ <h2>Participation</h2>
221+
222+ <ul>
223+ <li>
224+ <a class="sprite bugs"
225+ tal:attributes="href context/fmt:url:bugs">Bugs</a>
226+ </li>
227+ <li>
228+ <a class="sprite answers"
229+ tal:attributes="href context/fmt:url:answers">Answers</a>
230+ </li>
231+ <li>
232+ <a class="sprite translations"
233+ tal:attributes="href context/fmt:url:translations">Translations</a>
234+ </li>
235+ <li>
236+ <a class="sprite blueprints"
237+ tal:attributes="href context/fmt:url:code">Code</a>
238+ </li>
239+ <li>
240+ <a class="sprite blueprints"
241+ tal:attributes="href context/fmt:url:blueprints">Blueprints</a>
242+ </li>
243+ </ul>
244+ </div>
245+</div>
246+
247+<div metal:fill-slot="heading"
248+ tal:condition="context/is_valid_person_or_team">
249+ <div
250+ class="description"
251+ tal:condition="context/homepage_content"
252+ tal:content="structure context/homepage_content/fmt:text-to-html"
253+ />
254+ <ul class="horizontal">
255+ <li
256+ tal:define="link context/menu:overview/projects"
257+ tal:condition="link/enabled"
258+ tal:content="structure link/fmt:link" />
259+ <li
260+ tal:define="link context/menu:overview/maintained"
261+ tal:condition="link/enabled"
262+ tal:content="structure link/fmt:link" />
263+ <li
264+ tal:define="link context/menu:overview/ppa"
265+ tal:condition="link/enabled"
266+ tal:content="structure link/fmt:link" />
267+ </ul>
268+</div>
269+
270+<div metal:fill-slot="main"
271 tal:define="overview_menu context/menu:overview">
272- <div class="actions" style="float:right;">
273- <tal:is-person condition="not: context/is_team">
274- <tal:administer
275- replace="structure overview_menu/administer/fmt:link-icon" />
276- </tal:is-person>
277- <tal:edit
278- replace="structure overview_menu/edit/fmt:link-icon" />
279- </div>
280-
281 <tal:is-valid-person tal:condition="context/is_valid_person">
282- <tal:mugshot replace="structure context/image:mugshot" />
283-
284- <h1 tal:content="context/displayname">Some Person</h1>
285-
286- <div
287- class="description"
288- tal:condition="context/homepage_content"
289- tal:content="structure context/homepage_content/fmt:text-to-html"
290- />
291-
292- <div tal:replace="structure context/@@+portlet-contact-details"/>
293- <div tal:replace="structure context/@@+portlet-map" />
294- <div tal:replace="structure context/@@+portlet-contributions"/>
295- <div tal:condition="view/should_show_ppa_section"
296- tal:replace="structure context/@@+portlet-ppas"/>
297- <div tal:replace="structure context/@@+portlet-currentfocus"/>
298- <div tal:replace="structure context/@@+portlet-memberships"/>
299- <div tal:replace="structure context/@@+portlet-details"/>
300-
301+
302+ <div class="yui-g">
303+ <div tal:content="structure context/@@+portlet-contact-details"/>
304+ </div>
305+
306+ <div tal:content="structure context/@@+portlet-currentfocus"/>
307+
308+ <div class="yui-g">
309+ <!-- First portlet column. -->
310+ <div class="first yui-u">
311+ <div tal:content="structure context/@@+portlet-ppas"/>
312+ <div tal:content="structure context/@@+portlet-memberships"/>
313+ </div>
314+ <div class="yui-u">
315+ <div tal:content="structure context/@@+portlet-contributions"/>
316+
317+ </div>
318+ </div>
319+
320+ <div tal:content="structure context/@@+portlet-map" />
321 </tal:is-valid-person>
322
323 <div id="not-lp-user-or-team"
324 tal:condition="not: context/is_valid_person_or_team">
325
326- <tal:mugshot replace="structure context/image:mugshot" />
327-
328- <h1 tal:content="context/displayname">Some Person</h1>
329-
330 <tal:noaccount tal:condition="context/account_status/enumvalue:NOACCOUNT">
331 <p><span tal:replace="context/displayname" /> does not use Launchpad.
332 <tal:block condition="context/creation_comment">
333
334=== modified file 'lib/lp/registry/templates/person-portlet-contact-details.pt'
335--- lib/lp/registry/templates/person-portlet-contact-details.pt 2009-07-17 17:59:07 +0000
336+++ lib/lp/registry/templates/person-portlet-contact-details.pt 2009-09-15 18:02:40 +0000
337@@ -5,160 +5,190 @@
338 omit-tag="">
339
340 <div class="portlet" id="contact-details"
341- tal:define="overview_menu context/menu:overview">
342- <div class="portletContent portletBody">
343-
344- <table>
345- <tbody>
346-
347- <tr>
348-
349- <th>Email:</th>
350-
351- <td
352- tal:attributes="title view/visible_email_address_description">
353- <tal:not_logged_in
354- condition="view/email_address_visibility/is_login_required">
355- <a href="+login">Log in</a> for email information.
356- </tal:not_logged_in>
357-
358- <tal:no_preferredemail
359- condition="view/email_address_visibility/are_none_available">
360- <tal:comment replace="nothing">
361- The user is not valid; this portlet is not used.
362- </tal:comment>
363- </tal:no_preferredemail>
364-
365- <tal:cant-view-hidden-emails
366- condition="view/email_address_visibility/are_hidden">
367- No public address provided.
368- <metal:define metal:define-macro="contact">
369- <tal:can-contact condition="view/can_contact">
370- (<a href="+contactuser"
371- tal:attributes="title view/contact_link_title"
372- tal:content="view/specific_contact_text">Contact
373- this person</a>)
374- <tal:no_preferredemail
375- condition="view/email_address_visibility/are_none_available">
376- <br /><small>(Launchpad notifications are sent to all
377- team members)</small>
378- </tal:no_preferredemail>
379- </tal:can-contact>
380- </metal:define>
381- </tal:cant-view-hidden-emails>
382-
383- <tal:emails
384- repeat="email view/visible_email_addresses">
385- <span style="white-space: nowrap">
386- <img src="/@@/private" alt=""
387- tal:condition="view/email_address_visibility/are_allowed"/>
388- <img src="/@@/mail" alt=""
389- tal:condition="view/email_address_visibility/are_public"/>
390- <tal:email replace="email">foo2@bar.com</tal:email>
391- <tal:contact condition="repeat/email/start">
392- <tal:contact metal:use-macro="template/macros/contact" />
393- </tal:contact>
394- <br tal:omit-tag="repeat/email/end" />
395- </span>
396- </tal:emails>
397- </td>
398- </tr>
399-
400- <tr tal:condition="context/icon">
401- <th>Icon:</th>
402- <td><tal:icon replace="structure context/image:icon" /></td>
403- </tr>
404- <tal:XXX condition="nothing">
405- # XXX: salgado, 2008-11-25 bug=296739: We should use
406- # context/wiki_names/is_empty here, but we can't do that because
407- # there's a bug preventing us from updating our version of storm
408- # to trunk.
409- </tal:XXX>
410- <tr tal:condition="context/wiki_names/any">
411- <th>Wiki:</th>
412- <td>
413- <span tal:repeat="wiki context/wiki_names">
414- <a tal:content="wiki/url"
415- tal:attributes="href wiki/url"
416- >WikiName</a><tal:block condition="not: repeat/wiki/end">,
417- </tal:block>
418- </span>
419- </td>
420- </tr>
421- <tr tal:repeat="ircnick context/ircnicknames">
422- <th>IRC:</th>
423- <td><code style="font-size: 120%"
424- tal:content="ircnick/nickname"/>
425- on network <code style="font-size: 120%"
426- tal:content="ircnick/network" />
427- </td>
428- </tr>
429- <tr tal:condition="context/jabberids">
430- <th>Jabber:</th>
431- <td>
432- <tal:block repeat="jabberid context/jabberids">
433- <span tal:replace="jabberid/jabberid/fmt:obfuscate-email"
434- /><span tal:condition="not: repeat/jabberid/end">,</span>
435- </tal:block>
436- </td>
437- </tr>
438- <tr tal:condition="context/gpgkeys">
439- <th>OpenPGP keys:</th>
440- <td>
441- <tal:keys repeat="key context/gpgkeys">
442- <a tal:attributes="href key/keyserverURL"
443- tal:omit-tag="not: request/lp:person">
444- <tal:keyid replace="key/keyid"
445- /></a><span tal:condition="not: repeat/key/end">,</span>
446- </tal:keys>
447- </td>
448- </tr>
449-
450- <tr id="sshkeys">
451- <th>SSH Keys:</th>
452- <td tal:define="sshkeys context/sshkeys">
453- <tal:no_keys condition="not: sshkeys">
454- <tal:is_user condition="view/viewing_own_page">
455- <a tal:replace="structure overview_menu/editsshkeys/fmt:icon-link" />
456- </tal:is_user>
457- <tal:other_user condition="not: view/viewing_own_page">
458- No keys registered
459- </tal:other_user>
460- </tal:no_keys>
461-
462- <tal:has_keys condition="sshkeys">
463- <tal:keys repeat="sshkey sshkeys">
464- <a href="+sshkeys"><tal:key replace="sshkey/comment" /></a>
465- <tal:first condition="repeat/sshkey/start">
466- <a tal:replace="structure overview_menu/editsshkeys/fmt:icon" />
467- </tal:first>
468- <br />
469- </tal:keys>
470- </tal:has_keys>
471- </td>
472- </tr>
473-
474- <tr tal:condition="view/viewing_own_page" id="openid-info">
475- <th>OpenID login:</th>
476- <td>
477- <img src="/@@/private" alt="" />
478- <tal:openid-login content="view/openid_identity_url" />
479- <a target="help" href="/+help/openid.html"
480- >(What&rsquo;s&nbsp;this?)</a>
481- </td>
482- </tr>
483- <tr id="languages">
484- <th>Languages:</th>
485- <td>
486- <tal:languages content="view/languages">
487- English
488- </tal:languages>
489- <a tal:replace="structure overview_menu/editlanguages/fmt:icon" />
490- </td>
491- </tr>
492- </tbody>
493- </table>
494-
495+ tal:define="overview_menu context/menu:overview">
496+
497+ <h2>User information</h2>
498+
499+ <div class="first yui-u">
500+ <dl>
501+ <dt>Email:</dt>
502+ <dd
503+ tal:attributes="title view/visible_email_address_description">
504+ <tal:not_logged_in
505+ condition="view/email_address_visibility/is_login_required">
506+ <a href="+login">Log in</a> for email information.
507+ </tal:not_logged_in>
508+
509+ <tal:no_preferredemail
510+ condition="view/email_address_visibility/are_none_available">
511+ <tal:comment replace="nothing">
512+ The user is not valid; this portlet is not used.
513+ </tal:comment>
514+ </tal:no_preferredemail>
515+
516+ <tal:cant-view-hidden-emails
517+ condition="view/email_address_visibility/are_hidden">
518+ No public address provided.
519+ </tal:cant-view-hidden-emails>
520+
521+ <tal:emails
522+ repeat="email view/visible_email_addresses">
523+ <span style="white-space: nowrap">
524+ <img src="/@@/private" alt=""
525+ tal:condition="view/email_address_visibility/are_allowed"/>
526+ <img src="/@@/mail" alt=""
527+ tal:condition="view/email_address_visibility/are_public"/>
528+ <tal:email replace="email">foo2@bar.com</tal:email>
529+ <br tal:omit-tag="repeat/email/end" />
530+ </span>
531+ </tal:emails>
532+ </dd>
533+ </dl>
534+
535+ <dl tal:condition="context/jabberids">
536+ <dt>Jabber:</dt>
537+ <dd>
538+ <tal:block repeat="jabberid context/jabberids">
539+ <span tal:replace="jabberid/jabberid/fmt:obfuscate-email"
540+ /><span tal:condition="not: repeat/jabberid/end">,</span>
541+ </tal:block>
542+ </dd>
543+ </dl>
544+
545+ <dl tal:condition="view/viewing_own_page" id="openid-info">
546+ <dt>OpenID login:</dt>
547+ <dd>
548+ <img src="/@@/private" alt="" />
549+ <tal:openid-login content="view/openid_identity_url" />
550+ <a target="help" href="/+help/openid.html"
551+ >(What&rsquo;s&nbsp;this?)</a>
552+ </dd>
553+ </dl>
554+
555+ <dl>
556+ <dt>Member since:</dt>
557+ <dd id="member-since"
558+ tal:content="context/datecreated/fmt:date" />
559+ </dl>
560+
561+ <div id="teams_with_icons"
562+ tal:condition="context/@@+restricted-membership/teams_with_icons">
563+ <a tal:repeat="team context/@@+restricted-membership/teams_with_icons"
564+ tal:attributes="href team/fmt:url"
565+ ><img tal:attributes="src team/icon/getURL;
566+ title string:Icon of ${team/name}"
567+ /></a>
568+ </div>
569+
570+ <dl tal:condition="context/is_ubuntu_coc_signer">
571+ <dt>Signed Ubuntu Code of Conduct:</dt>
572+ <dd>
573+ <a
574+ id="ubuntu_coc_signer"
575+ tal:condition="context/required:launchpad.Edit"
576+ tal:attributes="href overview_menu/codesofconduct/url"
577+ >Yes</a>
578+ <span
579+ id="ubuntu_coc_signer"
580+ tal:condition="not: context/required:launchpad.Edit">Yes</span>
581+ </dd>
582+ </dl>
583+
584+ <tal:not-ubuntu_coc_signer condition="not: context/is_ubuntu_coc_signer">
585+ <tal:is_request_person condition="view/viewing_own_page">
586+ <dl>
587+ <dt>Signed Ubuntu Code of Conduct:</dt>
588+ <dd>
589+ <span id="ubuntu_coc_signer">No</span>
590+ <a href="/codeofconduct"
591+ ><img src="/@@/edit" alt="Sign the Ubuntu Code of Conduct" /></a>
592+ </dd>
593+ </dl>
594+ </tal:is_request_person>
595+ </tal:not-ubuntu_coc_signer>
596+ </div>
597+
598+ <div class="yui-u two-column-list">
599+ <dl tal:condition="not: context/wiki_names/is_empty">
600+ <dt>Wiki:</dt>
601+ <dd>
602+ <span tal:repeat="wiki context/wiki_names">
603+ <a tal:content="wiki/url"
604+ tal:attributes="href wiki/url"
605+ >WikiName</a><tal:block condition="not: repeat/wiki/end">,
606+ </tal:block>
607+ </span>
608+ </dd>
609+ </dl>
610+ <dl tal:condition="context/ircnicknames">
611+ <dt>IRC:</dt>
612+ <dd>
613+ <div tal:repeat="ircnick context/ircnicknames">
614+ <strong tal:content="ircnick/nickname"/>
615+ <span class="discreet">on network</span>
616+ <strong tal:content="ircnick/network" />
617+ </div>
618+ </dd>
619+ </dl>
620+
621+ <dl tal:condition="context/gpgkeys">
622+ <dt>OpenPGP keys:</dt>
623+ <dd>
624+ <tal:keys repeat="key context/gpgkeys">
625+ <a tal:attributes="href key/keyserverURL"
626+ tal:omit-tag="not: request/lp:person">
627+ <tal:keyid replace="key/keyid"
628+ /></a><span tal:condition="not: repeat/key/end">,</span>
629+ </tal:keys>
630+ </dd>
631+ </dl>
632+
633+ <dl id="sshkeys">
634+ <dt>SSH Keys:</dt>
635+ <dd tal:define="sshkeys context/sshkeys">
636+ <tal:no_keys condition="not: sshkeys">
637+ <tal:is_user condition="view/viewing_own_page">
638+ <a tal:replace="structure overview_menu/editsshkeys/fmt:icon-link" />
639+ </tal:is_user>
640+ <tal:other_user condition="not: view/viewing_own_page">
641+ No keys registered
642+ </tal:other_user>
643+ </tal:no_keys>
644+
645+ <tal:has_keys condition="sshkeys">
646+ <tal:keys repeat="sshkey sshkeys">
647+ <a href="+sshkeys"><tal:key replace="sshkey/comment" /></a>
648+ <tal:first condition="repeat/sshkey/start">
649+ <a tal:replace="structure overview_menu/editsshkeys/fmt:icon" />
650+ </tal:first>
651+ <br />
652+ </tal:keys>
653+ </tal:has_keys>
654+ </dd>
655+ </dl>
656+
657+ <dl id="languages">
658+ <dt>Languages:</dt>
659+ <dd>
660+ <tal:languages content="view/languages">
661+ English
662+ </tal:languages>
663+ <a tal:replace="structure overview_menu/editlanguages/fmt:icon" />
664+ </dd>
665+ </dl>
666+
667+ <dl tal:condition="context/time_zone">
668+ <dt>Time zone:</dt>
669+ <dd tal:content="context/time_zone">UTC</dd>
670+ </dl>
671+
672+ <dl id="karma">
673+ <dt>Karma:</dt>
674+ <dd><a id="karma-total"
675+ tal:attributes="href overview_menu/karma/url"
676+ tal:content="context/karma">342</a>
677+ </dd>
678+ </dl>
679 </div>
680
681 </div>
682
683=== modified file 'lib/lp/registry/templates/person-portlet-contributions.pt'
684--- lib/lp/registry/templates/person-portlet-contributions.pt 2009-07-17 17:59:07 +0000
685+++ lib/lp/registry/templates/person-portlet-contributions.pt 2009-09-11 19:59:54 +0000
686@@ -7,7 +7,14 @@
687 class="portlet"
688 tal:define="contributions view/contributions"
689 tal:condition="contributions">
690- <h2>Most active in</h2>
691+ <h2>
692+ <span class="see-all">
693+ <a tal:attributes="href context/menu:overview/karma/url">
694+ All activities
695+ </a>
696+ </span>
697+ Most active in
698+ </h2>
699 <table class="contributions" id="contributions">
700 <tbody>
701 <tal:contributions repeat="contribution contributions">
702
703=== modified file 'lib/lp/registry/templates/person-portlet-currentfocus.pt'
704--- lib/lp/registry/templates/person-portlet-currentfocus.pt 2009-07-17 17:59:07 +0000
705+++ lib/lp/registry/templates/person-portlet-currentfocus.pt 2009-09-11 19:59:54 +0000
706@@ -3,36 +3,35 @@
707 xmlns:metal="http://xml.zope.org/namespaces/metal"
708 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
709 omit-tag="">
710- <div id="working-on"
711+ <div id="working-on" class="yui-g"
712 tal:define="bugtasks view/assigned_bugs_in_progress;
713- specs view/assigned_specs_in_progress"
714- tal:condition="view/has_assigned_bugs_or_specs_in_progress">
715- <div class="section">
716- <div class="portlet">
717- <h2>Working on</h2>
718- <tal:has-bugtasks condition="bugtasks">
719- <table>
720- <tr tal:repeat="bugtask bugtasks">
721- <tal:define-vars define="hide_extra_details string:true">
722- <tal:task tal:replace="structure bugtask/@@+listing-detailed" />
723- </tal:define-vars>
724- </tr>
725- </table>
726- <div>
727+ specs view/assigned_specs_in_progress">
728+ <div class="yui-u first">
729+ <div class="portlet"
730+ tal:condition="bugtasks">
731+ <h2>
732+ <span class="see-all">
733 <a tal:attributes="href view/getURLToAssignedBugsInProgress">
734- &raquo; Show all bugs in progress
735+ All bugs in progress
736 </a>
737- </div>
738- </tal:has-bugtasks>
739+ </span>
740+ Assigned bugs
741+ </h2>
742+
743+ <table>
744+ <tr tal:repeat="bugtask bugtasks">
745+ <tal:define-vars define="hide_extra_details string:true">
746+ <tal:task tal:replace="structure bugtask/@@+listing-detailed" />
747+ </tal:define-vars>
748+ </tr>
749+ </table>
750 </div>
751 </div>
752- <div class="section" tal:condition="specs">
753- <div class="portlet">
754- <table>
755- <tr tal:repeat="spec specs"
756- tal:replace="structure spec/@@+listing-simple" />
757- </table>
758- <div>
759+
760+ <div class="yui-u">
761+ <div class="portlet"
762+ tal:condition="specs">
763+ <h2>
764 <tal:XXX condition="nothing">
765 # XXX: Guilherme Salgado 2007-02-12:
766 # This link should point to a list of the in-progress specs
767@@ -40,11 +39,18 @@
768 # right now, so we'll have to list all incomplete specs assigned
769 # to the person.
770 </tal:XXX>
771- <a
772- tal:attributes="href string:${context/fmt:url}/+specs?role=assignee">
773- &raquo; Show all assigned blueprints
774- </a>
775- </div>
776+ <span class="see-all">
777+ <a tal:attributes="href string:${context/fmt:url}/+specs?role=assignee">
778+ All assigned blueprints
779+ </a>
780+ </span>
781+ Assigned blueprints
782+ </h2>
783+
784+ <table>
785+ <tr tal:repeat="spec specs"
786+ tal:replace="structure spec/@@+listing-simple" />
787+ </table>
788 </div>
789 </div>
790 </div>
791
792=== removed file 'lib/lp/registry/templates/person-portlet-details.pt'
793--- lib/lp/registry/templates/person-portlet-details.pt 2009-08-13 15:12:16 +0000
794+++ lib/lp/registry/templates/person-portlet-details.pt 1970-01-01 00:00:00 +0000
795@@ -1,113 +0,0 @@
796-<tal:root
797- xmlns:tal="http://xml.zope.org/namespaces/tal"
798- xmlns:metal="http://xml.zope.org/namespaces/metal"
799- xmlns:i18n="http://xml.zope.org/namespaces/i18n"
800- omit-tag="">
801-
802-<div class="portlet" id="portlet-details"
803- tal:define="overview_menu context/menu:overview">
804-
805- <h2 tal:condition="not: context/is_team">Bragging rights</h2>
806- <h2 tal:condition="context/is_team">Summary</h2>
807-
808- <div class="portletBody portletContent">
809-
810- <tal:valid_person condition="context/is_valid_person">
811-
812- <b>Member since:</b>
813- <span
814- id="member-since"
815- tal:content="context/datecreated/fmt:date" /><br />
816-
817- <div id="teams_with_icons"
818- tal:condition="context/@@+restricted-membership/teams_with_icons">
819- <a tal:repeat="team context/@@+restricted-membership/teams_with_icons"
820- tal:attributes="href team/fmt:url"
821- ><img tal:attributes="src team/icon/getURL;
822- title string:Icon of ${team/name}"
823- /></a>
824- </div>
825-
826- <b>Karma:</b>
827- <a
828- id="karma-total"
829- tal:attributes="href overview_menu/karma/url"
830- tal:content="context/karma">342</a><br />
831-
832- <tal:ubuntu_coc_signer
833- condition="context/is_ubuntu_coc_signer">
834- <b>Signed Ubuntu Code of Conduct:</b>
835- <a
836- id="ubuntu_coc_signer"
837- tal:condition="context/required:launchpad.Edit"
838- tal:attributes="href overview_menu/codesofconduct/url"
839- >Yes</a>
840- <span
841- id="ubuntu_coc_signer"
842- tal:condition="not: context/required:launchpad.Edit">Yes</span>
843- <br />
844- </tal:ubuntu_coc_signer>
845-
846- <tal:not-ubuntu_coc_signer condition="not: context/is_ubuntu_coc_signer">
847- <tal:is_request_person condition="view/viewing_own_page">
848- <b>Signed Ubuntu Code of Conduct:</b>
849- <span id="ubuntu_coc_signer">No</span>
850- <a href="/codeofconduct"
851- ><img src="/@@/edit" alt="Sign the Ubuntu Code of Conduct" /></a>
852- <br />
853- </tal:is_request_person>
854- </tal:not-ubuntu_coc_signer>
855- </tal:valid_person>
856-
857- <tal:is_team condition="context/is_team">
858-
859- <b>Team owner:</b>
860- <a
861- tal:attributes="href context/teamowner/fmt:url"
862- tal:content="context/teamowner/displayname"
863- >mark</a>
864- <br />
865-
866- <b>Created on:</b>
867- <span id="created-date"
868- tal:content="context/datecreated/fmt:date" /><br />
869-
870- <strong id="subscription-policy"
871- tal:content="context/subscriptionpolicy/title">
872- Moderated Team
873- </strong>:
874- <tal:description replace="context/subscriptionpolicy/description" />
875-
876- <div class="slimpadding" id="membership-summary" style="margin-top: 1em"
877- tal:define="can_view_membership context/@@+restricted-membership/userCanViewMembership"
878- >
879- <strong>Membership:</strong><br />
880- <tal:private_membership condition="not: can_view_membership">
881- This team's membership list is private.
882- </tal:private_membership>
883- <tal:private_membership condition="can_view_membership">
884- <tal:active content="context/all_member_count" />
885- active members<br />
886- <tal:proposed define="proposed_member_count context/proposed_member_count"
887- condition="proposed_member_count">
888- <tal:proposed_count content="proposed_member_count" />
889- proposed members<br />
890- </tal:proposed>
891- <tal:invited define="invited_member_count context/invited_member_count"
892- condition="invited_member_count">
893- <tal:invited_count content="context/invited_member_count" />
894- invited members<br />
895- </tal:invited>
896- <tal:inactive define="inactive_member_count context/inactive_member_count"
897- condition="inactive_member_count">
898- <tal:inactive_count content="context/inactive_member_count" />
899- inactive members<br />
900- </tal:inactive>
901- </tal:private_membership>
902- </div>
903- </tal:is_team>
904-
905- </div>
906-
907-</div>
908-</tal:root>
909
910=== modified file 'lib/lp/registry/templates/person-portlet-memberships.pt'
911--- lib/lp/registry/templates/person-portlet-memberships.pt 2009-08-21 14:42:54 +0000
912+++ lib/lp/registry/templates/person-portlet-memberships.pt 2009-09-11 19:59:54 +0000
913@@ -5,7 +5,14 @@
914 omit-tag="">
915 <div class="portlet"
916 tal:define="memberships context/@@+restricted-membership/getLatestApprovedMembershipsForPerson">
917- <h2>Latest memberships</h2>
918+ <h2>
919+ <span class="see-all" tal:condition="memberships">
920+ <a tal:attributes="href context/menu:overview/memberships/url">
921+ All memberships
922+ </a>
923+ </span>
924+ Latest memberships
925+ </h2>
926
927 <tal:memberships condition="memberships">
928 <table id="participation">
929@@ -13,12 +20,6 @@
930 tal:replace="structure membership/@@+listing-simple" />
931 </table>
932
933- <p>
934- <a href="+participation">
935- &raquo; See all teams in which
936- <tal:name replace="context/title">Foo Bar</tal:name> participates
937- </a>
938- </p>
939 </tal:memberships>
940
941 <p tal:condition="not: memberships">
942
943=== modified file 'lib/lp/registry/templates/team-members.pt'
944--- lib/lp/registry/templates/team-members.pt 2009-07-17 17:59:07 +0000
945+++ lib/lp/registry/templates/team-members.pt 2009-09-11 17:13:09 +0000
946@@ -12,10 +12,6 @@
947
948 <body>
949
950-<metal:portlets fill-slot="portlets">
951- <div tal:replace="structure context/@@+portlet-details" />
952-</metal:portlets>
953-
954 <div metal:fill-slot="main"
955 tal:define="user_can_edit_memberships context/required:launchpad.Edit;
956 active_member_count context/active_member_count">
957
958=== modified file 'lib/lp/registry/templates/teammembership-index.pt'
959--- lib/lp/registry/templates/teammembership-index.pt 2009-07-17 17:59:07 +0000
960+++ lib/lp/registry/templates/teammembership-index.pt 2009-09-11 17:13:09 +0000
961@@ -40,10 +40,6 @@
962 </script>
963 </metal:block>
964
965-<metal:portlets fill-slot="portlets">
966- <div tal:replace="structure context/team/@@+portlet-details" />
967-</metal:portlets>
968-
969 <metal:macros fill-slot="bogus">
970 <metal:macro define-macro="person">
971 <a tal:attributes="href context/person/fmt:url"
972
973=== modified file 'lib/lp/registry/templates/teammembership-listing-simple.pt'
974--- lib/lp/registry/templates/teammembership-listing-simple.pt 2009-07-17 17:59:07 +0000
975+++ lib/lp/registry/templates/teammembership-listing-simple.pt 2009-09-11 17:13:09 +0000
976@@ -9,7 +9,7 @@
977 <div>
978 <a tal:replace="structure context/team/fmt:link">Team name</a>
979 </div>
980- <div>
981+ <div class="extra-discreet">
982 Joined
983 <span
984 tal:attributes="title context/datejoined/fmt:datetime"
985
986=== modified file 'lib/lp/soyuz/templates/person-portlet-ppas.pt'
987--- lib/lp/soyuz/templates/person-portlet-ppas.pt 2009-09-09 18:50:13 +0000
988+++ lib/lp/soyuz/templates/person-portlet-ppas.pt 2009-09-11 17:13:09 +0000
989@@ -3,26 +3,22 @@
990 xmlns:metal="http://xml.zope.org/namespaces/metal"
991 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
992 omit-tag="">
993- <div id="ppas">
994- <div class="section">
995- <div class="portlet">
996- <h2>Personal package archives</h2>
997-
998- <div tal:replace="structure context/@@+ppas-list"/>
999-
1000- <ul class="horizontal">
1001- <li tal:define="link context/menu:overview/activate_ppa"
1002- tal:condition="link/enabled"
1003- tal:content="structure link/fmt:icon-link" />
1004-
1005- <tal:is-person condition="not: context/is_team">
1006- <li tal:define="link context/menu:overview/view_ppa_subscriptions"
1007- tal:condition="link/enabled"
1008- tal:replace="structure link/fmt:icon-link" />
1009- </tal:is-person>
1010-
1011- </ul>
1012- </div>
1013- </div>
1014+ <div id="ppas" class="portlet" tal:condition="view/should_show_ppa_section">
1015+ <h2>Personal package archives</h2>
1016+
1017+ <div tal:replace="structure context/@@+ppas-list"/>
1018+
1019+ <ul class="horizontal">
1020+ <li tal:define="link context/menu:overview/activate_ppa"
1021+ tal:condition="link/enabled"
1022+ tal:content="structure link/fmt:icon-link" />
1023+
1024+ <tal:is-person condition="not: context/is_team">
1025+ <li tal:define="link context/menu:overview/view_ppa_subscriptions"
1026+ tal:condition="link/enabled"
1027+ tal:replace="structure link/fmt:icon-link" />
1028+ </tal:is-person>
1029+
1030+ </ul>
1031 </div>
1032 </tal:root>
1033