diff options
-rw-r--r-- | forms.py | 15 | ||||
-rw-r--r-- | templates/group.html | 13 | ||||
-rw-r--r-- | templates/pad_change.html | 33 | ||||
-rw-r--r-- | views.py | 23 |
4 files changed, 80 insertions, 4 deletions
@@ -1,8 +1,8 @@ -from wtforms import HiddenField, validators -from models import Group +from wtforms import HiddenField, PasswordField, validators from wtfpeewee.orm import model_form, ModelConverter from flask.ext.wtf import Form from utils import Unique, ReadonlyField +from models import Group, Pad from widgets import TextArea @@ -24,5 +24,16 @@ ChangeGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args= converter=ModelConverter(overrides={'name': ReadonlyField})) +CreatePad = model_form( + Pad, base_class=Form, exclude=['api_id', 'created', 'group'], field_args={ + 'name': {'validators': [ + validators.Required(), + validators.Regexp('^[a-zA-Z1-9_-]+$', message=u'Invalid pad name ' + '(only simple characters, numbers, - and _).'), + validators.Regexp('^[a-zA-Z1-9]', message=u'Pad name should not ' + 'start with a special character.')]}}, + converter=ModelConverter(overrides={'password': PasswordField})) + + class DeleteForm(Form): sure = HiddenField('are you sure', default='yes') diff --git a/templates/group.html b/templates/group.html index bc08e4d..7f90c57 100644 --- a/templates/group.html +++ b/templates/group.html @@ -19,6 +19,19 @@ </div> {% if not public_view %} +<div class="panel panel-default"> + <div class="panel-heading" style="border-bottom: 0"> + <h3 class="panel-title">Pads</h3> + </div> + + {% if admin %} + <div class="panel-footer"> + <a href="{{ url_for('pad_create', group_name=group.name) }}"> + Create pad + </a> + </div> + {% endif %} +</div> <div class="panel panel-default"> <div class="panel-heading"> diff --git a/templates/pad_change.html b/templates/pad_change.html new file mode 100644 index 0000000..dd8e7d2 --- /dev/null +++ b/templates/pad_change.html @@ -0,0 +1,33 @@ +{% extends "layout.html" %} +{% from "_formhelpers.html" import render_field %} + +{% block head %}Group: {{group}}{% endblock %} + +{% block content %} +<div class="panel panel-default"> + <div class="panel-heading"> + {% if pad %} + <h3 class="panel-title">Edit pad: {{pad.name}}</h3> + {% else %} + <h3 class="panel-title">Create a pad</h3> + {% endif %} + </div> + + <div class="panel-body"> + <form class="form-horizontal" role="form" method="POST"> + {% for field in change_form %} + {{ render_field(field) }} + {% endfor %} + <div class="form-group"> + <div class="col-lg-10 col-lg-offset-2"> + {% if pad %} + <button type="submit" class="btn btn-primary">Save pad</button> + {% else %} + <button type="submit" class="btn btn-primary">Create pad</button> + {% endif %} + </div> + </div> + </form> + </div> +</div> +{% endblock %} @@ -2,8 +2,8 @@ from app import app from auth import auth from flask import g, request, redirect, render_template, url_for from flask_peewee.utils import get_object_or_404 -from models import Group, Member -from forms import CreateGroup, DeleteForm, ChangeGroup +from models import Group, Member, Pad +from forms import CreateGroup, DeleteForm, ChangeGroup, CreatePad from utils import templated from pagination import Pagination from filters import * @@ -102,6 +102,25 @@ def group_join(group_name, member_id, accept): return redirect(url_for('group', group_name=group_name)) +@app.route('/<group_name>/_create_pad/', methods=['GET', 'POST']) +@templated('pad_change.html') +@auth.login_required +def pad_create(group_name): + group = get_group_or_404(Group.name == group_name, Member.admin == True) + form = CreatePad(request.form) + if form.validate_on_submit(): + pad = Pad() + form.populate_obj(pad) + pad.group = group + pad.save() + return redirect(url_for('group', group_name = group_name)) + + return {'group': group, + 'change_form': form, + 'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group}, + {'text': 'Create pad'}]} + + @app.route('/<group_name>/') @templated('group.html') @auth.login_required |