You are my man Anthony!

On Thu, Aug 8, 2013 at 4:04 PM, Anthony <abasta...@gmail.com> wrote:

> Nice. I think we should add an argument to Field() that takes a dictionary
> of args to pass to the field's widget (or maybe just add **kwargs to
> Field() and pass kwargs to the widget). For now, though, if that's all you
> want to do, you can do something like this:
>
> def widget(**kwargs):
>     return lambda field, value, kwargs=kwargs: SQLFORM.widgets[field.type
> ].widget(field, value, **kwargs)
>
> db.define_table('mytable',
>     Field('myfield', widget=widget(_placeholder='my placeholder',_readonly
> =True)))
>
> That should work for most fields -- would need some additional logic to
> accommodate fields that involve special widgets (e.g., fields with an
> IS_IN_DB validator that automatically get an options widget).
>
> Anthony
>
> On Thursday, August 8, 2013 2:11:44 PM UTC-4, Joe Barnhart wrote:
>
>> So I'm a control-freak.  I mean that in a good way.  I discovered the
>> beauty of "placeholders" in forms and just thought "man, I really want
>> that!"  But where to hold the placeholder data?  And how do I get it to the
>> SQLFORM during form creation?
>>
>> At first I thought about adding YAV (yet another variable) to the Field
>> class.  But it's getting pretty crowded in there already, and mucking with
>> it means changes to the base, and the devs might object to a
>> special-purpose hack inserted into Field just to satisfy my whims.  So I
>> thought I'd just create my own formstyle function and use that.  But wait!
>>  The formstyle function has a defined signature now, and there is no place
>> to insert anything like a dictionary of placeholders indexed by field name.
>>  Or is there?
>>
>> I created my own formstyle function, but added a keyword parameter to the
>> end for the placeholders dict.  The signature looke like this:
>>
>>
>> def my_fieldstyle(form, fields, placeholders=None):
>>     ...blah...
>>
>>
>> Now, the code in SQLFORM still has no idea that these placeholders exist.
>>  But I can "wrap" this function with either a "partial function" or a
>> simple lambda to provide my own dictionary just before the customized
>> formstyle function is handed off to SQLFORM for it's main job.  It looks
>> like this:
>>
>>
>> my_placeholder_dict = {'field1': 'place1', 'field2', 'place2'...}
>> ...
>> styler = lambda form, fields: my_fieldstyle(form, fields,
>> placeholders=my_placeholder_**dict)
>> ...
>> form = SQLFORM(... formstyle=styler ...)
>>
>>
>> That's all there is to it!  Now I can pass abundant information into the
>> SQLFORM creation, info that the base form creation has no idea exists.  My
>> own custom formstyle class can interpret the extra information and add all
>> kinds of special features.  Just a few ideas:
>>
>> 1.  Provide "placehloders" for phone and date fields to show proper format
>>
>> 2.  Provide dictionary of "field sets" with "legends" and create a
>> structured form organized the way I want
>>
>> 3.  ... and many many more!
>>
>> Best of all, it only needs stupid Python tricks and doesn't muck with the
>> underlying structure of web2py at all!  No nasty stares from the devs!
>>  (Just kidding...)
>>
>> -- Joe
>>
>  --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to