Merge lp://staging/~intellectronica/launchpad/bugs-index-redesign into lp://staging/launchpad
- bugs-index-redesign
- Merge into devel
Proposed by
Eleanor Berger
Status: | Merged |
---|---|
Approved by: | Graham Binns |
Approved revision: | no longer in the source branch. |
Merged at revision: | not available |
Proposed branch: | lp://staging/~intellectronica/launchpad/bugs-index-redesign |
Merge into: | lp://staging/launchpad |
Diff against target: | None lines |
To merge this branch: | bzr merge lp://staging/~intellectronica/launchpad/bugs-index-redesign |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Graham Binns (community) | code | Approve | |
Canonical Launchpad Engineering | code | Pending | |
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Eleanor Berger (intellectronica) wrote : | # |
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Graham Binns (gmb) wrote : | # |
This branch is excellent; I've no complaints. r=me; awesome stuff!
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.css' | |||
2 | --- lib/canonical/launchpad/icing/style.css 2009-09-16 10:03:52 +0000 | |||
3 | +++ lib/canonical/launchpad/icing/style.css 2009-09-18 14:43:52 +0000 | |||
4 | @@ -2228,6 +2228,30 @@ | |||
5 | 2228 | .questionstatusEXPIRED {color: #666;} /* dark grey */ | 2228 | .questionstatusEXPIRED {color: #666;} /* dark grey */ |
6 | 2229 | .questionstatusINVALID {color: #c00;} /* red */ | 2229 | .questionstatusINVALID {color: #c00;} /* red */ |
7 | 2230 | 2230 | ||
8 | 2231 | .search-box { | ||
9 | 2232 | text-align: left; | ||
10 | 2233 | float: left; | ||
11 | 2234 | border:1px solid #d6d6d6; | ||
12 | 2235 | margin: 0.5em 0 0.5em 0; | ||
13 | 2236 | color: #717171; | ||
14 | 2237 | padding: 8px; | ||
15 | 2238 | -moz-border-radius: 5px; | ||
16 | 2239 | -o-border-radius: 5px; | ||
17 | 2240 | -webkit-border-radius: 5px; | ||
18 | 2241 | } | ||
19 | 2242 | |||
20 | 2243 | .search-box form.primary.search { | ||
21 | 2244 | margin: 0.5em; | ||
22 | 2245 | } | ||
23 | 2246 | |||
24 | 2247 | .bug-links td.bugs-count { | ||
25 | 2248 | text-align: right; | ||
26 | 2249 | padding-right: 0.5em; | ||
27 | 2250 | } | ||
28 | 2251 | |||
29 | 2252 | .bug-links td.bugs-link { | ||
30 | 2253 | text-align: left; | ||
31 | 2254 | } | ||
32 | 2231 | 2255 | ||
33 | 2232 | /* --- Other --- */ | 2256 | /* --- Other --- */ |
34 | 2233 | 2257 | ||
35 | 2234 | 2258 | ||
36 | === modified file 'lib/lp/bugs/browser/bugtarget.py' | |||
37 | --- lib/lp/bugs/browser/bugtarget.py 2009-09-10 12:47:31 +0000 | |||
38 | +++ lib/lp/bugs/browser/bugtarget.py 2009-09-18 17:43:21 +0000 | |||
39 | @@ -1200,6 +1200,13 @@ | |||
40 | 1200 | BugTaskStatus.UNKNOWN: 'purple', | 1200 | BugTaskStatus.UNKNOWN: 'purple', |
41 | 1201 | } | 1201 | } |
42 | 1202 | 1202 | ||
43 | 1203 | override_title_breadcrumbs = True | ||
44 | 1204 | |||
45 | 1205 | @property | ||
46 | 1206 | def label(self): | ||
47 | 1207 | """The display label for the view.""" | ||
48 | 1208 | return 'Bugs in %s' % self.context.title | ||
49 | 1209 | |||
50 | 1203 | def initialize(self): | 1210 | def initialize(self): |
51 | 1204 | BugTaskSearchListingView.initialize(self) | 1211 | BugTaskSearchListingView.initialize(self) |
52 | 1205 | bug_statuses_to_show = list(UNRESOLVED_BUGTASK_STATUSES) | 1212 | bug_statuses_to_show = list(UNRESOLVED_BUGTASK_STATUSES) |
53 | @@ -1211,39 +1218,6 @@ | |||
54 | 1211 | BugCountDataItem(status.title, count, self.status_color[status]) | 1218 | BugCountDataItem(status.title, count, self.status_color[status]) |
55 | 1212 | for status, count in bug_counts] | 1219 | for status, count in bug_counts] |
56 | 1213 | 1220 | ||
57 | 1214 | def getChartJavascript(self): | ||
58 | 1215 | """Return a snippet of Javascript that draws a pie chart.""" | ||
59 | 1216 | # XXX: Bjorn Tillenius 2007-02-13: | ||
60 | 1217 | # This snippet doesn't work in IE, since (I think) there | ||
61 | 1218 | # has to be a delay between creating the canvas element and | ||
62 | 1219 | # using it to draw the chart. | ||
63 | 1220 | js_template = """ | ||
64 | 1221 | function drawGraph() { | ||
65 | 1222 | var options = { | ||
66 | 1223 | "drawBackground": false, | ||
67 | 1224 | "colorScheme": [%(color_list)s], | ||
68 | 1225 | "xTicks": [%(label_list)s]}; | ||
69 | 1226 | var data = [%(data_list)s]; | ||
70 | 1227 | var plotter = PlotKit.EasyPlot( | ||
71 | 1228 | "pie", options, $("bugs-chart"), [data]); | ||
72 | 1229 | } | ||
73 | 1230 | registerLaunchpadFunction(drawGraph); | ||
74 | 1231 | """ | ||
75 | 1232 | # The color list should inlude only colors for slices that will | ||
76 | 1233 | # be drawn in the pie chart, so colors that don't have any bugs | ||
77 | 1234 | # associated with them. | ||
78 | 1235 | color_list = ', '.join( | ||
79 | 1236 | data_item.color for data_item in self.bug_count_items | ||
80 | 1237 | if data_item.count > 0) | ||
81 | 1238 | label_list = ', '.join([ | ||
82 | 1239 | '{v:%i, label:"%s"}' % (index, data_item.label) | ||
83 | 1240 | for index, data_item in enumerate(self.bug_count_items)]) | ||
84 | 1241 | data_list = ', '.join([ | ||
85 | 1242 | '[%i, %i]' % (index, data_item.count) | ||
86 | 1243 | for index, data_item in enumerate(self.bug_count_items)]) | ||
87 | 1244 | return js_template % dict( | ||
88 | 1245 | color_list=color_list, label_list=label_list, data_list=data_list) | ||
89 | 1246 | |||
90 | 1247 | @property | 1221 | @property |
91 | 1248 | def uses_launchpad_bugtracker(self): | 1222 | def uses_launchpad_bugtracker(self): |
92 | 1249 | """Whether this distro or product tracks bugs in launchpad. | 1223 | """Whether this distro or product tracks bugs in launchpad. |
93 | @@ -1317,6 +1291,24 @@ | |||
94 | 1317 | return tags[:10] | 1291 | return tags[:10] |
95 | 1318 | 1292 | ||
96 | 1319 | @property | 1293 | @property |
97 | 1294 | def tags_cloud_data(self): | ||
98 | 1295 | """The data for rendering a tags cloud""" | ||
99 | 1296 | official_tags = set(self.context.official_bug_tags) | ||
100 | 1297 | tags = self.getUsedBugTagsWithURLs() | ||
101 | 1298 | tags.sort(key=itemgetter('tag')) | ||
102 | 1299 | max_count = float(max([1] + [tag['count'] for tag in tags])) | ||
103 | 1300 | for tag in tags: | ||
104 | 1301 | if tag['tag'] in official_tags: | ||
105 | 1302 | if tag['count'] == 0: | ||
106 | 1303 | tag['factor'] = 1.5 | ||
107 | 1304 | else: | ||
108 | 1305 | tag['factor'] = 1.5 + (tag['count'] / max_count) | ||
109 | 1306 | else: | ||
110 | 1307 | tag['factor'] = 1 + (tag['count'] / max_count) | ||
111 | 1308 | print tags | ||
112 | 1309 | return tags | ||
113 | 1310 | |||
114 | 1311 | @property | ||
115 | 1320 | def show_manage_tags_link(self): | 1312 | def show_manage_tags_link(self): |
116 | 1321 | """Should a link to a "manage official tags" page be shown?""" | 1313 | """Should a link to a "manage official tags" page be shown?""" |
117 | 1322 | return (IOfficialBugTagTargetRestricted.providedBy(self.context) and | 1314 | return (IOfficialBugTagTargetRestricted.providedBy(self.context) and |
118 | 1323 | 1315 | ||
119 | === modified file 'lib/lp/bugs/browser/bugtask.py' | |||
120 | --- lib/lp/bugs/browser/bugtask.py 2009-09-11 20:38:21 +0000 | |||
121 | +++ lib/lp/bugs/browser/bugtask.py 2009-09-18 16:08:07 +0000 | |||
122 | @@ -2683,6 +2683,54 @@ | |||
123 | 2683 | url = "%s/+expirable-bugs" % canonical_url(self.context) | 2683 | url = "%s/+expirable-bugs" % canonical_url(self.context) |
124 | 2684 | return dict(count=count, url=url, label=label) | 2684 | return dict(count=count, url=url, label=label) |
125 | 2685 | 2685 | ||
126 | 2686 | @property | ||
127 | 2687 | def new_bugs_info(self): | ||
128 | 2688 | """Return a dict with new bugs info.""" | ||
129 | 2689 | return dict( | ||
130 | 2690 | count=self.context.new_bugtasks.count, | ||
131 | 2691 | url=get_buglisting_search_filter_url( | ||
132 | 2692 | status=BugTaskStatus.NEW.title)) | ||
133 | 2693 | |||
134 | 2694 | @property | ||
135 | 2695 | def open_bugs_info(self): | ||
136 | 2696 | """Return a dict with open bugs info.""" | ||
137 | 2697 | return dict( | ||
138 | 2698 | count=self.context.open_bugtasks.count, | ||
139 | 2699 | url=canonical_url( | ||
140 | 2700 | self.context, rootsite='bugs', view_name='+bugs')) | ||
141 | 2701 | |||
142 | 2702 | @property | ||
143 | 2703 | def critical_bugs_info(self): | ||
144 | 2704 | """Return a dict with critical bugs info.""" | ||
145 | 2705 | return dict( | ||
146 | 2706 | count=self.context.critical_bugtasks.count, | ||
147 | 2707 | url=get_buglisting_search_filter_url( | ||
148 | 2708 | status=[status.title for status | ||
149 | 2709 | in UNRESOLVED_BUGTASK_STATUSES], | ||
150 | 2710 | importance=BugTaskImportance.CRITICAL.title)) | ||
151 | 2711 | |||
152 | 2712 | @property | ||
153 | 2713 | def my_bugs_info(self): | ||
154 | 2714 | """Return a dict with info on bugs assigned to the user, or None.""" | ||
155 | 2715 | if self.user: | ||
156 | 2716 | return dict( | ||
157 | 2717 | count=self.context.searchTasks( | ||
158 | 2718 | BugTaskSearchParams( | ||
159 | 2719 | user=self.user, assignee=self.user, | ||
160 | 2720 | status=any(*UNRESOLVED_BUGTASK_STATUSES), | ||
161 | 2721 | omit_dupes=True)).count(), | ||
162 | 2722 | url=get_buglisting_search_filter_url(assignee=self.user.name)) | ||
163 | 2723 | else: | ||
164 | 2724 | return None | ||
165 | 2725 | |||
166 | 2726 | @property | ||
167 | 2727 | def hot_bugtasks(self): | ||
168 | 2728 | """Return the 10 most recently updated bugtasks for this target.""" | ||
169 | 2729 | params = BugTaskSearchParams( | ||
170 | 2730 | orderby="-date_last_updated", omit_dupes=True, user=self.user) | ||
171 | 2731 | return list(self.context.searchTasks(params)[:10]) | ||
172 | 2732 | |||
173 | 2733 | |||
174 | 2686 | 2734 | ||
175 | 2687 | class BugNominationsView(BugTaskSearchListingView): | 2735 | class BugNominationsView(BugTaskSearchListingView): |
176 | 2688 | """View for accepting/declining bug nominations.""" | 2736 | """View for accepting/declining bug nominations.""" |
177 | 2689 | 2737 | ||
178 | === modified file 'lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt' | |||
179 | --- lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt 2009-09-10 20:12:12 +0000 | |||
180 | +++ lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt 2009-09-18 16:08:07 +0000 | |||
181 | @@ -11,7 +11,7 @@ | |||
182 | 11 | 11 | ||
183 | 12 | The page has a link to see all open bugs. | 12 | The page has a link to see all open bugs. |
184 | 13 | 13 | ||
186 | 14 | >>> anon_browser.getLink('List all open bugs').click() | 14 | >>> anon_browser.getLink('Open bugs').click() |
187 | 15 | >>> anon_browser.url | 15 | >>> anon_browser.url |
188 | 16 | 'http://bugs.launchpad.dev/ubuntu/+bugs' | 16 | 'http://bugs.launchpad.dev/ubuntu/+bugs' |
189 | 17 | >>> find_tag_by_id(anon_browser.contents, 'buglisting') is not None | 17 | >>> find_tag_by_id(anon_browser.contents, 'buglisting') is not None |
190 | @@ -31,9 +31,7 @@ | |||
191 | 31 | fixed in some other context. | 31 | fixed in some other context. |
192 | 32 | 32 | ||
193 | 33 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') | 33 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') |
197 | 34 | >>> fixed_elsewhere_link = anon_browser.getLink('bugs fixed elsewhere') | 34 | >>> fixed_elsewhere_link = anon_browser.getLink('Bugs fixed elsewhere') |
195 | 35 | >>> fixed_elsewhere_link.text | ||
196 | 36 | '0 bugs fixed elsewhere' | ||
198 | 37 | 35 | ||
199 | 38 | The link takes you to the list of the bugs fixed elsewhere. | 36 | The link takes you to the list of the bugs fixed elsewhere. |
200 | 39 | 37 | ||
201 | @@ -52,9 +50,7 @@ | |||
202 | 52 | It also displays the number of open bugs associated with a CVE. | 50 | It also displays the number of open bugs associated with a CVE. |
203 | 53 | 51 | ||
204 | 54 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') | 52 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') |
208 | 55 | >>> cve_bugs_link = anon_browser.getLink('open CVE bugs') | 53 | >>> cve_bugs_link = anon_browser.getLink('Open CVE bugs') |
206 | 56 | >>> cve_bugs_link.text | ||
207 | 57 | '2 open CVE bugs' | ||
209 | 58 | 54 | ||
210 | 59 | The link takes you to the list of bugs with CVEs linked to them. | 55 | The link takes you to the list of bugs with CVEs linked to them. |
211 | 60 | 56 | ||
212 | @@ -78,9 +74,7 @@ | |||
213 | 78 | 74 | ||
214 | 79 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') | 75 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') |
215 | 80 | >>> expirable_bugs_link = anon_browser.getLink( | 76 | >>> expirable_bugs_link = anon_browser.getLink( |
219 | 81 | ... 'incomplete bugs can expire') | 77 | ... 'Incomplete bugs') |
217 | 82 | >>> expirable_bugs_link.text | ||
218 | 83 | '0 incomplete bugs can expire' | ||
220 | 84 | 78 | ||
221 | 85 | The link goes to the expirable bugs page, where the anonymous user can | 79 | The link goes to the expirable bugs page, where the anonymous user can |
222 | 86 | see which bugs will expire if they are not confirmed. | 80 | see which bugs will expire if they are not confirmed. |
223 | @@ -93,27 +87,8 @@ | |||
224 | 93 | see any link reporting that bugs can expire. | 87 | see any link reporting that bugs can expire. |
225 | 94 | 88 | ||
226 | 95 | >>> anon_browser.open('http://bugs.launchpad.dev/debian') | 89 | >>> anon_browser.open('http://bugs.launchpad.dev/debian') |
229 | 96 | >>> expirable_bugs_link = anon_browser.getLink( | 90 | >>> expirable_bugs_link = anon_browser.getLink('Incomplete bugs') |
228 | 97 | ... 'incomplete bugs can expire') | ||
230 | 98 | Traceback (most recent call last): | 91 | Traceback (most recent call last): |
231 | 99 | ... | 92 | ... |
232 | 100 | LinkNotFoundError | 93 | LinkNotFoundError |
233 | 101 | 94 | ||
234 | 102 | |||
235 | 103 | == Open Bugs Statistics == | ||
236 | 104 | |||
237 | 105 | There's also some statistics about the open bugs for the distribution. | ||
238 | 106 | This is displayed as a chart, which is generated using Javascript, but | ||
239 | 107 | for those browsers not supporting Javascript, the statistics are | ||
240 | 108 | displayed as normal text: | ||
241 | 109 | |||
242 | 110 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu') | ||
243 | 111 | >>> stats_div = find_tag_by_id(anon_browser.contents, 'bugs-chart') | ||
244 | 112 | >>> for li_tag in stats_div.noscript.ul('li'): | ||
245 | 113 | ... print li_tag.renderContents() | ||
246 | 114 | 3 New bugs | ||
247 | 115 | 0 Incomplete bugs | ||
248 | 116 | 1 Confirmed bugs | ||
249 | 117 | 0 Triaged bugs | ||
250 | 118 | 0 In Progress bugs | ||
251 | 119 | 0 Fix Committed bugs | ||
252 | 120 | 95 | ||
253 | === modified file 'lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt' | |||
254 | --- lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt 2009-09-10 20:12:12 +0000 | |||
255 | +++ lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt 2009-09-18 17:43:21 +0000 | |||
256 | @@ -13,7 +13,7 @@ | |||
257 | 13 | 13 | ||
258 | 14 | The page has a link to see all open bugs. | 14 | The page has a link to see all open bugs. |
259 | 15 | 15 | ||
261 | 16 | >>> anon_browser.getLink('List all open bugs').click() | 16 | >>> anon_browser.getLink('Open bugs').click() |
262 | 17 | >>> anon_browser.url | 17 | >>> anon_browser.url |
263 | 18 | 'http://bugs.launchpad.dev/ubuntu/warty/+bugs' | 18 | 'http://bugs.launchpad.dev/ubuntu/warty/+bugs' |
264 | 19 | >>> find_tag_by_id(anon_browser.contents, 'buglisting') is not None | 19 | >>> find_tag_by_id(anon_browser.contents, 'buglisting') is not None |
265 | @@ -33,9 +33,7 @@ | |||
266 | 33 | other context. | 33 | other context. |
267 | 34 | 34 | ||
268 | 35 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty') | 35 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty') |
272 | 36 | >>> fixed_elsewhere_link = anon_browser.getLink('bugs fixed elsewhere') | 36 | >>> fixed_elsewhere_link = anon_browser.getLink('Bugs fixed elsewhere') |
270 | 37 | >>> fixed_elsewhere_link.text | ||
271 | 38 | '0 bugs fixed elsewhere' | ||
273 | 39 | 37 | ||
274 | 40 | The link takes you to the list of the bugs fixed elsewhere. | 38 | The link takes you to the list of the bugs fixed elsewhere. |
275 | 41 | 39 | ||
276 | @@ -55,10 +53,7 @@ | |||
277 | 55 | can expire when the project has enabled bug expiration. | 53 | can expire when the project has enabled bug expiration. |
278 | 56 | 54 | ||
279 | 57 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty') | 55 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty') |
284 | 58 | >>> expirable_bugs_link = anon_browser.getLink( | 56 | >>> expirable_bugs_link = anon_browser.getLink('Incomplete bugs') |
281 | 59 | ... 'incomplete bugs can expire') | ||
282 | 60 | >>> expirable_bugs_link.text | ||
283 | 61 | '0 incomplete bugs can expire' | ||
285 | 62 | 57 | ||
286 | 63 | The link goes to the expirable bugs page, where the anonymous user can | 58 | The link goes to the expirable bugs page, where the anonymous user can |
287 | 64 | see which bugs will expire if they are not confirmed. | 59 | see which bugs will expire if they are not confirmed. |
288 | @@ -67,27 +62,3 @@ | |||
289 | 67 | >>> print anon_browser.title | 62 | >>> print anon_browser.title |
290 | 68 | +expirable-bugs : Bugs in warty : 4.10 : Ubuntu | 63 | +expirable-bugs : Bugs in warty : 4.10 : Ubuntu |
291 | 69 | 64 | ||
292 | 70 | |||
293 | 71 | == Bugs Statistics == | ||
294 | 72 | |||
295 | 73 | There's also some statistics about the open and fixed bugs. This is | ||
296 | 74 | displayed as a chart, which is generated using Javascript, but for those | ||
297 | 75 | browsers not supporting Javascript, the statistics are displayed as | ||
298 | 76 | normal text: | ||
299 | 77 | |||
300 | 78 | As opposed to the normal distribution Bugs page, Fix Released bugs are | ||
301 | 79 | included here, since it's a good measurement of seeing whether the | ||
302 | 80 | release is on track. | ||
303 | 81 | |||
304 | 82 | >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty') | ||
305 | 83 | >>> stats_div = find_tag_by_id(anon_browser.contents, 'bugs-chart') | ||
306 | 84 | >>> for li_tag in stats_div.noscript.ul('li'): | ||
307 | 85 | ... print li_tag.renderContents() | ||
308 | 86 | 1 New bugs | ||
309 | 87 | 0 Incomplete bugs | ||
310 | 88 | 0 Confirmed bugs | ||
311 | 89 | 0 Triaged bugs | ||
312 | 90 | 0 In Progress bugs | ||
313 | 91 | 0 Fix Committed bugs | ||
314 | 92 | 0 Fix Released bugs | ||
315 | 93 | |||
316 | 94 | 65 | ||
317 | === modified file 'lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt' | |||
318 | --- lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt 2009-09-10 20:12:12 +0000 | |||
319 | +++ lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt 2009-09-18 17:43:21 +0000 | |||
320 | @@ -144,10 +144,7 @@ | |||
321 | 144 | >>> user_browser.title | 144 | >>> user_browser.title |
322 | 145 | 'Bugs in Jokosher Audio Editor' | 145 | 'Bugs in Jokosher Audio Editor' |
323 | 146 | 146 | ||
328 | 147 | >>> expirable_bugs_link = user_browser.getLink( | 147 | >>> expirable_bugs_link = user_browser.getLink('Incomplete bugs') |
325 | 148 | ... 'incomplete bugs can expire') | ||
326 | 149 | >>> expirable_bugs_link.text | ||
327 | 150 | '2 incomplete bugs can expire' | ||
329 | 151 | 148 | ||
330 | 152 | The link is to the expirable bugs page. No Privileges Person can see | 149 | The link is to the expirable bugs page. No Privileges Person can see |
331 | 153 | the bug he set to Incomplete previously. | 150 | the bug he set to Incomplete previously. |
332 | @@ -190,7 +187,7 @@ | |||
333 | 190 | >>> user_browser.getControl(name='field.comment').value = "bump" | 187 | >>> user_browser.getControl(name='field.comment').value = "bump" |
334 | 191 | >>> user_browser.getControl('Post Comment').click() | 188 | >>> user_browser.getControl('Post Comment').click() |
335 | 192 | >>> user_browser.getLink('Bugs').click() | 189 | >>> user_browser.getLink('Bugs').click() |
337 | 193 | >>> user_browser.getLink('incomplete bugs can expire').click() | 190 | >>> user_browser.getLink('Incomplete bugs').click() |
338 | 194 | >>> contents = find_main_content(user_browser.contents) | 191 | >>> contents = find_main_content(user_browser.contents) |
339 | 195 | >>> buglisting = contents.find('table', id='buglisting') | 192 | >>> buglisting = contents.find('table', id='buglisting') |
340 | 196 | >>> print extract_text(buglisting.thead) | 193 | >>> print extract_text(buglisting.thead) |
341 | @@ -212,11 +209,7 @@ | |||
342 | 212 | None | 209 | None |
343 | 213 | 210 | ||
344 | 214 | >>> user_browser.getLink('Bugs').click() | 211 | >>> user_browser.getLink('Bugs').click() |
350 | 215 | >>> expirable_bugs_link = user_browser.getLink( | 212 | >>> expirable_bugs_link = user_browser.getLink('Incomplete bugs') |
346 | 216 | ... 'incomplete bug can expire') | ||
347 | 217 | >>> expirable_bugs_link.text | ||
348 | 218 | '1 incomplete bug can expire' | ||
349 | 219 | |||
351 | 220 | >>> expirable_bugs_link.click() | 213 | >>> expirable_bugs_link.click() |
352 | 221 | >>> contents = find_main_content(user_browser.contents) | 214 | >>> contents = find_main_content(user_browser.contents) |
353 | 222 | >>> buglisting = contents.find('table', id='buglisting') | 215 | >>> buglisting = contents.find('table', id='buglisting') |
354 | 223 | 216 | ||
355 | === modified file 'lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt' | |||
356 | --- lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt 2009-09-15 09:49:49 +0000 | |||
357 | +++ lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt 2009-09-18 17:43:21 +0000 | |||
358 | @@ -16,7 +16,7 @@ | |||
359 | 16 | 16 | ||
360 | 17 | The page has a link to see all open bugs. | 17 | The page has a link to see all open bugs. |
361 | 18 | 18 | ||
363 | 19 | >>> anon_browser.getLink('List all open bugs').click() | 19 | >>> anon_browser.getLink('Open bugs').click() |
364 | 20 | >>> anon_browser.url | 20 | >>> anon_browser.url |
365 | 21 | 'http://bugs.launchpad.dev/firefox/+bugs' | 21 | 'http://bugs.launchpad.dev/firefox/+bugs' |
366 | 22 | >>> find_tag_by_id(anon_browser.contents, 'buglisting') is not None | 22 | >>> find_tag_by_id(anon_browser.contents, 'buglisting') is not None |
367 | @@ -34,14 +34,10 @@ | |||
368 | 34 | It also displays the number of open bugs associated with a CVE. | 34 | It also displays the number of open bugs associated with a CVE. |
369 | 35 | 35 | ||
370 | 36 | >>> anon_browser.open('http://bugs.launchpad.dev/evolution') | 36 | >>> anon_browser.open('http://bugs.launchpad.dev/evolution') |
374 | 37 | >>> cve_bugs_link = anon_browser.getLink('open CVE bugs') | 37 | >>> cve_bugs_link = anon_browser.getLink('Open CVE bugs') |
372 | 38 | >>> cve_bugs_link.text | ||
373 | 39 | '0 open CVE bugs' | ||
375 | 40 | 38 | ||
376 | 41 | >>> anon_browser.open('http://bugs.launchpad.dev/firefox') | 39 | >>> anon_browser.open('http://bugs.launchpad.dev/firefox') |
380 | 42 | >>> cve_bugs_link = anon_browser.getLink('open CVE bug') | 40 | >>> cve_bugs_link = anon_browser.getLink('Open CVE bugs') |
378 | 43 | >>> cve_bugs_link.text | ||
379 | 44 | '1 open CVE bug' | ||
381 | 45 | 41 | ||
382 | 46 | The link takes you to the list of bugs with CVEs linked to them. | 42 | The link takes you to the list of bugs with CVEs linked to them. |
383 | 47 | 43 | ||
384 | @@ -78,9 +74,7 @@ | |||
385 | 78 | Mozilla Firefox that are fixed in some other context: | 74 | Mozilla Firefox that are fixed in some other context: |
386 | 79 | 75 | ||
387 | 80 | >>> anon_browser.goBack(1) | 76 | >>> anon_browser.goBack(1) |
391 | 81 | >>> fixed_elsewhere_link = anon_browser.getLink('bugs fixed elsewhere') | 77 | >>> fixed_elsewhere_link = anon_browser.getLink('Bugs fixed elsewhere') |
389 | 82 | >>> fixed_elsewhere_link.text | ||
390 | 83 | '0 bugs fixed elsewhere' | ||
392 | 84 | 78 | ||
393 | 85 | The link takes you to the list of the bugs fixed elsewhere: | 79 | The link takes you to the list of the bugs fixed elsewhere: |
394 | 86 | 80 | ||
395 | @@ -98,9 +92,7 @@ | |||
396 | 98 | are fixed in some other context: | 92 | are fixed in some other context: |
397 | 99 | 93 | ||
398 | 100 | >>> anon_browser.open('http://bugs.launchpad.dev/thunderbird') | 94 | >>> anon_browser.open('http://bugs.launchpad.dev/thunderbird') |
402 | 101 | >>> fixed_elsewhere_link = anon_browser.getLink('bugs fixed elsewhere') | 95 | >>> fixed_elsewhere_link = anon_browser.getLink('Bugs fixed elsewhere') |
400 | 102 | >>> fixed_elsewhere_link.text | ||
401 | 103 | '0 bugs fixed elsewhere' | ||
403 | 104 | 96 | ||
404 | 105 | Again, the link takes you to the list of the bugs fixed elsewhere.: | 97 | Again, the link takes you to the list of the bugs fixed elsewhere.: |
405 | 106 | 98 | ||
406 | @@ -121,10 +113,7 @@ | |||
407 | 121 | is such a project. | 113 | is such a project. |
408 | 122 | 114 | ||
409 | 123 | >>> anon_browser.open('http://bugs.launchpad.dev/jokosher') | 115 | >>> anon_browser.open('http://bugs.launchpad.dev/jokosher') |
414 | 124 | >>> expirable_bugs_link = anon_browser.getLink( | 116 | >>> expirable_bugs_link = anon_browser.getLink('Incomplete bugs') |
411 | 125 | ... 'incomplete bugs can expire') | ||
412 | 126 | >>> expirable_bugs_link.text | ||
413 | 127 | '0 incomplete bugs can expire' | ||
415 | 128 | 117 | ||
416 | 129 | The link goes to the expirable bugs page, where the anonymous user can | 118 | The link goes to the expirable bugs page, where the anonymous user can |
417 | 130 | see which bugs will expire if they are not confirmed. | 119 | see which bugs will expire if they are not confirmed. |
418 | @@ -137,11 +126,7 @@ | |||
419 | 137 | series has the link because Jokosher has enabled bug expiration. | 126 | series has the link because Jokosher has enabled bug expiration. |
420 | 138 | 127 | ||
421 | 139 | >>> anon_browser.open('http://bugs.launchpad.dev/jokosher/trunk') | 128 | >>> anon_browser.open('http://bugs.launchpad.dev/jokosher/trunk') |
427 | 140 | >>> expirable_bugs_link = anon_browser.getLink( | 129 | >>> expirable_bugs_link = anon_browser.getLink('Incomplete bugs') |
423 | 141 | ... 'incomplete bugs can expire') | ||
424 | 142 | >>> expirable_bugs_link.text | ||
425 | 143 | '0 incomplete bugs can expire' | ||
426 | 144 | |||
428 | 145 | >>> expirable_bugs_link.click() | 130 | >>> expirable_bugs_link.click() |
429 | 146 | >>> print anon_browser.title | 131 | >>> print anon_browser.title |
430 | 147 | +expirable-bugs : Bugs in trunk : Series trunk : Jokosher | 132 | +expirable-bugs : Bugs in trunk : Series trunk : Jokosher |
431 | @@ -150,31 +135,12 @@ | |||
432 | 150 | cannot see any link reporting that bugs can expire. | 135 | cannot see any link reporting that bugs can expire. |
433 | 151 | 136 | ||
434 | 152 | >>> anon_browser.open('http://bugs.launchpad.dev/thunderbird') | 137 | >>> anon_browser.open('http://bugs.launchpad.dev/thunderbird') |
437 | 153 | >>> expirable_bugs_link = anon_browser.getLink( | 138 | >>> expirable_bugs_link = anon_browser.getLink('Incomplete bugs') |
436 | 154 | ... 'incomplete bugs can expire') | ||
438 | 155 | Traceback (most recent call last): | 139 | Traceback (most recent call last): |
439 | 156 | ... | 140 | ... |
440 | 157 | LinkNotFoundError | 141 | LinkNotFoundError |
441 | 158 | 142 | ||
442 | 159 | 143 | ||
443 | 160 | == Open Bugs Statistics == | ||
444 | 161 | |||
445 | 162 | There's also some statistics about the open bugs. This is displayed as | ||
446 | 163 | a chart, which is generated using Javascript, but for those browsers not | ||
447 | 164 | supporting Javascript, the statistics are displayed as normal text: | ||
448 | 165 | |||
449 | 166 | >>> anon_browser.open('http://bugs.launchpad.dev/firefox') | ||
450 | 167 | >>> stats_div = find_tag_by_id(anon_browser.contents, 'bugs-chart') | ||
451 | 168 | >>> for li_tag in stats_div.noscript.ul('li'): | ||
452 | 169 | ... print li_tag.renderContents() | ||
453 | 170 | 3 New bugs | ||
454 | 171 | 0 Incomplete bugs | ||
455 | 172 | 0 Confirmed bugs | ||
456 | 173 | 0 Triaged bugs | ||
457 | 174 | 0 In Progress bugs | ||
458 | 175 | 0 Fix Committed bugs | ||
459 | 176 | |||
460 | 177 | |||
461 | 178 | == Tags and Filters == | 144 | == Tags and Filters == |
462 | 179 | 145 | ||
463 | 180 | There's also portlets for easy searching by tags and filters. Its content is | 146 | There's also portlets for easy searching by tags and filters. Its content is |
464 | @@ -182,11 +148,9 @@ | |||
465 | 182 | 148 | ||
466 | 183 | >>> tags_portlet = find_tag_by_id(anon_browser.contents, 'portlet-tags') | 149 | >>> tags_portlet = find_tag_by_id(anon_browser.contents, 'portlet-tags') |
467 | 184 | >>> anon_browser.getLink(id='tags-content-link').click() | 150 | >>> anon_browser.getLink(id='tags-content-link').click() |
473 | 185 | >>> for tag_link in find_tags_by_class( | 151 | >>> print extract_text(anon_browser.contents) |
474 | 186 | ... anon_browser.contents, 'section')[0]('a'): | 152 | Tags |
475 | 187 | ... print tag_link.renderContents() | 153 | doc layout-test |
471 | 188 | doc | ||
472 | 189 | layout-test | ||
476 | 190 | 154 | ||
477 | 191 | They are there to provide easy navigation for bugs with a certain | 155 | They are there to provide easy navigation for bugs with a certain |
478 | 192 | tag... | 156 | tag... |
479 | 193 | 157 | ||
480 | === modified file 'lib/lp/bugs/templates/bugtarget-bugs.pt' | |||
481 | --- lib/lp/bugs/templates/bugtarget-bugs.pt 2009-07-18 00:05:49 +0000 | |||
482 | +++ lib/lp/bugs/templates/bugtarget-bugs.pt 2009-09-18 17:43:21 +0000 | |||
483 | @@ -6,7 +6,7 @@ | |||
484 | 6 | xml:lang="en" | 6 | xml:lang="en" |
485 | 7 | lang="en" | 7 | lang="en" |
486 | 8 | dir="ltr" | 8 | dir="ltr" |
488 | 9 | metal:use-macro="view/macro:page/default2.0" | 9 | metal:use-macro="view/macro:page/main_side" |
489 | 10 | i18n:domain="malone" | 10 | i18n:domain="malone" |
490 | 11 | > | 11 | > |
491 | 12 | <metal:block fill-slot="head_epilogue"> | 12 | <metal:block fill-slot="head_epilogue"> |
492 | @@ -14,18 +14,140 @@ | |||
493 | 14 | <script type="text/javascript" src="/+icing/PlotKit_Packed.js"></script> | 14 | <script type="text/javascript" src="/+icing/PlotKit_Packed.js"></script> |
494 | 15 | </metal:block> | 15 | </metal:block> |
495 | 16 | <metal:portlets fill-slot="portlets"> | 16 | <metal:portlets fill-slot="portlets"> |
496 | 17 | <tal:block content="structure context/@@+portlet-bugfilters" /> | ||
497 | 18 | <tal:block content="structure context/@@+portlet-bugtags" /> | ||
498 | 19 | <tal:releasecriticalbugs | ||
499 | 20 | tal:condition="view/shouldShowReleaseCriticalPortlet" | ||
500 | 21 | tal:content="structure context/@@+portlet-bugtasklist-seriesbugs" /> | ||
501 | 22 | </metal:portlets> | 17 | </metal:portlets> |
502 | 23 | <body> | 18 | <body> |
503 | 19 | <tal:side metal:fill-slot="side"> | ||
504 | 20 | <div id="involvement" class="portlet involvement"> | ||
505 | 21 | <ul> | ||
506 | 22 | <li style="border: none"> | ||
507 | 23 | <a href="+filebug" class="menu-link-filebug sprite bugs"> | ||
508 | 24 | Report a bug | ||
509 | 25 | </a> | ||
510 | 26 | </li> | ||
511 | 27 | <li> | ||
512 | 28 | <a href="+filebug" class="menu-link-filebug sprite answers"> | ||
513 | 29 | Ask a question | ||
514 | 30 | </a> | ||
515 | 31 | </li> | ||
516 | 32 | </ul> | ||
517 | 33 | </div> | ||
518 | 34 | <div class="portlet"> | ||
519 | 35 | <table class="bug-links"> | ||
520 | 36 | <tr tal:define="open_bugs_info view/open_bugs_info"> | ||
521 | 37 | <td class="bugs-count" tal:content="open_bugs_info/count" /> | ||
522 | 38 | <td class="bugs-link"> | ||
523 | 39 | <a tal:attributes="href open_bugs_info/url">Open bugs</a> | ||
524 | 40 | </td> | ||
525 | 41 | </tr> | ||
526 | 42 | <tr tal:condition="view/user" | ||
527 | 43 | tal:define="my_bugs_info view/my_bugs_info"> | ||
528 | 44 | <td class="bugs-count" tal:content="my_bugs_info/count" /> | ||
529 | 45 | <td class="bugs-link"> | ||
530 | 46 | <a tal:attributes="href my_bugs_info/url">Bugs assigned to me</a> | ||
531 | 47 | </td> | ||
532 | 48 | </tr> | ||
533 | 49 | <tr tal:define="critical_bugs_info view/critical_bugs_info"> | ||
534 | 50 | <td class="bugs-count" tal:content="critical_bugs_info/count" /> | ||
535 | 51 | <td class="bugs-link"> | ||
536 | 52 | <a tal:attributes="href critical_bugs_info/url">Critical bugs</a> | ||
537 | 53 | </td> | ||
538 | 54 | </tr> | ||
539 | 55 | <tr tal:define="fixed_elsewhere view/bugs_fixed_elsewhere_info"> | ||
540 | 56 | <td class="bugs-count" tal:content="fixed_elsewhere/count" /> | ||
541 | 57 | <td class="bugs-link"> | ||
542 | 58 | <a tal:attributes="href fixed_elsewhere/url"> | ||
543 | 59 | Bugs fixed elsewhere | ||
544 | 60 | </a> | ||
545 | 61 | </td> | ||
546 | 62 | </tr> | ||
547 | 63 | <tr tal:define="new_bugs_info view/new_bugs_info"> | ||
548 | 64 | <td class="bugs-count" tal:content="new_bugs_info/count" /> | ||
549 | 65 | <td class="bugs-link"> | ||
550 | 66 | <a tal:attributes="href new_bugs_info/url">New bugs</a> | ||
551 | 67 | </td> | ||
552 | 68 | </tr> | ||
553 | 69 | <tr tal:define="cve_bugs_info view/open_cve_bugs_info"> | ||
554 | 70 | <td class="bugs-count" tal:content="cve_bugs_info/count" /> | ||
555 | 71 | <td class="bugs-link"> | ||
556 | 72 | <a tal:attributes="href cve_bugs_info/url">Open CVE bugs</a> | ||
557 | 73 | - | ||
558 | 74 | <a href="+cve">CVE reports</a> | ||
559 | 75 | </td> | ||
560 | 76 | </tr> | ||
561 | 77 | <tr tal:define="expirable_bugs_info view/expirable_bugs_info" | ||
562 | 78 | tal:condition="expirable_bugs_info"> | ||
563 | 79 | <td class="bugs-count" tal:content="expirable_bugs_info/count" /> | ||
564 | 80 | <td class="bugs-link"> | ||
565 | 81 | <a tal:attributes="href expirable_bugs_info/url"> | ||
566 | 82 | Incomplete bugs | ||
567 | 83 | </a> | ||
568 | 84 | (can expire) | ||
569 | 85 | </td> | ||
570 | 86 | </tr> | ||
571 | 87 | <tr tal:define="subscribe_link context/menu:bugs/subscribe"> | ||
572 | 88 | <td class="bugs-count" style="padding-top: 1em"> | ||
573 | 89 | <a tal:attributes="href subscribe_link/url"> | ||
574 | 90 | <img tal:attributes="src subscribe_link/icon_url" /> | ||
575 | 91 | </a> | ||
576 | 92 | </td> | ||
577 | 93 | <td class="bugs-link"> | ||
578 | 94 | <a tal:attributes="href subscribe_link/url" | ||
579 | 95 | tal:content="subscribe_link/escapedtext" /> | ||
580 | 96 | </td> | ||
581 | 97 | </tr> | ||
582 | 98 | </table> | ||
583 | 99 | </div> | ||
584 | 100 | <div tal:replace="structure context/@@+portlet-bugtags" /> | ||
585 | 101 | <tal:releasecriticalbugs | ||
586 | 102 | tal:condition="view/shouldShowReleaseCriticalPortlet" | ||
587 | 103 | tal:content="structure context/@@+portlet-bugtasklist-seriesbugs" /> | ||
588 | 104 | </tal:side> | ||
589 | 24 | <div metal:fill-slot="main" class="tab-bugs" | 105 | <div metal:fill-slot="main" class="tab-bugs" |
590 | 25 | tal:define="search_url string:+bugs; | 106 | tal:define="search_url string:+bugs; |
591 | 26 | advanced_search_url string:+bugs?advanced=1"> | 107 | advanced_search_url string:+bugs?advanced=1"> |
594 | 27 | <h1>Bugs in <tal:context replace="context/title">Ubuntu</tal:context></h1> | 108 | |
595 | 28 | <div style="text-align: center; clear: both;"> | 109 | <div class="portlet" style="float: right; border: none"> |
596 | 110 | <ul> | ||
597 | 111 | <li> | ||
598 | 112 | <strong>Bug tracker:</strong> | ||
599 | 113 | <tal:bugtracker replace="structure view/bugtracker" /> | ||
600 | 114 | </li> | ||
601 | 115 | <li tal:define="bug_supervisor context/bug_supervisor"> | ||
602 | 116 | Bug supervisor: | ||
603 | 117 | <tal:none condition="not:bug_supervisor">None set</tal:none> | ||
604 | 118 | <a tal:condition="bug_supervisor" | ||
605 | 119 | tal:replace="structure bug_supervisor/fmt:link">Bob Johnson</a> | ||
606 | 120 | <tal:edit-bug-supervisor | ||
607 | 121 | condition="context/menu:bugs/bugsupervisor|nothing"> | ||
608 | 122 | <a tal:define="link context/menu:bugs/bugsupervisor" | ||
609 | 123 | tal:condition="link/enabled" | ||
610 | 124 | tal:attributes="href link/url; title link/text"> | ||
611 | 125 | <img tal:attributes="alt link/text" src="/@@/edit" /> | ||
612 | 126 | </a> | ||
613 | 127 | </tal:edit-bug-supervisor> | ||
614 | 128 | </li> | ||
615 | 129 | <li tal:define="securitycontact context/security_contact"> | ||
616 | 130 | Security contact: | ||
617 | 131 | <tal:none condition="not:securitycontact">None set</tal:none> | ||
618 | 132 | <a tal:condition="securitycontact" | ||
619 | 133 | tal:replace="structure securitycontact/fmt:link"> | ||
620 | 134 | Billy Anderson | ||
621 | 135 | </a> | ||
622 | 136 | <tal:edit-securitycontact | ||
623 | 137 | condition="context/menu:bugs/securitycontact|nothing"> | ||
624 | 138 | <a tal:define="link context/menu:bugs/securitycontact" | ||
625 | 139 | tal:condition="link/enabled" | ||
626 | 140 | tal:attributes="href link/url; title link/text"> | ||
627 | 141 | <img tal:attributes="alt link/text" src="/@@/edit" /> | ||
628 | 142 | </a> | ||
629 | 143 | </tal:edit-securitycontact> | ||
630 | 144 | </li> | ||
631 | 145 | <li> | ||
632 | 146 | </li> | ||
633 | 147 | </ul> | ||
634 | 148 | </div> | ||
635 | 149 | |||
636 | 150 | <div class="search-box"> | ||
637 | 29 | <metal:search | 151 | <metal:search |
638 | 30 | use-macro="context/@@+bugtarget-macros-search/simple-search-form" | 152 | use-macro="context/@@+bugtarget-macros-search/simple-search-form" |
639 | 31 | /> | 153 | /> |
640 | @@ -34,165 +156,39 @@ | |||
641 | 34 | $('field.searchtext').focus(); | 156 | $('field.searchtext').focus(); |
642 | 35 | --></script> | 157 | --></script> |
643 | 36 | 158 | ||
803 | 37 | <div class="columns"> | 159 | <h2 style="margin-top: 1em">Hot bugs</h2> |
804 | 38 | <script type="text/javascript" | 160 | |
805 | 39 | tal:content="structure view/getChartJavascript"> | 161 | <table class="listing" id="hot-bugs"> |
806 | 40 | </script> | 162 | <thead> |
807 | 41 | <div class="two column left"> | 163 | <tr> |
808 | 42 | <div id="bugs-chart" height="200" width="200"> | 164 | <th colspan="3">Summary</th> |
809 | 43 | <noscript> | 165 | <th>Status</th> |
810 | 44 | <ul> | 166 | <th>Importance</th> |
811 | 45 | <li tal:repeat="bug_count view/bug_count_items" | 167 | <th>Last changed</th> |
812 | 46 | tal:content="string:${bug_count/count} ${bug_count/label} bugs"> | 168 | </tr> |
813 | 47 | 12 Unconfirmed bugs | 169 | </thead> |
814 | 48 | </li> | 170 | <tbody> |
815 | 49 | </ul> | 171 | <tr tal:repeat="bugtask view/hot_bugtasks"> |
816 | 50 | </noscript> | 172 | <td class="icon left"> |
817 | 51 | </div> | 173 | <img alt="" src="/@@/bug" /> |
818 | 52 | </div> | 174 | </td> |
819 | 53 | <div class="two column right"> | 175 | <td style="text-align: right"> |
820 | 54 | <h2>Key contacts</h2> | 176 | #<span tal:replace="bugtask/id" /> |
821 | 55 | <table class="summary" style="width: 100%;"> | 177 | </td> |
822 | 56 | <tbody> | 178 | <td> |
823 | 57 | <tr> | 179 | <a tal:attributes="href bugtask/fmt:url" |
824 | 58 | <th>Driver:</th> | 180 | tal:content="bugtask/title" /> |
825 | 59 | <td colspan="2"> | 181 | </td> |
826 | 60 | <tal:none condition="not:context/driver">None set</tal:none> | 182 | <td tal:attributes="class string:status${bugtask/status/name}" |
827 | 61 | <a | 183 | tal:content="bugtask/status/title" /> |
828 | 62 | tal:condition="context/driver" | 184 | <td tal:attributes=" |
829 | 63 | tal:replace="structure context/driver/fmt:link" | 185 | class string:importance${bugtask/importance/name}" |
830 | 64 | >John Smith</a> | 186 | tal:content="bugtask/importance/title" /> |
831 | 65 | </td> | 187 | <td tal:content="bugtask/bug/date_last_updated/fmt:displaydate" /> |
832 | 66 | </tr> | 188 | </tr> |
833 | 67 | <tr tal:define="bug_supervisor context/bug_supervisor"> | 189 | </tbody> |
834 | 68 | <th>Bug supervisor:</th> | 190 | </table> |
835 | 69 | <td> | 191 | |
677 | 70 | <tal:none condition="not:bug_supervisor" | ||
678 | 71 | >None set</tal:none> | ||
679 | 72 | <a | ||
680 | 73 | tal:condition="bug_supervisor" | ||
681 | 74 | tal:replace="structure bug_supervisor/fmt:link" | ||
682 | 75 | >Bob Johnson</a> | ||
683 | 76 | </td> | ||
684 | 77 | <td> | ||
685 | 78 | <tal:edit-bug-supervisor | ||
686 | 79 | condition="context/menu:bugs/bugsupervisor|nothing"> | ||
687 | 80 | <a tal:define="link context/menu:bugs/bugsupervisor" | ||
688 | 81 | tal:condition="link/enabled" | ||
689 | 82 | tal:attributes="href link/url; title link/text"> | ||
690 | 83 | <img tal:attributes="alt link/text" src="/@@/edit" /> | ||
691 | 84 | </a> | ||
692 | 85 | </tal:edit-bug-supervisor> | ||
693 | 86 | </td> | ||
694 | 87 | </tr> | ||
695 | 88 | <tr tal:define="securitycontact context/security_contact"> | ||
696 | 89 | <th>Security contact:</th> | ||
697 | 90 | <td> | ||
698 | 91 | <tal:none condition="not:securitycontact" | ||
699 | 92 | >None set</tal:none> | ||
700 | 93 | <a | ||
701 | 94 | tal:condition="securitycontact" | ||
702 | 95 | tal:replace="structure securitycontact/fmt:link" | ||
703 | 96 | >Billy Anderson</a> | ||
704 | 97 | </td> | ||
705 | 98 | <td> | ||
706 | 99 | <tal:edit-securitycontact | ||
707 | 100 | condition="context/menu:bugs/securitycontact|nothing"> | ||
708 | 101 | <a tal:define="link context/menu:bugs/securitycontact" | ||
709 | 102 | tal:condition="link/enabled" | ||
710 | 103 | tal:attributes="href link/url; title link/text"> | ||
711 | 104 | <img tal:attributes="alt link/text" src="/@@/edit" /> | ||
712 | 105 | </a> | ||
713 | 106 | </tal:edit-securitycontact> | ||
714 | 107 | </td> | ||
715 | 108 | </tr> | ||
716 | 109 | </tbody> | ||
717 | 110 | </table> | ||
718 | 111 | <ul class="cross-reference"> | ||
719 | 112 | <li id="bugtracker"> | ||
720 | 113 | <strong>Bug tracker:</strong> | ||
721 | 114 | <tal:bugtracker replace="structure view/bugtracker" /> | ||
722 | 115 | </li> | ||
723 | 116 | <li tal:define="fixed_elsewhere view/bugs_fixed_elsewhere_info"> | ||
724 | 117 | <a tal:attributes="href fixed_elsewhere/url"> | ||
725 | 118 | <strong tal:content="fixed_elsewhere/count">42</strong> | ||
726 | 119 | <tal:label | ||
727 | 120 | tal:replace="fixed_elsewhere/label">bugs</tal:label> | ||
728 | 121 | fixed elsewhere | ||
729 | 122 | </a> | ||
730 | 123 | </li> | ||
731 | 124 | <li tal:define="cve_bugs view/open_cve_bugs_info"> | ||
732 | 125 | <a tal:attributes="href cve_bugs/url"> | ||
733 | 126 | <strong tal:content="cve_bugs/count"></strong> | ||
734 | 127 | open CVE | ||
735 | 128 | <tal:label tal:replace="cve_bugs/label">bugs</tal:label> | ||
736 | 129 | </a> | ||
737 | 130 | <tal:cve-reports | ||
738 | 131 | condition="context/menu:bugs/cve|nothing"> | ||
739 | 132 | -<a tal:define="link context/menu:bugs/cve" | ||
740 | 133 | tal:replace="structure link/render" | ||
741 | 134 | tal:condition="link/enabled"> | ||
742 | 135 | CVE reports | ||
743 | 136 | </a> | ||
744 | 137 | </tal:cve-reports> | ||
745 | 138 | </li> | ||
746 | 139 | <li tal:define="pending_bugwatches view/pending_bugwatches_info" | ||
747 | 140 | tal:condition="pending_bugwatches"> | ||
748 | 141 | <a tal:attributes="href pending_bugwatches/url"> | ||
749 | 142 | <strong tal:content="pending_bugwatches/count"></strong> | ||
750 | 143 | <tal:label | ||
751 | 144 | tal:replace="pending_bugwatches/label">bugs</tal:label> | ||
752 | 145 | <tal:need-or-needs | ||
753 | 146 | define="count pending_bugwatches/count" | ||
754 | 147 | content="python:(count == 1) and 'needs' or 'need'" /> | ||
755 | 148 | forwarding upstream | ||
756 | 149 | </a> | ||
757 | 150 | </li> | ||
758 | 151 | <li tal:define="expirable_bugs view/expirable_bugs_info" | ||
759 | 152 | tal:condition="expirable_bugs"> | ||
760 | 153 | <a tal:attributes="href expirable_bugs/url"> | ||
761 | 154 | <strong tal:content="expirable_bugs/count"></strong> | ||
762 | 155 | incomplete | ||
763 | 156 | <tal:label | ||
764 | 157 | tal:replace="expirable_bugs/label">bugs</tal:label> | ||
765 | 158 | can expire | ||
766 | 159 | </a> | ||
767 | 160 | </li> | ||
768 | 161 | <tal:review-nominations | ||
769 | 162 | condition="context/menu:bugs/nominations|nothing"> | ||
770 | 163 | <li tal:define="link context/menu:bugs/nominations"> | ||
771 | 164 | <a tal:attributes="href link/url" | ||
772 | 165 | tal:content="link/text" /> | ||
773 | 166 | </li> | ||
774 | 167 | </tal:review-nominations> | ||
775 | 168 | <li style="font-weight: bold;"> | ||
776 | 169 | <a href="+bugs">List all open bugs</a> | ||
777 | 170 | </li> | ||
778 | 171 | <li> | ||
779 | 172 | <tal:subscribe define="link context/menu:bugs/subscribe" | ||
780 | 173 | replace="structure link/render" /> | ||
781 | 174 | </li> | ||
782 | 175 | </ul> | ||
783 | 176 | <ul class="rollover buttons"> | ||
784 | 177 | <li> | ||
785 | 178 | <a href="+filebug"> | ||
786 | 179 | <img | ||
787 | 180 | alt="Report a bug" | ||
788 | 181 | src="/+icing/but-sml-reportabug.gif" | ||
789 | 182 | /> | ||
790 | 183 | </a> | ||
791 | 184 | </li> | ||
792 | 185 | <li tal:content="structure context/@@+ask-a-question-button" /> | ||
793 | 186 | </ul> | ||
794 | 187 | </div><!-- two column right --> | ||
795 | 188 | </div><!-- columns --> | ||
796 | 189 | <div class="clear"></div> | ||
797 | 190 | <div class="left"> | ||
798 | 191 | <tal:reported replace="structure context/@@+portlet-latestbugs" /> | ||
799 | 192 | </div> | ||
800 | 193 | <div class="right"> | ||
801 | 194 | <tal:touched replace="structure context/@@+portlet-recently-touched-bugs" /> | ||
802 | 195 | </div> | ||
836 | 196 | </div><!-- main --> | 192 | </div><!-- main --> |
837 | 197 | </body> | 193 | </body> |
838 | 198 | </html> | 194 | </html> |
839 | 199 | 195 | ||
840 | === modified file 'lib/lp/bugs/templates/bugtarget-macros-search.pt' | |||
841 | --- lib/lp/bugs/templates/bugtarget-macros-search.pt 2009-09-13 20:19:53 +0000 | |||
842 | +++ lib/lp/bugs/templates/bugtarget-macros-search.pt 2009-09-18 14:43:52 +0000 | |||
843 | @@ -73,6 +73,7 @@ | |||
844 | 73 | <tal:widget replace="structure view/widgets/has_patch/hidden" /> | 73 | <tal:widget replace="structure view/widgets/has_patch/hidden" /> |
845 | 74 | <tal:widget replace="structure view/widgets/component/hidden" /> | 74 | <tal:widget replace="structure view/widgets/component/hidden" /> |
846 | 75 | <tal:widget replace="structure view/widgets/has_no_package/hidden" /> | 75 | <tal:widget replace="structure view/widgets/has_no_package/hidden" /> |
847 | 76 | <br /><br /> | ||
848 | 76 | <a tal:attributes="href advanced_search_url|string:?advanced=1" | 77 | <a tal:attributes="href advanced_search_url|string:?advanced=1" |
849 | 77 | >Advanced search</a> | 78 | >Advanced search</a> |
850 | 78 | <div metal:define-slot="extra-search-widgets"> | 79 | <div metal:define-slot="extra-search-widgets"> |
851 | 79 | 80 | ||
852 | === modified file 'lib/lp/bugs/templates/bugtarget-portlet-tags-content.pt' | |||
853 | --- lib/lp/bugs/templates/bugtarget-portlet-tags-content.pt 2009-09-13 20:39:15 +0000 | |||
854 | +++ lib/lp/bugs/templates/bugtarget-portlet-tags-content.pt 2009-09-18 14:43:52 +0000 | |||
855 | @@ -1,36 +1,15 @@ | |||
856 | 1 | <div xmlns:tal="http://xml.zope.org/namespaces/tal" | 1 | <div xmlns:tal="http://xml.zope.org/namespaces/tal" |
857 | 2 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 2 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
858 | 3 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 3 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
890 | 4 | tal:define="official_tags view/official_tags; | 4 | class="portletBody"> |
891 | 5 | other_tags view/other_tags" | 5 | <div class="section"> |
892 | 6 | tal:condition="python: official_tags or other_tags"> | 6 | <h2>Tags</h2> |
893 | 7 | <div class="section" tal:condition="official_tags"> | 7 | <div style="text-align: justify"> |
894 | 8 | <h2>Official tags</h2> | 8 | <a tal:repeat="tag_info view/tags_cloud_data" |
895 | 9 | <table width="100%"> | 9 | tal:content="tag_info/tag" |
896 | 10 | <tr tal:repeat="bug_tag_info official_tags"> | 10 | tal:attributes="href tag_info/url; |
897 | 11 | <td width="100%"> | 11 | style string:font-size: ${tag_info/factor}em" /> |
898 | 12 | <a tal:content="bug_tag_info/tag" | 12 | </div> |
868 | 13 | tal:attributes=" href bug_tag_info/url"> | ||
869 | 14 | crash | ||
870 | 15 | </a> | ||
871 | 16 | </td> | ||
872 | 17 | <td tal:content="bug_tag_info/count">20</td> | ||
873 | 18 | </tr> | ||
874 | 19 | </table> | ||
875 | 20 | </div> | ||
876 | 21 | <div class="section" tal:condition="other_tags"> | ||
877 | 22 | <h2 tal:condition="official_tags">Other tags</h2> | ||
878 | 23 | <h2 tal:condition="not: official_tags">Tags</h2> | ||
879 | 24 | <table width="100%"> | ||
880 | 25 | <tr tal:repeat="bug_tag_info other_tags"> | ||
881 | 26 | <td width="100%"> | ||
882 | 27 | <a tal:content="bug_tag_info/tag" | ||
883 | 28 | tal:attributes=" href bug_tag_info/url"> | ||
884 | 29 | crash | ||
885 | 30 | </a> | ||
886 | 31 | </td> | ||
887 | 32 | <td tal:content="bug_tag_info/count">20</td> | ||
888 | 33 | </tr> | ||
889 | 34 | </table> | ||
899 | 35 | </div> | 13 | </div> |
900 | 36 | </div> | 14 | </div> |
901 | 15 |
This branch converts the bugtarget bugs index page to 3.0 style UI and changes a few things, as has been discussed on the ML.
The diff is quite long at 902 lines. Sorry about that. A lot of that is removal of unused code and really simple pagetest changes, so it isn't really as scary as it might appear.