Thanks Paolo, that seems an other good solution... I would avoid manipulating form or customize it for now that why I proceed as I did.
I wasn't know about formstyle='bootstrap', I will take a look at what it does. Thanks. Richard On Mon, Oct 29, 2012 at 4:58 PM, Paolo Caruccio <[email protected]>wrote: > another workaround (without jquery) is (exemplifying): > > ''' replace <my_table>, <my_field_date_name> with your own values ''' > ### controller ### > def my_controller: > form = SQLFORM(db.my_table,formstyle = 'bootstrap') > if form.process().accepted: > response.flash = 'form accepted' > elif form.errors: > response.flash = 'form has errors' > else: > response.flash = 'please fill out the form' > return dict(form=form) > > > ### view ### > {{extend 'layout.html'}} > {{ > inpt_with_addon = form.element(_name='my_field_date_name',replace=lambdame > :DIV(me,SPAN(TAG.I(_class='icon-calendar'),_class="add-on"),_class= > 'input-append')) > import re > if form.errors: > for key, value in form.errors.iteritems(): > inpt = form.element(_name=key) > inpt_wrapper = inpt.parent > if not "controls" in inpt_wrapper['_class']: > inpt_wrapper = inpt.parent.parent > pass > inpt_wrapper.parent['_class'] += ' error' > inpt_wrapper.element(_class=re.compile('help-inline'),replace= > lambda me:SPAN(value,_class=me['_class'])) > pass > form.errors.clear() > pass > }} > > > {{=form}} > > > Il giorno lunedì 29 ottobre 2012 21:44:59 UTC+1, Richard ha scritto: >> >> I work around my problem like this : >> >> Add this little script in the view >> >> <script> >> jQuery(document).ready(**function(){ >> jQuery('.input_wrapper').has('**.error').addClass("inputError"**); >> // Add bootstrap class "inputError" to .input_wrapper div when there is >> error. Note .input_wrapper div is only there for field with bootstrap >> "add-on" class, since it would have required to alter SQLFORM to set a >> .input_wrapper div to every input field I think... >> jQuery('.w2p_fw').has('.error'**).addClass("control-group error"); >> // Add bootstrap class "control-group error" to .w2p_fw when there is error >> jQuery('.w2p_fw').each(**function(){ >> $(this).find('.error_wrapper')**.appendTo(this); // I move the >> .error_wrapper div at the end of the .w2p_fw for each .w2p_fw >> }); >> }); >> </script> >> >> Write custom widget : >> >> def app_date_widget(field, value, placeholder='YYYY-MM-DD'): >> return DIV(INPUT(_name=field.name, >> _id="%s_%s" % (field._tablename, field.name), >> _class=field.type, >> _value=value, >> _placeholder=T(placeholder), >> requires=field.requires), >> SPAN(I(_class='icon-calendar'**), _class='add-on'), >> _class='input_wrapper input-append' # input-append is a >> bootstrap class required to make work add-on we create the input_wrapper >> for this >> ) >> >> And set the widget to my table field : >> >> Field('test_date','date', >> notnull=True, >> requires=[IS_NOT_EMPTY(error_**message=T('field can\'t be >> empty')), >> IS_DATE(format=T('%Y-%m-%d'),**error_message=T('valid date >> of format : YYYY-MM-DD'))], >> required=True, >> widget=app_date_widget >> ) >> >> >> >> On Mon, Oct 29, 2012 at 11:47 AM, Richard <[email protected]> wrote: >> >>> Hello, >>> >>> I am searching for a way to use bootstrap input-append and add-on. >>> >>> <div class="w2p_fw"> >>> <input class="date" id="table_date" name="date" >>> placeholder="YYYY-MM-DD" type="text" value=""> >>> <span class="add-on"><i class="icon-calendar"></i></**span> >>> </div> >>> >>> >>> The problem is that when the error trigger the error get between the >>> input and the span like this : >>> >>> <div class="w2p_fw input-append control-group error"> >>> <input class="date invalidinput inputError" id="table_date" name="date" >>> placeholder="YYYY-MM-DD" type="text" value=""> >>> * <div class="error_wrapper">* >>> * <div class="error" id="date__error" style="display: inline-block; >>> ">can't be empty</div>* >>> * </div>* >>> <span class="add-on"><i class="icon-calendar"></i></**span> >>> </div> >>> >>> Even if I put the input and span in a div : >>> >>> <div class="w2p_fw"> >>> * <div class="input-append control-group error">* >>> <input class="date invalidinput inputError" id="table_date" name="date" >>> placeholder="YYYY-MM-DD" type="text" value=""> >>> * <div class="error_wrapper">* >>> * <div class="error" id="date__error" style="display: inline-block; >>> ">can't be empty</div>* >>> * </div>* >>> <span class="add-on"><i class="icon-calendar"></i></**span> >>> * </div>* >>> </div> >>> >>> >>> I see no way to fix that except refactoring html.py INPUT class near >>> line 1793, but I am not sure if it will cause a backward incompatibility... >>> >>> Richard >>> >>> -- >>> >>> >>> >>> >> >> -- > > > > --

