def generateBindings(): for name in bindingNames: bnd = configurable.getBinding(context, name) renderer = iformless.IBindingRenderer(bnd, defaultBindingRenderer) renderer.isGrouped = True renderer.needsSkin = True yield invisible(data=bnd, render=renderer, key=name)
def _callback(binding): renderer = iformless.IBindingRenderer(binding, defaultBindingRenderer) try: binding_pattern = tag.patternGenerator( 'freeform-form!!%s' % name ) except NodeNotFound: try: binding_pattern = tag.patternGenerator( 'freeform-form' ) except NodeNotFound: binding_pattern = freeformDefaultForm if binding_pattern is freeformDefaultForm: renderer.needsSkin = True return binding_pattern(data=binding, render=renderer, key=name)
def test_2_renderPropertyBinding(self): binding = formless.Property('goodbye', formless.String( label="Goodbye", description="Goodbye cruel world")) # Look up an IBindingRenderer, which will render the form and the typed renderer = iformless.IBindingRenderer(binding) def later(val): self.assertSubstring('<form ', val) self.assertSubstring('<input name="change" type="submit"', val) self.assertSubstring('name="goodbye"', val) self.assertSubstring('Goodbye', val) self.assertSubstring('Goodbye cruel world', val) return self.render(tags.invisible(data=binding, render=renderer)).addCallback(later)
def test_1_renderWithDefaultValues(self): binding = formless.MethodBinding('haveFun', formless.Method( returnValue=None, arguments=[formless.Argument('funValue', formless.Integer(label="Fun Value", default=0))] )) def setupCtx(ctx): ctx.locate(iformless.IFormDefaults).setDefault('funValue', 15) return ctx renderer = iformless.IBindingRenderer(binding) def later(val): self.failIfSubstring('0', val) self.assertSubstring('15', val) return self.render(tags.invisible(data=binding, render=renderer), setupContext=setupCtx).addCallback( later)
def test_3_renderMethodBinding(self): binding = formless.MethodBinding('doit', formless.Method( returnValue=None, arguments=[formless.Argument('foo', formless.String(label="Foo"))], label="Do It", description="Do it to 'em all")) renderer = iformless.IBindingRenderer(binding) def later(val): self.assertSubstring('<form ', val) self.assertSubstring('Do It', val) self.assertSubstring("Do it to 'em all", val) self.assertSubstring("Foo", val) self.assertSubstring('name="foo"', val) return self.render(tags.invisible(data=binding, render=renderer)).addCallback(later)
def _innerFormRenderIt(context, data): tag = context.tag # Remember the key for when the form post URL is generated. context.remember(configurableKey, iformless.IConfigurableKey) if configurable is None: warnings.warn( "No configurable was found which provides enough type information for freeform to be able to render forms; %r" % (cf, )) yield '' return context.remember(configurable, iformless.IConfigurable) formDefaults = iformless.IFormDefaults(context) available = configurable.getBindingNames(context) bindings = [] default_binding_pattern = None for name in available: if bindingDefaults is not None: if name not in bindingDefaults: continue defs = formDefaults.getAllDefaults(name) defs.update(bindingDefaults[name]) bnd = configurable.getBinding(context, name) renderer = iformless.IBindingRenderer(bnd, defaultBindingRenderer, persist=False) try: binding_pattern = tag.patternGenerator( 'freeform-form!!%s' % name) except NodeNotFound: if default_binding_pattern is None: try: default_binding_pattern = tag.patternGenerator( 'freeform-form') except NodeNotFound: default_binding_pattern = freeformDefaultForm binding_pattern = default_binding_pattern if binding_pattern is freeformDefaultForm: renderer.needsSkin = True yield binding_pattern(data=bnd, render=renderer, key=name)