Merge lp:~edwin-grubbs/launchpad/bug-437184-publishing-history-link into lp:launchpad

Proposed by Edwin Grubbs
Status: Merged
Approved by: Curtis Hovey
Approved revision: no longer in the source branch.
Merged at revision: not available
Proposed branch: lp:~edwin-grubbs/launchpad/bug-437184-publishing-history-link
Merge into: lp:launchpad
Diff against target: 455 lines
9 files modified
lib/canonical/launchpad/icing/style-3-0.css (+160/-0)
lib/canonical/launchpad/icing/style.css (+0/-152)
lib/lp/app/templates/navigationmenu-actions.pt (+1/-1)
lib/lp/bugs/templates/bug-portlet-actions.pt (+1/-1)
lib/lp/bugs/templates/bug-portlet-specs.pt (+1/-1)
lib/lp/bugs/templates/bug-portlet-subscribers.pt (+1/-1)
lib/lp/registry/browser/distributionsourcepackage.py (+5/-1)
lib/lp/registry/stories/distribution/xx-distribution-packages.txt (+4/-4)
lib/lp/registry/templates/distributionsourcepackage-index.pt (+0/-4)
To merge this branch: bzr merge lp:~edwin-grubbs/launchpad/bug-437184-publishing-history-link
Reviewer Review Type Date Requested Status
Curtis Hovey (community) code an ui Approve
Canonical Launchpad Engineering code Pending
Review via email: mp+14059@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Edwin Grubbs (edwin-grubbs) wrote :

Summary
-------

Moved the "View full publishing history" link into the action menu.

Added css to indent the link text so that it doesn't end up below
the icon when it wraps.

Tests
-----

./bin/test -vv -t xx-distribution-packages.txt

Demo and Q/A
------------

* Open https://launchpad.dev/ubuntu/+source/mozilla-firefox/

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

Hi Edwin.

I really like the hanging indent presentation. Thanks for choosing to work on the wrapping issue. I think the CSS needs tuning: http://people.canonical.com/~curtis/clipped-icons.png shows the clipped icons. I am not sure if we need to increase the padding of the <li> or if we need to increase the line-height of the <a>.

style.css is deprecated (We should have started removing it this release, but oopses got in the way). Your changes should be in style-3.0.css. We do not write styles for ids because they are harder to reuse. I like this CSS rule and am sure we can use it elsewhere. Change the rule to work with a class or element. For example, if you use `.side a.sprite` you will fix subscribers lists too! (The 'Launchpad code reviewers from Canonical' subscriber to this review will probably be easier to read if it was a hanging indent.)

Is it possible to change DistributionSourcePackageActionMenu.links to a tuple instead of a list?

review: Needs Fixing (code an ui)
Revision history for this message
Edwin Grubbs (edwin-grubbs) wrote :
Download full text (22.3 KiB)

Hi Curtis,

Thanks for the review.

> Hi Edwin.
>
> I really like the hanging indent presentation. Thanks for choosing to work on
> the wrapping issue. I think the CSS needs tuning:
> http://people.canonical.com/~curtis/clipped-icons.png shows the clipped icons.
> I am not sure if we need to increase the padding of the <li> or if we need to
> increase the line-height of the <a>.

I fixed the icon clipping, and I tested browser font sizes from 9pt to 16pt.

> style.css is deprecated (We should have started removing it this release, but
> oopses got in the way). Your changes should be in style-3.0.css. We do not
> write styles for ids because they are harder to reuse. I like this CSS rule
> and am sure we can use it elsewhere. Change the rule to work with a class or
> element. For example, if you use `.side a.sprite` you will fix subscribers
> lists too! (The 'Launchpad code reviewers from Canonical' subscriber to this
> review will probably be easier to read if it was a hanging indent.)

I wasted a bunch of time trying to come up with a universal rule. I got it to work perfectly on the source package page, but it caused the bugtask index page to go haywire. I added a css class called "vertical", since I realized that the indentation to the left of the the icon is really only beneficial when the sprite links are in columns.

> Is it possible to change DistributionSourcePackageActionMenu.links to a tuple
> instead of a list?

Fixed.

Incremental diff:
{{{
=== modified file 'lib/canonical/launchpad/icing/style-3-0.css'
--- lib/canonical/launchpad/icing/style-3-0.css 2009-10-24 16:58:01 +0000
+++ lib/canonical/launchpad/icing/style-3-0.css 2009-10-29 21:32:09 +0000
@@ -999,3 +999,163 @@
     vertical-align: middle;
     padding: 1em 1em 1em 0;
 }
+
+/* == Sprites == */
+.sprite {
+ padding: 2px 0 5px 18px;
+ line-height: 18px;
+}
+.vertical .sprite {
+ /* XXX: EdwinGrubbs 2009-10-29 bug=463032
+ The reduced padding is only necessary to prevent parts of the
+ adjacent sprites in the consolidated image from appearing
+ when the line wraps and the default font size is 16.
+ */
+ padding-bottom: 0px;
+ display: inline-block;
+ min-height: 16px;
+}
+.vertical .sprite:first-line {
+ line-height: 12px;
+}
+.sprite-after {padding: 2px 18px 0 0;}
+
+/* XXX: EdwinGrubbs 2009-07-27 bug=405476
+ * Override the .yui-picker-results style, so that the next icon
+ * in the sprite file won't appear for tall list items.
+ */
+.yui-picker-results li.sprite {
+ padding:2px 0 0 18px;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.add {background:url(icon-sprites) 0 0 no-repeat;}
+.edit {background:url(icon-sprites) 0 -32px no-repeat;}
+.remove {background:url(icon-sprites) 0 -64px no-repeat;}
+.info {background:url(icon-sprites) 0 -96px no-repeat;}
+.question {background:url(icon-sprites) 0 -128px no-repeat;}
+.download-icon {background:url(icon-sprites) 0 -160px no-repeat;}
+.download {background:url(icon-sprites) 0 -160px no-repeat;}
+.search-icon {background:url(icon-sprites) 0 -187px no-repeat;}
+.no {background:url(icon-sprites) 0 -224px no-repeat;}
+.yes {background:url(icon-sprites) 0 -256px no-repeat...

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

Thank you very much for the CSS clean up. This looks good to land.

review: Approve (code an ui)

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-10-24 16:58:01 +0000
3+++ lib/canonical/launchpad/icing/style-3-0.css 2009-10-29 21:51:15 +0000
4@@ -999,3 +999,163 @@
5 vertical-align: middle;
6 padding: 1em 1em 1em 0;
7 }
8+
9+/* == Sprites == */
10+.sprite {
11+ padding: 2px 0 5px 18px;
12+ line-height: 18px;
13+}
14+.vertical .sprite {
15+ /* XXX: EdwinGrubbs 2009-10-29 bug=463032
16+ The reduced padding is only necessary to prevent parts of the
17+ adjacent sprites in the consolidated image from appearing
18+ when the line wraps and the default font size is 16.
19+ */
20+ padding-bottom: 0px;
21+ display: inline-block;
22+ min-height: 16px;
23+}
24+.vertical .sprite:first-line {
25+ line-height: 12px;
26+}
27+.sprite-after {padding: 2px 18px 0 0;}
28+
29+/* XXX: EdwinGrubbs 2009-07-27 bug=405476
30+ * Override the .yui-picker-results style, so that the next icon
31+ * in the sprite file won't appear for tall list items.
32+ */
33+.yui-picker-results li.sprite {
34+ padding:2px 0 0 18px;
35+ white-space: nowrap;
36+ overflow: hidden;
37+}
38+
39+.add {background:url(icon-sprites) 0 0 no-repeat;}
40+.edit {background:url(icon-sprites) 0 -32px no-repeat;}
41+.remove {background:url(icon-sprites) 0 -64px no-repeat;}
42+.info {background:url(icon-sprites) 0 -96px no-repeat;}
43+.question {background:url(icon-sprites) 0 -128px no-repeat;}
44+.download-icon {background:url(icon-sprites) 0 -160px no-repeat;}
45+.download {background:url(icon-sprites) 0 -160px no-repeat;}
46+.search-icon {background:url(icon-sprites) 0 -187px no-repeat;}
47+.no {background:url(icon-sprites) 0 -224px no-repeat;}
48+.yes {background:url(icon-sprites) 0 -256px no-repeat;}
49+.crowd {background:url(icon-sprites) 0 -288px no-repeat;}
50+.person {background:url(icon-sprites) 0 -320px no-repeat;}
51+.person-tabs {background:url(icon-sprites) 5px -314px no-repeat;}
52+.person-badge {background:url(icon-sprites) 0 -352px no-repeat;}
53+.team {background:url(icon-sprites) 0 -384px no-repeat;}
54+.team-badge {background:url(icon-sprites) 0 -416px no-repeat;}
55+.arrowRight {background:url(icon-sprites) 0 -448px no-repeat;}
56+.treeCollapsed {background:url(icon-sprites) 0 -480px no-repeat;}
57+.treeExpanded {background:url(icon-sprites) 0 -512px no-repeat;}
58+.branch, .bzr-favicon {background:url(icon-sprites) 0 -544px no-repeat;}
59+.bzr-favicon {background:url(icon-sprites) 5px -538px no-repeat;}
60+.distribution {background:url(icon-sprites) 0 -576px no-repeat;}
61+.package-source {background:url(icon-sprites) 0 -608px no-repeat;}
62+.milestone {background:url(icon-sprites) 0 -640px no-repeat;}
63+.language {background:url(icon-sprites) 0 -672px no-repeat;}
64+.external-link {background:url(icon-sprites) 0 -704px no-repeat;}
65+.mail {background:url(icon-sprites) 0 -736px no-repeat;}
66+.cve {background:url(icon-sprites) 0 -768px no-repeat;}
67+.cves {float: right; text-align: right;}
68+.bug {background:url(icon-sprites) 0 -800px no-repeat;}
69+.bug-critical {background:url(icon-sprites) 0 -832px no-repeat;}
70+.bug-high {background:url(icon-sprites) 0 -864px no-repeat;}
71+.bug-medium {background:url(icon-sprites) 0 -896px no-repeat;}
72+.bug-low {background:url(icon-sprites) 0 -928px no-repeat;}
73+.bug-wishlist {background:url(icon-sprites) 0 -960px no-repeat;}
74+.blueprint {background:url(icon-sprites) 0 -992px no-repeat;}
75+.blueprint-essential {background:url(icon-sprites) 0 -1024px no-repeat;}
76+.blueprint-high {background:url(icon-sprites) 0 -1056px no-repeat;}
77+.blueprint-medium {background:url(icon-sprites) 0 -1088px no-repeat;}
78+.blueprint-low {background:url(icon-sprites) 0 -1120px no-repeat;}
79+.blueprint-undefined {background:url(icon-sprites) 0 -1152px no-repeat;}
80+.blueprint-not {background:url(icon-sprites) 0 -1184px no-repeat;}
81+.rss {background:url(icon-sprites) 0 -1216px no-repeat;}
82+.ubuntu-logo {background:url(icon-sprites-2) 0 0px no-repeat;}
83+.person-inactive {background:url(icon-sprites-2) 0 -32px no-repeat;}
84+.person-inactive-badge {background:url(icon-sprites-2) 0 -64px no-repeat;}
85+.mentoring {background:url(icon-sprites-2) 0 -96px no-repeat;}
86+.undecided {background:url(icon-sprites-2) 0 -128px no-repeat;}
87+.error {background:url(icon-sprites-2) 0 -160px no-repeat;}
88+.cancel {background:url(icon-sprites-2) 0 -192px no-repeat;}
89+.confirm {background:url(icon-sprites-2) 0 -224px no-repeat;}
90+.flame {background:url(icon-sprites-2) 0 -256px no-repeat;}
91+.bug-undecided {background:url(icon-sprites-2) 0 -288px no-repeat;}
92+.bug-remote {background:url(icon-sprites-2) 0 -320px no-repeat;}
93+.bug-unknown {background:url(icon-sprites-2) 0 -352px no-repeat;}
94+.bug-dupe {background:url(icon-sprites-2) 0 -384px no-repeat;}
95+.bug-tracker {background:url(icon-sprites-2) 0 -416px no-repeat;}
96+.package-binary {background:url(icon-sprites-2) 0 -448px no-repeat;}
97+.retry {background:url(icon-sprites-2) 0 -480px no-repeat;}
98+.distribution-badge {background:url(icon-sprites-2) 0 -512px no-repeat;}
99+.project-badge {background:url(icon-sprites-2) 0 -544px no-repeat;}
100+.project {background:url(icon-sprites-2) 0 -576px no-repeat;}
101+.product-badge {background:url(icon-sprites-2) 0 -608px no-repeat;}
102+.product {background:url(icon-sprites-2) 0 -640px no-repeat;}
103+.read-only {background:url(icon-sprites-2) 0 -672px no-repeat;}
104+.warning-icon, .security {background:url(icon-sprites-2) 0 -704px no-repeat;}
105+.private {background:url(icon-sprites-2) 0 -736px no-repeat;}
106+.meeting {background:url(icon-sprites-2) 0 -768px no-repeat;}
107+.translate-icon {background:url(icon-sprites-2) 0 -800px no-repeat;}
108+.translation-file {background:url(icon-sprites-2) 0 -832px no-repeat;}
109+.translation-template {background:url(icon-sprites-2) 0 -864px no-repeat;}
110+.trash-icon {background:url(icon-sprites-2) 0 -896px no-repeat;}
111+.stop {background:url(icon-sprites-2) 0 -928px no-repeat;}
112+.list {background:url(icon-sprites-2) 0 -992px no-repeat;}
113+.bullet {background:url(icon-sprites-2) 0 -1024px no-repeat;}
114+.zoom-in {background:url(icon-sprites-2) 0 -1056px no-repeat;}
115+.zoom-out {background:url(icon-sprites-2) 0 -1088px no-repeat;}
116+.architecture {background:url(icon-sprites-2) 0 -1120px no-repeat;}
117+.ppa-icon {background:url(icon-sprites-2) 0 -1147px no-repeat;}
118+.ppa-icon-inactive {background:url(icon-sprites-2) 0 -1171px no-repeat;}
119+
120+.bug-status-expand {background:url(icon-sprites-3) 0 -10px no-repeat;}
121+.merge-proposal {
122+ background:url(icon-sprites-3) 0 -46px no-repeat;
123+ padding-left: 22px}
124+.build-superseded {background:url(icon-sprites-3) 0 -80px no-repeat;}
125+.build-sucess {background:url(icon-sprites-3) 0 -112px no-repeat;}
126+.build-needed {background:url(icon-sprites-3) 0 -144px no-repeat;}
127+.build-failure {background:url(icon-sprites-3) 0 -176px no-repeat;}
128+.build-depwait {background:url(icon-sprites-3) 0 -208px no-repeat;}
129+.arrowUp {background:url(icon-sprites-3) 0 -240px no-repeat;}
130+.arrowDown {background:url(icon-sprites-3) 0 -256px no-repeat;}
131+.arrowStart {background:url(icon-sprites-3) 0 -288px no-repeat;}
132+.arrowEnd {background:url(icon-sprites-3) 0 -304px no-repeat;}
133+.arrowTop {background:url(icon-sprites-3) 0 -328px no-repeat;}
134+.arrowBottom {background:url(icon-sprites-3) 0 -356px no-repeat;}
135+.arrowLeft {background:url(icon-sprites-3) 0 -384px no-repeat;}
136+.bluebar {background:url(icon-sprites-3) 0 -416px repeat-x;}
137+.redbar {background:url(icon-sprites-3) 0 -505px repeat-x;}
138+.greenbar {background:url(icon-sprites-3) 0 -446px repeat-x;}
139+.purplebar {background:url(icon-sprites-3) 0 -476px repeat-x;}
140+.favorite-yes {background:url(icon-sprites-3) 0 -530px no-repeat;}
141+
142+/*large*/
143+.large-branch {background:url(icon-sprites-large) 0 0 no-repeat;}
144+.large-warning {background:url(icon-sprites-large) 0 -48px no-repeat;}
145+.large-crowd {background:url(icon-sprites-large) 0 -96px no-repeat;}
146+.large-download {background:url(icon-sprites-large) 0 -144px no-repeat;}
147+.large-error {background:url(icon-sprites-large) 0 -144px no-repeat;}
148+.large-flame {background:url(icon-sprites-large) 0 -192px no-repeat;}
149+.large-download {background:url(icon-sprites-large) 0 -240px no-repeat;}
150+.large-info {background:url(icon-sprites-large) 0 -288px no-repeat;}
151+.large-launchpad {background:url(icon-sprites-large) 0 -336px no-repeat;}
152+.large-mentoring {background:url(icon-sprites-large) 0 -384px no-repeat;}
153+.large-proposal {background:url(icon-sprites-large) 0 -432px no-repeat;}
154+.large-trash {background:url(icon-sprites-large) 0 -480px no-repeat;}
155+.large-private {background:url(icon-sprites-large) 0 -528px no-repeat;}
156+
157+/*logo*/
158+.logo-launchpad {background:url(icon-sprites-logo) 0 0 no-repeat;}
159+.logo-distribution {background:url(icon-sprites-logo) 0 -80px no-repeat;}
160+.logo-project {background:url(icon-sprites-logo) 0 -160px no-repeat;}
161+.logo-product {background:url(icon-sprites-logo) 0 -240 no-repeat;}
162+.logo-person {background:url(icon-sprites-logo) 0 -320 no-repeat;}
163+.logo-inactive {background:url(icon-sprites-logo-2) 0 0 no-repeat;}
164+.logo-team {background:url(icon-sprites-logo-2) 0 -80px no-repeat;}
165+.logo-meeting {background:url(icon-sprites-logo-2) 0 -160px no-repeat;}
166+.logo-flame {background:url(icon-sprites-logo-2) 0 -240 no-repeat;}
167+.logo-trash {background:url(icon-sprites-logo-2) 0 -320 no-repeat;}
168
169=== modified file 'lib/canonical/launchpad/icing/style.css'
170--- lib/canonical/launchpad/icing/style.css 2009-10-16 20:16:34 +0000
171+++ lib/canonical/launchpad/icing/style.css 2009-10-29 21:51:15 +0000
172@@ -34,9 +34,6 @@
173
174 /* == Sprites == */
175
176-#subscribers-direct a, #portlet-subscribers a, #subscribers-indirect a, .bug-branch-summary {
177- line-height: 1.4em;
178-}
179 ul.breadcrumbs a.bzr-favicon, ul.breadcrumbs a.person-tabs {
180 padding: 8px 18px 0 23px;
181 }
182@@ -52,150 +49,6 @@
183 }
184 span.invisible-link {display:none;}
185 span.invisible {left:-9999em;display:block;}
186-.sprite {padding:2px 0 0 18px;}
187-.sprite-after {padding: 2px 18px 0 0;}
188-
189-/* XXX: EdwinGrubbs 2009-07-27 bug=405476
190- * Override the .yui-picker-results style, so that the next icon
191- * in the sprite file won't appear for tall list items.
192- */
193-.yui-picker-results li.sprite {
194- padding:2px 0 0 18px;
195- white-space: nowrap;
196- overflow: hidden;
197-}
198-
199-.add {background:url(icon-sprites) 0 0 no-repeat;}
200-.edit {background:url(icon-sprites) 0 -32px no-repeat;}
201-.remove {background:url(icon-sprites) 0 -64px no-repeat;}
202-.info {background:url(icon-sprites) 0 -96px no-repeat;}
203-.question {background:url(icon-sprites) 0 -128px no-repeat;}
204-.download-icon {background:url(icon-sprites) 0 -160px no-repeat;}
205-.download {background:url(icon-sprites) 0 -160px no-repeat;}
206-.search-icon {background:url(icon-sprites) 0 -187px no-repeat;}
207-.no {background:url(icon-sprites) 0 -224px no-repeat;}
208-.yes {background:url(icon-sprites) 0 -256px no-repeat;}
209-.crowd {background:url(icon-sprites) 0 -288px no-repeat;}
210-.person {background:url(icon-sprites) 0 -320px no-repeat;}
211-.person-tabs {background:url(icon-sprites) 5px -314px no-repeat;}
212-.person-badge {background:url(icon-sprites) 0 -352px no-repeat;}
213-.team {background:url(icon-sprites) 0 -384px no-repeat;}
214-.team-badge {background:url(icon-sprites) 0 -416px no-repeat;}
215-.arrowRight {background:url(icon-sprites) 0 -448px no-repeat;}
216-.treeCollapsed {background:url(icon-sprites) 0 -480px no-repeat;}
217-.treeExpanded {background:url(icon-sprites) 0 -512px no-repeat;}
218-.branch, .bzr-favicon {background:url(icon-sprites) 0 -544px no-repeat;}
219-.bzr-favicon {background:url(icon-sprites) 5px -538px no-repeat;}
220-.distribution {background:url(icon-sprites) 0 -576px no-repeat;}
221-.package-source {background:url(icon-sprites) 0 -608px no-repeat;}
222-.milestone {background:url(icon-sprites) 0 -640px no-repeat;}
223-.language {background:url(icon-sprites) 0 -672px no-repeat;}
224-.external-link {background:url(icon-sprites) 0 -704px no-repeat;}
225-.mail {background:url(icon-sprites) 0 -736px no-repeat;}
226-.cve {background:url(icon-sprites) 0 -768px no-repeat;}
227-.cves {float: right; text-align: right;}
228-.bug {background:url(icon-sprites) 0 -800px no-repeat;}
229-.bug-critical {background:url(icon-sprites) 0 -832px no-repeat;}
230-.bug-high {background:url(icon-sprites) 0 -864px no-repeat;}
231-.bug-medium {background:url(icon-sprites) 0 -896px no-repeat;}
232-.bug-low {background:url(icon-sprites) 0 -928px no-repeat;}
233-.bug-wishlist {background:url(icon-sprites) 0 -960px no-repeat;}
234-.blueprint {background:url(icon-sprites) 0 -992px no-repeat;}
235-.blueprint-essential {background:url(icon-sprites) 0 -1024px no-repeat;}
236-.blueprint-high {background:url(icon-sprites) 0 -1056px no-repeat;}
237-.blueprint-medium {background:url(icon-sprites) 0 -1088px no-repeat;}
238-.blueprint-low {background:url(icon-sprites) 0 -1120px no-repeat;}
239-.blueprint-undefined {background:url(icon-sprites) 0 -1152px no-repeat;}
240-.blueprint-not {background:url(icon-sprites) 0 -1184px no-repeat;}
241-.rss {background:url(icon-sprites) 0 -1216px no-repeat;}
242-.ubuntu-logo {background:url(icon-sprites-2) 0 0px no-repeat;}
243-.person-inactive {background:url(icon-sprites-2) 0 -32px no-repeat;}
244-.person-inactive-badge {background:url(icon-sprites-2) 0 -64px no-repeat;}
245-.mentoring {background:url(icon-sprites-2) 0 -96px no-repeat;}
246-.undecided {background:url(icon-sprites-2) 0 -128px no-repeat;}
247-.error {background:url(icon-sprites-2) 0 -160px no-repeat;}
248-.cancel {background:url(icon-sprites-2) 0 -192px no-repeat;}
249-.confirm {background:url(icon-sprites-2) 0 -224px no-repeat;}
250-.flame {background:url(icon-sprites-2) 0 -256px no-repeat;}
251-.bug-undecided {background:url(icon-sprites-2) 0 -288px no-repeat;}
252-.bug-remote {background:url(icon-sprites-2) 0 -320px no-repeat;}
253-.bug-unknown {background:url(icon-sprites-2) 0 -352px no-repeat;}
254-.bug-dupe {background:url(icon-sprites-2) 0 -384px no-repeat;}
255-.bug-tracker {background:url(icon-sprites-2) 0 -416px no-repeat;}
256-.package-binary {background:url(icon-sprites-2) 0 -448px no-repeat;}
257-.retry {background:url(icon-sprites-2) 0 -480px no-repeat;}
258-.distribution-badge {background:url(icon-sprites-2) 0 -512px no-repeat;}
259-.project-badge {background:url(icon-sprites-2) 0 -544px no-repeat;}
260-.project {background:url(icon-sprites-2) 0 -576px no-repeat;}
261-.product-badge {background:url(icon-sprites-2) 0 -608px no-repeat;}
262-.product {background:url(icon-sprites-2) 0 -640px no-repeat;}
263-.read-only {background:url(icon-sprites-2) 0 -672px no-repeat;}
264-.warning-icon, .security {background:url(icon-sprites-2) 0 -704px no-repeat;}
265-.private {background:url(icon-sprites-2) 0 -736px no-repeat;}
266-.meeting {background:url(icon-sprites-2) 0 -768px no-repeat;}
267-.translate-icon {background:url(icon-sprites-2) 0 -800px no-repeat;}
268-.translation-file {background:url(icon-sprites-2) 0 -832px no-repeat;}
269-.translation-template {background:url(icon-sprites-2) 0 -864px no-repeat;}
270-.trash-icon {background:url(icon-sprites-2) 0 -896px no-repeat;}
271-.stop {background:url(icon-sprites-2) 0 -928px no-repeat;}
272-.list {background:url(icon-sprites-2) 0 -992px no-repeat;}
273-.bullet {background:url(icon-sprites-2) 0 -1024px no-repeat;}
274-.zoom-in {background:url(icon-sprites-2) 0 -1056px no-repeat;}
275-.zoom-out {background:url(icon-sprites-2) 0 -1088px no-repeat;}
276-.architecture {background:url(icon-sprites-2) 0 -1120px no-repeat;}
277-.ppa-icon {background:url(icon-sprites-2) 0 -1147px no-repeat;}
278-.ppa-icon-inactive {background:url(icon-sprites-2) 0 -1171px no-repeat;}
279-
280-.bug-status-expand {background:url(icon-sprites-3) 0 -10px no-repeat;}
281-.merge-proposal {
282- background:url(icon-sprites-3) 0 -46px no-repeat;
283- padding-left: 22px}
284-.build-superseded {background:url(icon-sprites-3) 0 -80px no-repeat;}
285-.build-sucess {background:url(icon-sprites-3) 0 -112px no-repeat;}
286-.build-needed {background:url(icon-sprites-3) 0 -144px no-repeat;}
287-.build-failure {background:url(icon-sprites-3) 0 -176px no-repeat;}
288-.build-depwait {background:url(icon-sprites-3) 0 -208px no-repeat;}
289-.arrowUp {background:url(icon-sprites-3) 0 -240px no-repeat;}
290-.arrowDown {background:url(icon-sprites-3) 0 -256px no-repeat;}
291-.arrowStart {background:url(icon-sprites-3) 0 -288px no-repeat;}
292-.arrowEnd {background:url(icon-sprites-3) 0 -304px no-repeat;}
293-.arrowTop {background:url(icon-sprites-3) 0 -328px no-repeat;}
294-.arrowBottom {background:url(icon-sprites-3) 0 -356px no-repeat;}
295-.arrowLeft {background:url(icon-sprites-3) 0 -384px no-repeat;}
296-.bluebar {background:url(icon-sprites-3) 0 -416px repeat-x;}
297-.redbar {background:url(icon-sprites-3) 0 -505px repeat-x;}
298-.greenbar {background:url(icon-sprites-3) 0 -446px repeat-x;}
299-.purplebar {background:url(icon-sprites-3) 0 -476px repeat-x;}
300-.favorite-yes {background:url(icon-sprites-3) 0 -530px no-repeat;}
301-
302-/*large*/
303-.large-branch {background:url(icon-sprites-large) 0 0 no-repeat;}
304-.large-warning {background:url(icon-sprites-large) 0 -48px no-repeat;}
305-.large-crowd {background:url(icon-sprites-large) 0 -96px no-repeat;}
306-.large-download {background:url(icon-sprites-large) 0 -144px no-repeat;}
307-.large-error {background:url(icon-sprites-large) 0 -144px no-repeat;}
308-.large-flame {background:url(icon-sprites-large) 0 -192px no-repeat;}
309-.large-download {background:url(icon-sprites-large) 0 -240px no-repeat;}
310-.large-info {background:url(icon-sprites-large) 0 -288px no-repeat;}
311-.large-launchpad {background:url(icon-sprites-large) 0 -336px no-repeat;}
312-.large-mentoring {background:url(icon-sprites-large) 0 -384px no-repeat;}
313-.large-proposal {background:url(icon-sprites-large) 0 -432px no-repeat;}
314-.large-trash {background:url(icon-sprites-large) 0 -480px no-repeat;}
315-.large-private {background:url(icon-sprites-large) 0 -528px no-repeat;}
316-
317-/*logo*/
318-.logo-launchpad {background:url(icon-sprites-logo) 0 0 no-repeat;}
319-.logo-distribution {background:url(icon-sprites-logo) 0 -80px no-repeat;}
320-.logo-project {background:url(icon-sprites-logo) 0 -160px no-repeat;}
321-.logo-product {background:url(icon-sprites-logo) 0 -240 no-repeat;}
322-.logo-person {background:url(icon-sprites-logo) 0 -320 no-repeat;}
323-.logo-inactive {background:url(icon-sprites-logo-2) 0 0 no-repeat;}
324-.logo-team {background:url(icon-sprites-logo-2) 0 -80px no-repeat;}
325-.logo-meeting {background:url(icon-sprites-logo-2) 0 -160px no-repeat;}
326-.logo-flame {background:url(icon-sprites-logo-2) 0 -240 no-repeat;}
327-.logo-trash {background:url(icon-sprites-logo-2) 0 -320 no-repeat;}
328-
329-
330
331 /* == Things browsers should do but don't == */
332
333@@ -1453,11 +1306,6 @@
334 padding-left: 18px;
335 }
336
337-a.info {
338- background: url('/@@/info') no-repeat scroll left center;
339- padding-left: 18px;
340-}
341-
342 /* == Application-specific styles == */
343
344 #application-footer strong {font-weight: normal;}
345
346=== modified file 'lib/lp/app/templates/navigationmenu-actions.pt'
347--- lib/lp/app/templates/navigationmenu-actions.pt 2009-08-06 19:14:40 +0000
348+++ lib/lp/app/templates/navigationmenu-actions.pt 2009-10-29 21:51:15 +0000
349@@ -1,7 +1,7 @@
350 <div
351 xmlns:tal="http://xml.zope.org/namespaces/tal"
352 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
353- id="global-actions" class="portlet"
354+ id="global-actions" class="portlet vertical"
355 tal:condition="view/enabled_links">
356 <ul>
357 <li tal:repeat="link view/enabled_links">
358
359=== modified file 'lib/lp/bugs/templates/bug-portlet-actions.pt'
360--- lib/lp/bugs/templates/bug-portlet-actions.pt 2009-09-22 10:52:10 +0000
361+++ lib/lp/bugs/templates/bug-portlet-actions.pt 2009-10-29 21:51:15 +0000
362@@ -3,7 +3,7 @@
363 xmlns:metal="http://xml.zope.org/namespaces/metal"
364 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
365 id="portlet-actions"
366- class="portlet"
367+ class="portlet vertical"
368 tal:define="context_menu context/menu:context"
369 >
370 <div id="duplicate-actions">
371
372=== modified file 'lib/lp/bugs/templates/bug-portlet-specs.pt'
373--- lib/lp/bugs/templates/bug-portlet-specs.pt 2009-09-10 20:18:28 +0000
374+++ lib/lp/bugs/templates/bug-portlet-specs.pt 2009-10-29 21:51:15 +0000
375@@ -2,7 +2,7 @@
376 xmlns:tal="http://xml.zope.org/namespaces/tal"
377 xmlns:metal="http://xml.zope.org/namespaces/metal"
378 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
379- class="portlet" id="portlet-blueprints"
380+ class="portlet vertical" id="portlet-blueprints"
381 tal:condition="context/specifications">
382 <h2>Related blueprints</h2>
383 <ul>
384
385=== modified file 'lib/lp/bugs/templates/bug-portlet-subscribers.pt'
386--- lib/lp/bugs/templates/bug-portlet-subscribers.pt 2009-07-17 17:59:07 +0000
387+++ lib/lp/bugs/templates/bug-portlet-subscribers.pt 2009-10-29 21:51:15 +0000
388@@ -2,7 +2,7 @@
389 xmlns:tal="http://xml.zope.org/namespaces/tal"
390 xmlns:metal="http://xml.zope.org/namespaces/metal"
391 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
392- class="portlet"
393+ class="portlet vertical"
394 id="portlet-subscribers"
395 metal:define-macro="custom"
396 >
397
398=== modified file 'lib/lp/registry/browser/distributionsourcepackage.py'
399--- lib/lp/registry/browser/distributionsourcepackage.py 2009-10-24 16:58:01 +0000
400+++ lib/lp/registry/browser/distributionsourcepackage.py 2009-10-29 21:51:15 +0000
401@@ -171,7 +171,11 @@
402 usedfor = IDistributionSourcePackageActionMenu
403 facet = 'overview'
404 title = 'Actions'
405- links = ['change_log', 'subscribe', 'edit']
406+ links = ('publishing_history', 'change_log', 'subscribe', 'edit')
407+
408+ def publishing_history(self):
409+ text = 'View full publishing history'
410+ return Link('+publishinghistory', text, icon="info")
411
412 def change_log(self):
413 text = 'View full change log'
414
415=== modified file 'lib/lp/registry/stories/distribution/xx-distribution-packages.txt'
416--- lib/lp/registry/stories/distribution/xx-distribution-packages.txt 2009-09-23 14:58:12 +0000
417+++ lib/lp/registry/stories/distribution/xx-distribution-packages.txt 2009-10-29 21:51:15 +0000
418@@ -303,6 +303,7 @@
419
420 >>> print extract_text(
421 ... find_tag_by_id(user_browser.contents, 'global-actions'))
422+ View full publishing history
423 View full change log
424 Subscribe to bug mail
425
426@@ -558,11 +559,10 @@
427 Publishing History
428 ------------------
429
430-Users can inspect the full publishing history by clicking on a link at
431-the bottom of the 'packages_list' section in the distribution source
432-package index page.
433+Users can inspect the full publishing history by clicking on a link in
434+the action menu on the the distribution source package index page.
435
436- >>> anon_browser.getLink('See full publishing history').click()
437+ >>> anon_browser.getLink('View full publishing history').click()
438
439 The full publishing history is presented in a new page, with the
440 appropriate title and main heading, but preserving the distribution
441
442=== modified file 'lib/lp/registry/templates/distributionsourcepackage-index.pt'
443--- lib/lp/registry/templates/distributionsourcepackage-index.pt 2009-10-23 12:53:21 +0000
444+++ lib/lp/registry/templates/distributionsourcepackage-index.pt 2009-10-29 21:51:15 +0000
445@@ -219,10 +219,6 @@
446 tal:content="string:LP.client.cache['archive_context_url'] = '${archive/fmt:url}';"></script>
447 <metal:js use-macro="archive/@@+macros/expandable-table-js"/>
448
449- <p style="float:right; padding-top:1em">
450- <a href="+publishinghistory">See full publishing history</a>
451- </p>
452-
453 </div>
454
455 <div class="yui-u">