Просмотр исходного кода

We are using the SubmitField provided by WTForms now #86

+ Small wording changes
sh4nks 10 лет назад
Родитель
Сommit
d5e185a872

+ 31 - 22
flaskbb/auth/forms.py

@@ -11,9 +11,10 @@
 from datetime import datetime
 
 from flask.ext.wtf import Form, RecaptchaField
-from wtforms import StringField, PasswordField, BooleanField, HiddenField
-from wtforms.validators import (DataRequired, Email, EqualTo, regexp,
-                                ValidationError)
+from wtforms import (StringField, PasswordField, BooleanField, HiddenField,
+                     SubmitField)
+from wtforms.validators import (DataRequired, InputRequired, Email, EqualTo,
+                                regexp, ValidationError)
 from flask.ext.babel import lazy_gettext as _
 
 from flaskbb.user.models import User
@@ -25,42 +26,45 @@ is_username = regexp(USERNAME_RE,
 
 class LoginForm(Form):
     login = StringField(_("Username or E-Mail"), validators=[
-        DataRequired(message=_("You must provide an email adress or username"))]
+        DataRequired(message=_("A Username or E-Mail Address is required."))]
     )
 
     password = PasswordField(_("Password"), validators=[
-        DataRequired(message=_("Password required"))])
+        DataRequired(message=_("A Password is required."))])
 
     remember_me = BooleanField(_("Remember Me"), default=False)
 
+    submit = SubmitField(_("Login"))
+
 
 class RegisterForm(Form):
     username = StringField(_("Username"), validators=[
-        DataRequired(message=_("Username required")),
+        DataRequired(message=_("A Username is required.")),
         is_username])
 
     email = StringField(_("E-Mail"), validators=[
-        DataRequired(message=_("E-Mail required")),
-        Email(message=_("This E-Mail is invalid"))])
+        DataRequired(message=_("A E-Mail Address is required.")),
+        Email(message=_("Invalid E-Mail Address."))])
 
-    password = PasswordField(_("Password"), validators=[
-        DataRequired(message=_("Password required"))])
+    password = PasswordField(_('Password'), validators=[
+        InputRequired(),
+        EqualTo('confirm_password', message=_('Passwords must match.'))])
 
-    confirm_password = PasswordField(_("Confirm Password"), validators=[
-        DataRequired(message=_("Confirm Password required")),
-        EqualTo("password", message=_("Passwords do not match"))])
+    confirm_password = PasswordField(_('Confirm Password'))
 
     accept_tos = BooleanField(_("I accept the Terms of Service"), default=True)
 
+    submit = SubmitField(_("Register"))
+
     def validate_username(self, field):
         user = User.query.filter_by(username=field.data).first()
         if user:
-            raise ValidationError(_("This username is taken"))
+            raise ValidationError(_("This Username is taken."))
 
     def validate_email(self, field):
         email = User.query.filter_by(email=field.data).first()
         if email:
-            raise ValidationError(_("This email is taken"))
+            raise ValidationError(_("This E-Mail is taken."))
 
     def save(self):
         user = User(username=self.username.data,
@@ -77,28 +81,33 @@ class RegisterRecaptchaForm(RegisterForm):
 
 class ReauthForm(Form):
     password = PasswordField(_('Password'), valdidators=[
-        DataRequired()])
+        DataRequired(message=_("A Password is required."))])
+
+    submit = SubmitField(_("Refresh Login"))
 
 
 class ForgotPasswordForm(Form):
     email = StringField(_('E-Mail'), validators=[
-        DataRequired(message=("E-Mail reguired")),
+        DataRequired(message=_("A E-Mail Address is reguired.")),
         Email()])
 
+    submit = SubmitField(_("Request Password"))
+
 
 class ResetPasswordForm(Form):
     token = HiddenField('Token')
 
     email = StringField(_('E-Mail'), validators=[
-        DataRequired(),
+        DataRequired(message=_("A E-Mail Address is required.")),
         Email()])
 
     password = PasswordField(_('Password'), validators=[
-        DataRequired()])
+        InputRequired(),
+        EqualTo('confirm_password', message=_('Passwords must match.'))])
+
+    confirm_password = PasswordField(_('Confirm Password'))
 
-    confirm_password = PasswordField(_('Confirm password'), validators=[
-        DataRequired(),
-        EqualTo('password', message=_('Passwords do not match'))])
+    submit = SubmitField(_("Reset Password"))
 
     def validate_email(self, field):
         email = User.query.filter_by(email=field.data).first()

+ 19 - 6
flaskbb/forum/forms.py

@@ -10,7 +10,7 @@
 """
 from flask.ext.wtf import Form
 from wtforms import (TextAreaField, StringField, SelectMultipleField,
-                     BooleanField)
+                     BooleanField, SubmitField)
 from wtforms.validators import DataRequired, Optional, Length
 from flask.ext.babel import lazy_gettext as _
 
@@ -22,6 +22,8 @@ class QuickreplyForm(Form):
     content = TextAreaField(_("Quickreply"), validators=[
         DataRequired(message=_("You cannot post a reply without content."))])
 
+    submit = SubmitField(_("Reply"))
+
     def save(self, user, topic):
         post = Post(**self.data)
         return post.save(user=user, topic=topic)
@@ -31,9 +33,12 @@ class ReplyForm(Form):
     content = TextAreaField(_("Content"), validators=[
         DataRequired(message=_("You cannot post a reply without content."))])
 
-    track_topic = BooleanField(_("Track this topic"), default=False,
+    track_topic = BooleanField(_("Track this Topic"), default=False,
                                validators=[Optional()])
 
+    submit = SubmitField(_("Reply"))
+    preview = SubmitField(_("Preview"))
+
     def save(self, user, topic):
         post = Post(content=self.content.data)
 
@@ -44,14 +49,17 @@ class ReplyForm(Form):
 
 class NewTopicForm(ReplyForm):
     title = StringField(_("Topic Title"), validators=[
-        DataRequired(message=_("A topic title is required"))])
+        DataRequired(message=_("Please choose a Topic title."))])
 
     content = TextAreaField(_("Content"), validators=[
         DataRequired(message=_("You cannot post a reply without content."))])
 
-    track_topic = BooleanField(_("Track this topic"), default=False,
+    track_topic = BooleanField(_("Track this Topic"), default=False,
                                validators=[Optional()])
 
+    submit = SubmitField(_("Post Topic"))
+    preview = SubmitField(_("Preview"))
+
     def save(self, user, forum):
         topic = Topic(title=self.title.data)
         post = Post(content=self.content.data)
@@ -63,10 +71,11 @@ class NewTopicForm(ReplyForm):
 
 class ReportForm(Form):
     reason = TextAreaField(_("Reason"), validators=[
-        DataRequired(message=_("Please insert a reason why you want to report "
-                               "this post."))
+        DataRequired(message=_("What's the reason for reporting this post?"))
     ])
 
+    submit = SubmitField(_("Report Post"))
+
     def save(self, user, post):
         report = Report(**self.data)
         return report.save(post=post, user=user)
@@ -77,6 +86,8 @@ class UserSearchForm(Form):
         Optional(), Length(min=3, max=50)
     ])
 
+    submit = SubmitField(_("Search"))
+
     def get_results(self):
         query = self.search_query.data
         return User.query.whoosh_search(query)
@@ -90,6 +101,8 @@ class SearchPageForm(Form):
         DataRequired()], choices=[('post', _('Post')), ('topic', _('Topic')),
                                   ('forum', _('Forum')), ('user', _('Users'))])
 
+    submit = SubmitField(_("Search"))
+
     def get_results(self):
         # Because the DB is not yet initialized when this form is loaded,
         # the query objects cannot be instantiated in the class itself

+ 3 - 3
flaskbb/forum/views.py

@@ -325,7 +325,7 @@ def new_post(topic_id, slug=None):
 
     form = ReplyForm()
     if form.validate_on_submit():
-        if request.form['button'] == 'preview':
+        if "preview" in request.form:
             return render_template(
                 "forum/new_post.html", topic=topic,
                 form=form, preview=form.content.data
@@ -352,7 +352,7 @@ def reply_post(topic_id, post_id):
 
     form = ReplyForm()
     if form.validate_on_submit():
-        if request.form['button'] == 'preview':
+        if "preview" in request.form:
             return render_template(
                 "forum/new_post.html", topic=topic,
                 form=form, preview=form.content.data
@@ -377,7 +377,7 @@ def edit_post(post_id):
 
     form = ReplyForm()
     if form.validate_on_submit():
-        if request.form['button'] == 'preview':
+        if "preview" in request.form:
             return render_template(
                 "forum/new_post.html", topic=post.topic,
                 form=form, preview=form.content.data

+ 25 - 16
flaskbb/management/forms.py

@@ -10,7 +10,7 @@
 """
 from flask.ext.wtf import Form
 from wtforms import (StringField, TextAreaField, PasswordField, IntegerField,
-                     BooleanField, SelectField, DateField)
+                     BooleanField, SelectField, DateField, SubmitField)
 from wtforms.validators import (DataRequired, Optional, Email, regexp, Length,
                                 URL, ValidationError)
 
@@ -42,12 +42,12 @@ def select_primary_group():
 
 class UserForm(Form):
     username = StringField(_("Username"), validators=[
-        DataRequired(message=_("A username is required.")),
+        DataRequired(message=_("A Username is required.")),
         is_username])
 
     email = StringField(_("E-Mail"), validators=[
-        DataRequired(message=_("A E-Mail address is required.")),
-        Email(message=_("This email is invalid"))])
+        DataRequired(message=_("A E-Mail Address is required.")),
+        Email(message=_("Invalid E-Mail Address."))])
 
     password = PasswordField("Password", validators=[
         Optional()])
@@ -88,6 +88,8 @@ class UserForm(Form):
         query_factory=select_primary_group,
         get_label="name")
 
+    submit = SubmitField(_("Save"))
+
     def validate_username(self, field):
         if hasattr(self, "user"):
             user = User.query.filter(
@@ -100,7 +102,7 @@ class UserForm(Form):
             user = User.query.filter(User.username.like(field.data)).first()
 
         if user:
-            raise ValidationError(_("This username is taken"))
+            raise ValidationError(_("This Username is taken."))
 
     def validate_email(self, field):
         if hasattr(self, "user"):
@@ -114,7 +116,7 @@ class UserForm(Form):
             user = User.query.filter(User.email.like(field.data)).first()
 
         if user:
-            raise ValidationError(_("This email is taken"))
+            raise ValidationError(_("This E-Mail is taken."))
 
     def save(self):
         user = User(**self.data)
@@ -134,7 +136,7 @@ class EditUserForm(UserForm):
 
 class GroupForm(Form):
     name = StringField(_("Group Name"), validators=[
-        DataRequired(message=_("Group name required"))])
+        DataRequired(message=_("A Group name is required."))])
 
     description = TextAreaField(_("Description"), validators=[
         Optional()])
@@ -194,6 +196,8 @@ class GroupForm(Form):
         description=_("Allow moderators to ban other users")
     )
 
+    submit = SubmitField(_("Save"))
+
     def validate_name(self, field):
         if hasattr(self, "group"):
             group = Group.query.filter(
@@ -206,7 +210,7 @@ class GroupForm(Form):
             group = Group.query.filter(Group.name.like(field.data)).first()
 
         if group:
-            raise ValidationError(_("This name is taken"))
+            raise ValidationError(_("This Group name is taken."))
 
     def validate_banned(self, field):
         if hasattr(self, "group"):
@@ -220,7 +224,7 @@ class GroupForm(Form):
             group = Group.query.filter_by(banned=True).count()
 
         if field.data and group > 0:
-            raise ValidationError(_("There is already a Banned group"))
+            raise ValidationError(_("There is already a Banned group."))
 
     def validate_guest(self, field):
         if hasattr(self, "group"):
@@ -234,7 +238,7 @@ class GroupForm(Form):
             group = Group.query.filter_by(guest=True).count()
 
         if field.data and group > 0:
-            raise ValidationError(_("There is already a Guest group"))
+            raise ValidationError(_("There is already a Guest group."))
 
     def save(self):
         group = Group(**self.data)
@@ -255,7 +259,7 @@ class AddGroupForm(GroupForm):
 class ForumForm(Form):
     title = StringField(
         _("Forum Title"),
-        validators=[DataRequired(message=_("Forum title required"))]
+        validators=[DataRequired(message=_("A Forum Title is required."))]
     )
 
     description = TextAreaField(
@@ -267,7 +271,7 @@ class ForumForm(Form):
     position = IntegerField(
         _("Position"),
         default=1,
-        validators=[DataRequired(message=_("Forum position required"))]
+        validators=[DataRequired(message=_("The Forum Position is required."))]
     )
 
     category = QuerySelectField(
@@ -279,7 +283,7 @@ class ForumForm(Form):
     )
 
     external = StringField(
-        _("External link"),
+        _("External Link"),
         validators=[Optional(), URL()],
         description=_("A link to a website i.e. 'http://flaskbb.org'")
     )
@@ -300,6 +304,8 @@ class ForumForm(Form):
         description=_("Disable new posts and topics in this forum.")
     )
 
+    submit = SubmitField(_("Save"))
+
     def validate_external(self, field):
         if hasattr(self, "forum"):
             if self.forum.topics:
@@ -371,8 +377,8 @@ class AddForumForm(ForumForm):
 
 
 class CategoryForm(Form):
-    title = StringField(_("Category title"), validators=[
-        DataRequired(message=_("Category title required"))])
+    title = StringField(_("Category Title"), validators=[
+        DataRequired(message=_("A Category Title is required."))])
 
     description = TextAreaField(
         _("Description"),
@@ -383,9 +389,12 @@ class CategoryForm(Form):
     position = IntegerField(
         _("Position"),
         default=1,
-        validators=[DataRequired(message=_("Category position required"))]
+        validators=[DataRequired(message=_("The Category Position is "
+                                           "required."))]
     )
 
+    submit = SubmitField(_("Save"))
+
     def save(self):
         category = Category(**self.data)
         return category.save()

+ 2 - 7
flaskbb/templates/auth/forgot_password.html

@@ -1,4 +1,4 @@
-{% set page_title = _("Reset Password") %}
+{% set page_title = _("Request Password") %}
 
 {% extends theme("layout.html") %}
 {% block content %}
@@ -9,12 +9,7 @@
     <hr>
         {{ form.hidden_tag() }}
         {{ horizontal_field(form.email) }}
-
-    <div class="form-group">
-        <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-primary">{% trans %}Reset Password{% endtrans %}</button>
-        </div>
-    </div>
+        {{ horizontal_field(form.submit)}}
 </form>
 
 {% endblock %}

+ 2 - 16
flaskbb/templates/auth/login.html

@@ -10,22 +10,8 @@
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.login)}}
     {{ horizontal_field(form.password)}}
-
-    <div class="form-group">
-        <div class="col-sm-offset-3 col-sm-3">
-            <div class="checkbox">
-                <label>
-                    {{ form.remember_me }} {{ form.remember_me.label }}
-                </label>
-            </div>
-        </div>
-    </div>
-
-    <div class="form-group">
-        <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">{% trans %}Login{% endtrans %}</button>
-        </div>
-    </div>
+    {{ horizontal_field(form.remember_me) }}
+    {{ horizontal_field(form.submit) }}
 </form>
 
 {% endblock %}

+ 6 - 5
flaskbb/templates/auth/reauth.html

@@ -3,13 +3,14 @@
 
 {% extends theme("layout.html") %}
 {% block content %}
-{% from theme("macros.html") import form_input_field %}
+{% from theme("macros.html") import horizontal_field %}
 
-<form class="form-signin" action="" method="POST">
-    <h2 class="form-signin-heading">{% trans %}Refresh Login{% endtrans %}</h2>
+<form class="form-horizontal" action="" method="POST">
+    <h2>{% trans %}Refresh Login{% endtrans %}</h2>
+    <hr>
     {{ form.hidden_tag() }}
-    {{ form_input_field(form.password)}}
-    <button class="btn btn-lg btn-primary btn-block" type="submit">{% trans %}Sign in{% endtrans %}</button>
+    {{ horizontal_field(form.password)}}
+    {{ horizontal_field(form.submit)}}
 </form>
 
 {% endblock %}

+ 2 - 14
flaskbb/templates/auth/register.html

@@ -17,21 +17,9 @@
         {{ horizontal_field(form.recaptcha) }}
     {% endif %}
 
-    <div class="form-group">
-        <div class="col-lg-offset-2 col-lg-3">
-            <div class="checkbox">
-                <label>
-                    <input type="checkbox"> {{ form.accept_tos }} {{ form.accept_tos.label }}
-                </label>
-            </div>
-        </div>
-    </div>
+    {{ horizontal_field(form.accept_tos)}}
+    {{ horizontal_field(form.submit)}}
 
-    <div class="form-group">
-        <div class="col-lg-offset-2 col-lg-10">
-            <button type="submit" class="btn btn-success">{% trans %}Register{% endtrans %}</button>
-        </div>
-    </div>
 </form>
 
 {% endblock %}

+ 1 - 6
flaskbb/templates/auth/reset_password.html

@@ -12,12 +12,7 @@
         {{ horizontal_field(form.email) }}
         {{ horizontal_field(form.password) }}
         {{ horizontal_field(form.confirm_password)}}
-
-    <div class="form-group">
-        <div class="col-lg-offset-2 col-lg-10">
-            <button type="submit" class="btn btn-primary">{% trans %}Reset Password{% endtrans %}</button>
-        </div>
-    </div>
+        {{ horizontal_field(form.submit)}}
 </form>
 
 {% endblock %}

+ 4 - 3
flaskbb/templates/forum/new_post.html

@@ -3,7 +3,7 @@
 
 {% extends theme("layout.html") %}
 {% block content %}
-{% from theme("macros.html") import render_field %}
+{% from theme("macros.html") import render_field, render_submit_field %}
 
 <ul class="breadcrumb">
     <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
@@ -31,8 +31,9 @@
 
     {{ render_field(form.content, div_class="col-sm-12", rows=12) }}
 
-    <button type="submit" class="btn btn-success" name="button" value="reply">{% trans %}Reply{% endtrans %}</button>
-    <button type="submit" class="btn btn-success" name="button" value="preview">{% trans %}Preview{% endtrans %}</button>
+    {{ render_submit_field(form.submit) }}
+    {{ render_submit_field(form.preview) }}
+
 </form>
 
 {% endblock %}

+ 3 - 3
flaskbb/templates/forum/new_topic.html

@@ -3,7 +3,7 @@
 
 {% extends theme("layout.html") %}
 {% block content %}
-{% from theme("macros.html") import render_field %}
+{% from theme("macros.html") import render_field, render_submit_field %}
 
 <ul class="breadcrumb">
     <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
@@ -31,8 +31,8 @@
     {{ render_field(form.title, div_class="col-sm-12") }}
     {{ render_field(form.content, div_class="col-sm-12", rows=12) }}
 
-    <button type="submit" class="btn btn-success" name="button" value="reply">{% trans %}Post Topic{% endtrans %}</button>
-    <button type="submit" class="btn btn-success" name="button" value="preview">{% trans %}Preview{% endtrans %}</button>
+    {{ render_submit_field(form.submit) }}
+    {{ render_submit_field(form.preview) }}
 </form>
 
 {% endblock %}

+ 1 - 6
flaskbb/templates/forum/search_form.html

@@ -15,12 +15,7 @@
         {{ form.hidden_tag() }}
         {{ horizontal_field(form.search_types)}}
         {{ horizontal_field(form.search_query)}}
-
-        <div class="form-group">
-            <div class="col-sm-offset-3 col-sm-9">
-                <button type="submit" class="btn btn-success">{% trans %}Search{% endtrans %}</button>
-            </div>
-        </div>
+        {{ horizontal_field(form.submit) }}
     </form>
 
 {% endblock %}

+ 2 - 2
flaskbb/templates/forum/topic.html

@@ -144,13 +144,13 @@
 {% include 'forum/topic_controls.html' %}
 
 {% if form %}
-    {% from "macros.html" import render_field %}
+    {% from "macros.html" import render_field, render_submit_field %}
     <form class="form" action="#" method="post">
         {{ form.hidden_tag() }}
 
         {{ render_field(form.content, div_class="col-sm-12 reply-content", rows=5) }}
+        {{ render_submit_field(form.submit) }}
 
-        <button type="submit" class="btn btn-success">{% trans %}Reply{% endtrans %}</button>
     </form>
 {% endif %}
 

+ 69 - 17
flaskbb/templates/macros.html

@@ -20,12 +20,12 @@
 
 
 {%- macro render_boolean_field(field, inline=False) -%}
-<label class="checkbox {%- if inline -%}inline{%- endif -%}">
+<div class="checkbox {%- if inline -%}inline{%- endif -%}">
     {{ field(**kwargs) }}
     {{ field_label(field) }}
     {{ field_description(field) }}
     {{ field_errors(field) }}
-</label>
+</div>
 {%- endmacro -%}
 
 {%- macro render_select_field(field, div_class='') -%}
@@ -48,6 +48,18 @@
 </div>
 {%- endmacro -%}
 
+{%- macro render_submit_field(field, div_class='', input_class='') -%}
+{% if div_class %}
+<div class="{{ div_class }}">
+{% endif %}
+
+    {{ field(class=input_class or 'btn btn-success') }}
+
+{% if div_class %}
+</div>
+{% endif %}
+{%- endmacro -%}
+
 {%- macro render_field(field, div_class='', rows='') -%}
 <div class="form-group{%- if field.errors %} has-error{%- endif %}">
     {% if div_class %}
@@ -125,29 +137,69 @@
 {%- endmacro -%}
 
 
-{%- macro horizontal_field(field, label_text='', label_class='') -%}
+{%- macro horizontal_boolean_field(field, div_class='') -%}
+{% if div_class %}
+<div class="{{ div_class }}">
+{% else %}
+<div class="col-sm-offset-3 col-sm-3">
+{% endif %}
+    <div class="checkbox">
+        {{ field(**kwargs) }}
+        {{ field_label(field) }}
+    </div>
+</div>
+{%- endmacro -%}
+
+
+{%- macro horizontal_submit_field(field, div_class='', input_class='') -%}
+{% if div_class %}
+<div class="{{ div_class }}">
+{% else %}
+<div class="col-sm-offset-3 col-sm-9">
+{% endif %}
+    {{ field(class=input_class or 'btn btn-success') }}
+</div>
+{%- endmacro -%}
+
+
+{%- macro horizontal_field(field, label_text='', label_class='', div_class='', input_class='') -%}
 <div class="form-group row {%- if field.errors %} has-error{%- endif %}">
 
-    {% if class %}
-        {{ field.label(class=class) }}
+    {% if field.type == "BooleanField" or field.type == "SubmitField" %}
+        {% if field.type == "BooleanField" %}
+            {{ horizontal_boolean_field(field, div_class) }}
+        {% else %}
+            {{ horizontal_submit_field(field, div_class) }}
+        {% endif %}
     {% else %}
-        {{ field.label(class="col-sm-3 control-label") }}
-    {% endif %}
-    <div class="col-sm-9">
 
-    {%- if kwargs['required'] or field.flags.required -%}
-        {% if label_text %}
-            {{ field(class='form-control', placeholder=label_text, required="required", **kwargs) }}
+        {% if label_class %}
+            {{ field.label(class=label_class) }}
         {% else %}
-            {{ field(class='form-control', placeholder=field.label.text, required="required", **kwargs) }}
+            {{ field.label(class="col-sm-3 control-label") }}
         {% endif %}
-    {%- else -%}
-        {% if label_text %}
-            {{ field(class='form-control', placeholder=label_text, **kwargs) }}
+
+        {% if div_class %}
+            <div class="{{ div_class }}">
         {% else %}
-            {{ field(class='form-control', placeholder=field.label.text, **kwargs) }}
+            <div class="col-sm-9">
         {% endif %}
-    {%- endif -%}
+
+        {%- if kwargs['required'] or field.flags.required -%}
+            {% if label_text %}
+                {{ field(class='form-control', placeholder=label_text, required="required", **kwargs) }}
+            {% else %}
+                {{ field(class='form-control', placeholder=field.label.text, required="required", **kwargs) }}
+            {% endif %}
+        {%- else -%}
+            {% if label_text %}
+                {{ field(class='form-control', placeholder=label_text, **kwargs) }}
+            {% else %}
+                {{ field(class='form-control', placeholder=field.label.text, **kwargs) }}
+            {% endif %}
+        {%- endif -%}
+
+    {% endif %}
 
     {{ field_description(field) }}
     {{ field_errors(field) }}

+ 1 - 6
flaskbb/templates/management/category_form.html

@@ -21,12 +21,7 @@
             {{ horizontal_field(form.description, rows=5, div_class="col-lg-9") }}
 
             {{ horizontal_field(form.position) }}
-
-            <div class="form-group">
-                <div class="col-lg-offset-0 col-lg-9">
-                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-                </div>
-            </div>
+            {{ horizontal_field(form.submit, div_class="col-lg-offset-0 col-lg-9") }}
     </form>
 </div>
 

+ 1 - 5
flaskbb/templates/management/forum_form.html

@@ -30,11 +30,7 @@
 
             {{ render_boolean_field(form.locked) }}
 
-            <div class="form-group">
-                <div class="col-lg-offset-0 col-lg-9">
-                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-                </div>
-            </div>
+            {{ horizontal_field(form.submit, div_class"col-lg-offset-0 col-lg-9") }}
     </form>
 </div>
 {% endblock %}

+ 1 - 5
flaskbb/templates/management/group_form.html

@@ -36,11 +36,7 @@
             {{ render_boolean_field(form.posttopic) }}
             {{ render_boolean_field(form.postreply) }}
 
-            <div class="form-group">
-                <div class="col-lg-offset-0 col-lg-9">
-                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-                </div>
-            </div>
+            {{ horizontal_field(form.submit, div_class="col-lg-offset-0 col-lg-9") }}
     </form>
 </div>
 {% endblock %}

+ 1 - 7
flaskbb/templates/management/user_form.html

@@ -32,13 +32,7 @@
             {{ horizontal_field(form.secondary_groups) }}
             {{ horizontal_field(form.signature, rows=5, div_class="col-sm-9") }}
             {{ horizontal_field(form.notes, rows=12, div_class="col-sm-9") }}
-
-
-            <div class="form-group">
-                <div class="col-sm-offset-3 col-sm-9">
-                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-                </div>
-            </div>
+            {{ horizontal_field(form.submit) }}
     </form>
 </div>
 {% endblock %}

+ 3 - 3
flaskbb/templates/message/message_form.html

@@ -3,7 +3,7 @@
 {% extends theme("message/message_layout.html") %}
 
 {% block message_content %}
-{% from theme("macros.html") import horizontal_field %}
+{% from theme("macros.html") import horizontal_field, render_submit_field %}
 <form class="form-horizontal" role="form" method="post" name="new">
     <legend>{{ title }}</legend>
     {{ form.hidden_tag() }}
@@ -13,8 +13,8 @@
 
     <div class="form-group row">
         <div class="col-sm-offset-3 col-lg-9">
-            <button class="btn btn-success" type="submit" name="send_message">{% trans %}Send Message{% endtrans %}</button>
-            <button class="btn btn-info" type="submit" name="save_message">{% trans %}Save as Draft{% endtrans %}</button>
+            {{ render_submit_field(form.send_message, input_class="btn btn-success") }}
+            {{ render_submit_field(form.save_message, input_class="btn btn-info") }}
         </div>
     </div>
 </form>

+ 1 - 6
flaskbb/templates/user/change_email.html

@@ -8,11 +8,6 @@
     {{ horizontal_field(form.old_email)}}
     {{ horizontal_field(form.new_email)}}
     {{ horizontal_field(form.confirm_new_email)}}
-
-    <div class="form-group row">
-        <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-        </div>
-    </div>
+    {{ horizontal_field(form.submit) }}
 </form>
 {% endblock %}

+ 1 - 6
flaskbb/templates/user/change_password.html

@@ -8,11 +8,6 @@
     {{ horizontal_field(form.old_password)}}
     {{ horizontal_field(form.new_password)}}
     {{ horizontal_field(form.confirm_new_password)}}
-
-    <div class="form-group row">
-        <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-        </div>
-    </div>
+    {{ horizontal_field(form.submit) }}
 </form>
 {% endblock %}

+ 1 - 6
flaskbb/templates/user/change_user_details.html

@@ -12,11 +12,6 @@
     {{ horizontal_field(form.avatar) }}
     {{ horizontal_field(form.signature, rows=5, div_class="col-sm-9") }}
     {{ horizontal_field(form.notes, rows=12, div_class="col-sm-9") }}
-
-    <div class="form-group row">
-        <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-        </div>
-    </div>
+    {{ horizontal_field(form.submit) }}
 </form>
 {% endblock %}

+ 1 - 5
flaskbb/templates/user/general_settings.html

@@ -7,10 +7,6 @@
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.theme) }}
     {{ horizontal_field(form.language) }}
-    <div class="form-group row">
-        <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
-        </div>
-    </div>
+    {{ horizontal_field(form.submit) }}
 </form>
 {% endblock %}

+ 26 - 15
flaskbb/user/forms.py

@@ -11,9 +11,9 @@
 from flask.ext.login import current_user
 from flask.ext.wtf import Form
 from wtforms import (StringField, PasswordField, DateField, TextAreaField,
-                     SelectField, ValidationError)
-from wtforms.validators import (Length, DataRequired, Email, EqualTo, regexp,
-                                Optional, URL)
+                     SelectField, ValidationError, SubmitField)
+from wtforms.validators import (Length, DataRequired, InputRequired, Email,
+                                EqualTo, regexp, Optional, URL)
 from flask.ext.babel import lazy_gettext as _
 
 from flaskbb.user.models import User, PrivateMessage
@@ -33,20 +33,23 @@ class GeneralSettingsForm(Form):
     language = SelectField(_("Language"))
     theme = SelectField(_("Theme"))
 
+    submit = SubmitField(_("Save"))
+
 
 class ChangeEmailForm(Form):
     old_email = StringField(_("Old E-Mail Address"), validators=[
-        DataRequired(message=_("E-Mail address required")),
+        DataRequired(message=_("A E-Mail Address is required.")),
         Email(message=_("This E-Mail is invalid"))])
 
     new_email = StringField(_("New E-Mail Address"), validators=[
-        DataRequired(message=_("E-Mail address required")),
-        Email(message=_("This E-Mail is invalid"))])
+        InputRequired(),
+        EqualTo('confirm_new_email', message=_("E-Mails must match.")),
+        Email(message=_("Invalid E-Mail Address."))])
 
     confirm_new_email = StringField(_("Confirm E-Mail Address"), validators=[
-        DataRequired(message=_("E-Mail adress required")),
-        Email(message=_("This E-Mail is invalid")),
-        EqualTo("new_email", message=_("E-Mails do not match"))])
+        Email(message=_("Invalid E-Mail Address."))])
+
+    submit = SubmitField(_("Save"))
 
     def __init__(self, user, *args, **kwargs):
         self.user = user
@@ -58,19 +61,20 @@ class ChangeEmailForm(Form):
                                  User.email.like(field.data),
                                  db.not_(User.id == self.user.id))).first()
         if user:
-            raise ValidationError(_("This email is taken"))
+            raise ValidationError(_("This E-Mail is taken."))
 
 
 class ChangePasswordForm(Form):
     old_password = PasswordField(_("Old Password"), validators=[
         DataRequired(message=_("Password required"))])
 
-    new_password = PasswordField(_("New Password"), validators=[
-        DataRequired(message=_("Password required"))])
+    new_password = PasswordField(_('Password'), validators=[
+        InputRequired(),
+        EqualTo('confirm_new_password', message=_('Passwords must match.'))])
+
+    confirm_new_password = PasswordField(_('Confirm New Password'))
 
-    confirm_new_password = PasswordField(_("Confirm New Password"), validators=[
-        DataRequired(message=_("Password required")),
-        EqualTo("new_password", message=_("Passwords do not match"))])
+    submit = SubmitField(_("Save"))
 
 
 class ChangeUserDetailsForm(Form):
@@ -98,15 +102,22 @@ class ChangeUserDetailsForm(Form):
     notes = TextAreaField(_("Notes"), validators=[
         Optional(), Length(min=0, max=5000)])
 
+    submit = SubmitField(_("Save"))
+
 
 class NewMessageForm(Form):
     to_user = StringField(_("To User"), validators=[
         DataRequired(message=_("A username is required."))])
+
     subject = StringField(_("Subject"), validators=[
         DataRequired(message=_("A subject is required."))])
+
     message = TextAreaField(_("Message"), validators=[
         DataRequired(message=_("A message is required."))])
 
+    send_message = SubmitField(_("Send Message"))
+    save_message = SubmitField(_("Save Message"))
+
     def validate_to_user(self, field):
         user = User.query.filter_by(username=field.data).first()
         if not user: