summaryrefslogtreecommitdiff
path: root/postgresqleu/util/widgets.py
blob: 34a9cf0de3b51dbbb0dd4283987af8f1640daabb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from django import forms
from django.forms.widgets import TextInput
from django.utils.safestring import mark_safe

import datetime
import json


class HtmlDateInput(TextInput):
    def __init__(self, *args, **kwargs):
        kwargs.update({'attrs': {'type': 'date', 'required-pattern': '[0-9]{4}-[0-9]{2}-[0-9]{2}'}})
        super(HtmlDateInput, self).__init__(*args, **kwargs)

    def format_value(self, val):
        if isinstance(val, datetime.datetime):
            val = val.date()
        return super(HtmlDateInput, self).format_value(val)


class RequiredFileUploadWidget(forms.FileInput):
    def __init__(self, filename=None, attrs=None):
        self.filename = filename
        super(RequiredFileUploadWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        output = []
        if value and hasattr(value, 'url'):
            output.append('Current file: <a href="{0}">'.format(value.url))
            if self.filename:
                output.append(self.filename)
            else:
                output.append(value.name)
            output.append('</a><br/>')
        output.append("Upload new file: ")
        output.append(super(RequiredFileUploadWidget, self).render(name, value, attrs))
        return mark_safe(''.join(output))


class PrettyPrintJsonWidget(forms.Textarea):
    def render(self, name, value, attrs=None, renderer=None):
        # This is mighty ugly -- we parse the json and then turn it back into json.
        # Luckily this isn't called often :)
        try:
            value = json.dumps(json.loads(value), indent=2)
        except ValueError:
            # Don't try to do anything if it's not valid json
            pass
        t = super(PrettyPrintJsonWidget, self).render(name, value, attrs, renderer)
        return t


class AdminJsonWidget(PrettyPrintJsonWidget):
    def render(self, name, value, attrs=None, renderer=None):
        attrs['cols'] = 100
        return super(AdminJsonWidget, self).render(name, value, attrs, renderer)


class StaticTextWidget(TextInput):
    def render(self, name, value, attrs=None, renderer=None):
        return mark_safe(value)