Merge lp://staging/~danilo/launchpad/complex-forms into lp://staging/launchpad

Proposed by Данило Шеган
Status: Merged
Merged at revision: not available
Proposed branch: lp://staging/~danilo/launchpad/complex-forms
Merge into: lp://staging/launchpad
Diff against target: None lines
To merge this branch: bzr merge lp://staging/~danilo/launchpad/complex-forms
Reviewer Review Type Date Requested Status
Jeroen T. Vermeulen (community) Approve
Review via email: mp+11047@code.staging.launchpad.net
To post a comment you must log in.
Revision history for this message
Данило Шеган (danilo) wrote :

= Bug #423103, #423104 =

Migrate a few "complex" forms: those which do use LaunchpadForm, but
embedded in a bigger page. Changes are mostly mechanical to make them
3.0-compatible.

== Implementation details ==

Lots of whitespace fixes (replacing tabs with spaces and similar) and
reindentation increase the size of the diff.

For translationimportqueueentry-index.pt, I also improve next_url
handling so we get back to the import queue which we started from
(basically, +imports page is registered on all of IProduct,
IProductSeries, IDistribution, IDistroSeries, IPerson, but they all go
to the same ITranslationImportQueueEntry edit form, and after
submission should go back). A separate test is added for that, though
it does exhibit some Zope testbrowser bugs in referrer handling.

Everything else is just bits and pieces moved around.

I've also moved translation import queue tests into a separate "story"
so they are easier to run when needed.

== Tests ==

bin/test -vvt stories.importqueue -t translations-xpi-import.txt -t productseries-translations-bzr-request -t distroseries-language-pack

== Demo and Q/A ==

translationsimportqueueentry-index.pt:

 https://translations.launchpad.dev/+imports/1
 (and get there through /+imports, /evolution/+imports, /~name16/+imports)

distroseries-language-packs.pt:

 https://translations.launchpad.dev/ubuntu/hoary/+language-packs

productseries-translations-bzr-import.pt:

 https://translations.launchpad.dev/evolution/trunk/+request-bzr-import

productseries-translations-settings.pt:

 https://translations.launchpad.dev/evolution/trunk/+translations-settings

= Launchpad lint =

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

Linting changed files:
  lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt
  lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt
  lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt
  lib/canonical/launchpad/pagetitles.py
  lib/lp/translations/templates/distroseries-language-packs.pt
  lib/lp/translations/browser/translationimportqueue.py
  lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt
  lib/lp/translations/templates/productseries-translations-settings.pt
  lib/lp/translations/templates/productseries-translations-bzr-import.pt
  lib/lp/translations/stories/importqueue/xx-translation-import-queue.txt
  lib/lp/translations/browser/productseries.py
  lib/lp/translations/templates/translationimportqueueentry-index.pt
  lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.txt
  lib/lp/translations/stories/distroseries/xx-distroseries-language-packs.txt

Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

Hi Danilo,

Sheer poetry. My main gripe—because I just _had_ to find one!—is that
you didn't turn the icons into sprites. Any chance of getting that in?

Also, in productseries-translations-settings.pt, the TAL still composes
links to branches the painful way, complete with icons. I was probably
guilty of that myself in the case of the export branch. Can't we use
fmt:link for these?

All this will break some pagetests, but I heard it will make our hair
glow with natural beauty and make our cars use less gasoline.

As for the whitespace cleanup: are you out to prove that emacs is good
for this? Not that I'd mind if you were. :-)

Jeroen

review: Approve
Revision history for this message
Данило Шеган (danilo) wrote :

У сре, 02. 09 2009. у 13:08 +0000, Jeroen T. Vermeulen пише:
> Sheer poetry. My main gripe—because I just _had_ to find one!—is that
> you didn't turn the icons into sprites. Any chance of getting that
> in?

Sure, done that now.

> Also, in productseries-translations-settings.pt, the TAL still
> composes links to branches the painful way, complete with icons. I
> was probably guilty of that myself in the case of the export branch.
> Can't we use fmt:link for these?

Yeah, I did this, but that one of yours caused me the most trouble: you
set an ID on it, and then used that in a pagetest. When using fmt:link,
you can't do that, and there's no getLink() on anything other than the
browser. Doing browser.open(link['href']) caused more trouble then it
helped so I resorted to using browser.getLink(url=branch_name) which
worked, but it was an exercise in its own right.

> All this will break some pagetests, but I heard it will make our hair
> glow with natural beauty and make our cars use less gasoline.

If our cars use less gasoline, what are we going to do with what we are
left on Earth? It's not like we can eat it so we should better spend it
all.

> As for the whitespace cleanup: are you out to prove that emacs is good
> for this? Not that I'd mind if you were. :-)

Nah, I wasn't actually expecting you to review this :)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== removed directory 'lib/canonical/launchpad/pagetests/distroseries'
2=== modified file 'lib/canonical/launchpad/pagetitles.py'
3--- lib/canonical/launchpad/pagetitles.py 2009-09-01 11:09:53 +0000
4+++ lib/canonical/launchpad/pagetitles.py 2009-09-01 11:38:24 +0000
5@@ -943,9 +943,6 @@
6
7 productseries_translations_settings = 'Settings for translations'
8
9-productseries_translations_bzr_import = (
10- 'Request translations import from Bazaar branch')
11-
12 project_add = 'Register a project group with Launchpad'
13
14 project_index = ContextTitle('%s in Launchpad')
15
16=== modified file 'lib/lp/translations/browser/productseries.py'
17--- lib/lp/translations/browser/productseries.py 2009-08-31 14:29:30 +0000
18+++ lib/lp/translations/browser/productseries.py 2009-09-01 11:38:24 +0000
19@@ -435,6 +435,17 @@
20 schema = IProductSeries
21 field_names = []
22
23+ label = "Request one-time import of translations"
24+
25+ @property
26+ def next_url(self):
27+ return canonical_url(self.context)
28+
29+ @property
30+ def page_title(self):
31+ return "One-time import of %s %s translations from bazaar" % (
32+ self.context.product.displayname, self.context.displayname)
33+
34 def __init__(self, context, request):
35 super(ProductSeriesTranslationsBzrImportView, self).__init__(
36 context, request)
37
38=== modified file 'lib/lp/translations/browser/translationimportqueue.py'
39--- lib/lp/translations/browser/translationimportqueue.py 2009-08-31 22:18:05 +0000
40+++ lib/lp/translations/browser/translationimportqueue.py 2009-09-01 19:36:28 +0000
41@@ -111,10 +111,36 @@
42 return field_values
43
44 @property
45+ def cancel_url(self):
46+ """See `LaunchpadFormView`."""
47+ referrer = self.referrer_url
48+ if referrer is None:
49+ translationimportqueue_set = getUtility(ITranslationImportQueue)
50+ return canonical_url(translationimportqueue_set)
51+ else:
52+ return referrer
53+
54+ @property
55+ def referrer_url(self):
56+ referrer = self.request.getHeader('referer')
57+ if referrer != canonical_url(self.context):
58+ return referrer
59+ else:
60+ return None
61+
62+ @property
63 def next_url(self):
64- """Return the URL of the main import queue at 'rosetta/imports'."""
65- translationimportqueue_set = getUtility(ITranslationImportQueue)
66- return canonical_url(translationimportqueue_set)
67+ """See `LaunchpadFormView`."""
68+ # The referer header we want is only available before the view's
69+ # form submits to itself. This field is a hidden input in the form.
70+ referrer = self.request.form.get('next_url')
71+
72+ if (referrer is not None
73+ and referrer.startswith(self.request.getApplicationURL())):
74+ return referrer
75+ else:
76+ translationimportqueue_set = getUtility(ITranslationImportQueue)
77+ return canonical_url(translationimportqueue_set)
78
79 def initialize(self):
80 """Remove some fields based on the entry handled."""
81
82=== renamed file 'lib/canonical/launchpad/pagetests/distroseries/xx-distroseries-language-packs.txt' => 'lib/lp/translations/stories/distroseries/xx-distroseries-language-packs.txt'
83--- lib/canonical/launchpad/pagetests/distroseries/xx-distroseries-language-packs.txt 2009-04-24 09:15:26 +0000
84+++ lib/lp/translations/stories/distroseries/xx-distroseries-language-packs.txt 2009-09-01 21:12:37 +0000
85@@ -54,7 +54,7 @@
86 >>> print extract_text(find_tag_by_id(browser.contents, "language_packs"))
87 Language packs for Ubuntu 5.04
88 ...
89- Current language packs
90+ Active language packs
91 Base pack: 2007-09-10 19:16:01 UTC
92 A complete set of translations for the OS.
93 Delta pack:
94@@ -63,9 +63,9 @@
95 Language pack being tested
96 No pack is being tested right now.
97 Currently unused language packs
98- Delta language pack: 2007-09-10 19:15:19 UTC .
99- Delta language pack: 2007-09-10 19:15:01 UTC .
100- Full language pack: 2007-09-10 19:14:26 UTC .
101+ Delta language pack: 2007-09-10 19:15:19 UTC
102+ Delta language pack: 2007-09-10 19:15:01 UTC
103+ Full language pack: 2007-09-10 19:14:26 UTC
104
105 There is also an option to set/unset whether next language pack generation is
106 a full export:
107
108=== added directory 'lib/lp/translations/stories/importqueue'
109=== renamed file 'lib/lp/translations/stories/standalone/empty.tar.bz2' => 'lib/lp/translations/stories/importqueue/empty.tar.bz2'
110=== renamed file 'lib/lp/translations/stories/standalone/truncated.tar.bz2' => 'lib/lp/translations/stories/importqueue/truncated.tar.bz2'
111=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-edit-autofilling.tar.gz' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.tar.gz'
112=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-edit-autofilling.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.txt'
113--- lib/lp/translations/stories/standalone/xx-translation-import-queue-edit-autofilling.txt 2009-08-30 20:27:52 +0000
114+++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.txt 2009-09-01 21:03:51 +0000
115@@ -7,7 +7,7 @@
116 >>> import os.path
117 >>> test_file_name = os.path.join(
118 ... os.path.dirname(lp.translations.__file__),
119- ... 'stories/standalone/xx-translation-import-queue-edit-autofilling.tar.gz')
120+ ... 'stories/importqueue/xx-translation-import-queue-edit-autofilling.tar.gz')
121 >>> tarball = open(test_file_name)
122
123 >>> browser = setupBrowser(auth='Basic carlos@canonical.com:test')
124
125=== added file 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt'
126--- lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt 1970-01-01 00:00:00 +0000
127+++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt 2009-09-01 20:06:37 +0000
128@@ -0,0 +1,43 @@
129+TranslationImportQueueEntry page
130+================================
131+
132+Submission and cancellation links
133+---------------------------------
134+
135+If we load an import queue entry directly from the global import queue and
136+approve it, we end up back on the global translations import queue.
137+
138+XXX DaniloSegan 2009-09-01: due to Zope bug #98437 we can't test that
139+this works properly when no "referer" header is sent.
140+
141+ >>> admin_browser.open('http://translations.launchpad.dev/+imports')
142+ >>> admin_browser.getLink(url='imports/1').click()
143+ >>> print admin_browser.getLink('Cancel').url
144+ http://translations.launchpad.dev/+imports
145+ >>> admin_browser.getControl('Approve').click()
146+ >>> print admin_browser.url
147+ http://translations.launchpad.dev/+imports
148+
149+Going to the same entry from the Evolution import queue, and then approving
150+it, brings us back to the Evolution import queue.
151+
152+ >>> admin_browser.open(
153+ ... 'http://translations.launchpad.dev/evolution/+imports')
154+ >>> admin_browser.getLink(url='imports/1').click()
155+ >>> print admin_browser.getLink('Cancel').url
156+ http://translations.launchpad.dev/evolution/+imports
157+ >>> admin_browser.getControl('Approve').click()
158+ >>> print admin_browser.url
159+ http://translations.launchpad.dev/evolution/+imports
160+
161+Similarly, if we go to an import queue entry through the user's import
162+queue, after approving the entry we are back looking at user's import queue.
163+
164+ >>> admin_browser.open(
165+ ... 'http://translations.launchpad.dev/~name16/+imports')
166+ >>> admin_browser.getLink(url='imports/1').click()
167+ >>> print admin_browser.getLink('Cancel').url
168+ http://translations.launchpad.dev/~name16/+imports
169+ >>> admin_browser.getControl('Approve').click()
170+ >>> print admin_browser.url
171+ http://translations.launchpad.dev/~name16/+imports
172
173=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-filtering.tar.gz' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.tar.gz'
174=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-filtering.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt'
175--- lib/lp/translations/stories/standalone/xx-translation-import-queue-filtering.txt 2009-08-30 20:27:52 +0000
176+++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt 2009-09-01 21:03:51 +0000
177@@ -10,7 +10,7 @@
178 >>> import os.path
179 >>> test_file_name = os.path.join(
180 ... os.path.dirname(lp.translations.__file__),
181- ... 'stories/standalone/xx-translation-import-queue-filtering.tar.gz')
182+ ... 'stories/importqueue/xx-translation-import-queue-filtering.tar.gz')
183 >>> tarball = open(test_file_name)
184
185 Our star for this session is Carlos, who has full access rights to the
186
187=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-targets.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt'
188=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.tar' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.tar'
189=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.tar.bz2' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.tar.bz2'
190=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.tar.gz' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.tar.gz'
191=== renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.txt'
192--- lib/lp/translations/stories/standalone/xx-translation-import-queue.txt 2009-08-30 20:27:52 +0000
193+++ lib/lp/translations/stories/importqueue/xx-translation-import-queue.txt 2009-09-01 21:03:51 +0000
194@@ -18,7 +18,7 @@
195 >>> import os.path
196 >>> test_file_name = os.path.join(
197 ... os.path.dirname(lp.translations.__file__),
198- ... 'stories/standalone/xx-translation-import-queue.tar.gz')
199+ ... 'stories/importqueue/xx-translation-import-queue.tar.gz')
200 >>> tarball = open(test_file_name, "rb")
201 >>> upload = ff_owner_browser.getControl('File')
202 >>> upload
203@@ -166,6 +166,12 @@
204
205 Open the edit form for the fourth entry.
206
207+XXX DaniloSegan 2009-09-01: it seems we are hitting Zope testbrowser
208+bug, so we need to reopen the page we are currently at to set 'referer'
209+header properly. This seems similar to #98437 but the fix proposed
210+there doesn't help.
211+
212+ >>> browser.open('http://translations.launchpad.dev/+imports')
213 >>> browser.getLink(url='imports/4').click()
214
215 And provide information for this IPOFile to be newly created.
216@@ -193,7 +199,7 @@
217 po/es.po in
218 Mozilla Firefox 1.0 series
219 Approved
220- ...
221+ ...
222 Spanish (es) translation of pkgconf-mozilla in Mozilla Firefox 1.0
223 ...
224
225@@ -335,7 +341,7 @@
226
227 >>> test_file_name = os.path.join(
228 ... os.path.dirname(lp.translations.__file__),
229- ... 'stories/standalone/xx-translation-import-queue.tar.bz2')
230+ ... 'stories/importqueue/xx-translation-import-queue.tar.bz2')
231 >>> tarball = open(test_file_name)
232
233 >>> evo_owner_browser.getControl('File').add_file(
234@@ -368,7 +374,7 @@
235
236 >>> test_file_name = os.path.join(
237 ... os.path.dirname(lp.translations.__file__),
238- ... 'stories/standalone/xx-translation-import-queue.tar')
239+ ... 'stories/importqueue/xx-translation-import-queue.tar')
240 >>> tarball = open(test_file_name)
241
242 >>> evo_owner_browser.getControl('File').add_file(
243@@ -389,7 +395,7 @@
244
245 >>> test_file_name = os.path.join(
246 ... os.path.dirname(lp.translations.__file__),
247- ... 'stories/standalone/empty.tar.bz2')
248+ ... 'stories/importqueue/empty.tar.bz2')
249 >>> tarball = open(test_file_name)
250
251 >>> evo_owner_browser.getControl('File').add_file(
252@@ -409,7 +415,7 @@
253
254 >>> test_file_name = os.path.join(
255 ... os.path.dirname(lp.translations.__file__),
256- ... 'stories/standalone/truncated.tar.bz2')
257+ ... 'stories/importqueue/truncated.tar.bz2')
258 >>> tarball = open(test_file_name)
259
260 >>> evo_owner_browser.getControl('File').add_file(
261
262=== modified file 'lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt'
263--- lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt 2009-07-10 12:49:30 +0000
264+++ lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt 2009-09-01 19:36:28 +0000
265@@ -57,7 +57,7 @@
266 <input type="submit"...value="Request one-time import"...
267 >>> browser.getControl('Request one-time import').click()
268 >>> print browser.url
269- http://translations.l...d.dev/evolution/trunk/+request-bzr-import
270+ http://translations.launchpad.dev/evolution/trunk
271 >>> print "\n".join(get_feedback_messages(browser.contents))
272 The import has been requested.
273
274
275=== modified file 'lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt'
276--- lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt 2009-08-30 20:27:52 +0000
277+++ lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt 2009-09-01 19:36:28 +0000
278@@ -49,6 +49,6 @@
279 >>> browser.getControl('Translation domain').value = 'firefox'
280 >>> browser.getControl('Approve').click()
281 >>> print browser.url
282- http://translations.launchpad.dev/+imports
283+ http://translations.launchpad.dev/firefox/trunk/+imports
284 >>> browser.getControl(name='field.status_3').value
285 ['APPROVED']
286
287=== modified file 'lib/lp/translations/templates/distroseries-language-packs.pt'
288--- lib/lp/translations/templates/distroseries-language-packs.pt 2009-07-17 17:59:07 +0000
289+++ lib/lp/translations/templates/distroseries-language-packs.pt 2009-09-01 20:59:00 +0000
290@@ -3,10 +3,7 @@
291 xmlns:tal="http://xml.zope.org/namespaces/tal"
292 xmlns:metal="http://xml.zope.org/namespaces/metal"
293 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
294- xml:lang="en"
295- lang="en"
296- dir="ltr"
297- metal:use-macro="view/macro:page/onecolumn"
298+ metal:use-macro="view/macro:page/main_only"
299 i18n:domain="launchpad" >
300 <body>
301 <div metal:fill-slot="head_epilogue">
302@@ -19,91 +16,116 @@
303
304 <div metal:fill-slot="main">
305 <div id="language_packs">
306- <h1>
307- Language packs for
308- <tal:title replace="view/displayname">Ubuntu 5.04</tal:title>
309- </h1>
310-
311- <p id="description">
312- A language pack is an export of all translation files used at run time
313- by the applications in
314- <tal:distribution replace="view/displayname" />.
315- These language packs are the last ones generated or in use by
316- <tal:distribution replace="view/displayname" />
317- </p>
318-
319- <h2>Current language packs</h2>
320- <dl>
321- <dt>
322- <img tal:condition="context/language_pack_base"
323- alt="download icon" src="/@@/download" />
324- Base pack:
325- <a tal:condition="context/language_pack_base"
326- tal:attributes="href context/language_pack_base/file/http_url">
327- <tal:export-date
328- replace="context/language_pack_base/date_exported/fmt:datetime" />
329- </a>
330- <tal:not-export-date condition="not: context/language_pack_base">
331- none yet
332- </tal:not-export-date>
333- <br />A complete set of translations for the OS.
334- </dt>
335- <dt>
336- <img tal:condition="context/language_pack_delta"
337- alt="download icon" src="/@@/download" />
338- Delta pack:
339- <a tal:condition="context/language_pack_delta"
340- tal:attributes="href context/language_pack_delta/file/http_url">
341- <tal:export-date
342- replace="context/language_pack_delta/date_exported/fmt:datetime" />
343- </a>
344- <tal:not-export-date condition="not: context/language_pack_delta">
345- none yet
346- </tal:not-export-date>
347- <br />Translation updates, applied on top of the base pack.
348- </dt>
349- </dl>
350-
351- <h2>Language pack being tested</h2>
352- <dl tal:condition="context/language_pack_proposed">
353- <dt>
354- <img alt="download icon" src="/@@/download" />
355- <tal:type content="context/language_pack_proposed/type/name" />
356- language pack:
357- <a tal:attributes="
358- href context/language_pack_proposed/file/http_url">
359- <tal:export-date
360- condition="context/language_pack_proposed"
361- replace="context/language_pack_proposed/date_exported/fmt:datetime"
362- />
363- </a>
364- <br />This one is being tested to become the new
365- <tal:type content="context/language_pack_proposed/type/name" />
366- language pack.
367- </dt>
368- </dl>
369- <p tal:condition="not:context/language_pack_proposed">
370- No pack is being tested right now.
371- </p>
372-
373- <tal:has-unused condition="view/unused_language_packs">
374- <h2>Currently unused language packs</h2>
375- <dl>
376- <dt tal:repeat="lang_pack view/unused_language_packs">
377- <img alt="download icon" src="/@@/download" />
378- <tal:type content="lang_pack/type/title" /> language pack:
379- <a tal:attributes="href lang_pack/file/http_url">
380- <tal:date-exported
381- content="lang_pack/date_exported/fmt:datetime" />
382- </a>.
383- </dt>
384- </dl>
385- </tal:has-unused>
386- </div>
387- <div tal:condition="view/is_admin">
388- <h2 class="adminlabel"
389- tal:content="view/adminlabel">Language pack settings</h2>
390- <div metal:use-macro="context/@@launchpad_form/form"> </div>
391+ <h1>
392+ Language packs for
393+ <tal:title replace="view/displayname">Ubuntu 5.04</tal:title>
394+ </h1>
395+
396+ <div class="top-portlet">
397+ <p id="description">
398+ A language pack is an export of all translation files used at run time
399+ by the applications in
400+ <tal:distribution replace="view/displayname" />.
401+ These language packs are the last ones generated or in use by
402+ <tal:distribution replace="view/displayname" />
403+ </p>
404+
405+ <p tal:condition="context/distribution/language_pack_admin">
406+ Language packs are administered by
407+ <tal:admin replace="
408+ structure context/distribution/language_pack_admin/fmt:link">
409+ Peter Langomat
410+ </tal:admin><a
411+ tal:condition="context/distribution/required:launchpad.Edit"
412+ tal:attributes="href string:${context/distribution/fmt:url}/+select-language-pack-admin"
413+ title="Change language pack administrator"><img
414+ class="edit sprite"/></a>.
415+ </p>
416+ </div>
417+ <div class="yui-g">
418+ <div class="yui-u first portlet">
419+ <h2>Active language packs</h2>
420+ <dl>
421+ <dt>
422+ Base pack:
423+ <a tal:condition="context/language_pack_base"
424+ tal:attributes="href context/language_pack_base/file/http_url">
425+ <tal:export-date
426+ replace="context/language_pack_base/date_exported/fmt:datetime" />
427+ <img tal:condition="context/language_pack_base"
428+ alt="download icon" src="/@@/download" />
429+ </a>
430+ <tal:not-export-date condition="not: context/language_pack_base">
431+ none yet
432+ </tal:not-export-date>
433+ </dt>
434+ <dd>A complete set of translations for the OS.</dd>
435+ <dt>
436+ Delta pack:
437+ <a tal:condition="context/language_pack_delta"
438+ tal:attributes="href context/language_pack_delta/file/http_url">
439+ <tal:export-date
440+ replace="context/language_pack_delta/date_exported/fmt:datetime" />
441+ <img tal:condition="context/language_pack_delta"
442+ alt="download icon" src="/@@/download" />
443+ </a>
444+ <tal:not-export-date condition="not: context/language_pack_delta">
445+ none yet
446+ </tal:not-export-date>
447+ </dt>
448+ <dd>Translation updates, applied on top of the base pack.</dd>
449+ </dl>
450+ </div>
451+ <div class="yui-u">
452+ <div class="portlet">
453+ <h2>Language pack being tested</h2>
454+ <dl tal:condition="context/language_pack_proposed">
455+ <dt>
456+ <tal:type content="context/language_pack_proposed/type/name" />
457+ language pack:
458+ <a tal:attributes="
459+ href context/language_pack_proposed/file/http_url">
460+ <tal:export-date
461+ condition="context/language_pack_proposed"
462+ replace="context/language_pack_proposed/date_exported/fmt:datetime"
463+ />
464+ <img alt="download icon" src="/@@/download" />
465+ </a>
466+ </dt>
467+ <dd>This one is being tested to become the new
468+ <tal:type content="context/language_pack_proposed/type/name" />
469+ language pack.
470+ </dd>
471+ </dl>
472+ <p tal:condition="not:context/language_pack_proposed">
473+ No pack is being tested right now.
474+ </p>
475+ </div>
476+ </div>
477+ </div>
478+
479+ <div class="yui-g">
480+ <div class="yui-u first portlet" tal:condition="view/is_admin">
481+ <h2 class="adminlabel"
482+ tal:content="view/adminlabel">Language pack settings</h2>
483+ <div metal:use-macro="context/@@launchpad_form/form"> </div>
484+ </div>
485+ <div class="yui-u" tal:condition="view/unused_language_packs">
486+ <div class="portlet">
487+ <h2>Currently unused language packs</h2>
488+ <ul>
489+ <li tal:repeat="lang_pack view/unused_language_packs">
490+ <tal:type content="lang_pack/type/title" /> language pack:
491+ <a tal:attributes="href lang_pack/file/http_url">
492+ <tal:date-exported
493+ content="lang_pack/date_exported/fmt:datetime" />
494+ <img alt="download icon" src="/@@/download" />
495+ </a>
496+ </li>
497+ </ul>
498+ </div>
499+ </div>
500+ </div>
501 </div>
502
503 </div>
504
505=== modified file 'lib/lp/translations/templates/productseries-translations-bzr-import.pt'
506--- lib/lp/translations/templates/productseries-translations-bzr-import.pt 2009-07-17 17:59:07 +0000
507+++ lib/lp/translations/templates/productseries-translations-bzr-import.pt 2009-09-01 19:36:28 +0000
508@@ -3,10 +3,7 @@
509 xmlns:tal="http://xml.zope.org/namespaces/tal"
510 xmlns:metal="http://xml.zope.org/namespaces/metal"
511 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
512- xml:lang="en"
513- lang="en"
514- dir="ltr"
515- metal:use-macro="view/macro:page/onecolumn"
516+ metal:use-macro="view/macro:page/main_only"
517 i18n:domain="launchpad"
518 >
519 <body>
520@@ -21,57 +18,69 @@
521
522 <div metal:fill-slot="main">
523
524- <h1>Request one-time import of translations</h1>
525-
526- <p
527- class="not-translated-in-launchpad"
528- tal:condition="not: context/product/official_rosetta">
529- <strong>
530- This project is not configured to use Launchpad for translations.
531- </strong>
532- <tal:admin_or_owner condition="context/product/required:launchpad.Edit">
533- You can change this in the
534- <a tal:attributes="href view/product_edit_url">
535- project settings</a>. (<a href="/+help/getting-started-for-your-project.html" target="help">Getting started with translating your project in Launchpad</a>)
536- </tal:admin_or_owner>
537- </p>
538-
539- <tal:rosetta condition="context/product/official_rosetta">
540- <p>
541- You can ask Launchpad for a one-time import of all the translation files
542- (templates and translations) that it finds in
543- <strong><tal:series replace="structure view/series_title">
544- Evolution Series:trunk</tal:series>'s</strong> official Bazaar branch.
545- (<a href="https://help.launchpad.net/Translations/ImportPolicy">Read the
546- translations import policy</a>)
547- </p>
548- <p tal:condition="not:view/has_imports_enabled" id="settings-display">
549- <img src="/@@/info" class="inline-icon" />
550- To enable continuous imports please change the settings
551- <a tal:attributes="href view/translations_settings_url">here</a>.
552- </p>
553- <p tal:condition="view/context/branch"
554- tal:define="branch view/context/branch"
555- id="branch-display">
556- The official Bazaar branch is:
557- <img src="/@@/branch" class="inline-icon" />
558- <a tal:attributes="href branch/fmt:url; title branch/bzr_identity"
559- tal:content="branch/displayname">
560- branchname
561- </a>
562- <a tal:attributes="href view/link_branch_url;
563- title string:Change official branch"
564- ><img src="/@@/edit" class="inline-icon" /></a>
565- </p>
566- <p tal:condition="not:view/context/branch"
567- id="no-branch-display">
568- This series does not have an official Bazaar branch.
569- <a tal:attributes="href view/link_branch_url">
570- Please set it first.</a></p>
571- <tal:form tal:condition="view/context/branch">
572- <div metal:use-macro="context/@@launchpad_form/form"></div>
573+ <tal:form tal:condition="context/branch">
574+ <div metal:use-macro="context/@@launchpad_form/form">
575+ <div metal:fill-slot="extra_info">
576+ <p class="not-translated-in-launchpad"
577+ tal:condition="not: context/product/official_rosetta">
578+ <strong>
579+ This project is not configured to use Launchpad for
580+ translations.
581+ </strong>
582+ <tal:admin_or_owner condition="
583+ context/product/required:launchpad.Edit">
584+ You can change this in the
585+ <a tal:attributes="href view/product_edit_url">
586+ project settings</a>.
587+ (<a href="/+help/getting-started-for-your-project.html"
588+ target="help">Getting started with translating your project
589+ in Launchpad</a>)
590+ </tal:admin_or_owner>
591+ </p>
592+
593+ <tal:rosetta condition="context/product/official_rosetta">
594+ <p>
595+ You can ask Launchpad for a one-time import of all the
596+ translation files (templates and translations) that it finds in
597+ <strong><tal:series replace="structure view/series_title">
598+ Evolution Series:trunk</tal:series>'s</strong>
599+ official Bazaar branch.
600+ (<a href="https://help.launchpad.net/Translations/ImportPolicy"
601+ >Read the translations import policy</a>)
602+ </p>
603+ <p tal:condition="not:view/has_imports_enabled"
604+ id="settings-display">
605+ <img src="/@@/info" class="inline-icon" />
606+ To enable continuous imports please change the settings
607+ <a tal:attributes="href view/translations_settings_url">here</a>.
608+ </p>
609+ </tal:rosetta>
610+ <p tal:define="branch context/branch"
611+ id="branch-display">
612+ The official Bazaar branch is:
613+ <img src="/@@/branch" class="inline-icon" />
614+ <a tal:attributes="href branch/fmt:url; title branch/bzr_identity"
615+ tal:content="branch/displayname">
616+ branchname
617+ </a>
618+ <a tal:attributes="href view/link_branch_url;
619+ title string:Change official branch"
620+ ><img src="/@@/edit" class="inline-icon" /></a>
621+ </p>
622+ </div>
623+ </div>
624 </tal:form>
625- </tal:rosetta>
626+ <tal:no-branch condition="not:context/branch">
627+ <h1 tal:content="view/label" />
628+ <div class="main-portlet">
629+ <p tal:condition="not:view/context/branch"
630+ id="no-branch-display">
631+ This series does not have an official Bazaar branch.
632+ <a tal:attributes="href view/link_branch_url">
633+ Please set it first.</a>
634+ </p>
635+ </div>
636+ </tal:no-branch>
637 </div>
638
639 </body>
640
641=== modified file 'lib/lp/translations/templates/productseries-translations-settings.pt'
642--- lib/lp/translations/templates/productseries-translations-settings.pt 2009-07-19 04:41:14 +0000
643+++ lib/lp/translations/templates/productseries-translations-settings.pt 2009-09-01 12:00:37 +0000
644@@ -3,10 +3,7 @@
645 xmlns:tal="http://xml.zope.org/namespaces/tal"
646 xmlns:metal="http://xml.zope.org/namespaces/metal"
647 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
648- xml:lang="en"
649- lang="en"
650- dir="ltr"
651- metal:use-macro="view/macro:page/onecolumn"
652+ metal:use-macro="view/macro:page/main_only"
653 i18n:domain="launchpad"
654 >
655 <body>
656@@ -21,99 +18,113 @@
657
658 <div metal:fill-slot="main">
659
660- <h1>Translations settings</h1>
661-
662- <p
663- class="not-translated-in-launchpad"
664- tal:condition="not: context/product/official_rosetta">
665- <strong>
666- This project is not configured to use Launchpad for translations.
667- </strong>
668- <tal:admin_or_owner condition="context/product/required:launchpad.Edit">
669- You can change this in the
670- <a tal:attributes="href view/product_edit_url">
671- project settings</a>.
672- </tal:admin_or_owner>
673- </p>
674-
675- <tal:rosetta condition="context/product/official_rosetta">
676- <h2>Import translations from branch</h2>
677- <p>
678- You can ask Launchpad to continuously import any translation
679- files (templates and translations) that it finds in
680- <strong><tal:series replace="structure view/series_title">
681- Evolution Series:trunk</tal:series>'s</strong> official Bazaar branch.
682- After the initial import, Launchpad will continue to scan your Bazaar
683- branch for updates to template and translation files.
684- </p>
685- <p id="bzr-request-display">
686- <img src="/@@/info" class="inline-icon" />
687- If you only need a one-time import, please request it
688- <a tal:attributes="href view/request_bzr_import_url">here</a>.
689- </p>
690- <p tal:condition="view/context/branch"
691- tal:define="branch view/context/branch"
692- id="branch-display">
693- The official Bazaar branch is:
694- <img src="/@@/branch" class="inline-icon" />
695- <a tal:attributes="href branch/fmt:url; title branch/bzr_identity"
696- tal:content="branch/displayname">
697- branchname
698- </a>
699- <a tal:attributes="href view/link_branch_url;
700- title string:Change official branch"
701- ><img src="/@@/edit" class="inline-icon" /></a>
702- </p>
703- <p tal:condition="not:view/context/branch"
704- id="no-branch-display">
705- This series does not have an official Bazaar branch.
706- <a tal:attributes="href view/link_branch_url">Set it now!</a>
707- </p>
708- <div metal:use-macro="context/@@launchpad_form/form"></div>
709-
710- <h2>Export translations to branch</h2>
711- <p>
712- Launchpad can commit daily snapshots of the translations for this
713- release series to a code branch.
714- </p>
715- <p>
716- Use this to make it easy to download the latest translations using
717- Bazaar, or to make sure the latest Launchpad translations are always
718- included with the files you distribute.
719- </p>
720- <p>
721- <strong>Warning:</strong> This may replace translation files that are
722- already in the branch you choose. You should consider creating a
723- separate branch where Launchpad can commit translations.
724- </p>
725-
726- <p id="translations-branch">
727- <tal:no-translations-branch condition="not: context/translations_branch">
728- Currently not exporting translations to a branch.
729- <a href="+link-translations-branch">
730- Choose a target branch.
731- <img src="/@@/edit" class="inline-icon" alt="edit" />
732- </a>
733- </tal:no-translations-branch>
734- <tal:translations-branch condition="context/translations_branch">
735- Exporting translations to branch:
736- <img src="/@@/branch" class="inline-icon" />
737- <a
738- id="translations-branch-link"
739- tal:attributes="href context/translations_branch/fmt:url;
740- title string:Change translations export branch"
741- tal:content="context/translations_branch/displayname"
742- >branch name</a>
743- <a
744- id="translations-branch-edit-link"
745- tal:attributes="href string:+link-translations-branch;
746- title string:Set translations export branch"
747- ><img src="/@@/edit" class="inline-icon" alt="edit" /></a>
748-
749- </tal:translations-branch>
750- </p>
751-
752- </tal:rosetta>
753+ <div class="top-portlet">
754+ <h1>Translations settings</h1>
755+ <p
756+ class="not-translated-in-launchpad"
757+ tal:condition="not: context/product/official_rosetta">
758+ <strong>
759+ This project is not configured to use Launchpad for translations.
760+ </strong>
761+ <tal:admin_or_owner condition="context/product/required:launchpad.Edit">
762+ You can change this in the
763+ <a tal:attributes="href view/product_edit_url">
764+ project settings</a>.
765+ </tal:admin_or_owner>
766+ </p>
767+ </div>
768+
769+ <div class="yui-g">
770+ <div class="yui-u first portlet">
771+ <div metal:use-macro="context/@@launchpad_form/form" class="portlet">
772+ <div metal:fill-slot="extra_info">
773+
774+ <tal:rosetta condition="context/product/official_rosetta">
775+ <h2>Import translations from branch</h2>
776+ <p>
777+ You can ask Launchpad to continuously import any translation
778+ files (templates and translations) that it finds in
779+ <strong><tal:series replace="structure view/series_title">
780+ Evolution Series:trunk</tal:series>'s</strong> official Bazaar branch.
781+ After the initial import, Launchpad will continue to scan your Bazaar
782+ branch for updates to template and translation files.
783+ </p>
784+ <p id="bzr-request-display">
785+ <img src="/@@/info" class="inline-icon" />
786+ If you only need a one-time import, please request it
787+ <a tal:attributes="href view/request_bzr_import_url">here</a>.
788+ </p>
789+ <p tal:condition="view/context/branch"
790+ tal:define="branch view/context/branch"
791+ id="branch-display">
792+ The official Bazaar branch is:
793+ <img src="/@@/branch" class="inline-icon" />
794+ <a tal:attributes="href branch/fmt:url; title branch/bzr_identity"
795+ tal:content="branch/displayname">
796+ branchname
797+ </a>
798+ <a tal:attributes="href view/link_branch_url;
799+ title string:Change official branch"
800+ ><img src="/@@/edit" class="inline-icon" /></a>
801+ </p>
802+ <p tal:condition="not:view/context/branch"
803+ id="no-branch-display">
804+ This series does not have an official Bazaar branch.
805+ <a tal:attributes="href view/link_branch_url">Set it now!</a>
806+ </p>
807+ </tal:rosetta>
808+ </div>
809+ </div>
810+ </div>
811+ <div class="yui-u">
812+ <div class="portlet">
813+
814+ <h2>Export translations to branch</h2>
815+ <p>
816+ Launchpad can commit daily snapshots of the translations for this
817+ release series to a code branch.
818+ </p>
819+ <p>
820+ Use this to make it easy to download the latest translations using
821+ Bazaar, or to make sure the latest Launchpad translations are always
822+ included with the files you distribute.
823+ </p>
824+ <p>
825+ <strong>Warning:</strong> This may replace translation files that are
826+ already in the branch you choose. You should consider creating a
827+ separate branch where Launchpad can commit translations.
828+ </p>
829+
830+ <p id="translations-branch">
831+ <tal:no-translations-branch condition="not: context/translations_branch">
832+ Currently not exporting translations to a branch.
833+ <a href="+link-translations-branch">
834+ Choose a target branch.
835+ <img src="/@@/edit" class="inline-icon" alt="edit" />
836+ </a>
837+ </tal:no-translations-branch>
838+ <tal:translations-branch condition="context/translations_branch">
839+ Exporting translations to branch:
840+ <img src="/@@/branch" class="inline-icon" />
841+ <a
842+ id="translations-branch-link"
843+ tal:attributes="href context/translations_branch/fmt:url;
844+ title string:Change translations export branch"
845+ tal:content="context/translations_branch/displayname"
846+ >branch name</a>
847+ <a
848+ id="translations-branch-edit-link"
849+ tal:attributes="href string:+link-translations-branch;
850+ title string:Set translations export branch"
851+ ><img src="/@@/edit" class="inline-icon" alt="edit" /></a>
852+
853+ </tal:translations-branch>
854+ </p>
855+
856+ </div>
857+ </div>
858+ </div>
859+
860 </div>
861
862 </body>
863
864=== modified file 'lib/lp/translations/templates/translationimportqueueentry-index.pt'
865--- lib/lp/translations/templates/translationimportqueueentry-index.pt 2009-08-31 22:18:05 +0000
866+++ lib/lp/translations/templates/translationimportqueueentry-index.pt 2009-09-01 12:09:27 +0000
867@@ -3,10 +3,7 @@
868 xmlns:tal="http://xml.zope.org/namespaces/tal"
869 xmlns:metal="http://xml.zope.org/namespaces/metal"
870 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
871- xml:lang="en"
872- lang="en"
873- dir="ltr"
874- metal:use-macro="context/@@main_template/master"
875+ metal:use-macro="view/macro:page/main_only"
876 i18n:domain="launchpad"
877 >
878 <body>
879@@ -24,7 +21,7 @@
880 'PO':
881 ['field.potemplate', 'field.potemplate_name',
882 'field.language', 'field.variant'],
883- 'UNSPEC': []
884+ 'UNSPEC': []
885 };
886 var nodes = {};
887 var last_file_type = 'UNSPEC';
888@@ -58,11 +55,11 @@
889 }
890
891 function updateCurrentFileType(file_type) {
892- for (ftype in nodes) {
893- // Logic has been inverted in the next line to avoid
894- // breaking XHTML compliance of the template due to
895- // ampersand usage.
896- if (!(ftype != file_type || nodes[ftype] != null)) {
897+ for (ftype in nodes) {
898+ // Logic has been inverted in the next line to avoid
899+ // breaking XHTML compliance of the template due to
900+ // ampersand usage.
901+ if (!(ftype == file_type || nodes[ftype] == null)) {
902 nodes[ftype].addClass('dont_show_fields');
903 }
904 }
905@@ -103,7 +100,12 @@
906 </metal:script>
907
908 <div metal:fill-slot="main">
909- <div metal:use-macro="context/@@launchpad_form/form" />
910+ <div metal:use-macro="context/@@launchpad_form/form">
911+ <div metal:fill-slot="extra_info">
912+ <input type="hidden" name="next_url"
913+ tal:attributes="value view/referrer_url" />
914+ </div>
915+ </div>
916 </div>
917
918 </body>
919