Merge lp:~barry/launchpad/416703-sprints into lp:launchpad

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

= Summary =

Bug 416703 describes the conversion of the top level /sprints page to UI 3.0.
This was a fairly mechanical change given that this is the fifth such related
branch I've done.

NOTE: This branch is dependent on one that has not yet landed. Please use the
attached diff if the generated one does not take the branch dependencies into
account.

== Proposed fix ==

Fiddle with templates, etc.

== Pre-implementation notes ==

Not much, except that after a discussion on irc, it was decided to restore the
'info' icons and the 'View...' prefix in the navmenu, for consistency with the
rest of the ui.

== Implementation details ==

Not much extra.

== Tests ==

Will run through ec2 before landing.

== Demo and Q/A ==

* Visit http://launchpad.dev/sprints

= 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/browser/configure.zcml
  lib/lp/blueprints/templates/sprints-index.pt
  lib/lp/registry/browser/menu.py
  lib/canonical/launchpad/pagetitles.py
  lib/lp/registry/browser/product.py
  lib/lp/blueprints/browser/sprint.py
  lib/canonical/launchpad/icing/style-3-0.css
  lib/lp/blueprints/browser/configure.zcml
  lib/lp/registry/templates/projects-index.pt
  lib/lp/registry/templates/distros-index.pt
  lib/lp/registry/templates/products-index.pt
  lib/lp/registry/browser/distribution.py
  lib/lp/registry/browser/project.py

== diff ==

=== modified file 'lib/canonical/launchpad/pagetitles.py'
--- lib/canonical/launchpad/pagetitles.py 2009-08-21 15:19:02 +0000
+++ lib/canonical/launchpad/pagetitles.py 2009-08-21 20:04:25 +0000
@@ -1284,8 +1284,6 @@

 sprints_all = 'All sprints and meetings registered in Launchpad'

-sprints_index = 'Meetings and sprints registered in Launchpad'
-
 sprintspecification_decide = 'Consider spec for sprint agenda'

 sprintspecification_admin = 'Approve blueprint for sprint agenda'

=== modified file 'lib/lp/blueprints/browser/configure.zcml'
--- lib/lp/blueprints/browser/configure.zcml 2009-08-03 14:38:55 +0000
+++ lib/lp/blueprints/browser/configure.zcml 2009-08-21 20:04:25 +0000
@@ -147,9 +147,6 @@
         <browser:page
             name="+all"
             template="../templates/sprints-all.pt"/>
- <browser:page
- name="+portlet-details"
- template="../templates/sprints-portlet-details.pt"/>
     </browser:pages>
     <browser:page
         name="+new"

=== modified file 'lib/lp/blueprints/browser/sprint.py'
--- lib/lp/blueprints/browser/sprint.py 2009-06-25 00:00:26 +0000
+++ lib/lp/blueprints/browser/sprint.py 2009-08-21 20:04:25 +0000
@@ -28,8 +28,9 @@
 import pytz
 from StringIO import StringIO

+from zope.app.form.browser import TextAreaWidget
 from zope.component import getUtility
-from zope.app.form.browser import TextAreaWidget
+from zope.interface import implements

 from canonical.launchpad import _
 from canonical.cachedproperty import cachedproperty
@@ -40,6 +41,8 @@
     SpecificationDefinitionStatus, SpecificationFilter, SpecificationPriority,
     SpecificationSort)
 from lp.blueprints.interfaces.sprint import ISprint, ISprintS...

Read more...

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

We discusses the new style added and concluded that .summary and .application-summary are used for different purposes. .summary is for user-entered content link the summary of a project. .application-summary is for information that introduces a part of the application, which might be list pages.

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/icing/style-3-0.css'
2--- lib/canonical/launchpad/icing/style-3-0.css 2009-08-20 14:01:26 +0000
3+++ lib/canonical/launchpad/icing/style-3-0.css 2009-08-20 21:13:30 +0000
4@@ -442,6 +442,15 @@
5 color: #000;
6 font-weight: normal;
7 }
8+.application-summary {
9+ font-size: 123.1%;
10+}
11+.search-results {
12+ margin-top: 1em;
13+}
14+p.search-results {
15+ font-size: 116%;
16+}
17
18
19 /* Exceptions they may be common. */
20
21=== modified file 'lib/canonical/launchpad/pagetitles.py'
22--- lib/canonical/launchpad/pagetitles.py 2009-08-21 09:39:13 +0000
23+++ lib/canonical/launchpad/pagetitles.py 2009-08-21 20:04:25 +0000
24@@ -508,8 +508,6 @@
25
26 distroseriessourcepackagerelease_index = ContextTitle('%s')
27
28-distros_index = 'Distributions registered in Launchpad'
29-
30 edit_bug_supervisor = ContextTitle('Edit bug supervisor for %s')
31
32 errorservice_config = 'Configure error log'
33@@ -1065,8 +1063,6 @@
34
35 project_translators = ContextTitle('Set translation group for %s')
36
37-projects_index = 'Project groups registered in Launchpad'
38-
39 projects_request = 'Launchpad Translations: Request a project group'
40
41 projects_search = 'Search for project groups in Launchpad'
42@@ -1288,8 +1284,6 @@
43
44 sprints_all = 'All sprints and meetings registered in Launchpad'
45
46-sprints_index = 'Meetings and sprints registered in Launchpad'
47-
48 sprintspecification_decide = 'Consider spec for sprint agenda'
49
50 sprintspecification_admin = 'Approve blueprint for sprint agenda'
51
52=== modified file 'lib/lp/blueprints/browser/configure.zcml'
53--- lib/lp/blueprints/browser/configure.zcml 2009-08-03 14:38:55 +0000
54+++ lib/lp/blueprints/browser/configure.zcml 2009-08-21 20:04:25 +0000
55@@ -147,9 +147,6 @@
56 <browser:page
57 name="+all"
58 template="../templates/sprints-all.pt"/>
59- <browser:page
60- name="+portlet-details"
61- template="../templates/sprints-portlet-details.pt"/>
62 </browser:pages>
63 <browser:page
64 name="+new"
65
66=== modified file 'lib/lp/blueprints/browser/sprint.py'
67--- lib/lp/blueprints/browser/sprint.py 2009-06-25 00:00:26 +0000
68+++ lib/lp/blueprints/browser/sprint.py 2009-08-21 20:04:25 +0000
69@@ -28,8 +28,9 @@
70 import pytz
71 from StringIO import StringIO
72
73+from zope.app.form.browser import TextAreaWidget
74 from zope.component import getUtility
75-from zope.app.form.browser import TextAreaWidget
76+from zope.interface import implements
77
78 from canonical.launchpad import _
79 from canonical.cachedproperty import cachedproperty
80@@ -40,6 +41,8 @@
81 SpecificationDefinitionStatus, SpecificationFilter, SpecificationPriority,
82 SpecificationSort)
83 from lp.blueprints.interfaces.sprint import ISprint, ISprintSet
84+from lp.registry.browser.menu import (
85+ IRegistryCollectionNavigationMenu, RegistryCollectionActionMenuBase)
86 from canonical.launchpad.webapp import (
87 ApplicationMenu, ContextMenu, GetitemNavigation, LaunchpadEditFormView,
88 LaunchpadFormView, LaunchpadView, Link, Navigation,
89@@ -488,7 +491,22 @@
90 return body.encode('utf-8')
91
92
93+class SprintSetNavigationMenu(RegistryCollectionActionMenuBase):
94+ """Action menu for sprints index."""
95+ usedfor = ISprintSet
96+ links = [
97+ 'register_team',
98+ 'register_project',
99+ 'create_account',
100+ ]
101+
102+
103 class SprintSetView(LaunchpadView):
104+ """View for the /sprints top level collection page."""
105+
106+ implements(IRegistryCollectionNavigationMenu)
107+
108+ page_title = 'Meetings and sprints registered in Launchpad'
109
110 def all_batched(self):
111 return BatchNavigator(self.context.all, self.request)
112
113=== modified file 'lib/lp/blueprints/templates/sprints-index.pt'
114--- lib/lp/blueprints/templates/sprints-index.pt 2009-07-17 17:59:07 +0000
115+++ lib/lp/blueprints/templates/sprints-index.pt 2009-08-21 20:07:57 +0000
116@@ -6,34 +6,37 @@
117 xml:lang="en"
118 lang="en"
119 dir="ltr"
120- metal:use-macro="view/macro:page/pillarindex"
121+ metal:use-macro="view/macro:page/main_side"
122 i18n:domain="launchpad">
123+
124 <body>
125 <h1 metal:fill-slot="heading">Coming events</h1>
126
127-<metal:rightportlets fill-slot="portlets_two">
128- <div tal:replace="structure context/@@+portlet-details" />
129-</metal:rightportlets>
130-
131-<div metal:fill-slot="main">
132-
133- <p id="application-summary">
134- Launchpad can help you organise your developer sprints, summits and
135- gatherings. Register the meeting here, then you can invite people to
136- nominate blueprints for discussion at the event. The meeting drivers
137- control the agenda, but everyone can see what's proposed and what's
138- been accepted.
139- </p>
140-
141- <table>
142- <tbody>
143- <tal:sprint
144- repeat="sprint context"
145- replace="structure sprint/@@+listing-detailed"
146- />
147- </tbody>
148- </table>
149-
150-</div>
151-</body>
152+ <tal:side metal:fill-slot="side">
153+ <tal:menu replace="structure view/@@+global-actions" />
154+ <tal:menu replace="structure context/@@+related-pages" />
155+ </tal:side>
156+
157+ <div metal:fill-slot="main">
158+
159+ <table class="listing">
160+ <tbody>
161+ <tal:sprint
162+ repeat="sprint context"
163+ replace="structure sprint/@@+listing-detailed"
164+ />
165+ </tbody>
166+ </table>
167+
168+ <p/>
169+ <p id="application-summary">
170+ Launchpad can help you organise your developer sprints, summits and
171+ gatherings. Register the meeting here, then you can invite people to
172+ nominate blueprints for discussion at the event. The meeting drivers
173+ control the agenda, but everyone can see what's proposed and what's
174+ been accepted.
175+ </p>
176+
177+ </div>
178+ </body>
179 </html>
180
181=== removed file 'lib/lp/blueprints/templates/sprints-portlet-details.pt'
182--- lib/lp/blueprints/templates/sprints-portlet-details.pt 2009-07-17 17:59:07 +0000
183+++ lib/lp/blueprints/templates/sprints-portlet-details.pt 1970-01-01 00:00:00 +0000
184@@ -1,22 +0,0 @@
185-<tal:root
186- xmlns:tal="http://xml.zope.org/namespaces/tal"
187- xmlns:metal="http://xml.zope.org/namespaces/metal"
188- xmlns:i18n="http://xml.zope.org/namespaces/i18n"
189- omit-tag="">
190-
191-<div class="portlet" id="portlet-details">
192-
193- <h2>About these meetings</h2>
194-
195- <div class="portletBody portletContent">
196-
197- <img src="/@@/info" />
198- You can register a meeting, and
199- then easily manage the agenda of the meeting. Anybody can propose a
200- blueprint for discussion at the meeting, but only the meeting
201- organisers (the "drivers") can approve a topic on the meeting agenda.
202-
203- </div>
204-
205-</div>
206-</tal:root>
207
208=== modified file 'lib/lp/registry/browser/configure.zcml'
209--- lib/lp/registry/browser/configure.zcml 2009-08-20 14:01:26 +0000
210+++ lib/lp/registry/browser/configure.zcml 2009-08-21 15:19:02 +0000
211@@ -424,7 +424,7 @@
212 <browser:pages
213 for="lp.registry.interfaces.project.IProjectSet"
214 facet="overview"
215- permission="launchpad.ProjectReview"
216+ permission="zope.Public"
217 class="lp.registry.browser.project.ProjectSetView">
218 <browser:page
219 name="+all"
220@@ -456,16 +456,18 @@
221 template="../templates/project-series-portlet-details.pt"/>
222 <browser:menus
223 classes="
224- ProjectFacets
225 ProjectActionMenu
226+ ProjectAnswersMenu
227+ ProjectBountiesMenu
228+ ProjectBugsMenu
229 ProjectEditNavigationMenu
230+ ProjectFacets
231 ProjectOverviewMenu
232- ProjectBountiesMenu
233- ProjectBugsMenu
234 ProjectSeriesSpecificationsMenu
235+ ProjectSetContextMenu
236+ ProjectSetNavigationMenu
237 ProjectSpecificationsMenu
238- ProjectSetContextMenu
239- ProjectAnswersMenu"
240+ "
241 module="lp.registry.browser.project"/>
242 <browser:defaultView
243 for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
244@@ -2010,15 +2012,17 @@
245 template="../../app/templates/generic-edit.pt"/>
246 <browser:menus
247 classes="
248+ DistributionBountiesMenu
249+ DistributionBugsMenu
250 DistributionFacets
251+ DistributionMirrorsNavigationMenu
252+ DistributionNavigationMenu
253 DistributionOverviewMenu
254- DistributionBugsMenu
255- DistributionBountiesMenu
256+ DistributionSetActionNavigationMenu
257+ DistributionSetContextMenu
258+ DistributionSetFacets
259 DistributionSpecificationsMenu
260- DistributionSetFacets
261- DistributionSetContextMenu
262- DistributionNavigationMenu
263- DistributionMirrorsNavigationMenu"
264+ "
265 module="lp.registry.browser.distribution"/>
266 <browser:defaultView
267 for="lp.registry.interfaces.sourcepackage.ISourcePackage"
268
269=== modified file 'lib/lp/registry/browser/distribution.py'
270--- lib/lp/registry/browser/distribution.py 2009-08-20 11:15:55 +0000
271+++ lib/lp/registry/browser/distribution.py 2009-08-20 22:59:38 +0000
272@@ -20,11 +20,12 @@
273 'DistributionFacets',
274 'DistributionLanguagePackAdminView',
275 'DistributionNavigation',
276+ 'DistributionPPASearchView',
277 'DistributionPackageSearchView',
278 'DistributionPendingReviewMirrorsView',
279- 'DistributionPPASearchView',
280 'DistributionSeriesMirrorsRSSView',
281 'DistributionSeriesMirrorsView',
282+ 'DistributionSetActionNavigationMenu',
283 'DistributionSetBreadcrumbBuilder',
284 'DistributionSetContextMenu',
285 'DistributionSetFacets',
286@@ -46,6 +47,8 @@
287
288 from canonical.cachedproperty import cachedproperty
289 from lp.registry.browser.announcement import HasAnnouncementsView
290+from lp.registry.browser.menu import (
291+ IRegistryCollectionNavigationMenu, RegistryCollectionActionMenuBase)
292 from lp.soyuz.browser.archive import traverse_distro_archive
293 from lp.bugs.browser.bugtask import BugTargetTraversalMixin
294 from lp.soyuz.browser.build import BuildRecordsView
295@@ -770,12 +773,21 @@
296 self.batchnav = BatchNavigator(results, self.request)
297
298
299-class DistributionSetView:
300-
301- def __init__(self, context, request):
302- self.context = context
303- self.request = request
304-
305+class DistributionSetActionNavigationMenu(RegistryCollectionActionMenuBase):
306+ """Action menu for `DistributionSetView`."""
307+
308+ usedfor = IDistributionSet
309+ links = ['register_team', 'register_project', 'create_account']
310+
311+
312+class DistributionSetView(LaunchpadView):
313+ """View for /distros top level collection."""
314+
315+ implements(IRegistryCollectionNavigationMenu)
316+
317+ page_title = 'Distributions registered in Launchpad'
318+
319+ @cachedproperty
320 def count(self):
321 return self.context.count()
322
323
324=== modified file 'lib/lp/registry/browser/menu.py'
325--- lib/lp/registry/browser/menu.py 2009-08-20 16:28:54 +0000
326+++ lib/lp/registry/browser/menu.py 2009-08-21 20:04:25 +0000
327@@ -22,19 +22,19 @@
328 """Menu shared by top level collection objects."""
329
330 def projects(self):
331- return Link('/projects/', 'Projects')
332+ return Link('/projects/', 'View projects', icon='info')
333
334 def distributions(self):
335- return Link('/distros/', 'Distributions')
336+ return Link('/distros/', 'View distributions', icon='info')
337
338 def people(self):
339- return Link('/people/', 'People')
340+ return Link('/people/', 'View people', icon='info')
341
342 def meetings(self):
343- return Link('/sprints/', 'Meetings')
344+ return Link('/sprints/', 'View meetings', icon='info')
345
346 def project_groups(self):
347- return Link('/projectgroups', 'Project groups')
348+ return Link('/projectgroups', 'View project groups', icon='info')
349
350 def register_project(self):
351 text = 'Register a project'
352
353=== modified file 'lib/lp/registry/browser/product.py'
354--- lib/lp/registry/browser/product.py 2009-08-21 07:17:28 +0000
355+++ lib/lp/registry/browser/product.py 2009-08-21 15:05:23 +0000
356@@ -1393,7 +1393,7 @@
357
358 @enabled_with_permission('launchpad.ProjectReview')
359 def review_licenses(self):
360- return Link('+review-licenses', 'Review projects')
361+ return Link('+review-licenses', 'Review projects', icon='edit')
362
363
364 class ProductSetView(LaunchpadView):
365@@ -1405,27 +1405,27 @@
366
367 max_results_to_display = config.launchpad.default_batch_size
368 results = None
369- searchrequested = False
370+ search_requested = False
371
372 def initialize(self):
373- """See `LaunchpadFormView`."""
374+ """See `LaunchpadView`."""
375 form = self.request.form_ng
376 self.search_string = form.getOne('text')
377 if self.search_string is not None:
378- self.searchrequested = True
379+ self.search_requested = True
380
381 def all_batched(self):
382 return BatchNavigator(self.context.all_active, self.request)
383
384 @cachedproperty
385 def matches(self):
386- if not self.searchrequested:
387+ if not self.search_requested:
388 return None
389 pillarset = getUtility(IPillarNameSet)
390 return pillarset.count_search_matches(self.search_string)
391
392 @cachedproperty
393- def searchresults(self):
394+ def search_results(self):
395 search_string = self.search_string.lower()
396 limit = self.max_results_to_display
397 return getUtility(IPillarNameSet).search(search_string, limit)
398
399=== modified file 'lib/lp/registry/browser/project.py'
400--- lib/lp/registry/browser/project.py 2009-08-20 15:23:34 +0000
401+++ lib/lp/registry/browser/project.py 2009-08-21 15:14:09 +0000
402@@ -6,6 +6,7 @@
403 __metaclass__ = type
404
405 __all__ = [
406+ 'ProjectActionMenu',
407 'ProjectAddProductView',
408 'ProjectAddQuestionView',
409 'ProjectAddView',
410@@ -18,14 +19,14 @@
411 'ProjectFacets',
412 'ProjectMaintainerReassignmentView',
413 'ProjectNavigation',
414+ 'ProjectOverviewMenu',
415 'ProjectRdfView',
416 'ProjectReviewView',
417- 'ProjectActionMenu',
418- 'ProjectOverviewMenu',
419 'ProjectSeriesSpecificationsMenu',
420 'ProjectSetBreadcrumbBuilder',
421 'ProjectSetContextMenu',
422 'ProjectSetNavigation',
423+ 'ProjectSetNavigationMenu',
424 'ProjectSetView',
425 'ProjectSpecificationsMenu',
426 'ProjectView',
427@@ -49,6 +50,8 @@
428 from lp.registry.interfaces.project import (
429 IProject, IProjectSeries, IProjectSet)
430 from lp.registry.browser.announcement import HasAnnouncementsView
431+from lp.registry.browser.menu import (
432+ IRegistryCollectionNavigationMenu, RegistryCollectionActionMenuBase)
433 from lp.registry.browser.product import (
434 ProductAddView, ProjectAddStepOne, ProjectAddStepTwo)
435 from canonical.launchpad.browser.branding import BrandingChangeView
436@@ -229,10 +232,6 @@
437 text = 'See all milestones'
438 return Link('+milestones', text)
439
440- def milestones(self):
441- text = 'See all milestones'
442- return Link('+milestones', text)
443-
444 def rdf(self):
445 text = structured(
446 'Download <abbr title="Resource Description Framework">'
447@@ -479,10 +478,18 @@
448 return ProjectGroupAddStepOne
449
450
451+class ProjectSetNavigationMenu(RegistryCollectionActionMenuBase):
452+ """Action menu for project group index."""
453+ usedfor = IProjectSet
454+ links = ['register_team', 'register_project', 'create_account']
455+
456+
457 class ProjectSetView(LaunchpadView):
458-
459- header = "Project groups registered in Launchpad"
460- page_title = header
461+ """View for project group index page."""
462+
463+ implements(IRegistryCollectionNavigationMenu)
464+
465+ page_title = "Project groups registered in Launchpad"
466
467 def __init__(self, context, request):
468 super(ProjectSetView, self).__init__(context, request)
469@@ -492,17 +499,26 @@
470 self.malone = self.form.getOne('malone', None)
471 self.bazaar = self.form.getOne('bazaar', None)
472 self.text = self.form.getOne('text', None)
473- self.searchrequested = False
474+ self.search_requested = False
475+ self.search_string = None
476 if (self.text is not None or
477 self.bazaar is not None or
478 self.malone is not None or
479 self.rosetta is not None or
480 self.soyuz is not None):
481- self.searchrequested = True
482+ self.search_requested = True
483 self.results = None
484 self.matches = 0
485
486- def searchresults(self):
487+ def initialize(self):
488+ """See `LaunchpadView`."""
489+ form = self.request.form_ng
490+ self.search_string = form.getOne('text')
491+ if self.search_string is not None:
492+ self.search_requested = True
493+
494+ @cachedproperty
495+ def search_results(self):
496 """Use searchtext to find the list of Projects that match
497 and then present those as a list. Only do this the first
498 time the method is called, otherwise return previous results.
499
500=== modified file 'lib/lp/registry/templates/distros-index.pt'
501--- lib/lp/registry/templates/distros-index.pt 2009-07-17 17:59:07 +0000
502+++ lib/lp/registry/templates/distros-index.pt 2009-08-20 22:57:10 +0000
503@@ -6,35 +6,23 @@
504 xml:lang="en"
505 lang="en"
506 dir="ltr"
507- metal:use-macro="view/macro:page/pillarindex"
508+ metal:use-macro="view/macro:page/main_side"
509 i18n:domain="launchpad"
510 >
511 <body>
512 <h1 metal:fill-slot="heading">Registered distributions</h1>
513
514-<metal:rightportlets fill-slot="portlets_two">
515- <div class="portlet">
516- <h2>About these distributions</h2>
517-
518- <div class="portletBody portletContent">
519- <img src="/@@/info" />
520- Launchpad can manage the source packages, builds, archive publishing
521- and historical record-keeping necessary to create a distribution.
522- Some of the distributions described here are fully managed in
523- Launchpad, others are managed elsewhere but Launchpad keeps track of
524- their progress.
525- </div>
526- </div>
527-</metal:rightportlets>
528-
529-<div metal:fill-slot="main">
530-
531- <div id="application-summary">
532- Launchpad can keep track of the software packages in a distribution,
533- and provide information about the bugs, translations and code
534- associated with each of them.
535- </div>
536-
537+ <tal:side metal:fill-slot="side">
538+ <tal:menu replace="structure view/@@+global-actions" />
539+ <tal:menu replace="structure context/@@+related-pages" />
540+ </tal:side>
541+
542+ <div metal:fill-slot="main">
543+ There are currently
544+ <strong class="registry-stat"
545+ tal:content="view/count">2</strong>
546+ distributions registered in Launchpad.
547+ <p/>
548 <table class="listing">
549 <thead>
550 <tr>
551@@ -67,6 +55,13 @@
552 and its information might be out of date.
553 </p>
554
555+ <div id="application-summary">
556+ Launchpad manages the source packages, builds, archive publishing, bugs,
557+ translations, code, and historical record-keeping necessary to create a
558+ distribution. Some of the distributions described here are fully
559+ managed in Launchpad, others are managed elsewhere with Launchpad
560+ keeping track of their progress.
561+ </div>
562 </div>
563
564 </body>
565
566=== modified file 'lib/lp/registry/templates/products-index.pt'
567--- lib/lp/registry/templates/products-index.pt 2009-08-20 16:13:15 +0000
568+++ lib/lp/registry/templates/products-index.pt 2009-08-20 21:13:30 +0000
569@@ -43,17 +43,17 @@
570 tal:attributes="action request/URL"
571 accept-charset="UTF-8">
572 <input size="30" name="text" tal:attributes="value view/search_string" />
573- <input tal:condition="view/searchrequested"
574+ <input tal:condition="view/search_requested"
575 type="submit"
576 value="Search again"
577 />
578- <input tal:condition="not: view/searchrequested"
579+ <input tal:condition="not: view/search_requested"
580 type="submit"
581 value="Search projects"
582 />
583 </form>
584
585- <tal:searching condition="view/searchrequested">
586+ <tal:searching condition="view/search_requested">
587
588 <p id="empty-search-string" tal:condition="not: view/search_string">
589 Enter one or more words related to the project you want to find.
590@@ -69,22 +69,22 @@
591 do another search with more relevant search terms.
592 </p>
593
594- <p tal:condition="view/searchresults">
595- <span tal:replace="view/matches">3</span>
596- <span tal:condition="python: view.matches == 1">project found</span>
597- <span tal:condition="python: view.matches != 1">projects found</span>
598- matching &#8220;<tal:string replace="view/search_string" />&#8221;
599- <span tal:condition="view/tooManyResultsFound">,
600- showing the most relevant
601- <span tal:replace="view/max_results_to_display" />
602- </span>
603- </p>
604+ <tal:searching tal:condition="view/search_results">
605+ <p class="search-results">
606+ <span tal:replace="view/matches">3</span>
607+ <span tal:condition="python: view.matches == 1">project found</span>
608+ <span tal:condition="python: view.matches != 1">projects found</span>
609+ matching &#8220;<tal:string replace="view/search_string" />&#8221;
610+ <span tal:condition="view/tooManyResultsFound">,
611+ showing the most relevant
612+ <span tal:replace="view/max_results_to_display" />
613+ </span>
614+ </p>
615+ </tal:searching>
616
617- <table
618- tal:condition="view/matches"
619- tal:define="results view/searchresults"
620- id="search-results"
621- >
622+ <table tal:condition="view/matches"
623+ tal:define="results view/search_results"
624+ class="search-results">
625 <tbody>
626 <tr tal:repeat="pillarname results"
627 tal:replace="structure pillarname/@@+listing-simple">
628@@ -94,42 +94,32 @@
629
630 <div id="application-summary">
631 <p class="error"
632- tal:condition="not: view/searchresults">
633+ tal:condition="not: view/search_results">
634 No projects matching
635 &#8220;<span tal:replace="view/search_string">moz</span>&#8221;
636 were found.
637 </p>
638
639- <h2>Haven&#8217;t found your project?</h2>
640-
641 <p>
642- If the project you are looking for isn't here, go ahead and register
643- it yourself!
644+ If the project you are looking for isn't here, go ahead and
645+ <a href=""
646+ tal:attributes="href view/menu:overview/register_project/url"
647+ >register it yourself!</a>
648 </p>
649
650- <ul class="rollover buttons">
651- <li>
652- <a href="/projects/+new">
653- <img
654- alt="Register a project"
655- src="/+icing/but-lrg-registerproj.gif"
656- />
657- </a>
658- </li>
659- </ul>
660 </div>
661 </tal:non-empty-search-string>
662
663 </tal:searching>
664- <tal:no_search condition="not: view/searchrequested">
665+ <tal:no_search condition="not: view/search_requested">
666
667- <p id="application-summary">
668+ <p class="application-summary">
669 Launchpad helps people to work together by making it easy to share
670 code, bug reports, translations, and ideas. To get started, search here
671 for a project you want to know more about.
672 </p>
673
674- <p>
675+ <p class="application-summary">
676 If you find a project you run, <a href="/launchpad/+addquestion">ask
677 us</a> and we'll hand the project over to you.
678 <br />To set that project up for translation to your language, <a
679
680=== modified file 'lib/lp/registry/templates/projects-index.pt'
681--- lib/lp/registry/templates/projects-index.pt 2009-07-17 17:59:07 +0000
682+++ lib/lp/registry/templates/projects-index.pt 2009-08-20 21:13:30 +0000
683@@ -6,96 +6,81 @@
684 xml:lang="en"
685 lang="en"
686 dir="ltr"
687- metal:use-macro="view/macro:page/pillarindex"
688+ metal:use-macro="view/macro:page/main_side"
689 i18n:domain="launchpad"
690 >
691 <body>
692- <h1 metal:fill-slot="heading">Project groups in Launchpad</h1>
693-
694-<metal:rightportlets fill-slot="portlets_two">
695- <div class="portlet">
696- <h2>About Projects in Launchpad:</h2>
697- <div class="portletBody portletContent">
698- <img src="/@@/info" />
699- There are currently
700- <a href="+all"><span tal:replace="context/count_all">5</span>
701- projects</a> registered.
702- <br />
703- <br />
704- Only the Launchpad administrators and registry experts can register new
705- project groups. You can register an individual application (what we call
706- a project). To do so, first <a href="/projects/">search to see if your
707- project is already in Launchpad</a>.
708+ <h1 metal:fill-slot="heading">Project groups</h1>
709+
710+ <tal:side metal:fill-slot="side">
711+ <tal:menu replace="structure view/@@+global-actions" />
712+ <tal:menu replace="structure context/@@+related-pages" />
713+ </tal:side>
714+
715+ <div metal:fill-slot="main">
716+ <p>There are
717+ <strong class="registry-stat"
718+ tal:content="context/count_all">5</strong>
719+ project groups registered in Launchpad.
720+ </p>
721+
722+ <form class="central" method="get" accept-charset="UTF-8">
723+ <input size="30" name="text" tal:attributes="value view/search_string" />
724+ <input
725+ tal:condition="view/search_requested"
726+ type="submit" value="Search Again" />
727+ <input
728+ tal:condition="not: view/search_requested"
729+ type="submit" value="Search project groups" />
730+ </form>
731+
732+ <div tal:condition="view/search_requested">
733+ <tal:searching tal:condition="view/search_results">
734+ <p class="search-results">
735+ <span tal:replace="view/matches">3</span>
736+ <span tal:condition="python: view.matches == 1">project
737+ group found</span>
738+ <span tal:condition="python: view.matches != 1">projects
739+ groups found</span>
740+ matching
741+ &#8220;<tal:string replace="view/search_string" />&#8221;
742+ </p>
743+ </tal:searching>
744+
745+ <table tal:condition="view/matches"
746+ tal:define="results view/search_results"
747+ class="search-results">
748+ <tbody>
749+ <tr tal:repeat="product results">
750+ <td tal:content="structure product/@@+listing-detailed" />
751+ </tr>
752+ </tbody>
753+ </table>
754+
755+ <p class="error application-summary"
756+ tal:condition="not: view/search_results">
757+ No project groups matching
758+ &#8220;<span tal:replace="view/search_string">moz</span>&#8221;
759+ were found.
760+ </p>
761+ </div>
762+ <p class="application-summary">
763+ In Launchpad, <dfn>project groups</dfn> are special groups of
764+ software projects that share a development community. Examples
765+ include <a href="gnome">Gnome</a>,
766+ <a href="kde"><abbr>KDE</abbr></a>, and
767+ <a href="mozilla">Mozilla</a>. Launchpad allows you to group
768+ several projects together into a project group, to make coordination
769+ and tracking simpler.
770+ </p>
771+
772+ <p class="application-summary">
773+ Only the Launchpad administrators and registry experts can register
774+ new project groups. You can register an individual application (what
775+ we call a project). To do so, first <a href="/projects/">search to
776+ see if your project is already in Launchpad</a>.
777+ </p>
778+
779 </div>
780- </div>
781-</metal:rightportlets>
782-
783-<div metal:fill-slot="main">
784-
785- <p>
786- In Launchpad, <dfn>project groups</dfn> are special groups of software
787- projects that share a development community.
788- Examples include <a href="gnome">Gnome</a>,
789- <a href="kde"><abbr>KDE</abbr></a>, and
790- <a href="mozilla">Mozilla</a>. Launchpad allows you to group several
791- projects together in a project, to make coordination and tracking
792- simpler.
793- </p>
794-
795- <form method="get" accept-charset="UTF-8">
796- <label for="text">Search projects:</label>
797- <input name="text" tal:attributes="value view/text" />
798- <input
799- tal:condition="view/searchrequested"
800- type="submit" value="Search Again" />
801- <input
802- tal:condition="not: view/searchrequested"
803- type="submit" value="Search" />
804- </form>
805-
806- <tal:notsearching condition="not:view/searchrequested">
807- <p>
808- For individual computer programs, applications or libraries,
809- see <a href="/projects">projects</a>.
810- </p>
811-
812- <p>
813- For groups of people, see
814- <a href="/people">Launchpad teams</a>.
815- </p>
816- </tal:notsearching>
817-
818- <tal:searching condition="view/searchrequested">
819-
820- <table class="data" tal:define="results view/searchresults">
821- <thead>
822- <tr class="results">
823- <th colspan="0">
824- <span tal:replace="view/matches">3</span>
825- <span tal:condition="python: view.matches == 1">result</span>
826- <span tal:condition="python: view.matches != 1">results</span>
827- </th>
828- </tr>
829- </thead>
830- <tbody>
831- <tr tal:condition="view/matches"
832- tal:repeat="product results">
833- <td tal:content="structure product/@@+listing-detailed" />
834- </tr>
835- <tr tal:condition="not: view/matches">
836- <td tal:condition="not: view/matches">
837- <p>No projects matching
838- &#8220;<span tal:replace="view/text">moz</span>&#8221;
839- were found.
840- You can <a href="+new">register a new project</a>.</p>
841- </td>
842- </tr>
843- </tbody>
844- </table>
845-
846- </tal:searching>
847-
848-</div>
849-
850-</body>
851+ </body>
852 </html>