Edgewall Software

Ticket #1791: trac.format.custom.fields.0.11.patch

File trac.format.custom.fields.0.11.patch, 5.4 KB (added by Joachim Hoessler <hoessler@…>, 4 years ago)

Patch against 0.11 trunk r6425 that allows wiki style custom fields

  • trac/ticket/api.py

     
    257257                'type': config.get(name), 
    258258                'order': config.getint(name + '.order', 0), 
    259259                'label': config.get(name + '.label') or name.capitalize(), 
    260                 'value': config.get(name + '.value', '') 
     260                'value': config.get(name + '.value', ''), 
     261                'format': config.get(name + '.format', 'plain') 
    261262            } 
    262263            if field['type'] == 'select' or field['type'] == 'radio': 
    263264                field['options'] = config.getlist(name + '.options', sep='|') 
  • trac/ticket/templates/ticket.html

     
    153153                    class="${field and field.name in ('cc', 'keywords') and 'searchable' or None}" 
    154154                    colspan="${fullrow and 3 or None}"> 
    155155                  <py:if test="field"> 
    156                     <py:choose test=""> 
    157                       <py:when test="'rendered' in field">${field.rendered}</py:when> 
    158                       <py:otherwise>${ticket[field.name]}</py:otherwise> 
     156                    <!--! wiki conversion for custom fields --> 
     157                    <py:choose test="field.format"> 
     158                      <py:when test="'wiki'"> 
     159                        ${wiki_to_html(context, ticket[field.name], escape_newlines=preserve_newlines)} 
     160                      </py:when> 
     161                      <py:when test="'wiki_oneliner'"> 
     162                        ${wiki_to_oneliner(context, ticket[field.name])} 
     163                      </py:when> 
     164                      <py:when test="'pre'"> 
     165                        ${wiki_to_html(context, '{{{\n' + (ticket[field.name] or '') + '\n}}}', escape_newlines=preserve_newlines)} 
     166                      </py:when> 
     167                      <py:otherwise> 
     168                        <py:choose test=""> 
     169                          <py:when test="'rendered' in field">${field.rendered}</py:when> 
     170                          <py:otherwise>${ticket[field.name]}</py:otherwise> 
     171                        </py:choose> 
     172                      </py:otherwise> 
    159173                    </py:choose> 
    160174                  </py:if> 
    161175                </td> 
     
    320334                    </select> 
    321335                    <textarea py:when="'textarea'" id="field-${field.name}" name="field_${field.name}" 
    322336                              cols="${field.width}" rows="${field.height}" 
     337                              class="${field.format == 'wiki' and 'wikitext' or None}"  
    323338                              py:content="ticket[field.name]"></textarea> 
    324339                    <span py:when="'checkbox'"> 
    325340                      <input type="checkbox" id="field-${field.name}" name="field_${field.name}" 
  • trac/ticket/tests/api.py

     
    1919        self.env.config.set('ticket-custom', 'test.value', 'Foo bar') 
    2020        fields = TicketSystem(self.env).get_custom_fields() 
    2121        self.assertEqual({'name': 'test', 'type': 'text', 'label': 'Test', 
    22                           'value': 'Foo bar', 'order': 0}, 
     22                          'value': 'Foo bar', 'order': 0, 'format': 'plain'}, 
    2323                         fields[0]) 
    2424 
    2525    def test_custom_field_select(self): 
     
    3030        fields = TicketSystem(self.env).get_custom_fields() 
    3131        self.assertEqual({'name': 'test', 'type': 'select', 'label': 'Test', 
    3232                          'value': '1', 'options': ['option1', 'option2'], 
    33                           'order': 0}, 
     33                          'order': 0, 'format': 'plain'}, 
    3434                         fields[0]) 
    3535 
    3636    def test_custom_field_optional_select(self): 
     
    4141        fields = TicketSystem(self.env).get_custom_fields() 
    4242        self.assertEqual({'name': 'test', 'type': 'select', 'label': 'Test', 
    4343                          'value': '1', 'options': ['option1', 'option2'], 
    44                           'order': 0, 'optional': True}, 
     44                          'order': 0, 'optional': True, 'format': 'plain'}, 
    4545                         fields[0]) 
    4646 
    4747    def test_custom_field_textarea(self): 
     
    5050        self.env.config.set('ticket-custom', 'test.value', 'Foo bar') 
    5151        self.env.config.set('ticket-custom', 'test.cols', '60') 
    5252        self.env.config.set('ticket-custom', 'test.rows', '4') 
     53        self.env.config.set('ticket-custom', 'test.format', 'wiki') 
    5354        fields = TicketSystem(self.env).get_custom_fields() 
    5455        self.assertEqual({'name': 'test', 'type': 'textarea', 'label': 'Test', 
    5556                          'value': 'Foo bar', 'width': 60, 'height': 4, 
    56                           'order': 0}, 
     57                          'order': 0, 'format': 'wiki'}, 
    5758                         fields[0]) 
    5859 
    5960    def test_custom_field_order(self): 
     
    6465        fields = TicketSystem(self.env).get_custom_fields() 
    6566        self.assertEqual('test2', fields[0]['name']) 
    6667        self.assertEqual('test1', fields[1]['name']) 
    67  
     68         
    6869    def test_available_actions_full_perms(self): 
    6970        ts = TicketSystem(self.env) 
    7071        self.perm.grant_permission('anonymous', 'TICKET_CREATE')