~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/browser/bugtask.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2009-09-01 13:59:49 UTC
  • mfrom: (9087.5.19 bugtask-ajax-target)
  • Revision ID: launchpad@pqm.canonical.com-20090901135949-e0e2cghhz20fh790
[r=allenap][ui=rockstar] Make it possible to change a product bugtask
        target inline

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
    'BugListingBatchNavigator',
11
11
    'BugListingPortletView',
12
12
    'BugNominationsView',
 
13
    'bugtarget_renderer',
13
14
    'BugTargetTraversalMixin',
14
15
    'BugTargetView',
15
16
    'BugTaskContextMenu',
76
77
from lazr.lifecycle.snapshot import Snapshot
77
78
from lazr.restful.interface import copy_field
78
79
from lazr.restful.interfaces import (
79
 
    IFieldHTMLRenderer, IReferenceChoice, IWebServiceClientRequest)
 
80
    IFieldHTMLRenderer, IReference, IReferenceChoice,
 
81
    IWebServiceClientRequest)
80
82
 
81
83
from canonical.config import config
82
84
from canonical.database.sqlbase import cursor
137
139
from canonical.launchpad.webapp.authorization import check_permission
138
140
from canonical.launchpad.webapp.batching import TableBatchNavigator
139
141
from canonical.launchpad.webapp.menu import structured
140
 
from canonical.launchpad.webapp.tales import PersonFormatterAPI, FormattersAPI
 
142
from canonical.launchpad.webapp.tales import (
 
143
    FormattersAPI, ObjectImageDisplayAPI, PersonFormatterAPI)
141
144
 
142
145
from canonical.lazr.interfaces import IObjectPrivacy
143
146
from lazr.restful.interfaces import IJSONRequestCache
161
164
def assignee_renderer(context, field, request):
162
165
    """Render a bugtask assignee as a link."""
163
166
    def render(value):
164
 
        return PersonFormatterAPI(context.assignee).link('+assignedbugs')
 
167
        if context.assignee is None:
 
168
            return ''
 
169
        else:
 
170
            return PersonFormatterAPI(context.assignee).link(None)
 
171
    return render
 
172
 
 
173
@component.adapter(IBugTask, IReference, IWebServiceClientRequest)
 
174
@implementer(IFieldHTMLRenderer)
 
175
def bugtarget_renderer(context, field, request):
 
176
    """Render a bugtarget as a link."""
 
177
    def render(value):
 
178
        html = """<span>
 
179
          <a href="%(href)s" class="%(class)s">%(displayname)s</a>
 
180
        </span>""" % {
 
181
            'href': canonical_url(context.target),
 
182
            'class': ObjectImageDisplayAPI(context.target).sprite_css(),
 
183
            'displayname': cgi.escape(context.bugtargetdisplayname)}
 
184
        return html
165
185
    return render
166
186
 
167
187
def unique_title(title):
1229
1249
                title=self.schema['milestone'].title,
1230
1250
                source=milestone_source, required=False)
1231
1251
        else:
1232
 
            milestone_field = copy_field(IBugTask['milestone'],
1233
 
                                         readonly=False)
 
1252
            milestone_field = copy_field(
 
1253
                IBugTask['milestone'], readonly=False)
1234
1254
 
1235
1255
        self.form_fields = self.form_fields.omit('milestone')
1236
1256
        self.form_fields += formlib.form.Fields(milestone_field)
3152
3172
            'bugtask_path': '/'.join(
3153
3173
                [''] + canonical_url(self.context).split('/')[3:]),
3154
3174
            'prefix': get_prefix(self.context),
 
3175
            'target_is_product': IProduct.providedBy(self.context.target),
3155
3176
            'status_widget_items': self.status_widget_items,
3156
3177
            'status_value': self.context.status.title,
3157
3178
            'importance_widget_items': self.importance_widget_items,