src/cm/views/__init__.py
author Simon Descarpentries <sid@sopinspace.com>
Mon, 21 Oct 2013 16:37:07 +0200
changeset 553 bf26fb47a14c
parent 149 0f2c5744b39b
permissions -rw-r--r--
To allow scrolling in Safari mobile, we set the content of text_view_comments frame in a jQuery UI layout. So the automated scrolling operations in c_sync.js must be adjustable to the right part to scroll. Also, if a comment have to be shown outside of the current viewport, we scroll the correct part to that viewport and then set the comment top Y offset to juste what it needs to avoid the "Add comment" button after scrolling operation. If not in Safari mobile, we add an offset here to avoid comment to display under the "Add comment" button.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
from cm.message import display_message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from cm.models import Text, TextVersion, Attachment, Comment, Configuration
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
from cm.security import has_global_perm
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
from cm.utils.spannifier import spannify
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
from django import forms
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
from django.core.urlresolvers import reverse
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
from django.forms import ModelForm
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
from django.forms.util import ErrorList
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
from django.http import HttpResponse, HttpResponseRedirect, Http404
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
from django.shortcuts import render_to_response
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
from django.template import RequestContext
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
from django.utils.translation import ugettext as _, ugettext_lazy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
from django.views.generic.list_detail import object_list
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
import mimetypes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
import simplejson
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
import sys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
24
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    18
def get_textversion_by_keys_or_404(textversion_key, adminkey=None, key=None):
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    19
    try:
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    20
        if not adminkey:
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    21
            textversion = TextVersion.objects.get(key=textversion_key)
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    22
        else:
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    23
            textversion = TextVersion.objects.get(key=textversion_key, adminkey=adminkey)
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    24
        if textversion.text.key == key:
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    25
            return textversion
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    26
        else :
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    27
            raise Http404('Mismatch keys Text / TextVersion')
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    28
    except TextVersion.DoesNotExist:
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    29
        raise Http404('No TextVersion with such keys')
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    30
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
def get_text_by_keys_or_404(key, adminkey=None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
    try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        if not adminkey:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
            return Text.objects.get(key=key)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        else:
24
c8a95e540b79 ENH : adding comments on previous version now possible
reno
parents: 0
diff changeset
    36
            return Text.objects.get(key=key, adminkey=adminkey)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    except Text.DoesNotExist:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        raise Http404('No Text with such keys')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
def get_keys_from_dict(dico, prefix):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
    res = {}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
    for k, v in dico.items():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        if k.startswith(prefix):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            key = k[len(prefix):]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            if key == u'_':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
                key = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
            res[key] = v
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
    return res
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
def unauthorized(request):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
    resp = render_to_response('site/unauthorized.html', context_instance=RequestContext(request))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
    resp.status_code = 403
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    return resp
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
def redirect(request, view_id, args):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
    return HttpResponseRedirect(reverse(view_id, args=args))