b951b3c69fb82979b041cc6576a97e5c26acd710
[redakcja.git] / src / wlxml / views.py
1 from io import BytesIO
2 import json
3 from django.http import HttpResponse
4 from django.views.generic import TemplateView, ListView, DetailView, View
5 from . import models
6 from librarian.dcparser import BookInfo
7 from librarian.document import WLDocument
8 from librarian.builders import StandaloneHtmlBuilder
9
10
11 class XslView(TemplateView):
12     template_name = 'wlxml/wl2html.xsl'
13     content_type = 'application/xslt+xml'
14
15     def get_context_data(self):
16         ctx = super().get_context_data()
17         tags = {}
18         for t in models.Tag.objects.all():
19             tags.setdefault(t.type, []).append(t.name)
20         ctx['tags'] = tags
21         ctx['namespaces'] = {
22             "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
23             "http://purl.org/dc/elements/1.1/": "dc",
24             "http://www.w3.org/XML/1998/namespace": "xml",
25             "": "wl",
26         }
27         return ctx
28
29
30 class EditorCSS(ListView):
31     template_name = 'wlxml/editor.css'
32     content_type = 'text/css'
33     queryset = models.Tag.objects.all()
34         
35
36 class TagsView(ListView):
37     queryset = models.Tag.objects.all()
38
39
40 class TagView(DetailView):
41     queryset = models.Tag.objects.all()
42     slug_field = 'name'
43
44
45 class MetaTagsView(View):
46     def get(self, request):
47         return HttpResponse(
48             'let META_FIELDS = ' + json.dumps([
49                 {
50                     'name': f.name,
51                     'required': f.required,
52                     'multiple': f.multiple,
53                     'uri': f.uri,
54                     'value_type': {
55                         'hasLanguage': f.value_type.has_language,
56                         'name': f.value_type.__name__,
57                     }
58                 }
59                 for f in BookInfo.FIELDS
60             ]),
61             content_type='text/javascript')
62