Hard linking of texts to catalogue.
[redakcja.git] / src / wlxml / views.py
index 9a2a046..8c03e05 100644 (file)
@@ -1,8 +1,14 @@
 from io import BytesIO
-from django.views.generic import TemplateView, ListView, DetailView
+import json
+from django.http import HttpResponse
+from django.views.generic import TemplateView, ListView, DetailView, View
 from . import models
+from librarian.dcparser import BookInfo
 from librarian.document import WLDocument
 from librarian.builders import StandaloneHtmlBuilder
+from librarian.meta.types.wluri import WLURI
+from librarian.meta.types.text import LegimiCategory, Epoch, Kind, Genre, Audience, ThemaCategory, MainThemaCategory
+from depot.publishers.legimi import Legimi
 
 
 class XslView(TemplateView):
@@ -15,6 +21,12 @@ class XslView(TemplateView):
         for t in models.Tag.objects.all():
             tags.setdefault(t.type, []).append(t.name)
         ctx['tags'] = tags
+        ctx['namespaces'] = {
+           "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
+           "http://purl.org/dc/elements/1.1/": "dc",
+           "http://www.w3.org/XML/1998/namespace": "xml",
+            "": "wl",
+        }
         return ctx
 
 
@@ -32,3 +44,141 @@ class TagView(DetailView):
     queryset = models.Tag.objects.all()
     slug_field = 'name'
 
+
+VALUE_TYPES = {
+    LegimiCategory: {
+        'widget': 'select',
+        'options': [''] + list(Legimi.CATEGORIES.keys()),
+    },
+    Audience: {
+        'autocomplete': {
+            'source': '/catalogue/terms/audience/',
+        }
+    },
+    ThemaCategory: {
+        'autocomplete': {
+            'source': '/catalogue/terms/thema/',
+        },
+        'chooser': {
+            'source': '/catalogue/chooser/thema/',
+        },
+    },
+    MainThemaCategory: {
+        'autocomplete': {
+            'source': '/catalogue/terms/thema-main/',
+        },
+        'chooser': {
+            'source': '/catalogue/chooser/thema-main/',
+        },
+    },
+    Epoch: {
+        'autocomplete': {
+            'source': '/catalogue/terms/epoch/',
+        }
+    },
+    Kind: {
+        'autocomplete': {
+            'source': '/catalogue/terms/kind/',
+        }
+    },
+    Genre: {
+        'autocomplete': {
+            'source': '/catalogue/terms/genre/',
+        }
+    },
+    WLURI: {
+        "autocomplete": {
+            "source": "/catalogue/terms/wluri/",
+        }
+    },
+    "authors": {
+        "autocomplete": {
+            "source": "/catalogue/terms/author/",
+        }
+    },
+    "translators": {
+        "autocomplete": {
+            "source": "/catalogue/terms/author/",
+        }
+    },
+    "editors": {
+        "autocomplete": {
+            "source": "/catalogue/terms/editor/",
+        }
+    },
+    "technical_editors": {
+        "autocomplete": {
+            "source": "/catalogue/terms/editor/",
+        }
+    },
+    "type": {
+        "autocomplete": {
+            "source": ["text"]
+        }
+    },
+    "title": {
+        "autocomplete": {
+            "source": "/catalogue/terms/book_title/",
+        }
+    },
+
+    "language": {
+        'widget': 'select',
+        'options': [
+            '',
+            'pol',
+            'eng',
+            'fre',
+            'ger',
+            'lit',
+        ],
+    },
+    "publisher": {
+        "autocomplete": {
+            "source": ["Fundacja Wolne Lektury"]
+        }
+    },
+
+}
+
+
+
+class MetaTagsView(View):
+    def get(self, request):
+        fields = []
+        for f in BookInfo.FIELDS:
+            d = {
+                'name': f.name,
+                'required': f.required,
+                'multiple': f.multiple,
+                'uri': f.uri,
+                'value_type': {
+                    'hasLanguage': f.value_type.has_language,
+                    'name': f.value_type.__name__,
+                }
+            }
+            d['value_type'].update(
+                VALUE_TYPES.get(
+                    f.value_type,
+                    VALUE_TYPES.get(
+                        f.name,
+                        {}
+                    )
+                )
+            )
+            if d['name'] == 'thema':
+                d_loc = d.copy()
+                d_time = d.copy()
+                d['filter'] = {'not': {'startswith': ['1', '3']}}
+                d_loc['filter'] = {'startswith': ['1']}
+                d_loc['name'] += ' (miejsca)'
+                d_time['filter'] = {'startswith': ['3']}
+                d_time['name'] += ' (czas)'
+                fields.extend([d, d_loc, d_time])
+            else:
+                fields.append(d)
+
+        return HttpResponse(
+            'let META_FIELDS = ' + json.dumps(fields),
+            content_type='text/javascript')
+