diff --git a/app/db.sqlite3 b/app/db.sqlite3 index 41b7c20c..5fc2ac29 100644 Binary files a/app/db.sqlite3 and b/app/db.sqlite3 differ diff --git a/app/server/static/js/label.js b/app/server/static/js/label.js new file mode 100644 index 00000000..b3882133 --- /dev/null +++ b/app/server/static/js/label.js @@ -0,0 +1,51 @@ +axios.defaults.xsrfCookieName = 'csrftoken'; +axios.defaults.xsrfHeaderName = 'X-CSRFToken'; +var base_url = window.location.href.split('/').slice(3, 5).join('/'); +const HTTP = axios.create({ + baseURL: `/api/${base_url}/`, +}) + +var vm = new Vue({ + el: '#mail-app', + delimiters: ['[[', ']]'], + data: { + labels: [], + labelText: '', + selectedShortkey: '', + backgroundColor: '#209cee', + textColor: '#ffffff', + }, + + methods: { + addLabel: function () { + var payload = { + text: this.labelText, + shortcut: this.selectedShortkey, + background_color: this.backgroundColor, + text_color: this.textColor + }; + HTTP.post('labels/', payload).then(response => { + this.reset(); + this.labels.push(response.data); + }) + }, + removeLabel: function (label) { + var label_id = label.id; + HTTP.delete(`labels/${label_id}`).then(response => { + var index = this.labels.indexOf(label) + this.labels.splice(index, 1) + }) + }, + reset: function () { + this.labelText = ''; + this.selectedShortkey = ''; + this.backgroundColor = '#209cee'; + this.textColor = '#ffffff'; + } + }, + created: function () { + HTTP.get('labels').then(response => { + this.labels = response.data + }) + } +}) \ No newline at end of file diff --git a/app/server/templates/admin/label.html b/app/server/templates/admin/label.html new file mode 100644 index 00000000..337e246f --- /dev/null +++ b/app/server/templates/admin/label.html @@ -0,0 +1,96 @@ +{% extends "admin/admin_base.html" %} {% load static %} {% block content-area %} +
+

Add labels

+ +
+
+
+
+
+
+ + + [[ label.text ]] + + [[ label.shortcut ]] +
+
+
+
+
+
+
+ +
+ +
+
+ + [[ labelText ]] + + [[ selectedShortkey ]] +
+
+
+ +
+ +
+ + + + +
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+ + +
+ + +
+ + +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+{% endblock %} {% block footer %} + +{% endblock %} \ No newline at end of file diff --git a/app/server/urls.py b/app/server/urls.py index b5ebedbc..b4e672cb 100644 --- a/app/server/urls.py +++ b/app/server/urls.py @@ -1,7 +1,7 @@ from django.urls import path from .views import IndexView -from .views import ProjectView, DatasetView, DatasetUpload +from .views import ProjectView, DatasetView, DatasetUpload, LabelView from .views import ProjectsView, ProjectAdminView, DataDownload from rest_framework import routers from .views import ProjectViewSet @@ -25,4 +25,5 @@ urlpatterns = [ path('projects//', ProjectView.as_view(), name='annotation'), path('projects//docs/', DatasetView.as_view(), name='dataset'), path('projects//docs/create', DatasetUpload.as_view(), name='upload'), + path('projects//labels/', LabelView.as_view(), name='label-management'), ] diff --git a/app/server/views.py b/app/server/views.py index 481b4fc6..99fb6b4d 100644 --- a/app/server/views.py +++ b/app/server/views.py @@ -60,6 +60,10 @@ class DatasetView(LoginRequiredMixin, ListView): return project.documents.all() +class LabelView(LoginRequiredMixin, TemplateView): + template_name = 'admin/label.html' + + class DatasetUpload(LoginRequiredMixin, TemplateView): model = Project template_name = 'admin/dataset_upload.html'