Skip to content

Commit

Permalink
First step to multiple forms inside a page: changing the form name.
Browse files Browse the repository at this point in the history
  • Loading branch information
ernestoalejo committed Feb 10, 2013
1 parent 7874a55 commit 7959bd0
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions ngforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
class Form(object):
field_values = {}

def build(self):
def build(self, form_name='f'):
self.form_name = form_name

fields = ''.join([f.build(self) for f in self.fields])

return """
<form class="form-horizontal" name="f" novalidate ng-init="val = false;"
ng-submit="f.$valid && submit()"><fieldset>%s</fieldset></form>
""" % fields
<form class="form-horizontal" name="%s" novalidate ng-init="val = false;"
ng-submit="%s.$valid && submit()"><fieldset>%s</fieldset></form>
""" % (form_name, form_name, fields)

def validate(self):
request = webapp2.get_request()
Expand Down Expand Up @@ -139,38 +141,42 @@ def __init__(self, id, name):

def build(self, form):
vals = form.validations[self.id]
errs = " || ".join(['f.%s.$error.%s' % (self.id, val.name) for val in vals])

errs = []
for val in vals:
errs.append('%s.%s.$error.%s' % (form.form_name, self.id, val.name))
errs = " || ".join(errs)

attrs = {}
for val in vals:
attrs.update(val.attrs)

messages = []
for v in vals:
messages.append('<span ng-show="f.%s.$error.%s">%s</span>' %
(self.id, v.name, v.message))
messages.append('<span ng-show="%s.%s.$error.%s">%s</span>' %
(form.form_name, self.id, v.name, v.message))
messages = ''.join(messages)

if len(self.name) == 0:
return attrs, """
<div class="control-group" ng-class="val && (%s) && 'error'">
%%s
<p class="help-block error" ng-show="val && f.%s.$invalid">
<p class="help-block error" ng-show="val && %s.%s.$invalid">
%s
</p>
</div>
""" % (errs, self.id, messages)
""" % (errs, self.id, form.form_name, messages)

return attrs, """
<div class="control-group" ng-class="val && (%s) && 'error'">
<label class="control-label" for="%s">%s</label>
<div class="controls">%%s
<p class="help-block error" ng-show="val && f.%s.$invalid">
<p class="help-block error" ng-show="val && %s.%s.$invalid">
%s
</p>
</div>
</div>
""" % (errs, self.id, self.name, self.id, messages)
""" % (errs, self.id, self.name, form.form_name, self.id, messages)


class InputField(Field):
Expand Down Expand Up @@ -241,8 +247,8 @@ def build(self, form):
submit = '''
<div class="form-actions">
<button ng-click="trySubmit(); val = true;" class="btn btn-primary"
ng-disabled="val && !f.$valid">%s</button>
ng-disabled="val && !%s.$valid">%s</button>
</div>
''' % self.label
''' % (form.form_name, self.label)

return submit

0 comments on commit 7959bd0

Please sign in to comment.