Ticket #7316: 7316-timeline-render-refact-r7595.diff
| File 7316-timeline-render-refact-r7595.diff, 13.7 KB (added by cboos, 3 years ago) |
|---|
-
trac/attachment.py
42 42 INavigationContributor 43 43 from trac.web.href import Href 44 44 from trac.wiki.api import IWikiSyntaxProvider 45 from trac.wiki.formatter import format_to _oneliner45 from trac.wiki.formatter import format_to 46 46 47 47 48 48 class InvalidAttachment(TracError): … … 464 464 if 'ATTACHMENT_VIEW' in req.perm(attachment): 465 465 yield ('attachment', time, author, (attachment, descr), self) 466 466 467 def render_timeline_event(self, context, field, event ):467 def render_timeline_event(self, context, field, event, abbreviated=None): 468 468 attachment, descr = event[3] 469 469 if field == 'url': 470 470 return self.get_resource_url(attachment, context.href) … … 474 474 return tag(tag.em(os.path.basename(attachment.id)), 475 475 _(" attached to "), tag.em(name, title=title)) 476 476 elif field == 'description': 477 return format_to_oneliner(self.env, context(attachment.parent), 478 descr) 477 if abbreviated is None: 478 abbreviated = self.config['timeline'] \ 479 .getbool('abbreviated_messages') 480 flavor, options = (('html', {}), 481 ('oneliner', {'shorten': True}))[abbreviated] 482 return format_to(self.env, flavor, context(attachment.parent), 483 descr, **options) 479 484 480 485 def get_search_results(self, req, resource_realm, terms): 481 486 """Return a search result generator suitable for ISearchSource. -
trac/ticket/web_ui.py
125 125 but keeps the old behavior for upgraded environments (i.e. 'no'). 126 126 (''since 0.11'').""") 127 127 128 def _must_preserve_newlines(self): 129 preserve_newlines = self.preserve_newlines 130 if preserve_newlines == 'default': 131 preserve_newlines = self.env.get_version(initial=True) >= 21 # 0.11 132 return preserve_newlines in _TRUE_VALUES 133 must_preserve_newlines = property(_must_preserve_newlines) 134 128 135 # IContentConverter methods 129 136 130 137 def get_supported_conversions(self): … … 322 329 req, ticket_realm, start, stop): 323 330 yield event 324 331 325 def render_timeline_event(self, context, field, event ):332 def render_timeline_event(self, context, field, event, abbreviated=None): 326 333 ticket, verb, info, summary, status, resolution, type, \ 327 334 description, comment, cid = event[3] 328 335 if field == 'url': … … 339 346 descr = message = '' 340 347 if status == 'new': 341 348 message = description 342 flavor = self.timeline_newticket_formatter343 349 else: 344 350 descr = info 345 351 message = comment 352 flavor = 'html' 353 options = {'escape_newlines': self.must_preserve_newlines} 354 if abbreviated is None: 355 if status == 'new': 356 flavor = self.timeline_newticket_formatter 357 else: 358 abbreviated = self.config['timeline'] \ 359 .getbool('abbreviated_messages') 360 if abbreviated: 346 361 flavor = 'oneliner' 347 if message: 348 if self.config['timeline'].getbool('abbreviated_messages'): 349 message = shorten_line(message) 350 descr += format_to(self.env, flavor, context(resource=ticket), 351 message) 362 if flavor == 'oneliner': # may come from newticket_formatter 363 options = {'shorten': True} 364 descr += format_to(self.env, flavor, context(resource=ticket), 365 message, **options) 352 366 return descr 353 367 354 368 # Internal methods … … 578 592 return 'ticket.html', data, None 579 593 580 594 def _prepare_data(self, req, ticket, absurls=False): 581 preserve_newlines = self.preserve_newlines582 if preserve_newlines == 'default':583 preserve_newlines = self.env.get_version(initial=True) >= 21 # 0.11584 preserve_newlines = preserve_newlines in _TRUE_VALUES585 595 return {'ticket': ticket, 586 596 'context': Context.from_request(req, ticket.resource, 587 597 absurls=absurls), 588 'preserve_newlines': preserve_newlines}598 'preserve_newlines': self.must_preserve_newlines} 589 599 590 600 def _toggle_cc(self, req, cc): 591 601 """Return an (action, recipient) tuple corresponding to a change -
trac/ticket/roadmap.py
42 42 from trac.web.chrome import add_link, add_stylesheet, add_warning, \ 43 43 INavigationContributor 44 44 from trac.wiki.api import IWikiSyntaxProvider 45 from trac.wiki.formatter import format_to _html45 from trac.wiki.formatter import format_to 46 46 47 47 class ITicketGroupStatsProvider(Interface): 48 48 def get_ticket_group_stats(ticket_ids): … … 525 525 req, milestone_realm, start, stop): 526 526 yield event 527 527 528 def render_timeline_event(self, context, field, event ):528 def render_timeline_event(self, context, field, event, abbreviated=None): 529 529 milestone, description = event[3] 530 530 if field == 'url': 531 531 return context.href.milestone(milestone.id) 532 532 elif field == 'title': 533 533 return tag('Milestone ', tag.em(milestone.id), ' completed') 534 534 elif field == 'description': 535 return format_to_html(self.env, context(resource=milestone), 536 shorten_line(description)) 535 if abbreviated is None: 536 abbreviated = self.config['timeline'] \ 537 .getbool('abbreviated_messages') 538 flavor, options = (('html', {}), 539 ('oneliner', {'shorten': True}))[abbreviated] 540 return format_to(self.env, flavor, context(resource=milestone), 541 description, **options) 537 542 538 543 # IRequestHandler methods 539 544 -
trac/versioncontrol/web_ui/changeset.py
47 47 from trac.web.chrome import add_ctxtnav, add_link, add_script, add_stylesheet, \ 48 48 prevnext_nav, INavigationContributor, Chrome 49 49 from trac.wiki import IWikiSyntaxProvider, WikiParser 50 from trac.wiki.formatter import format_to _html50 from trac.wiki.formatter import format_to 51 51 52 52 53 53 class IPropertyDiffRenderer(Interface): … … 813 813 (permitted_changesets, chgset.message or '', 814 814 show_location, show_files)) 815 815 816 def render_timeline_event(self, context, field, event ):816 def render_timeline_event(self, context, field, event, abbreviated=None): 817 817 changesets, message, show_location, show_files = event[3] 818 818 rev_b, rev_a = changesets[0].rev, changesets[-1].rev 819 819 … … 824 824 return context.href.log(rev=rev_b, stop_rev=rev_a) 825 825 826 826 elif field == 'description': 827 if not self.timeline_long_messages: 828 message = shorten_line(message) 827 if abbreviated is None: 828 abbreviated = not self.timeline_long_messages 829 flavor, options = (('html', {'escape_newlines': True}), 830 ('oneliner', {'shorten': True}))[abbreviated] 829 831 if self.wiki_format_messages: 830 832 markup = '' 831 833 else: … … 861 863 files = files[:show_files] + [tag.li(u'\u2026')] 862 864 markup = tag(tag.ul(files, class_="changes"), markup) 863 865 if message: 864 markup += format_to_html(self.env, context, message) 866 markup += format_to(self.env, flavor, context, message, 867 **options) 865 868 return markup 866 869 867 870 if rev_a == rev_b: -
trac/wiki/web_ui.py
41 41 INavigationContributor, ITemplateProvider 42 42 from trac.web import IRequestHandler 43 43 from trac.wiki.api import IWikiPageManipulator, WikiSystem 44 from trac.wiki.formatter import format_to _oneliner44 from trac.wiki.formatter import format_to 45 45 from trac.wiki.model import WikiPage 46 46 47 47 class InvalidWikiPage(TracError): … … 592 592 req, wiki_realm, start, stop): 593 593 yield event 594 594 595 def render_timeline_event(self, context, field, event ):595 def render_timeline_event(self, context, field, event, abbreviated=None): 596 596 wiki_page, comment = event[3] 597 597 if field == 'url': 598 598 return context.href.wiki(wiki_page.id, version=wiki_page.version) … … 600 600 return tag(tag.em(get_resource_name(self.env, wiki_page)), 601 601 wiki_page.version > 1 and ' edited' or ' created') 602 602 elif field == 'description': 603 if self.config['timeline'].getbool('abbreviated_messages'): 604 comment = shorten_line(comment) 605 markup = format_to_oneliner(self.env, context(resource=wiki_page), 606 comment) 603 if abbreviated is None: 604 abbreviated = self.config['timeline'] \ 605 .getbool('abbreviated_messages') 606 flavor, options = (('html', {}), 607 ('oneliner', {'shorten': True}))[abbreviated] 608 markup = format_to(self.env, flavor, context(resource=wiki_page), 609 comment, **options) 607 610 if wiki_page.version > 1: 608 611 diff_href = context.href.wiki( 609 612 wiki_page.id, version=wiki_page.version, action='diff') -
trac/timeline/api.py
64 64 `markup` are not context dependent. 65 65 """ 66 66 67 def render_timeline_event(context, field, event ):67 def render_timeline_event(context, field, event, abbreviated=None): 68 68 """Display the title of the event in the given context. 69 69 70 70 :param context: the rendering `Context` object that can be used for … … 73 73 be rendered: can be the 'title', the 'description' or 74 74 the 'url' 75 75 :param event: the event tuple, as returned by `get_timeline_events` 76 :param abbreviated: when the flag is set to True, the renderer should 77 follow this hint in preference to its default way 78 of deciding whether the content should be 79 abbreviated or not. 80 76 81 """ 77 82 78 83 -
trac/timeline/web_ui.py
30 30 from trac.mimeview import Context 31 31 from trac.perm import IPermissionRequestor 32 32 from trac.timeline.api import ITimelineEventProvider 33 from trac.util import arity 33 34 from trac.util.compat import sorted 34 35 from trac.util.datefmt import format_date, format_datetime, parse_date, \ 35 36 to_timestamp, utc, pretty_timedelta … … 278 279 if len(event) == 6: # 0.10 events 279 280 kind, url, title, date, author, markup = event 280 281 data = {'url': url, 'title': title, 'description': markup} 281 render = lambda field, context : data.get(field)282 render = lambda field, context, abbreviated=None: data.get(field) 282 283 else: # 0.11 events 283 284 if len(event) == 5: # with special provider 284 285 kind, date, author, data, provider = event 285 286 else: 286 287 kind, date, author, data = event 287 render = lambda field, context: provider.render_timeline_event( 288 context, field, event) 288 if arity(provider.render_timeline_event) == 2: # 0.11 renderers 289 render = lambda field, context, abbreviated=None: \ 290 provider.render_timeline_event(context, field, event) 291 else: # 0.11.2, optional `abbreviated=None` argument 292 render = lambda field, context, abbreviated=None: \ 293 provider.render_timeline_event(context, field, event, 294 abbreviated) 289 295 if isinstance(date, datetime): 290 296 dateuid = to_timestamp(date) 291 297 else: -
trac/timeline/templates/timeline.rss
27 27 </py:with> 28 28 <guid isPermaLink="false">${abs_url}/${event.dateuid}</guid> 29 29 <description>${ 30 unicode(event.render('description', context ))30 unicode(event.render('description', context, abbreviated=False)) 31 31 }</description> 32 32 <category>$event.kind</category> 33 33 </item>
