Merge lp:~sinzui/launchpad/css-ui-1 into lp:launchpad
- css-ui-1
- Merge into devel
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | 12103 | ||||||||
Proposed branch: | lp:~sinzui/launchpad/css-ui-1 | ||||||||
Merge into: | lp:launchpad | ||||||||
Diff against target: |
814 lines (+178/-162) 16 files modified
lib/canonical/launchpad/icing/style-3-0.css.in (+20/-10) lib/canonical/launchpad/icing/style.css (+0/-19) lib/canonical/launchpad/webapp/error.py (+1/-1) lib/lp/answers/stories/project-add-question.txt (+105/-90) lib/lp/answers/stories/questions-index.txt (+3/-3) lib/lp/answers/templates/question-listing-detailed.pt (+2/-2) lib/lp/registry/browser/distribution.py (+5/-4) lib/lp/registry/browser/product.py (+5/-4) lib/lp/registry/browser/tests/distribution-views.txt (+4/-4) lib/lp/registry/stories/distributionmirror/xx-distribution-mirrors.txt (+18/-10) lib/lp/registry/stories/productseries/xx-productseries-series.txt (+4/-4) lib/lp/registry/templates/distributionmirror-macros.pt (+3/-3) lib/lp/registry/templates/productreleasefile-macros.pt (+1/-1) lib/lp/registry/templates/team-editproposed.pt (+2/-2) lib/lp/soyuz/browser/sourcepackagerelease.py (+1/-1) lib/lp/soyuz/browser/tests/test_sourcepackagerelease.py (+4/-4) |
||||||||
To merge this branch: | bzr merge lp:~sinzui/launchpad/css-ui-1 | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Brad Crittenden (community) | code | Approve | |
Review via email: mp+44068@code.launchpad.net |
Commit message
Description of the change
Clean up the CSS.
Launchpad bug:
https:/
https:/
Pre-
Test command: ./bin/test -vv \
-t distribution-views -t xx-productserie
Bug #90502 [class="highlight" and class="highlighted" shouldn't coexist]
* Both classes use the base rules. There should be only one.
The 3.0 eliminated most of the highlighted cases. polls are being
removed, so distro mirrors are the only case
Bug #415267 [Table header cells should not be centered]
ages with wide tables but narrow data, such as
<https:/
I made in designing Launchpad tables: the text in table header cells
should not be centered.
-------
RULES
Bug #90502 [class="highlight" and class="highlighted" shouldn't coexist]
* update distributionmir
highlighted
* Remove the highligted rules from the CSS.
* Rename dimmed to lowlight.
Bug #415267 [Table header cells should not be centered]
* use text-align: left so that the left edge of the text in the th
aligns with the text in the td.
QA
Bug #90502 [class="highlight" and class="highlighted" shouldn't coexist]
* Visit https:/
* Verify the country and total are highlighted.
Bug #415267 [Table header cells should not be centered]
* Visit any table listing in lp and verify that the table headers
have left-aligned text.
LINT
lib/
lib/
lib/
lib/
lib/
lib/
lib/
lib/
lib/
lib/
IMPLEMENTATION
Bug #90502 [class="highlight" and class="highlighted" shouldn't coexist]
Update template to use highlight and removed highligted from css.
Removed unhighlighted. Renamed dimmed to lowlight. Removed .series
class because the rules are always superseded by other css rules.
lib/
lib/
lib/
lib/
lib/
lib/
lib/
Bug #415267 [Table header cells should not be centered]
Updated the style as mpt suggested.
lib/
Curtis Hovey (sinzui) wrote : | # |
On Fri, 2010-12-17 at 18:31 +0000, Brad Crittenden wrote:
> Review: Approve code
> The changes look good Curtis. But if I grep for 'class=
I am incompetent. I wrote the spr code and test :(. I resolved the
conflict you point out too.
--
__Curtis C. Hovey_________
http://
Preview Diff
1 | === modified file 'lib/canonical/launchpad/icing/style-3-0.css.in' | |||
2 | --- lib/canonical/launchpad/icing/style-3-0.css.in 2010-12-16 15:53:37 +0000 | |||
3 | +++ lib/canonical/launchpad/icing/style-3-0.css.in 2010-12-18 00:58:15 +0000 | |||
4 | @@ -537,7 +537,7 @@ | |||
5 | 537 | vertical-align: baseline; | 537 | vertical-align: baseline; |
6 | 538 | } | 538 | } |
7 | 539 | thead th, tr.thead th { | 539 | thead th, tr.thead th { |
9 | 540 | text-align: center; | 540 | text-align: left; |
10 | 541 | vertical-align: bottom; | 541 | vertical-align: bottom; |
11 | 542 | } | 542 | } |
12 | 543 | th.icon, td.icon { | 543 | th.icon, td.icon { |
13 | @@ -663,9 +663,6 @@ | |||
14 | 663 | table.listing tfoot td { | 663 | table.listing tfoot td { |
15 | 664 | border: 1px solid #d2d2d2; | 664 | border: 1px solid #d2d2d2; |
16 | 665 | } | 665 | } |
17 | 666 | table.listing tr.note { | ||
18 | 667 | font-size: 77%; | ||
19 | 668 | } | ||
20 | 669 | table.listing th, table.listing td { | 666 | table.listing th, table.listing td { |
21 | 670 | padding: 0.25em; | 667 | padding: 0.25em; |
22 | 671 | } | 668 | } |
23 | @@ -681,7 +678,7 @@ | |||
24 | 681 | border: 1px #d2d2d2; | 678 | border: 1px #d2d2d2; |
25 | 682 | border-style: dotted none none none; | 679 | border-style: dotted none none none; |
26 | 683 | } | 680 | } |
28 | 684 | table.listing tr.note td { | 681 | table.listing .note td { |
29 | 685 | border-style: none; | 682 | border-style: none; |
30 | 686 | } | 683 | } |
31 | 687 | table.listing img { | 684 | table.listing img { |
32 | @@ -1469,11 +1466,20 @@ | |||
33 | 1469 | Universal presentation | 1466 | Universal presentation |
34 | 1470 | Colors and fonts | 1467 | Colors and fonts |
35 | 1471 | */ | 1468 | */ |
41 | 1472 | pre .highlighted { | 1469 | |
42 | 1473 | border: none; | 1470 | .exception { |
43 | 1474 | padding: 0em; | 1471 | color: #cc0000; |
44 | 1475 | margin: 0em; | 1472 | } |
45 | 1476 | } | 1473 | .highlight { |
46 | 1474 | background: #ddd; | ||
47 | 1475 | border: 1px solid #ddd; | ||
48 | 1476 | } | ||
49 | 1477 | .lowlight { | ||
50 | 1478 | opacity: .5; | ||
51 | 1479 | filter: alpha(opacity=50); | ||
52 | 1480 | -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; | ||
53 | 1481 | } | ||
54 | 1482 | |||
55 | 1477 | .answers-stat { | 1483 | .answers-stat { |
56 | 1478 | color: #3840BE; | 1484 | color: #3840BE; |
57 | 1479 | } | 1485 | } |
58 | @@ -1780,6 +1786,10 @@ | |||
59 | 1780 | .launchpad-gold { | 1786 | .launchpad-gold { |
60 | 1781 | color: #F8C300; | 1787 | color: #F8C300; |
61 | 1782 | } | 1788 | } |
62 | 1789 | |||
63 | 1790 | .discreet, .lesser, .duplicate-details { | ||
64 | 1791 | font-size: 85%; | ||
65 | 1792 | } | ||
66 | 1783 | pre.changelog, table.diff, | 1793 | pre.changelog, table.diff, |
67 | 1784 | .bug-comment, .bug-activity, .codereviewcomment { | 1794 | .bug-comment, .bug-activity, .codereviewcomment { |
68 | 1785 | font-size: 93%; | 1795 | font-size: 93%; |
69 | 1786 | 1796 | ||
70 | === modified file 'lib/canonical/launchpad/icing/style.css' | |||
71 | --- lib/canonical/launchpad/icing/style.css 2010-12-16 17:12:13 +0000 | |||
72 | +++ lib/canonical/launchpad/icing/style.css 2010-12-18 00:58:15 +0000 | |||
73 | @@ -25,13 +25,6 @@ | |||
74 | 25 | 25 | ||
75 | 26 | /* === Fonts and colors === */ | 26 | /* === Fonts and colors === */ |
76 | 27 | 27 | ||
77 | 28 | |||
78 | 29 | |||
79 | 30 | |||
80 | 31 | |||
81 | 32 | .exception {color: #cc0000;} | ||
82 | 33 | .discreet, .lesser, .duplicate-details {font-size: 90%;} | ||
83 | 34 | .extra-discreet {font-size: 75%;} | ||
84 | 35 | .unavailable {color: #999; background: none;} | 28 | .unavailable {color: #999; background: none;} |
85 | 36 | 29 | ||
86 | 37 | .duplicate-details p { padding: 0em; margin-top: 0em; margin-bottom: 0.2em; } | 30 | .duplicate-details p { padding: 0em; margin-top: 0em; margin-bottom: 0.2em; } |
87 | @@ -61,17 +54,6 @@ | |||
88 | 61 | .notforscreen {display:none;} | 54 | .notforscreen {display:none;} |
89 | 62 | } | 55 | } |
90 | 63 | 56 | ||
91 | 64 | .highlighted, tr.highlight {background: #ddd; border: 1px solid #ddd;} | ||
92 | 65 | .highlighted {padding: 0.5em;} | ||
93 | 66 | .highlighted h3 {margin-top: 0;} | ||
94 | 67 | .unhighlighted {padding: 0 0.5em;} | ||
95 | 68 | .dimmed { | ||
96 | 69 | padding: 0 0.5em; | ||
97 | 70 | opacity: .5; | ||
98 | 71 | filter: alpha(opacity=50); | ||
99 | 72 | -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; | ||
100 | 73 | } | ||
101 | 74 | |||
102 | 75 | .debug { | 57 | .debug { |
103 | 76 | background: none; | 58 | background: none; |
104 | 77 | color: #f09; | 59 | color: #f09; |
105 | @@ -262,7 +244,6 @@ | |||
106 | 262 | margin-top: 1em; | 244 | margin-top: 1em; |
107 | 263 | } | 245 | } |
108 | 264 | 246 | ||
109 | 265 | .product.series, .series {margin-bottom: 1em;} | ||
110 | 266 | #packages h1, #projects h1 {margin-top: 1.2em;} | 247 | #packages h1, #projects h1 {margin-top: 1.2em;} |
111 | 267 | 248 | ||
112 | 268 | 249 | ||
113 | 269 | 250 | ||
114 | === modified file 'lib/canonical/launchpad/webapp/error.py' | |||
115 | --- lib/canonical/launchpad/webapp/error.py 2010-08-31 11:11:09 +0000 | |||
116 | +++ lib/canonical/launchpad/webapp/error.py 2010-12-18 00:58:15 +0000 | |||
117 | @@ -115,7 +115,7 @@ | |||
118 | 115 | def inside_div(self, html): | 115 | def inside_div(self, html): |
119 | 116 | """Returns the given HTML inside a div of an appropriate class.""" | 116 | """Returns the given HTML inside a div of an appropriate class.""" |
120 | 117 | 117 | ||
122 | 118 | return ('<div class="highlighted" style="' | 118 | return ('<div class="highlight" style="' |
123 | 119 | "font-family: 'UbuntuBeta Mono', 'Ubuntu Mono', monospace;" | 119 | "font-family: 'UbuntuBeta Mono', 'Ubuntu Mono', monospace;" |
124 | 120 | ' font-size: smaller;">' | 120 | ' font-size: smaller;">' |
125 | 121 | '%s' | 121 | '%s' |
126 | 122 | 122 | ||
127 | === modified file 'lib/lp/answers/stories/project-add-question.txt' | |||
128 | --- lib/lp/answers/stories/project-add-question.txt 2010-08-02 02:33:53 +0000 | |||
129 | +++ lib/lp/answers/stories/project-add-question.txt 2010-12-18 00:58:15 +0000 | |||
130 | @@ -1,18 +1,20 @@ | |||
132 | 1 | = Asking a New Question from a ProjectGroup = | 1 | Asking a New Question from a ProjectGroup |
133 | 2 | ========================================= | ||
134 | 2 | 3 | ||
140 | 3 | Even though project groups are not QuestionTargets, it is still possible to | 4 | Even though project groups are not QuestionTargets, it is still possible |
141 | 4 | create a question from a project group. There are some form and behaviour | 5 | to create a question from a project group. There are some form and |
142 | 5 | difference from the regular process for asking a question (documented | 6 | behaviour difference from the regular process for asking a question |
143 | 6 | in 35-question-add.txt). Firstly, we do not know the product the | 7 | (documented in 35-question-add.txt). Firstly, we do not know the product |
144 | 7 | product the question is about, so we ask the user to select one. | 8 | the product the question is about, so we ask the user to select one. |
145 | 8 | Secondly, without knowing the product, we cannot show the which of the | 9 | Secondly, without knowing the product, we cannot show the which of the |
146 | 9 | user's preferred languages are supported. | 10 | user's preferred languages are supported. |
147 | 10 | 11 | ||
148 | 11 | 12 | ||
150 | 12 | == Ask a question about a Product in a ProjectGroup == | 13 | Ask a question about a Product in a ProjectGroup |
151 | 14 | ------------------------------------------------ | ||
152 | 13 | 15 | ||
155 | 14 | The user must be logged in to ask a question. When he attempts to ask | 16 | The user must be logged in to ask a question. When he attempts to ask a |
156 | 15 | a question, without being logged in, he encounters an unauthorized | 17 | question, without being logged in, he encounters an unauthorized |
157 | 16 | exception (and the user will be prompted to login from another page). | 18 | exception (and the user will be prompted to login from another page). |
158 | 17 | The logged user will see the Ask a Question page, for the Mozilla | 19 | The logged user will see the Ask a Question page, for the Mozilla |
159 | 18 | Project in this case. | 20 | Project in this case. |
160 | @@ -28,11 +30,11 @@ | |||
161 | 28 | >>> print user_browser.title | 30 | >>> print user_browser.title |
162 | 29 | Ask a question... | 31 | Ask a question... |
163 | 30 | 32 | ||
169 | 31 | The workflow is identical to the regular one, except that the user | 33 | The workflow is identical to the regular one, except that the user must |
170 | 32 | must select one of the ProjectGroup's Products. The page displays a list of | 34 | select one of the ProjectGroup's Products. The page displays a list of |
171 | 33 | products associated with the project. Note that the site policy is | 35 | products associated with the project. Note that the site policy is to |
172 | 34 | to use the word 'Project' for 'Products' (and 'Distributions') so | 36 | use the word 'Project' for 'Products' (and 'Distributions') so that |
173 | 35 | that users do not have to learn our business' semantics. | 37 | users do not have to learn our business' semantics. |
174 | 36 | 38 | ||
175 | 37 | >>> print user_browser.getControl('Project').displayOptions | 39 | >>> print user_browser.getControl('Project').displayOptions |
176 | 38 | ['Mozilla Firefox', 'Mozilla Thunderbird'] | 40 | ['Mozilla Firefox', 'Mozilla Thunderbird'] |
177 | @@ -70,7 +72,7 @@ | |||
178 | 70 | 72 | ||
179 | 71 | >>> similar_questions = find_tag_by_id( | 73 | >>> similar_questions = find_tag_by_id( |
180 | 72 | ... user_browser.contents, 'similar-questions') | 74 | ... user_browser.contents, 'similar-questions') |
182 | 73 | >>> for row in similar_questions.fetch('tr', 'noted'): | 75 | >>> for row in similar_questions.fetch('tr', 'lesser'): |
183 | 74 | ... print row.a.renderContents() | 76 | ... print row.a.renderContents() |
184 | 75 | Problem showing the SVG demo on W3C site | 77 | Problem showing the SVG demo on W3C site |
185 | 76 | 78 | ||
186 | @@ -81,8 +83,8 @@ | |||
187 | 81 | >>> user_browser.getControl('Mozilla Thunderbird').selected = True | 83 | >>> user_browser.getControl('Mozilla Thunderbird').selected = True |
188 | 82 | 84 | ||
189 | 83 | If he empties the question summary, and submits the form he'll be | 85 | If he empties the question summary, and submits the form he'll be |
192 | 84 | redirected to the first page. Let's assume he does this by accident | 86 | redirected to the first page. Let's assume he does this by accident as |
193 | 85 | as he revises the summary after reading the similar questions. | 87 | he revises the summary after reading the similar questions. |
194 | 86 | 88 | ||
195 | 87 | >>> user_browser.getControl('Summary').value = '' | 89 | >>> user_browser.getControl('Summary').value = '' |
196 | 88 | >>> user_browser.getControl('Post Question').click() | 90 | >>> user_browser.getControl('Post Question').click() |
197 | @@ -94,12 +96,13 @@ | |||
198 | 94 | >>> print soup.first('div', 'message').renderContents() | 96 | >>> print soup.first('div', 'message').renderContents() |
199 | 95 | You must enter a summary of your problem. | 97 | You must enter a summary of your problem. |
200 | 96 | 98 | ||
204 | 97 | The product Thunderbird that he selected on the previous screen is | 99 | The product Thunderbird that he selected on the previous screen is still |
205 | 98 | still selected. No Privileged Person re-enters his question summary, | 100 | selected. No Privileged Person re-enters his question summary, and |
206 | 99 | and submits the form. | 101 | submits the form. |
207 | 100 | 102 | ||
208 | 101 | >>> print user_browser.getControl('Project').displayValue | 103 | >>> print user_browser.getControl('Project').displayValue |
209 | 102 | ['Mozilla Thunderbird'] | 104 | ['Mozilla Thunderbird'] |
210 | 105 | |||
211 | 103 | >>> user_browser.getControl('Summary').value = ( | 106 | >>> user_browser.getControl('Summary').value = ( |
212 | 104 | ... 'Problem displaying complex SVG') | 107 | ... 'Problem displaying complex SVG') |
213 | 105 | >>> user_browser.getControl('Continue').click() | 108 | >>> user_browser.getControl('Continue').click() |
214 | @@ -113,39 +116,43 @@ | |||
215 | 113 | There are no existing FAQs or questions similar to the summary you | 116 | There are no existing FAQs or questions similar to the summary you |
216 | 114 | entered. | 117 | entered. |
217 | 115 | 118 | ||
220 | 116 | The user then elaborates upon his question by entering a description | 119 | The user then elaborates upon his question by entering a description of |
221 | 117 | of the problem. He submits the form using the 'Post Question' button. | 120 | the problem. He submits the form using the 'Post Question' button. |
222 | 118 | 121 | ||
223 | 119 | >>> user_browser.getControl('Description').value = ( | 122 | >>> user_browser.getControl('Description').value = ( |
227 | 120 | ... "I received an HTML message containing an inlined SVG\n" | 123 | ... "I received an HTML message containing an inlined SVG\n" |
228 | 121 | ... "representation of a chessboard. It didn't displayed properly.\n" | 124 | ... "representation of a chessboard. It didn't displayed properly.\n" |
229 | 122 | ... "Is there a way to configure Thunderbird to display SVG properly?\n") | 125 | ... "Is there a way to configure Thunderbird to display SVG properly?\n") |
230 | 123 | >>> user_browser.getControl('Post Question').click() | 126 | >>> user_browser.getControl('Post Question').click() |
231 | 124 | 127 | ||
235 | 125 | No Privileged Person is taken to page displaying his question. From | 128 | No Privileged Person is taken to page displaying his question. From this |
236 | 126 | this point on, the user's interaction with the question follows to | 129 | point on, the user's interaction with the question follows to regular |
237 | 127 | regular workflow. (see 30-question-workflow.txt for the details). | 130 | workflow. (see 30-question-workflow.txt for the details). |
238 | 128 | 131 | ||
239 | 129 | >>> user_browser.url | 132 | >>> user_browser.url |
240 | 130 | '.../thunderbird/+question/...' | 133 | '.../thunderbird/+question/...' |
241 | 134 | |||
242 | 131 | >>> print user_browser.title | 135 | >>> print user_browser.title |
243 | 132 | Question #... : Questions : Mozilla Thunderbird | 136 | Question #... : Questions : Mozilla Thunderbird |
244 | 133 | 137 | ||
245 | 134 | 138 | ||
247 | 135 | == Supported Language behaviour == | 139 | Supported Language behaviour |
248 | 140 | ---------------------------- | ||
249 | 136 | 141 | ||
250 | 137 | Following a similar path as demonstrated above with a non-English | 142 | Following a similar path as demonstrated above with a non-English |
262 | 138 | language speaker illustrates a less-than-ideal behaviour for | 143 | language speaker illustrates a less-than-ideal behaviour for supported |
263 | 139 | supported languages. (See xx-question-add-in-other-languages.txt | 144 | languages. (See xx-question-add-in-other-languages.txt for the regular |
264 | 140 | for the regular behaviour). | 145 | behaviour). |
265 | 141 | 146 | ||
266 | 142 | === Register a support contact who speaks a non-English language === | 147 | |
267 | 143 | 148 | Register a support contact who speaks a non-English language | |
268 | 144 | To illustrate the supported language behavior, we add an answer | 149 | ............................................................ |
269 | 145 | contact to Thunderbird who has Japanese as a preferred language. | 150 | |
270 | 146 | Japanese will be a supported language for Thunderbird Questions, | 151 | To illustrate the supported language behavior, we add an answer contact |
271 | 147 | which allows us to test the supported languages behaviour for | 152 | to Thunderbird who has Japanese as a preferred language. Japanese will |
272 | 148 | non-English languages. Dafydd speaks Japanese, so we will use him. | 153 | be a supported language for Thunderbird Questions, which allows us to |
273 | 154 | test the supported languages behaviour for non-English languages. Dafydd | ||
274 | 155 | speaks Japanese, so we will use him. | ||
275 | 149 | 156 | ||
276 | 150 | >>> daf_browser = setupBrowser(auth='Basic daf@canonical.com:daf') | 157 | >>> daf_browser = setupBrowser(auth='Basic daf@canonical.com:daf') |
277 | 151 | >>> daf_browser.open('http://launchpad.dev/~daf/+editlanguages') | 158 | >>> daf_browser.open('http://launchpad.dev/~daf/+editlanguages') |
278 | @@ -169,10 +176,9 @@ | |||
279 | 169 | You have been added as an answer contact for Mozilla Thunderbird. | 176 | You have been added as an answer contact for Mozilla Thunderbird. |
280 | 170 | 177 | ||
281 | 171 | And we add Japanese to No Privileges Person's preferred languages. We | 178 | And we add Japanese to No Privileges Person's preferred languages. We |
286 | 172 | then have a condition for certain products, Thunderbird in this | 179 | then have a condition for certain products, Thunderbird in this example, |
287 | 173 | example, where the user's languages and the answer contact's languages | 180 | where the user's languages and the answer contact's languages will |
288 | 174 | will match. This condition demonstrates the supported language | 181 | match. This condition demonstrates the supported language behaviour. |
285 | 175 | behaviour. | ||
289 | 176 | 182 | ||
290 | 177 | >>> user_browser.open( | 183 | >>> user_browser.open( |
291 | 178 | ... 'http://launchpad.dev/~no-priv/+editlanguages') | 184 | ... 'http://launchpad.dev/~no-priv/+editlanguages') |
292 | @@ -187,33 +193,36 @@ | |||
293 | 187 | 193 | ||
294 | 188 | So if No Privileges Person were to visit the Ask a Question page for | 194 | So if No Privileges Person were to visit the Ask a Question page for |
295 | 189 | Thunderbird directly, he will see that Japanese, as well English (the | 195 | Thunderbird directly, he will see that Japanese, as well English (the |
299 | 190 | default supported language), have asterisks next to them in | 196 | default supported language), have asterisks next to them in the Language |
300 | 191 | the Language list. This indicates that he can ask a question in | 197 | list. This indicates that he can ask a question in Japanese or English |
301 | 192 | Japanese or English and expect someone to reply in the same language. | 198 | and expect someone to reply in the same language. |
302 | 193 | 199 | ||
303 | 194 | >>> user_browser.open( | 200 | >>> user_browser.open( |
305 | 195 | ... 'http://answers.launchpad.dev/thunderbird/+addquestion') | 201 | ... 'http://answers.launchpad.dev/thunderbird/+addquestion') |
306 | 196 | >>> print user_browser.getControl('Language').displayOptions | 202 | >>> print user_browser.getControl('Language').displayOptions |
307 | 197 | ['English (en) *', 'Japanese (ja) *'] | 203 | ['English (en) *', 'Japanese (ja) *'] |
308 | 198 | 204 | ||
315 | 199 | The supported languages will not be shown immediately when Sample | 205 | The supported languages will not be shown immediately when Sample Person |
316 | 200 | Person asks a question Thunderbird question from the context of the | 206 | asks a question Thunderbird question from the context of the Mozilla |
317 | 201 | Mozilla Project. | 207 | Project. |
318 | 202 | 208 | ||
319 | 203 | 209 | ||
320 | 204 | === Ask a non-English question about a Product in a ProjectGroup === | 210 | Ask a non-English question about a Product in a ProjectGroup |
321 | 211 | ............................................................ | ||
322 | 205 | 212 | ||
323 | 206 | Supported languages are only shown after the user submits the 'Product' | 213 | Supported languages are only shown after the user submits the 'Product' |
324 | 207 | associated with the project. When a user enters the 'Product' | 214 | associated with the project. When a user enters the 'Product' |
325 | 208 | information incorrectly we cannot show the supported languages to the | 215 | information incorrectly we cannot show the supported languages to the |
326 | 209 | user. | 216 | user. |
327 | 210 | 217 | ||
329 | 211 | ==== Supported languages aren't displayed after choosing a product ==== | 218 | |
330 | 219 | Supported languages aren't displayed after choosing a product | ||
331 | 220 | ............................................................. | ||
332 | 212 | 221 | ||
333 | 213 | XXX sinzui 2007-05-02 #111793 (Supported languages will not be shown in | 222 | XXX sinzui 2007-05-02 #111793 (Supported languages will not be shown in |
337 | 214 | some cases when asking questions from the ProjectGroup facet) | 223 | some cases when asking questions from the ProjectGroup facet) No |
338 | 215 | No Privileges Person visits the Ask a question page from a project just | 224 | Privileges Person visits the Ask a question page from a project just as |
339 | 216 | as No Privileged Person did above, but this time in wants to do so in | 225 | No Privileged Person did above, but this time in wants to do so in |
340 | 217 | Japanese. | 226 | Japanese. |
341 | 218 | 227 | ||
342 | 219 | >>> user_browser.open('http://answers.launchpad.dev/mozilla') | 228 | >>> user_browser.open('http://answers.launchpad.dev/mozilla') |
343 | @@ -221,22 +230,23 @@ | |||
344 | 221 | >>> print user_browser.title | 230 | >>> print user_browser.title |
345 | 222 | Ask a question... | 231 | Ask a question... |
346 | 223 | 232 | ||
350 | 224 | The page displays a list of products associated with the project. | 233 | The page displays a list of products associated with the project. The |
351 | 225 | The first item in the list is the default value, and it will be | 234 | first item in the list is the default value, and it will be submitted if |
352 | 226 | submitted if the user does not change it. | 235 | the user does not change it. |
353 | 227 | 236 | ||
354 | 228 | >>> print user_browser.getControl('Project').displayOptions | 237 | >>> print user_browser.getControl('Project').displayOptions |
355 | 229 | ['Mozilla Firefox', 'Mozilla Thunderbird'] | 238 | ['Mozilla Firefox', 'Mozilla Thunderbird'] |
356 | 239 | |||
357 | 230 | >>> print user_browser.getControl('Project').displayValue | 240 | >>> print user_browser.getControl('Project').displayValue |
358 | 231 | ['Mozilla Firefox'] | 241 | ['Mozilla Firefox'] |
359 | 232 | 242 | ||
360 | 233 | Like for the regular workflow, the user is shown a list of languages, | 243 | Like for the regular workflow, the user is shown a list of languages, |
361 | 234 | with the supported languages flagged with an asterisk. Note that only | 244 | with the supported languages flagged with an asterisk. Note that only |
367 | 235 | English is flagged because we do not know which Product the | 245 | English is flagged because we do not know which Product the question is |
368 | 236 | question is about. Without knowing the product, we cannot flag the | 246 | about. Without knowing the product, we cannot flag the supported |
369 | 237 | supported languages other than the default language of English. If the | 247 | languages other than the default language of English. If the user were |
370 | 238 | user were to submit his question in another language, he might find | 248 | to submit his question in another language, he might find that the |
371 | 239 | that the language is supported on the next page. | 249 | language is supported on the next page. |
372 | 240 | 250 | ||
373 | 241 | >>> print user_browser.getControl('Language').displayOptions | 251 | >>> print user_browser.getControl('Language').displayOptions |
374 | 242 | ['English (en) *', 'Japanese (ja)'] | 252 | ['English (en) *', 'Japanese (ja)'] |
375 | @@ -252,10 +262,10 @@ | |||
376 | 252 | ... 'Problem displaying complex SVG') | 262 | ... 'Problem displaying complex SVG') |
377 | 253 | >>> user_browser.getControl('Continue').click() | 263 | >>> user_browser.getControl('Continue').click() |
378 | 254 | 264 | ||
383 | 255 | He's shown a list of similar questions related to the product | 265 | He's shown a list of similar questions related to the product Firefox. |
384 | 256 | Firefox. He can see which of his preferred languages are supported | 266 | He can see which of his preferred languages are supported for the |
385 | 257 | for the Firefox product by reviewing which languages has asterisks | 267 | Firefox product by reviewing which languages has asterisks in the |
386 | 258 | in the Languages list--only English in the example. | 268 | Languages list--only English in the example. |
387 | 259 | 269 | ||
388 | 260 | >>> print user_browser.getControl('Language').displayOptions | 270 | >>> print user_browser.getControl('Language').displayOptions |
389 | 261 | ['English (en) *', 'Japanese (ja)'] | 271 | ['English (en) *', 'Japanese (ja)'] |
390 | @@ -273,15 +283,17 @@ | |||
391 | 273 | 283 | ||
392 | 274 | If No Privileges Person asks a question in Japanese, it will be | 284 | If No Privileges Person asks a question in Japanese, it will be |
393 | 275 | supported by Dafydd, but No Privileges Person will never know that. | 285 | supported by Dafydd, but No Privileges Person will never know that. |
399 | 276 | Let's stop here. The rest of this scenario is just adding a question | 286 | Let's stop here. The rest of this scenario is just adding a question as |
400 | 277 | as described above--filling in a description and submitting the data | 287 | described above--filling in a description and submitting the data with |
401 | 278 | with the 'Post Question' button. | 288 | the 'Post Question' button. |
402 | 279 | 289 | ||
403 | 280 | ==== Supported languages are displayed after the submitting a product ==== | 290 | |
404 | 291 | Supported languages are displayed after the submitting a product | ||
405 | 292 | ................................................................ | ||
406 | 281 | 293 | ||
407 | 282 | Let's try this again from the starting page, but this time, No | 294 | Let's try this again from the starting page, but this time, No |
410 | 283 | Privileges Person correctly chooses Thunderbird as the subject of | 295 | Privileges Person correctly chooses Thunderbird as the subject of his |
411 | 284 | his question. | 296 | question. |
412 | 285 | 297 | ||
413 | 286 | >>> user_browser.open('http://answers.launchpad.dev/mozilla') | 298 | >>> user_browser.open('http://answers.launchpad.dev/mozilla') |
414 | 287 | >>> user_browser.getLink('Ask a question').click() | 299 | >>> user_browser.getLink('Ask a question').click() |
415 | @@ -295,38 +307,41 @@ | |||
416 | 295 | 307 | ||
417 | 296 | >>> print user_browser.getControl('Language').displayOptions | 308 | >>> print user_browser.getControl('Language').displayOptions |
418 | 297 | ['English (en) *', 'Japanese (ja)'] | 309 | ['English (en) *', 'Japanese (ja)'] |
419 | 310 | |||
420 | 298 | >>> user_browser.getControl('Summary').value = ( | 311 | >>> user_browser.getControl('Summary').value = ( |
421 | 299 | ... 'Problem displaying complex SVG') | 312 | ... 'Problem displaying complex SVG') |
422 | 300 | >>> user_browser.getControl('Continue').click() | 313 | >>> user_browser.getControl('Continue').click() |
423 | 301 | 314 | ||
430 | 302 | The product Thunderbird that he selected on the previous screen is | 315 | The product Thunderbird that he selected on the previous screen is still |
431 | 303 | still selected. He can see that this product has support for Japanese | 316 | selected. He can see that this product has support for Japanese as well |
432 | 304 | as well as English when he sees the asterisks next to both in the | 317 | as English when he sees the asterisks next to both in the Languages |
433 | 305 | Languages list. Japanese is supported because Dafydd speaks Japanese | 318 | list. Japanese is supported because Dafydd speaks Japanese and is an |
434 | 306 | and is an answer contact for Thunderbird. We see this only after a | 319 | answer contact for Thunderbird. We see this only after a question |
435 | 307 | question summary is submitted for a product. | 320 | summary is submitted for a product. |
436 | 308 | 321 | ||
437 | 309 | >>> print user_browser.getControl('Language').displayOptions | 322 | >>> print user_browser.getControl('Language').displayOptions |
438 | 310 | ['English (en) *', 'Japanese (ja) *'] | 323 | ['English (en) *', 'Japanese (ja) *'] |
439 | 311 | 324 | ||
443 | 312 | No Privileges Person sets the language to Japanese, changes his | 325 | No Privileges Person sets the language to Japanese, changes his question |
444 | 313 | question summary, writes a description, and submits the form with the | 326 | summary, writes a description, and submits the form with the 'Post |
445 | 314 | 'Post Question' button. | 327 | Question' button. |
446 | 315 | 328 | ||
447 | 316 | >>> print user_browser.getControl('Project').displayValue | 329 | >>> print user_browser.getControl('Project').displayValue |
448 | 317 | ['Mozilla Thunderbird'] | 330 | ['Mozilla Thunderbird'] |
449 | 331 | |||
450 | 318 | >>> user_browser.getControl('Japanese (ja) *').selected = True | 332 | >>> user_browser.getControl('Japanese (ja) *').selected = True |
451 | 319 | >>> user_browser.getControl('Summary').value = ( | 333 | >>> user_browser.getControl('Summary').value = ( |
452 | 320 | ... 'Pretend this is written in Japanese') | 334 | ... 'Pretend this is written in Japanese') |
453 | 321 | >>> user_browser.getControl('Description').value = ( | 335 | >>> user_browser.getControl('Description').value = ( |
455 | 322 | ... "Something in kanji and hiragana.") | 336 | ... "Something in kanji and hiragana.") |
456 | 323 | >>> user_browser.getControl('Post Question').click() | 337 | >>> user_browser.getControl('Post Question').click() |
457 | 324 | 338 | ||
461 | 325 | The user is taken to page displaying his question. Changing the | 339 | The user is taken to page displaying his question. Changing the language |
462 | 326 | language or the summary did not search for similar questions | 340 | or the summary did not search for similar questions again--the question |
463 | 327 | again--the question is created. | 341 | is created. |
464 | 328 | 342 | ||
465 | 329 | >>> user_browser.url | 343 | >>> user_browser.url |
466 | 330 | '.../thunderbird/+question/...' | 344 | '.../thunderbird/+question/...' |
467 | 345 | |||
468 | 331 | >>> print user_browser.title | 346 | >>> print user_browser.title |
469 | 332 | Question #... : Questions : Mozilla Thunderbird | 347 | Question #... : Questions : Mozilla Thunderbird |
470 | 333 | 348 | ||
471 | === modified file 'lib/lp/answers/stories/questions-index.txt' | |||
472 | --- lib/lp/answers/stories/questions-index.txt 2010-11-15 23:55:43 +0000 | |||
473 | +++ lib/lp/answers/stories/questions-index.txt 2010-12-18 00:58:15 +0000 | |||
474 | @@ -14,7 +14,7 @@ | |||
475 | 14 | >>> firefox.answers_usage = ServiceUsage.LAUNCHPAD | 14 | >>> firefox.answers_usage = ServiceUsage.LAUNCHPAD |
476 | 15 | >>> ubuntu.answers_usage = ServiceUsage.LAUNCHPAD | 15 | >>> ubuntu.answers_usage = ServiceUsage.LAUNCHPAD |
477 | 16 | >>> logout() | 16 | >>> logout() |
479 | 17 | >>> transaction.commit() | 17 | >>> transaction.commit() |
480 | 18 | 18 | ||
481 | 19 | >>> anon_browser.open('http://answers.launchpad.dev/') | 19 | >>> anon_browser.open('http://answers.launchpad.dev/') |
482 | 20 | >>> print anon_browser.title | 20 | >>> print anon_browser.title |
483 | @@ -26,7 +26,7 @@ | |||
484 | 26 | ... anon_browser.contents, 'latest-questions-asked') | 26 | ... anon_browser.contents, 'latest-questions-asked') |
485 | 27 | >>> print latest_questions_asked.first('h2').renderContents() | 27 | >>> print latest_questions_asked.first('h2').renderContents() |
486 | 28 | Latest questions asked | 28 | Latest questions asked |
488 | 29 | >>> for row in latest_questions_asked.fetch('tr', 'noted'): | 29 | >>> for row in latest_questions_asked.fetch('tr', 'lesser'): |
489 | 30 | ... row.first('a').renderContents() | 30 | ... row.first('a').renderContents() |
490 | 31 | 'Problemas de Impress\xc3\xa3o no Firefox' | 31 | 'Problemas de Impress\xc3\xa3o no Firefox' |
491 | 32 | 'Problema al recompilar kernel con soporte smp (doble-n\xc3\xbacleo)' | 32 | 'Problema al recompilar kernel con soporte smp (doble-n\xc3\xbacleo)' |
492 | @@ -40,7 +40,7 @@ | |||
493 | 40 | ... anon_browser.contents, 'latest-questions-solved') | 40 | ... anon_browser.contents, 'latest-questions-solved') |
494 | 41 | >>> print latest_questions_solved.first('h2').renderContents() | 41 | >>> print latest_questions_solved.first('h2').renderContents() |
495 | 42 | Latest questions solved | 42 | Latest questions solved |
497 | 43 | >>> for row in latest_questions_solved.fetch('tr', 'noted'): | 43 | >>> for row in latest_questions_solved.fetch('tr', 'lesser'): |
498 | 44 | ... row.first('a').renderContents() | 44 | ... row.first('a').renderContents() |
499 | 45 | 'mailto: problem in webpage' | 45 | 'mailto: problem in webpage' |
500 | 46 | 46 | ||
501 | 47 | 47 | ||
502 | === modified file 'lib/lp/answers/templates/question-listing-detailed.pt' | |||
503 | --- lib/lp/answers/templates/question-listing-detailed.pt 2009-07-17 17:59:07 +0000 | |||
504 | +++ lib/lp/answers/templates/question-listing-detailed.pt 2010-12-18 00:58:15 +0000 | |||
505 | @@ -4,7 +4,7 @@ | |||
506 | 4 | xmlns:i18n="http://xml.zope.org/namespaces/i18n"> | 4 | xmlns:i18n="http://xml.zope.org/namespaces/i18n"> |
507 | 5 | <tal:description | 5 | <tal:description |
508 | 6 | define="global description context/description/fmt:obfuscate-email/fmt:shorten/320" /> | 6 | define="global description context/description/fmt:obfuscate-email/fmt:shorten/320" /> |
510 | 7 | <tr class="noted" | 7 | <tr class="lesser" |
511 | 8 | tal:attributes="title description"> | 8 | tal:attributes="title description"> |
512 | 9 | <td class="icon left"> | 9 | <td class="icon left"> |
513 | 10 | <img alt="" src="/@@/question" /> | 10 | <img alt="" src="/@@/question" /> |
514 | @@ -20,7 +20,7 @@ | |||
515 | 20 | /> | 20 | /> |
516 | 21 | (<span tal:replace="context/status/title">Approved</span>) | 21 | (<span tal:replace="context/status/title">Approved</span>) |
517 | 22 | </div> | 22 | </div> |
519 | 23 | <div class="lesser"> | 23 | <div> |
520 | 24 | posted | 24 | posted |
521 | 25 | <span | 25 | <span |
522 | 26 | tal:attributes="title context/datecreated/fmt:datetime" | 26 | tal:attributes="title context/datecreated/fmt:datetime" |
523 | 27 | 27 | ||
524 | === modified file 'lib/lp/registry/browser/distribution.py' | |||
525 | --- lib/lp/registry/browser/distribution.py 2010-11-28 00:47:39 +0000 | |||
526 | +++ lib/lp/registry/browser/distribution.py 2010-12-18 00:58:15 +0000 | |||
527 | @@ -829,13 +829,14 @@ | |||
528 | 829 | return all_series | 829 | return all_series |
529 | 830 | 830 | ||
530 | 831 | def getCssClass(self, series): | 831 | def getCssClass(self, series): |
532 | 832 | """The highlighted, unhighlighted, or dimmed CSS class.""" | 832 | """The highlight, lowlight, or normal CSS class.""" |
533 | 833 | if series.status == SeriesStatus.DEVELOPMENT: | 833 | if series.status == SeriesStatus.DEVELOPMENT: |
535 | 834 | return 'highlighted' | 834 | return 'highlight' |
536 | 835 | elif series.status == SeriesStatus.OBSOLETE: | 835 | elif series.status == SeriesStatus.OBSOLETE: |
538 | 836 | return 'dimmed' | 836 | return 'lowlight' |
539 | 837 | else: | 837 | else: |
541 | 838 | return 'unhighlighted' | 838 | # This is normal presentation. |
542 | 839 | return '' | ||
543 | 839 | 840 | ||
544 | 840 | 841 | ||
545 | 841 | class DistributionChangeMirrorAdminView(RegistryEditFormView): | 842 | class DistributionChangeMirrorAdminView(RegistryEditFormView): |
546 | 842 | 843 | ||
547 | === modified file 'lib/lp/registry/browser/product.py' | |||
548 | --- lib/lp/registry/browser/product.py 2010-11-23 23:22:27 +0000 | |||
549 | +++ lib/lp/registry/browser/product.py 2010-12-18 00:58:15 +0000 | |||
550 | @@ -810,13 +810,14 @@ | |||
551 | 810 | 810 | ||
552 | 811 | @property | 811 | @property |
553 | 812 | def css_class(self): | 812 | def css_class(self): |
555 | 813 | """The highlighted, unhighlighted, or dimmed CSS class.""" | 813 | """The highlight, lowlight, or normal CSS class.""" |
556 | 814 | if self.is_development_focus: | 814 | if self.is_development_focus: |
558 | 815 | return 'highlighted' | 815 | return 'highlight' |
559 | 816 | elif self.status == SeriesStatus.OBSOLETE: | 816 | elif self.status == SeriesStatus.OBSOLETE: |
561 | 817 | return 'dimmed' | 817 | return 'lowlight' |
562 | 818 | else: | 818 | else: |
564 | 819 | return 'unhighlighted' | 819 | # This is normal presentation. |
565 | 820 | return '' | ||
566 | 820 | 821 | ||
567 | 821 | 822 | ||
568 | 822 | class SeriesWithReleases(DecoratedSeries): | 823 | class SeriesWithReleases(DecoratedSeries): |
569 | 823 | 824 | ||
570 | === modified file 'lib/lp/registry/browser/tests/distribution-views.txt' | |||
571 | --- lib/lp/registry/browser/tests/distribution-views.txt 2010-11-29 19:08:26 +0000 | |||
572 | +++ lib/lp/registry/browser/tests/distribution-views.txt 2010-12-18 00:58:15 +0000 | |||
573 | @@ -306,10 +306,10 @@ | |||
574 | 306 | 306 | ||
575 | 307 | >>> for styled_series in view.styled_series: | 307 | >>> for styled_series in view.styled_series: |
576 | 308 | ... print styled_series['series'].name, styled_series['css_class'] | 308 | ... print styled_series['series'].name, styled_series['css_class'] |
581 | 309 | breezy-autotest unhighlighted | 309 | breezy-autotest |
582 | 310 | grumpy unhighlighted | 310 | grumpy |
583 | 311 | hoary highlighted | 311 | hoary highlight |
584 | 312 | warty unhighlighted | 312 | warty |
585 | 313 | 313 | ||
586 | 314 | 314 | ||
587 | 315 | Distribution +ppas | 315 | Distribution +ppas |
588 | 316 | 316 | ||
589 | === modified file 'lib/lp/registry/stories/distributionmirror/xx-distribution-mirrors.txt' | |||
590 | --- lib/lp/registry/stories/distributionmirror/xx-distribution-mirrors.txt 2010-03-26 02:27:44 +0000 | |||
591 | +++ lib/lp/registry/stories/distributionmirror/xx-distribution-mirrors.txt 2010-12-18 00:58:15 +0000 | |||
592 | @@ -1,4 +1,5 @@ | |||
594 | 1 | = Distribution mirrors = | 1 | Distribution mirrors |
595 | 2 | ==================== | ||
596 | 2 | 3 | ||
597 | 3 | There are several pages which list the mirrors of a given distribution based | 4 | There are several pages which list the mirrors of a given distribution based |
598 | 4 | on their status and content. | 5 | on their status and content. |
599 | @@ -11,13 +12,13 @@ | |||
600 | 11 | ... country = extract_text(header.find('th')) | 12 | ... country = extract_text(header.find('th')) |
601 | 12 | ... mirrors = [] | 13 | ... mirrors = [] |
602 | 13 | ... for tr in header.findNextSiblings('tr'): | 14 | ... for tr in header.findNextSiblings('tr'): |
604 | 14 | ... if 'highlighted' in str(tr.attrs): | 15 | ... if 'highlight' in str(tr.attrs): |
605 | 15 | ... print "%s: %s" % (country, mirrors) | 16 | ... print "%s: %s" % (country, mirrors) |
606 | 16 | ... country = extract_text(tr.find('th')) | 17 | ... country = extract_text(tr.find('th')) |
607 | 17 | ... if country == 'Total': | 18 | ... if country == 'Total': |
608 | 18 | ... break | 19 | ... break |
609 | 19 | ... mirrors = [] | 20 | ... mirrors = [] |
611 | 20 | ... elif 'note' in str(tr.attrs): | 21 | ... elif 'lesser' in str(tr.attrs): |
612 | 21 | ... # This is an empty row to visually separate the mirrors | 22 | ... # This is an empty row to visually separate the mirrors |
613 | 22 | ... # from different countries, so we'll just skip it. | 23 | ... # from different countries, so we'll just skip it. |
614 | 23 | ... pass | 24 | ... pass |
615 | @@ -25,7 +26,8 @@ | |||
616 | 25 | ... tds = tuple([extract_text(td) for td in tr.findAll('td')]) | 26 | ... tds = tuple([extract_text(td) for td in tr.findAll('td')]) |
617 | 26 | ... mirrors.append(tds) | 27 | ... mirrors.append(tds) |
618 | 27 | 28 | ||
620 | 28 | == Official mirrors == | 29 | Official mirrors |
621 | 30 | ---------------- | ||
622 | 29 | 31 | ||
623 | 30 | These are the mirrors that show up in public listings. They're highly | 32 | These are the mirrors that show up in public listings. They're highly |
624 | 31 | reliable and we strongly encourage their use. | 33 | reliable and we strongly encourage their use. |
625 | @@ -48,7 +50,8 @@ | |||
626 | 48 | United Kingdom: [(u'Canonical-archive', u'http', u'100 Mbps', | 50 | United Kingdom: [(u'Canonical-archive', u'http', u'100 Mbps', |
627 | 49 | u'Last update unknown')] | 51 | u'Last update unknown')] |
628 | 50 | 52 | ||
630 | 51 | >>> find_tags_by_class(browser.contents, 'distromirrorstatusSIXHOURSBEHIND') | 53 | >>> find_tags_by_class( |
631 | 54 | ... browser.contents, 'distromirrorstatusSIXHOURSBEHIND') | ||
632 | 52 | [<span class="distromirrorstatusSIXHOURSBEHIND">Six hours behind</span>] | 55 | [<span class="distromirrorstatusSIXHOURSBEHIND">Six hours behind</span>] |
633 | 53 | >>> find_tags_by_class(browser.contents, 'distromirrorstatusUNKNOWN')[0] | 56 | >>> find_tags_by_class(browser.contents, 'distromirrorstatusUNKNOWN')[0] |
634 | 54 | <span class="distromirrorstatusUNKNOWN">Last update unknown</span> | 57 | <span class="distromirrorstatusUNKNOWN">Last update unknown</span> |
635 | @@ -60,14 +63,15 @@ | |||
636 | 60 | >>> browser.url | 63 | >>> browser.url |
637 | 61 | 'http://launchpad.dev/ubuntu/+cdmirrors' | 64 | 'http://launchpad.dev/ubuntu/+cdmirrors' |
638 | 62 | >>> print_mirrors_by_countries(browser.contents) | 65 | >>> print_mirrors_by_countries(browser.contents) |
640 | 63 | France: | 66 | France: |
641 | 64 | [(u'Releases-mirror', u'http', u'2 Mbps'), | 67 | [(u'Releases-mirror', u'http', u'2 Mbps'), |
642 | 65 | (u'Unreachable-mirror', u'http', u'512 Kbps')] | 68 | (u'Unreachable-mirror', u'http', u'512 Kbps')] |
643 | 66 | Germany: [(u'Releases-mirror2', u'http', u'2 Mbps')] | 69 | Germany: [(u'Releases-mirror2', u'http', u'2 Mbps')] |
644 | 67 | United Kingdom: [(u'Canonical-releases', u'http', u'100 Mbps')] | 70 | United Kingdom: [(u'Canonical-releases', u'http', u'100 Mbps')] |
645 | 68 | 71 | ||
646 | 69 | 72 | ||
648 | 70 | === Disabled mirrors === | 73 | Disabled mirrors |
649 | 74 | ................ | ||
650 | 71 | 75 | ||
651 | 72 | These are official mirrors for which the last check wasn't successful (e.g. | 76 | These are official mirrors for which the last check wasn't successful (e.g. |
652 | 73 | they were out of date, missing some content, etc). This list can only be | 77 | they were out of date, missing some content, etc). This list can only be |
653 | @@ -88,7 +92,8 @@ | |||
654 | 88 | ...We don't know of any Disabled Mirrors for this distribution... | 92 | ...We don't know of any Disabled Mirrors for this distribution... |
655 | 89 | 93 | ||
656 | 90 | 94 | ||
658 | 91 | == Unofficial mirrors == | 95 | Unofficial mirrors |
659 | 96 | ------------------ | ||
660 | 92 | 97 | ||
661 | 93 | The unofficial mirrors are listed in a separate page, which is not public. | 98 | The unofficial mirrors are listed in a separate page, which is not public. |
662 | 94 | It's only visible to distro owners, mirror admins of the distro or | 99 | It's only visible to distro owners, mirror admins of the distro or |
663 | @@ -107,7 +112,9 @@ | |||
664 | 107 | >>> print_mirrors_by_countries(browser.contents) | 112 | >>> print_mirrors_by_countries(browser.contents) |
665 | 108 | France: [(u'Invalid-mirror', u'http', u'2 Mbps', u'Last update unknown')] | 113 | France: [(u'Invalid-mirror', u'http', u'2 Mbps', u'Last update unknown')] |
666 | 109 | 114 | ||
668 | 110 | == Pending-review mirrors == | 115 | |
669 | 116 | Pending-review mirrors | ||
670 | 117 | ---------------------- | ||
671 | 111 | 118 | ||
672 | 112 | These are the mirrors that were created but none of the mirror admins have | 119 | These are the mirrors that were created but none of the mirror admins have |
673 | 113 | looked at yet. Since all pending mirrors are grouped on one page the | 120 | looked at yet. Since all pending mirrors are grouped on one page the |
674 | @@ -122,7 +129,8 @@ | |||
675 | 122 | >>> browser = setupBrowser(auth='Basic karl@canonical.com:test') | 129 | >>> browser = setupBrowser(auth='Basic karl@canonical.com:test') |
676 | 123 | >>> # Register an unreviewed archive mirror. | 130 | >>> # Register an unreviewed archive mirror. |
677 | 124 | >>> browser.open('http://launchpad.dev/ubuntu/+newmirror') | 131 | >>> browser.open('http://launchpad.dev/ubuntu/+newmirror') |
679 | 125 | >>> browser.getControl(name='field.displayname').value = 'Kabul LUG mirror' | 132 | >>> browser.getControl( |
680 | 133 | ... name='field.displayname').value = 'Kabul LUG mirror' | ||
681 | 126 | >>> browser.getControl(name='field.ftp_base_url').value = ( | 134 | >>> browser.getControl(name='field.ftp_base_url').value = ( |
682 | 127 | ... 'ftp://kabullug.org/ubuntu') | 135 | ... 'ftp://kabullug.org/ubuntu') |
683 | 128 | >>> browser.getControl(name='field.country').value = ['1'] # Afghanistan | 136 | >>> browser.getControl(name='field.country').value = ['1'] # Afghanistan |
684 | 129 | 137 | ||
685 | === modified file 'lib/lp/registry/stories/productseries/xx-productseries-series.txt' | |||
686 | --- lib/lp/registry/stories/productseries/xx-productseries-series.txt 2010-08-13 01:20:31 +0000 | |||
687 | +++ lib/lp/registry/stories/productseries/xx-productseries-series.txt 2010-12-18 00:58:15 +0000 | |||
688 | @@ -38,7 +38,7 @@ | |||
689 | 38 | it is highlighted. | 38 | it is highlighted. |
690 | 39 | 39 | ||
691 | 40 | >>> print series_trunk['class'] | 40 | >>> print series_trunk['class'] |
693 | 41 | highlighted series | 41 | highlight series |
694 | 42 | 42 | ||
695 | 43 | The 1.0 series is not the focus of development, it is active, so it is not | 43 | The 1.0 series is not the focus of development, it is active, so it is not |
696 | 44 | highlighted. | 44 | highlighted. |
697 | @@ -52,9 +52,9 @@ | |||
698 | 52 | The 1.0 branch of the Mozilla web browser. Currently, this is the ... | 52 | The 1.0 branch of the Mozilla web browser. Currently, this is the ... |
699 | 53 | 53 | ||
700 | 54 | >>> print series_1_0['class'] | 54 | >>> print series_1_0['class'] |
702 | 55 | unhighlighted series | 55 | series |
703 | 56 | 56 | ||
705 | 57 | Any user can see that obsolete series are dimmed. Obsolete series do not | 57 | Any user can see that obsolete series are lowlight. Obsolete series do not |
706 | 58 | show bug status counts because it is expensive to retrieve the information. | 58 | show bug status counts because it is expensive to retrieve the information. |
707 | 59 | 59 | ||
708 | 60 | >>> series_xxx = find_tag_by_id(content, 'series-xxx') | 60 | >>> series_xxx = find_tag_by_id(content, 'series-xxx') |
709 | @@ -64,4 +64,4 @@ | |||
710 | 64 | Use true GTK UI. | 64 | Use true GTK UI. |
711 | 65 | 65 | ||
712 | 66 | >>> print series_xxx['class'] | 66 | >>> print series_xxx['class'] |
714 | 67 | dimmed series | 67 | lowlight series |
715 | 68 | 68 | ||
716 | === modified file 'lib/lp/registry/templates/distributionmirror-macros.pt' | |||
717 | --- lib/lp/registry/templates/distributionmirror-macros.pt 2009-12-09 19:41:23 +0000 | |||
718 | +++ lib/lp/registry/templates/distributionmirror-macros.pt 2010-12-18 00:58:15 +0000 | |||
719 | @@ -16,7 +16,7 @@ | |||
720 | 16 | <table class="listing" id="mirrors_list"> | 16 | <table class="listing" id="mirrors_list"> |
721 | 17 | <tbody> | 17 | <tbody> |
722 | 18 | <tal:country_and_mirrors repeat="country_and_mirrors mirrors_by_country"> | 18 | <tal:country_and_mirrors repeat="country_and_mirrors mirrors_by_country"> |
724 | 19 | <tr class="highlighted"> | 19 | <tr class="highlight"> |
725 | 20 | <th colspan="2" style="text-align: left" | 20 | <th colspan="2" style="text-align: left" |
726 | 21 | tal:content="country_and_mirrors/country" /> | 21 | tal:content="country_and_mirrors/country" /> |
727 | 22 | <th style="text-align: left" | 22 | <th style="text-align: left" |
728 | @@ -59,12 +59,12 @@ | |||
729 | 59 | Include a blank row after the last entry of a country to provide | 59 | Include a blank row after the last entry of a country to provide |
730 | 60 | vertical spacing to separate the next country. | 60 | vertical spacing to separate the next country. |
731 | 61 | </tal:comment> | 61 | </tal:comment> |
733 | 62 | <tr class="note"> | 62 | <tr class="lesser"> |
734 | 63 | <td> </td> | 63 | <td> </td> |
735 | 64 | </tr> | 64 | </tr> |
736 | 65 | 65 | ||
737 | 66 | </tal:country_and_mirrors> | 66 | </tal:country_and_mirrors> |
739 | 67 | <tr class="highlighted"> | 67 | <tr class="highlight"> |
740 | 68 | <th colspan="5" style="text-align: left; font-weight: bold;">Total</th> | 68 | <th colspan="5" style="text-align: left; font-weight: bold;">Total</th> |
741 | 69 | </tr> | 69 | </tr> |
742 | 70 | <tr> | 70 | <tr> |
743 | 71 | 71 | ||
744 | === modified file 'lib/lp/registry/templates/productreleasefile-macros.pt' | |||
745 | --- lib/lp/registry/templates/productreleasefile-macros.pt 2010-01-15 20:42:44 +0000 | |||
746 | +++ lib/lp/registry/templates/productreleasefile-macros.pt 2010-12-18 00:58:15 +0000 | |||
747 | @@ -26,7 +26,7 @@ | |||
748 | 26 | define="last_downloaded lfa/last_downloaded"> | 26 | define="last_downloaded lfa/last_downloaded"> |
749 | 27 | <span tal:replace="lfa/hits/fmt:intcomma">10</span> | 27 | <span tal:replace="lfa/hits/fmt:intcomma">10</span> |
750 | 28 | <br /> | 28 | <br /> |
752 | 29 | <span class="extra-discreet greyed-out"> | 29 | <span class="lesser greyed-out"> |
753 | 30 | last downloaded | 30 | last downloaded |
754 | 31 | <strong tal:condition="not:last_downloaded/days"> | 31 | <strong tal:condition="not:last_downloaded/days"> |
755 | 32 | today | 32 | today |
756 | 33 | 33 | ||
757 | === modified file 'lib/lp/registry/templates/team-editproposed.pt' | |||
758 | --- lib/lp/registry/templates/team-editproposed.pt 2009-09-01 19:43:30 +0000 | |||
759 | +++ lib/lp/registry/templates/team-editproposed.pt 2010-12-18 00:58:15 +0000 | |||
760 | @@ -32,8 +32,8 @@ | |||
761 | 32 | <td style="text-align: left"> | 32 | <td style="text-align: left"> |
762 | 33 | <span tal:replace="structure member/fmt:link" /> | 33 | <span tal:replace="structure member/fmt:link" /> |
763 | 34 | <br /> | 34 | <br /> |
766 | 35 | <span class="extra-discreet"> | 35 | <span class="lesser"> |
767 | 36 | (Applied on | 36 | (Applied on |
768 | 37 | <span tal:replace="membership/date_proposed/fmt:date" />) | 37 | <span tal:replace="membership/date_proposed/fmt:date" />) |
769 | 38 | </span> | 38 | </span> |
770 | 39 | </td> | 39 | </td> |
771 | 40 | 40 | ||
772 | === modified file 'lib/lp/soyuz/browser/sourcepackagerelease.py' | |||
773 | --- lib/lp/soyuz/browser/sourcepackagerelease.py 2010-07-02 20:32:58 +0000 | |||
774 | +++ lib/lp/soyuz/browser/sourcepackagerelease.py 2010-12-18 00:58:15 +0000 | |||
775 | @@ -155,5 +155,5 @@ | |||
776 | 155 | return '' | 155 | return '' |
777 | 156 | # Match any string with 2 or more non-consecutive slashes in it. | 156 | # Match any string with 2 or more non-consecutive slashes in it. |
778 | 157 | pattern = re.compile(r'([\S]+/[\S]+/[\S]+)') | 157 | pattern = re.compile(r'([\S]+/[\S]+/[\S]+)') |
780 | 158 | highlight = r'<span class="highlighted">\1</span>' | 158 | highlight = r'<span class="highlight">\1</span>' |
781 | 159 | return pattern.sub(highlight, self.context.copyright) | 159 | return pattern.sub(highlight, self.context.copyright) |
782 | 160 | 160 | ||
783 | === modified file 'lib/lp/soyuz/browser/tests/test_sourcepackagerelease.py' | |||
784 | --- lib/lp/soyuz/browser/tests/test_sourcepackagerelease.py 2010-10-04 19:50:45 +0000 | |||
785 | +++ lib/lp/soyuz/browser/tests/test_sourcepackagerelease.py 2010-12-18 00:58:15 +0000 | |||
786 | @@ -87,7 +87,7 @@ | |||
787 | 87 | 'Downloaded from https://upstream.dom/fnord/no/ and') | 87 | 'Downloaded from https://upstream.dom/fnord/no/ and') |
788 | 88 | expected = ( | 88 | expected = ( |
789 | 89 | 'Downloaded from ' | 89 | 'Downloaded from ' |
791 | 90 | '<span class="highlighted">https://upstream.dom/fnord/no/</span> ' | 90 | '<span class="highlight">https://upstream.dom/fnord/no/</span> ' |
792 | 91 | 'and') | 91 | 'and') |
793 | 92 | view = create_initialized_view( | 92 | view = create_initialized_view( |
794 | 93 | self.source_package_release, '+copyright') | 93 | self.source_package_release, '+copyright') |
795 | @@ -99,7 +99,7 @@ | |||
796 | 99 | 'See /usr/share/common-licenses/GPL') | 99 | 'See /usr/share/common-licenses/GPL') |
797 | 100 | expected = ( | 100 | expected = ( |
798 | 101 | 'See ' | 101 | 'See ' |
800 | 102 | '<span class="highlighted">/usr/share/common-licenses/GPL</span>') | 102 | '<span class="highlight">/usr/share/common-licenses/GPL</span>') |
801 | 103 | view = create_initialized_view( | 103 | view = create_initialized_view( |
802 | 104 | self.source_package_release, '+copyright') | 104 | self.source_package_release, '+copyright') |
803 | 105 | self.assertEqual(expected, view.highlighted_copyright) | 105 | self.assertEqual(expected, view.highlighted_copyright) |
804 | @@ -110,8 +110,8 @@ | |||
805 | 110 | 'See /usr/share/common-licenses/GPL or https://osi.org/mit') | 110 | 'See /usr/share/common-licenses/GPL or https://osi.org/mit') |
806 | 111 | expected = ( | 111 | expected = ( |
807 | 112 | 'See ' | 112 | 'See ' |
810 | 113 | '<span class="highlighted">/usr/share/common-licenses/GPL</span> ' | 113 | '<span class="highlight">/usr/share/common-licenses/GPL</span> ' |
811 | 114 | 'or <span class="highlighted">https://osi.org/mit</span>') | 114 | 'or <span class="highlight">https://osi.org/mit</span>') |
812 | 115 | view = create_initialized_view( | 115 | view = create_initialized_view( |
813 | 116 | self.source_package_release, '+copyright') | 116 | self.source_package_release, '+copyright') |
814 | 117 | self.assertEqual(expected, view.highlighted_copyright) | 117 | self.assertEqual(expected, view.highlighted_copyright) |
The changes look good Curtis. But if I grep for 'class= "highlighted" ' I get six hits:
bzr ls -VR --kind=file --null | xargs -0 grep -In class\= \"highlighted\ " launchpad/ webapp/ error.py: 118: return ('<div class="highlighted" style="' soyuz/browser/ sourcepackagere lease.py: 158: highlight = r'<span class=" highlighted" >\1</span> ' soyuz/browser/ tests/test_ sourcepackagere lease.py: 90: '<span class=" highlighted" >https:/ /upstream. dom/fnord/ no/</span> ' soyuz/browser/ tests/test_ sourcepackagere lease.py: 102: '<span class=" highlighted" >/usr/share/ common- licenses/ GPL</span> ') soyuz/browser/ tests/test_ sourcepackagere lease.py: 113: '<span class=" highlighted" >/usr/share/ common- licenses/ GPL</span> ' soyuz/browser/ tests/test_ sourcepackagere lease.py: 114: 'or <span class=" highlighted" >https:/ /osi.org/ mit</span>')
lib/canonical/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/