Changeset 254

Show
Ignore:
Timestamp:
08/09/06 23:44:05 (2 years ago)
Author:
matt
Message:

Render immutable composite widgets correctly.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/composite-2/formal/widgets/composite.py

    r244 r254  
    2727 
    2828    def render(self, ctx, key, args, errors): 
    29  
    30         if not errors: 
    31             value = args.get(key) or {} 
    32         else: 
    33             value = None 
    34  
    35         for name, type in self.composite.composition: 
    36             childKey = '.'.join([key, name]) 
    37             if value is not None: 
    38                 args = {childKey: value.get(name)} 
    39             yield T.div(class_=('composite-component', ' ', name))[ 
    40                 T.label(for_=formal.util.render_cssid(childKey))[ 
    41                     formal.util.titleFromName(name) 
    42                     ], 
    43                 formal.iformal.IWidget(type).render(ctx, childKey, args, errors) 
    44                 ] 
     29        return self._render(ctx, key, args, errors, False) 
    4530 
    4631 
    4732    def renderImmutable(self, ctx, key, args, errors): 
    48         for name, type in self.composite.composition: 
    49             childKey = '.'.join([key, name]) 
    50             yield T.div(class_=name)[ 
    51                 T.label[formal.util.titleFromName(name)], 
    52                 formal.iformal.IWidget(type).renderImmutable(ctx, childKey, 
    53                         args, errors) 
    54                 ] 
     33        return self._render(ctx, key, args, errors, True) 
    5534 
    5635 
     
    6241                childKey, args)) 
    6342        return tuple(value) 
     43 
     44 
     45    def _render(self, ctx, key, args, errors, immutable): 
     46 
     47        if not errors: 
     48            value = args.get(key) or {} 
     49        else: 
     50            value = None 
     51 
     52        for name, type in self.composite.composition: 
     53 
     54            childKey = '.'.join([key, name]) 
     55            if value is not None: 
     56                args = {childKey: value.get(name)} 
     57 
     58            widget = formal.iformal.IWidget(type) 
     59            if immutable: 
     60                widgetRenderer = widget.renderImmutable 
     61            else: 
     62                widgetRenderer = widget.render 
     63 
     64            yield T.div(class_=('composite-component', ' ', name))[ 
     65                T.label(for_=formal.util.render_cssid(childKey))[ 
     66                    formal.util.titleFromName(name) 
     67                    ], 
     68                widgetRenderer(ctx, childKey, args, errors) 
     69                ]