Edgewall Software

ChristianBoos: wiki2x_in_templates.diff

File wiki2x_in_templates.diff, 55.5 kB (added by cboos, 22 months ago)

move most of the wiki_to_html and wiki_to_oneliner calls in the Genshi templates

  • trac/attachment.py

     
    3434from trac.web import HTTPBadRequest, IRequestHandler 
    3535from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    3636from trac.wiki.api import IWikiSyntaxProvider 
    37 from trac.wiki.formatter import wiki_to_html, wiki_to_oneliner 
    3837 
    3938 
    4039class InvalidAttachment(TracError): 
     
    254253        return fd 
    255254 
    256255 
    257 # Templating utilities 
    258  
    259 def attachments_data(env, req, db, parent_type, parent_id): 
    260     return [attachment_data(env, req, db, attachment) for attachment 
    261             in Attachment.select(env, parent_type, parent_id, db)] 
    262      
    263 def attachment_data(env, req, db, attachment): 
    264     # FIXME: pretty close to the attachment itself... so pass directly 
    265     # the attachment 
    266     if not db: 
    267         db = env.get_db_cnx() 
    268     description = wiki_to_oneliner(attachment.description, env, db) 
    269     return { 
    270         'filename': attachment.filename, 
    271         'description': Markup(description.strip()), 
    272         'author': attachment.author, 
    273         'ipnr': attachment.ipnr, 
    274         'size': attachment.size, 
    275         'date': attachment.time, 
    276         'href': attachment.href(req) 
    277     } 
    278  
    279  
    280256class AttachmentModule(Component): 
    281257 
    282258    implements(IEnvironmentSetupParticipant, IRequestHandler, 
     
    363339                data = { 
    364340                    'mode': 'list', 
    365341                    'parent': parent_data(parent_type, last_segment), 
    366                     'attachments': attachments_data(self.env, req, None, 
    367                                                     parent_type, last_segment), 
     342                    'attachments': Attachment.select(self.env, 
     343                                                     parent_type, last_segment) 
    368344                    } 
    369345                return 'attachment.html', data, None 
    370346            if not last_segment: 
     
    426402                self.get_history(start, stop, type): 
    427403            title = html(html.EM(os.path.basename(filename)), 
    428404                         ' attached to ', display(id)) 
    429             if format == 'rss': 
    430                 descr = wiki_to_html(descr or '--', self.env, req, db, 
    431                                      absurls=True) 
    432                 href = req.abs_href 
    433             else: 
    434                 descr = wiki_to_oneliner(descr, self.env, db, shorten=True) 
    435                 title += Markup(' by %s', author) 
    436                 href = req.href 
    437             yield('attachment', href.attachment(type, id, filename), title, 
     405            yield('attachment', req.href.attachment(type, id, filename), title, 
    438406                  time, author, descr) 
    439407 
    440408    # Internal methods 
     
    533501 
    534502        req.check_modified(attachment.time) 
    535503 
    536         # Render HTML view 
    537         att_data = attachment_data(self.env, req, None, attachment) 
    538         # Override the 'oneliner' 
    539         att_data['description'] = wiki_to_html(attachment.description, 
    540                                                self.env, req) 
    541          
    542504        data = {'mode': 'view', 'title': attachment.title, 
    543                 'attachment': att_data} 
     505                'attachment': attachment} 
    544506     
    545507        perm_map = {'ticket': 'TICKET_ADMIN', 'wiki': 'WIKI_DELETE'} 
    546508        if req.perm.has_permission(perm_map[attachment.parent_type]): 
  • trac/ticket/web_ui.py

     
    1919from StringIO import StringIO 
    2020import time 
    2121 
    22 from trac.attachment import attachments_data, Attachment, AttachmentModule 
     22from trac.attachment import Attachment, AttachmentModule 
    2323from trac.config import BoolOption, Option 
    2424from trac.core import * 
    2525from trac.ticket import Milestone, Ticket, TicketSystem, ITicketManipulator 
     
    3131from trac.web import IRequestHandler 
    3232from trac.web.chrome import add_link, add_stylesheet, INavigationContributor, \ 
    3333                            Chrome 
    34 from trac.wiki import wiki_to_html, wiki_to_oneliner 
    3534from trac.mimeview.api import Mimeview, IContentConverter 
     35from trac.wiki import wiki_to_html, wiki_to_oneliner 
    3636 
    3737 
    3838class InvalidTicket(TracError): 
     
    107107        ticket.values['reporter'] = get_reporter_id(req, 'reporter') 
    108108        data['ticket'] = ticket 
    109109 
    110         if 'description' in ticket.values: 
    111             description = wiki_to_html(ticket['description'], self.env, req, db) 
    112             data['preview'] = description 
    113  
    114110        field_names = [field['name'] for field in ticket.fields 
    115111                       if not field.get('custom')] 
    116112        if 'owner' in field_names: 
     
    265261                comment = req.args.get('comment') 
    266262                if comment: 
    267263                    data['comment'] = comment 
    268                     # Wiki format a preview of comment 
    269                     data['preview'] = wiki_to_html(comment, self.env, req, db) 
     264                    data['preview'] = True 
    270265        else: 
    271266            data['reassign_owner'] = req.authname 
    272267            # Store a timestamp in order to detect "mid air collisions" 
     
    445440            change_summary = {} 
    446441            # wikify comment 
    447442            if 'comment' in change: 
    448                 comment = change['comment'] 
    449                 change['comment'] = unicode(wiki_to_html( 
    450                     comment, self.env, req, db, absurls=True)) 
    451443                change_summary['added'] = ['comment'] 
    452444            for field, values in change['fields'].iteritems(): 
    453445                if field == 'description': 
     
    462454            change['title'] = '; '.join(['%s %s' % (', '.join(v), k) for k, v \ 
    463455                                         in change_summary.iteritems()]) 
    464456 
    465         data = { 
    466             'id': ticket.id, 
    467             'description': wiki_to_html(ticket['description'], self.env, req, 
    468                                         db, absurls=True), 
    469             'changes': changes, 
    470             } 
     457        data = {'ticket': ticket, 'changes': changes} 
    471458         
    472459        template = Chrome(self.env).load_template('ticket.rss', req, data) 
    473460        return template.generate(**data).render('xml'), 'application/rss+xml' 
     
    558545            data['fields'].append(field) 
    559546 
    560547        data['reporter_id'] = reporter_id 
    561         data['description'] = wiki_to_html(ticket['description'], self.env, req, 
    562                                            db) 
    563548 
    564549        # FIXME: get rid of this once datetime branch is merged 
    565550        data['opened'] = ticket.time_created 
     
    587572            comment = '' 
    588573            if 'comment' in change: 
    589574                comment = change['comment'] 
    590                 change['comment'] = wiki_to_html(comment, self.env, req, db) 
    591575            if change['permanent']: 
    592576                cnum = change['cnum'] 
    593577                # keep track of replies threading 
     
    611595 
    612596        # -- Ticket Attachments 
    613597 
    614         data['attachments'] = attachments_data(self.env, req, db, 'ticket', 
    615                                                ticket.id) 
     598        data['attachments'] = Attachment.select(self.env, 'ticket', ticket.id, 
     599                                                db) 
    616600        if req.perm.has_permission('TICKET_APPEND'): 
    617601            data['attach_href'] = req.href.attachment('ticket', ticket.id) 
    618602 
  • trac/ticket/report.py

     
    2727from trac.util.html import html 
    2828from trac.web.api import IRequestHandler, RequestDone 
    2929from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    30 from trac.wiki import wiki_to_html, IWikiSyntaxProvider, Formatter 
     30from trac.wiki import IWikiSyntaxProvider, Formatter 
    3131 
    3232 
    3333class ReportModule(Component): 
     
    232232            title = '{%i} %s' % (id, title) 
    233233         
    234234        data = {'action': 'view', 'title': title, 
    235                 'report': 
    236                 {'id': id, 'title': title, 
    237                  'description': wiki_to_html(description, self.env, req, db, 
    238                                              absurls=(format == 'rss')), 
    239                  'can': perms}} 
    240  
     235                'report': {'id': id, 'title': title, 
     236                           'description': description, 'can': perms}} 
    241237        try: 
    242238            cols, results = self.execute_report(req, db, id, sql, args) 
    243239        except Exception, e: 
     
    318314                        row['id'] = value 
    319315                    # Special casing based on column name 
    320316                    col = col.strip('_') 
    321                     if col == 'description': 
    322                         cell['parsed'] = wiki_to_html(value, self.env, req, db, 
    323                                                       absurls=(format == 'rss')) 
    324                     elif col == 'reporter': 
     317                    if col == 'reporter': 
    325318                        if '@' in value: 
    326319                            cell['author'] = value 
    327320                        elif value in email_map: 
  • trac/ticket/roadmap.py

     
    2929from trac.Timeline import ITimelineEventProvider 
    3030from trac.web import IRequestHandler 
    3131from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    32 from trac.wiki import wiki_to_html, wiki_to_oneliner, IWikiSyntaxProvider 
     32from trac.wiki import IWikiSyntaxProvider 
    3333 
    3434 
    3535def get_tickets_for_milestone(env, db, milestone, field='component'): 
     
    8787    } 
    8888 
    8989def milestone_to_hdf(env, db, req, milestone): 
     90    ### FIXME: should use the Milestone object directly 
    9091    safe_name = None 
    9192    if milestone.exists: 
    9293        safe_name = milestone.name.replace('/', '%2F') 
    9394    hdf = {'name': milestone.name, 'exists': milestone.exists, 
    9495           'href': req.href.milestone(safe_name)} 
    9596    if milestone.description: 
    96         hdf['description_source'] = milestone.description 
    97         hdf['description'] = wiki_to_html(milestone.description, env, req, db) 
     97        hdf['description'] = milestone.description 
    9898    if milestone.due: 
    9999        hdf['due'] = milestone.due 
    100100        hdf['due_date'] = format_date(milestone.due) 
     
    317317                           (start, stop,)) 
    318318            for completed, name, description in cursor: 
    319319                title = Markup('Milestone <em>%s</em> completed', name) 
    320                 if format == 'rss': 
    321                     href = req.abs_href.milestone(name) 
    322                     message = wiki_to_html(description, self.env, req, db, 
    323                                            absurls=True) 
    324                 else: 
    325                     href = req.href.milestone(name) 
    326                     message = wiki_to_oneliner(description, self.env, db, 
    327                                                shorten=True) 
    328                 yield 'milestone', href, title, completed, None, message or '--' 
     320                yield 'milestone', href, title, completed, None, description 
    329321 
    330322    # IRequestHandler methods 
    331323 
  • trac/ticket/query.py

     
    2929from trac.web.chrome import add_link, add_script, add_stylesheet, \ 
    3030                            INavigationContributor, Chrome 
    3131from trac.wiki.api import IWikiSyntaxProvider, parse_args 
    32 from trac.wiki.formatter import wiki_to_html, wiki_to_oneliner 
    3332from trac.wiki.macros import WikiMacroBase # TODO: should be moved in .api 
    3433from trac.mimeview.api import Mimeview, IContentConverter 
    3534 
     
    405404                    groups.setdefault(value, []).append(ticket) 
    406405                    if not groupsequence or groupsequence[-1] != value: 
    407406                        groupsequence.append(value) 
    408                 if field == 'time': 
    409                     ticket[field] = value 
    410                 elif field == 'description': 
    411                     ticket[field] = \ 
    412                                   wiki_to_html(value or '', self.env, req, db) 
    413                 else: 
    414                     ticket[field] = value 
     407                ticket[field] = value 
    415408        groupsequence = [(value, groups[value]) for value in groupsequence] 
    416409 
    417410        return {'query': self, 
     
    639632        for result in results: 
    640633            if result['reporter'].find('@') == -1: 
    641634                result['reporter'] = '' 
    642             if result['description']: 
    643                 result['description'] = wiki_to_html(result['description'], 
    644                                                      self.env, req, db, 
    645                                                      absurls=True) 
    646635        query_href = req.abs_href.query(group=query.group, 
    647636                                        groupdesc=query.groupdesc and 1 or None, 
    648637                                        verbose=query.verbose and 1 or None, 
  • trac/versioncontrol/web_ui/util.py

     
    2424from trac.util.html import escape, html, Markup 
    2525from trac.util.text import shorten_line 
    2626from trac.versioncontrol.api import NoSuchNode, NoSuchChangeset 
    27 from trac.wiki import wiki_to_html, wiki_to_oneliner 
    2827 
    2928__all__ = ['get_changes', 'get_path_links', 'get_path_rev_line', 
    3029           'get_existing_node', 'render_node_property'] 
     
    4140 
    4241        wiki_format = env.config['changeset'].getbool('wiki_format_messages') 
    4342        message = changeset.message or '--' 
    44         absurls = (format == 'rss') 
    45         if wiki_format: 
    46             shortlog = wiki_to_oneliner(message, env, db, 
    47                                         shorten=True, absurls=absurls) 
    48         else: 
     43        if not wiki_format: 
    4944            shortlog = Markup.escape(shorten_line(message)) 
     45        else: 
     46            shortlog = message 
    5047 
    5148        if full: 
    52             if wiki_format: 
    53                 message = wiki_to_html(message, env, req, db, 
    54                                        absurls=absurls, escape_newlines=True) 
    55             else: 
     49            if not wiki_format: 
    5650                message = html.PRE(message) 
    5751        else: 
    5852            message = shortlog 
    5953 
    60         if format == 'rss': 
    61             if isinstance(shortlog, Markup): 
    62                 shortlog = u' '.join(shortlog.striptags().splitlines()) 
    63             message = unicode(message) 
    64  
    6554        changes[rev] = { 
    6655            'date_seconds': changeset.date, 
    6756            'date': format_datetime(changeset.date), 
    6857            'age': pretty_timedelta(changeset.date), 
    6958            'author': changeset.author or 'anonymous', 
    70             'message': message, 'shortlog': shortlog, 
     59            'message': message, 
     60            'shortlog': shortlog, 
    7161        } 
    7262    return changes 
    7363 
  • trac/versioncontrol/web_ui/changeset.py

     
    3939from trac.versioncontrol.web_ui.util import render_node_property 
    4040from trac.web import IRequestHandler, RequestDone 
    4141from trac.web.chrome import INavigationContributor, add_link, add_stylesheet 
    42 from trac.wiki import wiki_to_html, wiki_to_oneliner, IWikiSyntaxProvider, \ 
    43                       Formatter 
     42from trac.wiki import IWikiSyntaxProvider, Formatter 
    4443 
    4544 
    4645class ChangesetModule(Component): 
     
    202201        if chgset: 
    203202            chgset = repos.get_changeset(new) 
    204203            message = chgset.message or '--' 
    205             if self.wiki_format_messages: 
    206                 message = wiki_to_html(message, self.env, req, 
    207                                               escape_newlines=True) 
    208             else: 
     204            if not self.wiki_format_messages: 
    209205                message = html.PRE(message) 
    210206            req.check_modified(chgset.date, [ 
    211207                style, ''.join(options), repos.name, 
     
    293289            title = _changeset_title(rev) 
    294290            properties = [] 
    295291            for name, value, wikiflag, htmlclass in chgset.get_properties(): 
    296                 if wikiflag: 
    297                     value = wiki_to_html(value or '', self.env, req) 
    298292                properties.append({'name': name, 'value': value, 
    299                                    'htmlclass': htmlclass}) 
     293                                   'htmlclass': htmlclass, 
     294                                   'wiki_formatting': wikiflag}) 
    300295 
    301296            data['changeset'] = { 
    302297                'revision': chgset.rev, 
     
    619614            repos = self.env.get_repository(req.authname) 
    620615            for chgset in repos.get_changesets(start, stop): 
    621616                message = chgset.message or '--' 
    622                 if wiki_format: 
    623                     shortlog = wiki_to_oneliner(message, self.env, db, 
    624                                                 shorten=True) 
    625                 else: 
     617                if not wiki_format: 
    626618                    shortlog = shorten_line(message) 
    627619 
    628620                if format == 'rss': 
    629621                    title = Markup('Changeset [%s]: %s', chgset.rev, shortlog) 
    630622                    href = req.abs_href.changeset(chgset.rev) 
    631                     if wiki_format: 
    632                         message = wiki_to_html(message, self.env, req, db, 
    633                                                absurls=True) 
    634                     else: 
     623                    if not wiki_format: 
    635624                        message = html.PRE(message) 
    636625                else: 
    637626                    title = Markup('Changeset <em>[%s]</em> by %s', chgset.rev, 
     
    639628                    href = req.href.changeset(chgset.rev) 
    640629 
    641630                    if wiki_format: 
     631                        # FIXME: 
    642632                        if self.timeline_long_messages: 
    643                             message = wiki_to_html(message, self.env, req, db, 
    644                                                    absurls=True) 
    645                         else: 
    646                             message = wiki_to_oneliner(message, self.env, db, 
    647                                                        shorten=True) 
     633                            pass 
     634                        # FIXME: should set the shorten flag on the event, 
     635                        #        see timeline.html 
    648636                    else: 
    649                         message = shortlog 
     637                        message = Markup.escape(shortlog) 
    650638 
    651639                if show_files and req.perm.has_permission('BROWSER_VIEW'): 
    652640                    files = [] 
  • trac/versioncontrol/web_ui/browser.py

     
    2727from trac.util import sorted, embedded_numbers 
    2828from trac.util.datefmt import http_date 
    2929from trac.util.html import escape, html, Markup 
    30 from trac.web import IRequestHandler, RequestDone 
    31 from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    32 from trac.wiki import wiki_to_html, IWikiSyntaxProvider 
    3330from trac.versioncontrol.api import NoSuchChangeset 
    3431from trac.versioncontrol.web_ui.util import * 
     32from trac.web.api import IRequestHandler, RequestDone 
     33from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
     34from trac.wiki.api import IWikiSyntaxProvider 
    3535 
    3636 
    3737CHUNK_SIZE = 4096 
     
    204204            changeset = repos.get_changeset(node.rev) 
    205205 
    206206            message = changeset.message or '--' 
    207             if self.config['changeset'].getbool('wiki_format_messages'): 
    208                 message = wiki_to_html(message, self.env, req, 
    209                                        escape_newlines=True) 
    210             else: 
     207            if not self.config['changeset'].getbool('wiki_format_messages'): 
    211208                message = html.PRE(message) 
    212209 
    213210            # add ''Plain Text'' alternate link if needed 
  • trac/About.py

     
    9595 
    9696    def _render_plugins(self, req): 
    9797        try: 
    98             from trac.wiki.formatter import wiki_to_html 
    9998            import inspect 
    10099            def getdoc(obj): 
    101                 return wiki_to_html(inspect.getdoc(obj), self.env, req) 
     100                return inspect.getdoc(obj) 
    102101        except: 
    103102            def getdoc(obj): 
    104103                return obj.__doc__ 
     
    112111                continue 
    113112            plugin = {'name': component.__name__} 
    114113            if component.__doc__: 
    115                 plugin['description'] = Markup(getdoc(component)) 
     114                plugin['description'] = getdoc(component) 
    116115 
    117116            module = sys.modules[component.__module__] 
    118117            plugin['module'] = module.__name__ 
     
    128127                               'interface': xtnpt.interface.__name__, 
    129128                               'module': xtnpt.interface.__module__}) 
    130129                if xtnpt.interface.__doc__: 
    131                     xtnpts[-1]['description'] = Markup(getdoc(xtnpt.interface)) 
     130                    xtnpts[-1]['description'] = getdoc(xtnpt.interface) 
    132131                extensions = [] 
    133132                for extension in ComponentMeta._registry.get(xtnpt.interface, []): 
    134133                    if self.env.is_component_enabled(extension): 
  • trac/wiki/web_ui.py

     
    2020import re 
    2121import StringIO 
    2222 
    23 from trac.attachment import attachments_data, Attachment, AttachmentModule 
     23from trac.attachment import Attachment, AttachmentModule 
    2424from trac.core import * 
    2525from trac.perm import IPermissionRequestor 
    2626from trac.Search import ISearchSource, search_to_sql, shorten_result 
     
    3333from trac.web import HTTPNotFound, IRequestHandler 
    3434from trac.wiki.api import IWikiPageManipulator, WikiSystem 
    3535from trac.wiki.model import WikiPage 
    36 from trac.wiki.formatter import wiki_to_html, wiki_to_oneliner 
    3736from trac.mimeview.api import Mimeview, IContentConverter 
    3837 
    3938 
     
    243242            if version == new_version: 
    244243                date = t 
    245244                author = a or 'anonymous' 
    246                 comment = wiki_to_html(c or '--', self.env, req, db) 
     245                comment = c 
    247246                ipnr = i or '' 
    248247            else: 
    249248                if version < new_version: 
     
    335334            'edit_rows': editrows, 
    336335            'scroll_bar_pos': req.args.get('scroll_bar_pos', '') 
    337336        }) 
    338         if action == 'preview': 
    339             data.update({ 
    340             'page_html': wiki_to_html(page.text, self.env, req, db), 
    341             'comment_html': wiki_to_oneliner(comment, self.env, db) 
    342             }) 
    343337        return 'wiki_edit.html', data, None 
    344338 
    345339    def _render_history(self, req, db, page): 
     
    361355                'version': version, 
    362356                'date': date, 
    363357                'author': author, 
    364                 'comment': wiki_to_oneliner(comment or '', self.env, db), 
     358                'comment': comment, 
    365359                'ipnr': ipnr 
    366360            }) 
    367361        data['history'] = history 
     
    384378        if page.name == 'WikiStart': 
    385379            data['title'] = '' 
    386380 
    387         page_html = comment_html = attach_href = '' 
     381        attach_href = '' 
    388382        latest_page = WikiPage(self.env, page.name) 
    389383 
    390         if page.exists: 
    391             page_html = wiki_to_html(page.text, self.env, req, db) 
    392             if version: 
    393                 comment_html = wiki_to_oneliner(page.comment or '--', 
    394                                                 self.env, db) 
    395         else: 
     384        if not page.exists: 
    396385            if not req.perm.has_permission('WIKI_CREATE'): 
    397386                raise HTTPNotFound('Page %s not found', page.name) 
    398             page_html = html.P('Describe "%s" here' % data['page_name']) 
     387            page.text = 'Describe "`%s`" here' % data['page_name'] 
    399388 
    400389        # Show attachments 
    401         attachments = attachments_data(self.env, req, db, 'wiki', page.name) 
     390        attachments = Attachment.select(self.env, 'wiki', page.name, db) 
    402391        if req.perm.has_permission('WIKI_MODIFY'): 
    403392            attach_href = req.href.attachment('wiki', page.name) 
    404393 
    405394        data.update({'action': 'view', 
    406                      'page_html': page_html, 
    407                      'comment_html': comment_html, 
     395                     'version': version, 
    408396                     'latest_version': latest_page.version, 
    409397                     'attachments': attachments, 
    410398                     'attach_href': attach_href, 
     
    432420            for t,name,comment,author,version in cursor: 
    433421                title = Markup('<em>%s</em> edited by %s', 
    434422                               wiki.format_page_name(name), author) 
    435                 diff_link = html.A('diff', href=href.wiki(name, action='diff', 
    436                                                           version=version)) 
    437                 if format == 'rss': 
    438                     comment = wiki_to_html(comment or '--', self.env, req, db, 
    439                                            absurls=True) 
    440                 else: 
    441                     comment = wiki_to_oneliner(comment, self.env, db, 
    442                                                shorten=True) 
    443423                if version > 1: 
    444                     comment = html(comment, ' (', diff_link, ')') 
    445                 yield 'wiki', href.wiki(name), title, t, author, comment 
     424                    link = href.wiki(name, action='diff', version=version) 
     425                else: 
     426                    link = href.wiki(name) 
     427                yield 'wiki', link, title, t, author, comment 
    446428 
    447429            # Attachments 
    448430            def display(id):