Hi Curtis,
This is an elegant fix with a nicely big payoff.
Just a couple of comments.
Gavin.
> === modified file 'lib/lp/registry/browser/configure.zcml' > --- lib/lp/registry/browser/configure.zcml 2009-11-26 06:41:27 +0000 > +++ lib/lp/registry/browser/configure.zcml 2009-12-02 12:04:29 +0000 > @@ -1310,6 +1310,7 @@ > <browser:menus > classes=" > MilestoneContextMenu > + MilestoneInlineNavigationMenu > MilestoneOverviewMenu > MilestoneOverviewNavigationMenu" > module="lp.registry.browser.milestone"/> > > === modified file 'lib/lp/registry/browser/milestone.py' > --- lib/lp/registry/browser/milestone.py 2009-11-24 21:27:17 +0000 > +++ lib/lp/registry/browser/milestone.py 2009-12-02 12:04:29 +0000 > @@ -11,6 +11,7 @@ > 'MilestoneContextMenu', > 'MilestoneDeleteView', > 'MilestoneEditView', > + 'MilestoneInlineNavigationMenu', > 'MilestoneNavigation', > 'MilestoneOverviewNavigationMenu', > 'MilestoneSetNavigation', > @@ -22,6 +23,7 @@ > > from zope.component import getUtility > from zope.formlib import form > +from zope.interface import implements, Interface > from zope.schema import Choice > > from canonical.cachedproperty import cachedproperty > @@ -131,11 +133,22 @@ > links = ('create_release', ) > > > +class IMilestoneInline(Interface): > + """A marker interface for views that show a milestone inline.""" > + > + > +class MilestoneInlineNavigationMenu(NavigationMenu, MilestoneLinkMixin): > + """An inline navigation menus for milestone views."""
s/menus/menu
> + usedfor = IMilestoneInline > + facet = 'overview' > + links = ('edit', ) > + > + > class MilestoneView(LaunchpadView, ProductDownloadFileMixin): > """A View for listing milestones and releases.""" > # XXX sinzui 2009-05-29 bug=381672: Extract the BugTaskListingItem rules > # to a mixin so that MilestoneView and others can use it. > - > + implements(IMilestoneInline) > show_series_context = False > > def __init__(self, context, request): > > === modified file 'lib/lp/registry/browser/tests/milestone-views.txt' > --- lib/lp/registry/browser/tests/milestone-views.txt 2009-09-30 22:49:58 +0000 > +++ lib/lp/registry/browser/tests/milestone-views.txt 2009-12-02 12:04:29 +0000 > @@ -21,8 +21,8 @@ > Milestone defines several menus. > > >>> from lp.registry.browser.milestone import ( > - ... MilestoneContextMenu, MilestoneOverviewMenu, > - ... MilestoneOverviewNavigationMenu) > + ... MilestoneContextMenu, MilestoneInlineNavigationMenu, > + ... MilestoneOverviewMenu, MilestoneOverviewNavigationMenu) > >>> from lp.testing.menu import check_menu_links > > >>> check_menu_links(MilestoneContextMenu(milestone)) > @@ -31,6 +31,9 @@ > True > >>> check_menu_links(MilestoneOverviewNavigationMenu(milestone)) > True > + >>> check_menu_links(MilestoneInlineNavigationMenu(milestone)) > + True > +
Should there also be a test to show that the MilestoneInlineNavigationMenu is chosen for MilestoneView, or is that going too far?
> > The MilestoneView provides access to the milestone and to its release if > it has one. > > === modified file 'lib/lp/registry/templates/productseries-milestone-table-row.pt' > --- lib/lp/registry/templates/productseries-milestone-table-row.pt 2009-11-03 19:04:53 +0000 > +++ lib/lp/registry/templates/productseries-milestone-table-row.pt 2009-12-02 12:04:29 +0000 > @@ -2,8 +2,9 @@ > xmlns:tal="http://xml.zope.org/namespaces/tal" > xmlns:metal="http://xml.zope.org/namespaces/metal" > xmlns:i18n="http://xml.zope.org/namespaces/i18n" > - define="milestone_menu view/milestone/menu:navigation; > - milestone view/milestone"> > + define="milestone_menu view/menu:navigation; > + milestone view/milestone; > + release view/release"> > <tr> > <td> > <img src="/@@/milestone" alt="" /> > @@ -43,13 +44,12 @@ > </td> > <td tal:condition="not: view/is_distroseries_milestone"> > <span > - tal:define="release milestone/product_release" > tal:condition="release" > tal:attributes="title release/datereleased/fmt:datetime" > tal:content="release/datereleased/fmt:approximatedate"> > 2005-12-13 > </span> > - <tal:no-release condition="not: milestone/product_release"> > + <tal:no-release condition="not: release"> > <em tal:condition="not: milestone/active"> > <img src="/@@/info"/> This is an inactive milestone > </em> >
« Back to merge proposal
Hi Curtis,
This is an elegant fix with a nicely big payoff.
Just a couple of comments.
Gavin.
> === modified file 'lib/lp/ registry/ browser/ configure. zcml' registry/ browser/ configure. zcml 2009-11-26 06:41:27 +0000 registry/ browser/ configure. zcml 2009-12-02 12:04:29 +0000 tMenu NavigationMenu ewMenu ewNavigationMen u" "lp.registry. browser. milestone" /> registry/ browser/ milestone. py' registry/ browser/ milestone. py 2009-11-24 21:27:17 +0000 registry/ browser/ milestone. py 2009-12-02 12:04:29 +0000 xtMenu' , eView', iew', eNavigationMenu ', ation', iewNavigationMe nu', vigation' , cachedproperty import cachedproperty e(Interface) : NavigationMenu( NavigationMenu, MilestoneLinkMi xin):
> --- lib/lp/
> +++ lib/lp/
> @@ -1310,6 +1310,7 @@
> <browser:menus
> classes="
> MilestoneContex
> + MilestoneInline
> MilestoneOvervi
> MilestoneOvervi
> module=
>
> === modified file 'lib/lp/
> --- lib/lp/
> +++ lib/lp/
> @@ -11,6 +11,7 @@
> 'MilestoneConte
> 'MilestoneDelet
> 'MilestoneEditV
> + 'MilestoneInlin
> 'MilestoneNavig
> 'MilestoneOverv
> 'MilestoneSetNa
> @@ -22,6 +23,7 @@
>
> from zope.component import getUtility
> from zope.formlib import form
> +from zope.interface import implements, Interface
> from zope.schema import Choice
>
> from canonical.
> @@ -131,11 +133,22 @@
> links = ('create_release', )
>
>
> +class IMilestoneInlin
> + """A marker interface for views that show a milestone inline."""
> +
> +
> +class MilestoneInline
> + """An inline navigation menus for milestone views."""
s/menus/menu
> + usedfor = IMilestoneInline LaunchpadView, ProductDownload FileMixin) : IMilestoneInlin e) registry/ browser/ tests/milestone -views. txt' registry/ browser/ tests/milestone -views. txt 2009-09-30 22:49:58 +0000 registry/ browser/ tests/milestone -views. txt 2009-12-02 12:04:29 +0000 browser. milestone import ( tMenu, MilestoneOvervi ewMenu, ewNavigationMen u) tMenu, MilestoneInline NavigationMenu, ewMenu, MilestoneOvervi ewNavigationMen u) links(Milestone ContextMenu( milestone) ) links(Milestone OverviewNavigat ionMenu( milestone) ) links(Milestone InlineNavigatio nMenu(milestone ))
> + facet = 'overview'
> + links = ('edit', )
> +
> +
> class MilestoneView(
> """A View for listing milestones and releases."""
> # XXX sinzui 2009-05-29 bug=381672: Extract the BugTaskListingItem rules
> # to a mixin so that MilestoneView and others can use it.
> -
> + implements(
> show_series_context = False
>
> def __init__(self, context, request):
>
> === modified file 'lib/lp/
> --- lib/lp/
> +++ lib/lp/
> @@ -21,8 +21,8 @@
> Milestone defines several menus.
>
> >>> from lp.registry.
> - ... MilestoneContex
> - ... MilestoneOvervi
> + ... MilestoneContex
> + ... MilestoneOvervi
> >>> from lp.testing.menu import check_menu_links
>
> >>> check_menu_
> @@ -31,6 +31,9 @@
> True
> >>> check_menu_
> True
> + >>> check_menu_
> + True
> +
Should there also be a test to show that the NavigationMenu is chosen for MilestoneView, or is that
MilestoneInline
going too far?
> registry/ templates/ productseries- milestone- table-row. pt' registry/ templates/ productseries- milestone- table-row. pt 2009-11-03 19:04:53 +0000 registry/ templates/ productseries- milestone- table-row. pt 2009-12-02 12:04:29 +0000 xml.zope. org/namespaces/ tal" xml.zope. org/namespaces/ metal" xml.zope. org/namespaces/ i18n" "milestone_ menu view/milestone/ menu:navigation ; "milestone_ menu view/menu: navigation; distroseries_ milestone" > product_ release" "release" "title release/ datereleased/ fmt:datetime" "release/ datereleased/ fmt:approximate date"> product_ release" >
> The MilestoneView provides access to the milestone and to its release if
> it has one.
>
> === modified file 'lib/lp/
> --- lib/lp/
> +++ lib/lp/
> @@ -2,8 +2,9 @@
> xmlns:tal="http://
> xmlns:metal="http://
> xmlns:i18n="http://
> - define=
> - milestone view/milestone">
> + define=
> + milestone view/milestone;
> + release view/release">
> <tr>
> <td>
> <img src="/@@/milestone" alt="" />
> @@ -43,13 +44,12 @@
> </td>
> <td tal:condition="not: view/is_
> <span
> - tal:define="release milestone/
> tal:condition=
> tal:attributes=
> tal:content=
> 2005-12-13
> </span>
> - <tal:no-release condition="not: milestone/
> + <tal:no-release condition="not: release">
> <em tal:condition="not: milestone/active">
> <img src="/@@/info"/> This is an inactive milestone
> </em>
>