Merge lp:~salgado/launchpad/polls-three-o into lp:launchpad
- polls-three-o
- Merge into devel
Status: | Superseded | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~salgado/launchpad/polls-three-o | ||||
Merge into: | lp:launchpad | ||||
Diff against target: | None lines | ||||
To merge this branch: | bzr merge lp:~salgado/launchpad/polls-three-o | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jeroen T. Vermeulen (community) | Needs Fixing | ||
Review via email:
|
This proposal has been superseded by a proposal from 2009-08-19.
Commit message
Description of the change
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Guilherme Salgado (salgado) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Jeroen T. Vermeulen (jtv) wrote : | # |
Hi Salgado,
I stubbed my toe a few times looking at the UI changes, until I realized
that I'm really missing a breadcrumb for the poll. Once you've drilled
down into a poll, everything you do in there refers back to the team.
On the edit-option page I found no reference to the poll whatsoever:
it's like you're editing a direct property of the team itself. Having
the poll shown as a first-class entity would make a big difference, I
think. But that's not for a template conversion to fix.
There were a few small inconsistencies, or at least things that I think
are inconsistent: adding an option gives me "Show options" and "Change
details" as related pages, plus a Save button, but editing one gives me
Save plus the Cancel link. Is there a reason why these are so
different?
Something that may force the issue is that the "Change details" link on
the new-option page is for the poll. Had I not known where this UI
element came from, I might have expected it to apply to the option I'm
adding. So I think it'd be more intuitive to remove these "related
pages" links from the new-option page and add a Cancel link back to the
poll instead.
Similarly, unless Martin has a rule against it, I think the poll edit
form should have a Cancel link. Right now there's no direct way back to
the poll page.
(The same goes for the options overview by the way, which is the only
place where I would really expect to be able to add or edit options. It
looks to me as though the options page wants to be integrated into the
poll page, with an "Add new option" link inline and without any remnants
of this old actions menu anywhere. Maybe that's what you have planned
anyway.)
Another very minor annoyance is that some of the page headings look a
little redundant. Sometimes they include the poll name, sometimes they
don't. Where they do, they duplicate the poll title displayed in small
font right above the heading. But I don't see any way of fixing that
without either removing that small title (which seems to be baked into
the application menu above it) or removing the poll name from the page
title--both of which sound like bad alternatives.
Speaking of headings: your branch sets the label for the poll edit form
to "Edit poll details." What exactly that text should read is an
ongoing discussion (started by Curtis on the mailing list), but more to
the point, I don't see it show up anywhere! If you provide a page_title
in this view it'll get picked up (and the one in pagetitles.py will no
longer be needed), but label doesn't seem to be.
Apart from that, the code as such looks good to me. Nice use of a mixin
for the navigation menu, though in this case I'd leave it out altogether
instead of migrating it to the 3.0 setup.
Jeroen
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Guilherme Salgado (salgado) wrote : | # |
On Wed, 2009-08-19 at 08:13 +0000, Jeroen T. Vermeulen wrote:
> Review: Needs Fixing
> Hi Salgado,
>
> I stubbed my toe a few times looking at the UI changes, until I realized
> that I'm really missing a breadcrumb for the poll. Once you've drilled
> down into a poll, everything you do in there refers back to the team.
> On the edit-option page I found no reference to the poll whatsoever:
> it's like you're editing a direct property of the team itself. Having
> the poll shown as a first-class entity would make a big difference, I
> think. But that's not for a template conversion to fix.
I think everybody who's used polls had a similar experience to yours.
They were written a long time ago and were left mostly untouched since
then, even when we redesigned navigation/UI for 1.0 and 2.0
>
> There were a few small inconsistencies, or at least things that I think
> are inconsistent: adding an option gives me "Show options" and "Change
> details" as related pages, plus a Save button, but editing one gives me
> Save plus the Cancel link. Is there a reason why these are so
> different?
That's because URL of these related pages are relative, so they work on
IPoll pages (like +newoption) but not on IPollOption ones (like
+option/id). The Cancel link was added there only to make it possible
to return to the +options page, but all forms should have a Cancel link.
>
> Something that may force the issue is that the "Change details" link on
> the new-option page is for the poll. Had I not known where this UI
> element came from, I might have expected it to apply to the option I'm
> adding. So I think it'd be more intuitive to remove these "related
> pages" links from the new-option page and add a Cancel link back to the
> poll instead.
I think that's a good thing to do.
>
> Similarly, unless Martin has a rule against it, I think the poll edit
> form should have a Cancel link. Right now there's no direct way back to
> the poll page.
They all should have a Cancel button.
>
> (The same goes for the options overview by the way, which is the only
> place where I would really expect to be able to add or edit options. It
> looks to me as though the options page wants to be integrated into the
> poll page, with an "Add new option" link inline and without any remnants
> of this old actions menu anywhere. Maybe that's what you have planned
> anyway.)
In fact, my only plan is to migrate these pages without making things
any worse than they already are and spend the least possible amount of
time doing so.
But I really liked your suggestion, so I filed
https:/
>
> Another very minor annoyance is that some of the page headings look a
> little redundant. Sometimes they include the poll name, sometimes they
> don't. Where they do, they duplicate the poll title displayed in small
> font right above the heading. But I don't see any way of fixing that
> without either removing that small title (which seems to be baked into
> the application menu above it) or removing the poll name from the page
> title--both of which sound like bad alternatives.
>
> Speaking of headings: your branch sets the label for the pol...
Preview Diff
1 | === modified file 'lib/lp/registry/browser/configure.zcml' | |||
2 | --- lib/lp/registry/browser/configure.zcml 2009-08-18 04:57:21 +0000 | |||
3 | +++ lib/lp/registry/browser/configure.zcml 2009-08-18 20:24:56 +0000 | |||
4 | @@ -600,7 +600,8 @@ | |||
5 | 600 | <browser:menus | 600 | <browser:menus |
6 | 601 | module="lp.registry.browser.poll" | 601 | module="lp.registry.browser.poll" |
7 | 602 | classes=" | 602 | classes=" |
9 | 603 | PollContextMenu"/> | 603 | PollContextMenu |
10 | 604 | PollEditNavigationMenu"/> | ||
11 | 604 | <browser:defaultView | 605 | <browser:defaultView |
12 | 605 | for="lp.registry.interfaces.poll.IPoll" | 606 | for="lp.registry.interfaces.poll.IPoll" |
13 | 606 | name="+index"/> | 607 | name="+index"/> |
14 | 607 | 608 | ||
15 | === modified file 'lib/lp/registry/browser/poll.py' | |||
16 | --- lib/lp/registry/browser/poll.py 2009-06-25 04:06:00 +0000 | |||
17 | +++ lib/lp/registry/browser/poll.py 2009-08-18 20:24:56 +0000 | |||
18 | @@ -7,6 +7,7 @@ | |||
19 | 7 | 'BasePollView', | 7 | 'BasePollView', |
20 | 8 | 'PollAddView', | 8 | 'PollAddView', |
21 | 9 | 'PollContextMenu', | 9 | 'PollContextMenu', |
22 | 10 | 'PollEditNavigationMenu', | ||
23 | 10 | 'PollEditView', | 11 | 'PollEditView', |
24 | 11 | 'PollNavigation', | 12 | 'PollNavigation', |
25 | 12 | 'PollOptionAddView', | 13 | 'PollOptionAddView', |
26 | @@ -17,13 +18,14 @@ | |||
27 | 17 | 18 | ||
28 | 18 | from zope.event import notify | 19 | from zope.event import notify |
29 | 19 | from zope.component import getUtility | 20 | from zope.component import getUtility |
30 | 21 | from zope.interface import implements, Interface | ||
31 | 20 | from zope.lifecycleevent import ObjectCreatedEvent | 22 | from zope.lifecycleevent import ObjectCreatedEvent |
32 | 21 | from zope.app.form.browser import TextWidget | 23 | from zope.app.form.browser import TextWidget |
33 | 22 | 24 | ||
34 | 23 | from canonical.launchpad.webapp import ( | 25 | from canonical.launchpad.webapp import ( |
35 | 24 | action, canonical_url, ContextMenu, custom_widget, | 26 | action, canonical_url, ContextMenu, custom_widget, |
36 | 25 | enabled_with_permission, LaunchpadEditFormView, LaunchpadFormView, Link, | 27 | enabled_with_permission, LaunchpadEditFormView, LaunchpadFormView, Link, |
38 | 26 | Navigation, stepthrough) | 28 | Navigation, NavigationMenu, stepthrough) |
39 | 27 | from canonical.launchpad.webapp.interfaces import ILaunchBag | 29 | from canonical.launchpad.webapp.interfaces import ILaunchBag |
40 | 28 | from lp.registry.interfaces.poll import ( | 30 | from lp.registry.interfaces.poll import ( |
41 | 29 | IPoll, IPollOption, IPollOptionSet, IPollSubset, IVoteSet, PollAlgorithm, | 31 | IPoll, IPollOption, IPollOptionSet, IPollSubset, IVoteSet, PollAlgorithm, |
42 | @@ -31,13 +33,10 @@ | |||
43 | 31 | from canonical.launchpad.helpers import shortlist | 33 | from canonical.launchpad.helpers import shortlist |
44 | 32 | 34 | ||
45 | 33 | 35 | ||
50 | 34 | class PollContextMenu(ContextMenu): | 36 | class PollEditLinksMixin: |
47 | 35 | |||
48 | 36 | usedfor = IPoll | ||
49 | 37 | links = ['showall', 'addnew', 'edit'] | ||
51 | 38 | 37 | ||
52 | 39 | def showall(self): | 38 | def showall(self): |
54 | 40 | text = 'Show option details' | 39 | text = 'Show options' |
55 | 41 | return Link('+options', text, icon='info') | 40 | return Link('+options', text, icon='info') |
56 | 42 | 41 | ||
57 | 43 | @enabled_with_permission('launchpad.Edit') | 42 | @enabled_with_permission('launchpad.Edit') |
58 | @@ -51,6 +50,21 @@ | |||
59 | 51 | return Link('+edit', text, icon='edit') | 50 | return Link('+edit', text, icon='edit') |
60 | 52 | 51 | ||
61 | 53 | 52 | ||
62 | 53 | class PollContextMenu(ContextMenu, PollEditLinksMixin): | ||
63 | 54 | usedfor = IPoll | ||
64 | 55 | links = ['showall', 'addnew', 'edit'] | ||
65 | 56 | |||
66 | 57 | |||
67 | 58 | class IPollEditMenu(Interface): | ||
68 | 59 | """A marker interface for the 'Change details' navigation menu.""" | ||
69 | 60 | |||
70 | 61 | |||
71 | 62 | class PollEditNavigationMenu(NavigationMenu, PollEditLinksMixin): | ||
72 | 63 | usedfor = IPollEditMenu | ||
73 | 64 | facet = 'overview' | ||
74 | 65 | links = ['showall', 'addnew', 'edit'] | ||
75 | 66 | |||
76 | 67 | |||
77 | 54 | class PollNavigation(Navigation): | 68 | class PollNavigation(Navigation): |
78 | 55 | 69 | ||
79 | 56 | usedfor = IPoll | 70 | usedfor = IPoll |
80 | @@ -353,6 +367,7 @@ | |||
81 | 353 | 367 | ||
82 | 354 | class PollEditView(LaunchpadEditFormView): | 368 | class PollEditView(LaunchpadEditFormView): |
83 | 355 | 369 | ||
84 | 370 | implements(IPollEditMenu) | ||
85 | 356 | schema = IPoll | 371 | schema = IPoll |
86 | 357 | label = "Edit poll details" | 372 | label = "Edit poll details" |
87 | 358 | field_names = ["name", "title", "proposition", "allowspoilt", "dateopens", | 373 | field_names = ["name", "title", "proposition", "allowspoilt", "dateopens", |
88 | @@ -372,6 +387,11 @@ | |||
89 | 372 | field_names = ["name", "title"] | 387 | field_names = ["name", "title"] |
90 | 373 | custom_widget("title", TextWidget, width=30) | 388 | custom_widget("title", TextWidget, width=30) |
91 | 374 | 389 | ||
92 | 390 | @property | ||
93 | 391 | def cancel_url(self): | ||
94 | 392 | """See `LaunchpadFormView`.""" | ||
95 | 393 | return canonical_url(self.context.poll, view_name='+options') | ||
96 | 394 | |||
97 | 375 | @action("Save", name="save") | 395 | @action("Save", name="save") |
98 | 376 | def save_action(self, action, data): | 396 | def save_action(self, action, data): |
99 | 377 | self.updateContextFromData(data) | 397 | self.updateContextFromData(data) |
100 | @@ -381,6 +401,7 @@ | |||
101 | 381 | class PollOptionAddView(LaunchpadFormView): | 401 | class PollOptionAddView(LaunchpadFormView): |
102 | 382 | """Create a new option in a given poll.""" | 402 | """Create a new option in a given poll.""" |
103 | 383 | 403 | ||
104 | 404 | implements(IPollEditMenu) | ||
105 | 384 | schema = IPollOption | 405 | schema = IPollOption |
106 | 385 | label = "Create new poll option" | 406 | label = "Create new poll option" |
107 | 386 | field_names = ["name", "title"] | 407 | field_names = ["name", "title"] |
108 | 387 | 408 | ||
109 | === modified file 'lib/lp/registry/stories/team-polls/create-poll-options.txt' | |||
110 | --- lib/lp/registry/stories/team-polls/create-poll-options.txt 2009-04-17 10:32:16 +0000 | |||
111 | +++ lib/lp/registry/stories/team-polls/create-poll-options.txt 2009-08-18 20:24:56 +0000 | |||
112 | @@ -37,7 +37,7 @@ | |||
113 | 37 | And here we see the option listed as one of the active options for this | 37 | And here we see the option listed as one of the active options for this |
114 | 38 | poll. | 38 | poll. |
115 | 39 | 39 | ||
117 | 40 | >>> team_admin_browser.getLink('Show option details').click() | 40 | >>> team_admin_browser.getLink('Show options').click() |
118 | 41 | >>> team_admin_browser.url | 41 | >>> team_admin_browser.url |
119 | 42 | 'http://launchpad.dev/~ubuntu-team/+poll/dpl-2080/+options' | 42 | 'http://launchpad.dev/~ubuntu-team/+poll/dpl-2080/+options' |
120 | 43 | 43 | ||
121 | 44 | 44 | ||
122 | === modified file 'lib/lp/registry/stories/team-polls/edit-options.txt' | |||
123 | --- lib/lp/registry/stories/team-polls/edit-options.txt 2008-10-15 17:56:31 +0000 | |||
124 | +++ lib/lp/registry/stories/team-polls/edit-options.txt 2009-08-18 20:24:56 +0000 | |||
125 | @@ -7,7 +7,7 @@ | |||
126 | 7 | >>> user_browser.getLink('A public poll that never closes').click() | 7 | >>> user_browser.getLink('A public poll that never closes').click() |
127 | 8 | >>> user_browser.url | 8 | >>> user_browser.url |
128 | 9 | 'http://launchpad.dev/~ubuntu-team/+poll/never-closes4' | 9 | 'http://launchpad.dev/~ubuntu-team/+poll/never-closes4' |
130 | 10 | >>> user_browser.getLink('Show option details').click() | 10 | >>> user_browser.getLink('Show options').click() |
131 | 11 | >>> user_browser.url | 11 | >>> user_browser.url |
132 | 12 | 'http://launchpad.dev/~ubuntu-team/+poll/never-closes4/+options' | 12 | 'http://launchpad.dev/~ubuntu-team/+poll/never-closes4/+options' |
133 | 13 | >>> user_browser.getLink('Edit') | 13 | >>> user_browser.getLink('Edit') |
134 | @@ -21,7 +21,7 @@ | |||
135 | 21 | >>> browser = setupBrowser( | 21 | >>> browser = setupBrowser( |
136 | 22 | ... auth='Basic jeff.waugh@ubuntulinux.com:jdub') | 22 | ... auth='Basic jeff.waugh@ubuntulinux.com:jdub') |
137 | 23 | >>> browser.open('http://launchpad.dev/~ubuntu-team/+poll/never-closes4') | 23 | >>> browser.open('http://launchpad.dev/~ubuntu-team/+poll/never-closes4') |
139 | 24 | >>> browser.getLink('Show option details').click() | 24 | >>> browser.getLink('Show options').click() |
140 | 25 | >>> browser.url | 25 | >>> browser.url |
141 | 26 | 'http://launchpad.dev/~ubuntu-team/+poll/never-closes4/+options' | 26 | 'http://launchpad.dev/~ubuntu-team/+poll/never-closes4/+options' |
142 | 27 | >>> browser.getLink('[Edit]').click() | 27 | >>> browser.getLink('[Edit]').click() |
143 | @@ -43,7 +43,7 @@ | |||
144 | 43 | >>> browser.url | 43 | >>> browser.url |
145 | 44 | 'http://launchpad.dev/~ubuntu-team/+poll/not-yet-opened' | 44 | 'http://launchpad.dev/~ubuntu-team/+poll/not-yet-opened' |
146 | 45 | 45 | ||
148 | 46 | >>> browser.getLink('Show option details').click() | 46 | >>> browser.getLink('Show options').click() |
149 | 47 | >>> browser.url | 47 | >>> browser.url |
150 | 48 | 'http://launchpad.dev/~ubuntu-team/+poll/not-yet-opened/+options' | 48 | 'http://launchpad.dev/~ubuntu-team/+poll/not-yet-opened/+options' |
151 | 49 | 49 | ||
152 | 50 | 50 | ||
153 | === modified file 'lib/lp/registry/templates/poll-edit.pt' | |||
154 | --- lib/lp/registry/templates/poll-edit.pt 2009-07-17 17:59:07 +0000 | |||
155 | +++ lib/lp/registry/templates/poll-edit.pt 2009-08-18 20:24:56 +0000 | |||
156 | @@ -3,19 +3,12 @@ | |||
157 | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
158 | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
159 | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
164 | 6 | xml:lang="en" | 6 | metal:use-macro="view/macro:page/main_only" |
161 | 7 | lang="en" | ||
162 | 8 | dir="ltr" | ||
163 | 9 | metal:use-macro="context/@@main_template/master" | ||
165 | 10 | i18n:domain="launchpad" | 7 | i18n:domain="launchpad" |
166 | 11 | > | 8 | > |
167 | 12 | 9 | ||
168 | 13 | <body> | 10 | <body> |
169 | 14 | 11 | ||
170 | 15 | <metal:portlets fill-slot="portlets"> | ||
171 | 16 | <div tal:replace="structure context/@@+portlet-details" /> | ||
172 | 17 | </metal:portlets> | ||
173 | 18 | |||
174 | 19 | <div metal:fill-slot="main"> | 12 | <div metal:fill-slot="main"> |
175 | 20 | 13 | ||
176 | 21 | <div tal:condition="context/isNotYetOpened"> | 14 | <div tal:condition="context/isNotYetOpened"> |
177 | @@ -33,6 +26,8 @@ | |||
178 | 33 | opens it can't be edited anymore.</p> | 26 | opens it can't be edited anymore.</p> |
179 | 34 | </div> | 27 | </div> |
180 | 35 | 28 | ||
181 | 29 | <tal:menu replace="structure view/@@+related-pages" /> | ||
182 | 30 | |||
183 | 36 | </div> | 31 | </div> |
184 | 37 | 32 | ||
185 | 38 | </body> | 33 | </body> |
186 | 39 | 34 | ||
187 | === modified file 'lib/lp/registry/templates/poll-newoption.pt' | |||
188 | --- lib/lp/registry/templates/poll-newoption.pt 2009-07-17 17:59:07 +0000 | |||
189 | +++ lib/lp/registry/templates/poll-newoption.pt 2009-08-18 20:24:56 +0000 | |||
190 | @@ -3,19 +3,12 @@ | |||
191 | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
192 | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
193 | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
198 | 6 | xml:lang="en" | 6 | metal:use-macro="view/macro:page/main_only" |
195 | 7 | lang="en" | ||
196 | 8 | dir="ltr" | ||
197 | 9 | metal:use-macro="context/@@main_template/master" | ||
199 | 10 | i18n:domain="launchpad" | 7 | i18n:domain="launchpad" |
200 | 11 | > | 8 | > |
201 | 12 | 9 | ||
202 | 13 | <body> | 10 | <body> |
203 | 14 | 11 | ||
204 | 15 | <metal:portlets fill-slot="portlets"> | ||
205 | 16 | <div tal:replace="structure context/@@+portlet-details" /> | ||
206 | 17 | </metal:portlets> | ||
207 | 18 | |||
208 | 19 | <div metal:fill-slot="main"> | 12 | <div metal:fill-slot="main"> |
209 | 20 | 13 | ||
210 | 21 | <tal:block condition="context/isNotYetOpened"> | 14 | <tal:block condition="context/isNotYetOpened"> |
211 | @@ -37,6 +30,8 @@ | |||
212 | 37 | </p> | 30 | </p> |
213 | 38 | </tal:block> | 31 | </tal:block> |
214 | 39 | 32 | ||
215 | 33 | <tal:menu replace="structure view/@@+related-pages" /> | ||
216 | 34 | |||
217 | 40 | </div> | 35 | </div> |
218 | 41 | 36 | ||
219 | 42 | </body> | 37 | </body> |
220 | 43 | 38 | ||
221 | === modified file 'lib/lp/registry/templates/polloption-edit.pt' | |||
222 | --- lib/lp/registry/templates/polloption-edit.pt 2009-07-17 17:59:07 +0000 | |||
223 | +++ lib/lp/registry/templates/polloption-edit.pt 2009-08-18 20:24:56 +0000 | |||
224 | @@ -3,19 +3,12 @@ | |||
225 | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
226 | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
227 | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
232 | 6 | xml:lang="en" | 6 | metal:use-macro="view/macro:page/main_only" |
229 | 7 | lang="en" | ||
230 | 8 | dir="ltr" | ||
231 | 9 | metal:use-macro="context/@@main_template/master" | ||
233 | 10 | i18n:domain="launchpad" | 7 | i18n:domain="launchpad" |
234 | 11 | > | 8 | > |
235 | 12 | 9 | ||
236 | 13 | <body> | 10 | <body> |
237 | 14 | 11 | ||
238 | 15 | <metal:portlets fill-slot="portlets"> | ||
239 | 16 | <div tal:replace="structure context/poll/@@+portlet-details" /> | ||
240 | 17 | </metal:portlets> | ||
241 | 18 | |||
242 | 19 | <div metal:fill-slot="main"> | 12 | <div metal:fill-slot="main"> |
243 | 20 | 13 | ||
244 | 21 | <tal:block condition="context/poll/isNotYetOpened"> | 14 | <tal:block condition="context/poll/isNotYetOpened"> |
245 | 22 | 15 | ||
246 | === modified file 'lib/lp/registry/templates/team-polls.pt' | |||
247 | --- lib/lp/registry/templates/team-polls.pt 2009-07-17 17:59:07 +0000 | |||
248 | +++ lib/lp/registry/templates/team-polls.pt 2009-08-18 20:24:56 +0000 | |||
249 | @@ -78,8 +78,8 @@ | |||
250 | 78 | 78 | ||
251 | 79 | <br /> | 79 | <br /> |
252 | 80 | <tal:block tal:condition="request/lp:person"> | 80 | <tal:block tal:condition="request/lp:person"> |
255 | 81 | <ul class="add" tal:condition="context/required:launchpad.Edit"> | 81 | <ul tal:condition="context/required:launchpad.Edit"> |
256 | 82 | <li><a href="+newpoll">Set up a new poll</a></li> | 82 | <li><a class="sprite add" href="+newpoll">Set up a new poll</a></li> |
257 | 83 | </ul> | 83 | </ul> |
258 | 84 | </tal:block> | 84 | </tal:block> |
259 | 85 | 85 | ||
260 | 86 | 86 |
= Summary =
Convert a few poll pages to 3.0
== Proposed fix ==
Convert the easy edit pages and turn the action menu into a related
pages section at the bottom.
before/after screenshots at /devpad. canonical. com/~salgado/ poll-shots/
https:/
== Pre-implementation notes ==
== Implementation details ==
== Tests ==
./bin/test -vvt stories.team-polls
== Demo and Q/A ==
= Launchpad lint =
Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.
Linting changed files: registry/ browser/ configure. zcml registry/ templates/ poll-newoption. pt registry/ stories/ team-polls/ edit-options. txt registry/ templates/ team-polls. pt registry/ templates/ polloption- edit.pt registry/ browser/ poll.py registry/ templates/ poll-edit. pt registry/ stories/ team-polls/ create- poll-options. txt
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/