From 342cb7d1edb536378f462d6a7757c2f9ccdfe1ea Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Fri, 9 Jul 2010 00:14:16 +0200 Subject: basic edit view for nodes --- coip/apps/name/forms.py | 7 ++++- coip/apps/name/views.py | 34 +++++++++++++++++++++--- coip/urls.py | 3 ++- templates/apps/name/edit.html | 60 +++++++++++++++++++++++++++++++++++++++++++ templates/apps/name/name.html | 8 +++--- templates/base.html | 9 ++----- 6 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 templates/apps/name/edit.html diff --git a/coip/apps/name/forms.py b/coip/apps/name/forms.py index 0c96480..62c6fb5 100644 --- a/coip/apps/name/forms.py +++ b/coip/apps/name/forms.py @@ -12,4 +12,9 @@ class NameForm(forms.ModelForm): class AttributeForm(forms.ModelForm): class Meta: - model = Attribute \ No newline at end of file + model = Attribute + +class NameEditForm(forms.ModelForm): + class Meta: + model = Name + fields = ['short','description'] \ No newline at end of file diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py index 3152b0d..125060c 100644 --- a/coip/apps/name/views.py +++ b/coip/apps/name/views.py @@ -5,20 +5,48 @@ Created on Jul 6, 2010 ''' from coip.apps.name.models import Name, lookup, traverse from django.core.exceptions import ObjectDoesNotExist -from django.http import HttpResponseNotFound, HttpResponseForbidden +from django.http import HttpResponseNotFound, HttpResponseForbidden,\ + HttpResponseRedirect from django.contrib.auth.decorators import login_required from coip.multiresponse import respond_to, json_response from pprint import pprint +from coip.apps.name.forms import NameEditForm +from twisted.python.reflect import ObjectNotFound + +def edit(request,id): + name = None + try: + name = Name.objects.get(id=id) + except ObjectNotFound: + return HttpResponseNotFound() + + if not name.has_permission(request.user,'#w'): + return HttpResponseForbidden() + + if request.method == 'POST': + form = NameEditForm(request.POST,instance=name) + if form.is_valid(): + form.save() + return HttpResponseRedirect("/name/id/%d" % name.id) + else: + form = NameEditForm(instance=name) + + return respond_to(request,{'text/html': 'apps/name/edit.html'},{'form': form,'name': name}) + def show_root(request): - return respond_to(request, {'text/html': 'apps/name/name.html'}, {'name': None, 'memberships': None, 'children': Name.objects.filter(parent=None)}) + return respond_to(request, + {'text/html': 'apps/name/name.html'}, + {'name': None, 'memberships': None, 'edit': False}) def show(request,name): if not name: return HttpResponseNotFound() if name.has_permission(request.user,'r'): - return respond_to(request, {'text/html': 'apps/name/name.html'}, {'name': name, 'memberships': name.memberships}) + return respond_to(request, + {'text/html': 'apps/name/name.html'}, + {'name': name, 'memberships': name.memberships, 'edit': name.has_permission(request.user,'#w')}) else: return HttpResponseForbidden() diff --git a/coip/urls.py b/coip/urls.py index 87b8c54..af60b15 100644 --- a/coip/urls.py +++ b/coip/urls.py @@ -26,8 +26,9 @@ urlpatterns = patterns('', (r'^user/home$', 'coip.apps.userprofile.views.home'), # Names (r'^name/id/(?P[0-9]+)$', 'coip.apps.name.views.show_by_id'), - (r'^name/(?P[^0-9\/]+)$', 'coip.apps.name.views.show_by_name'), + (r'^name/(?P[^0-9\/]+)$', 'coip.apps.name.views.show_by_name'), (r'^name$', 'coip.apps.name.views.show_by_name'), + (r'^name/edit/id/(?P[0-9]+)$', 'coip.apps.name.views.edit'), # JSON Tree (r'^ctree.json$', 'coip.apps.name.views.ctree'), (r'^ctree/(?P[0-9]+).json$', 'coip.apps.name.views.ctree'), diff --git a/templates/apps/name/edit.html b/templates/apps/name/edit.html new file mode 100644 index 0000000..bb39478 --- /dev/null +++ b/templates/apps/name/edit.html @@ -0,0 +1,60 @@ +{% extends "base.html" %} +{% block js %} + +{% endblock %} +{% block headline %}{% if name %}{{name.shortname}}{% else %}(){% endif %}{% endblock %} +{% block title %}COIP{% if name %} - {{name.shortname}}{% endif %}{% endblock %} +{% block main %} +
+ {% if name and name.parent %} + .. (up one level) + {% endif %} +
+
+
+
+
+ {% for field in form %} + + {% if field.errors %} + {{ field.errors }} + {% endif %} + + + {{ field.label_tag }} +
{{ field }}
+ + {% endfor %} + +
+
+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/apps/name/name.html b/templates/apps/name/name.html index 587d30e..744948c 100644 --- a/templates/apps/name/name.html +++ b/templates/apps/name/name.html @@ -33,11 +33,11 @@ $(function() { {% endif %}
-
+
{% if name %} -
-

{{name}}

- {{name.description}} +
+

{{name}}

+

{{name.description}}

{% endif %} {% if memberships %} diff --git a/templates/base.html b/templates/base.html index f63e601..cc0f8a4 100644 --- a/templates/base.html +++ b/templates/base.html @@ -64,7 +64,7 @@ .navlist ul { list-style: none; padding: 0; margin: 0; } .navlist li { float: left; display: inline; margin: 0 0.15em; } .description { clear: both; margin-top: 25px; padding-top: 5px; border-top: 1px solid black; } - #branding{ font: 500% "Trebuchet MS", sans-serif; margin-left: 50px; margin-bottom: 20px; float: left} + #branding{ font: 300% "Trebuchet MS", sans-serif; margin-left: 50px; margin-bottom: 20px; float: left} #linklist { float: right; margin-right: 50px; } #linklist ul{ list-style: none; padding: 0; margin: 0; } #linklist li{ float: left; margin: 0 0.15em} @@ -73,8 +73,7 @@ a:hover { text-decoration: underline; } .clear { clear: both; } #content{ } - #rhs{ float: right; width: 20%; position:absolute; top: 100px; right: 300px; font-size: 150%;} - #main{ font: 100% "Trebuchet MS", sans-serif; margin: 50px; width:70%} + #main{ font: 100% "Trebuchet MS", sans-serif; width:90%; } .code{font: 110% "Courier", fixed} .infopanel {font-size: 130%; width: 100%; padding: 5px; margin-bottom: 10px; } .infopanel label { display:block; } @@ -101,10 +100,6 @@
{% block main %}{% endblock %}
-
- {% block rhs %}{% endblock %} -
-