Here's a diff against the current workflow branch, actually implementing
this:

    http://swapoff.org/files/field_type_provider.diff

Still needs to be cleaned up a bit, but the patch is relatively simple.

On Fri, Mar 10, 2006 at 01:57:13PM +1100, Alec Thomas wrote:
> Hi,
> 
> I think it would be advantageous to let plugins implement their own
> ticket field types. Progress-bars, integer-only fields, etc. have all
> been requested numerous times.
> 
> I'm proposing to add something like this:
> 
>     class ITicketFieldTypeProvider(Interface):
>         """ Provide custom ticket field types. """
>         def get_ticket_field_types():
>             """ Return list of (name, type) tuples, where type is a
>                 subclass of trac.ticket.field.Field. """
> 
> Then the current field types would be implemented with this:
> 
>     def get_ticket_field_types(self):
>         from trac.ticket.field import TextArea, Select, \
>                                       CheckBox, Radio, Text
>         yield ('textarea', TextArea)
>         yield ('select', Select)
>         yield ('checkbox', CheckBox)
>         yield ('radio', Radio)
>         yield ('text', Text)
> 
> The problematic part is how to render the custom fields. Ideally they
> would be rendered through the templating system, but I can't really
> figure out a clean way to inject other templates into ClearSilver.
> 
> The solution I've come up with is to create a temporary HDFWrapper
> object, populate it with the ticket data, then pass that to the
> render(hdf) and render_control(hdf) methods of ticket.field.Field. This
> doesn't seem terribly efficient to me.
> 
> render() generates the HTML used when displaying the field itself, while
> render_control() generates the HTML necessary to edit the field. The
> results are stored in the main HDF tree under the current fields
> html_value and html_control.
> 
> Here's what the ticket summary field might look like:
> 
>     1 {
>       name = summary
>       title = 
>       plaintext = 0
>       editable = 1
>       value = This is a really really long ticket summary to see how the new 
> patch handles long lines
>       label = Summary
>       hidden = 1
>       type = text
>       order = 0
>       fullrow = 1
>       html_value = This is a really really long ticket summary to see how the 
> new patch handles long lines
>       html_control = <input type="text" id="summary" name="summary" size="70" 
> value="This is a really really long ticket summary to see how the new patch 
> handles long lines" />
>     }
> 
> So, the question is, is there a cleaner way to do this?
> 
> Alec
> 
> -- 
> Evolution: Taking care of those too stupid to take care of themselves.
> _______________________________________________
> Trac-dev mailing list
> [email protected]
> http://lists.edgewall.com/mailman/listinfo/trac-dev
> 

-- 
Evolution: Taking care of those too stupid to take care of themselves.
_______________________________________________
Trac-dev mailing list
[email protected]
http://lists.edgewall.com/mailman/listinfo/trac-dev

Reply via email to