Browse Source

Merge branch 'treenode_editor' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into treenode_editor

export_seznamu_prednasek
Kateřina Č 4 years ago
parent
commit
ddf5347093
  1. 4
      flat.json
  2. 5
      seminar/forms.py
  3. 26
      seminar/templates/seminar/treenode.html
  4. 1
      seminar/urls.py
  5. 51
      seminar/views/views_all.py
  6. 3
      vue_frontend/package.json
  7. 38
      vue_frontend/src/components/TextNode.vue
  8. 5
      vue_frontend/src/router/index.js
  9. 55
      vue_frontend/yarn.lock

4
flat.json

File diff suppressed because one or more lines are too long

5
seminar/forms.py

@ -277,3 +277,8 @@ ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni,
) )
class NahrajObrazekKTreeNoduForm(forms.ModelForm):
class Meta:
model = m.Obrazek
fields = ('na_web',)

26
seminar/templates/seminar/treenode.html

@ -1,26 +1,12 @@
{% extends "seminar/archiv/base.html" %} {% extends "seminar/archiv/base.html" %}
{% load staticfiles %} {% load render_bundle from webpack_loader %}
{% load sekizai_tags %}
{# toto z nejakeho duvodu nefunguje #}
{% addtoblock css %}
dfsdfs
<link rel="stylesheet" type="text/css" href="{% static 'css/mamweb-dev.css' %}" />
{% endaddtoblock "css" %}
{% block custom_css %}
<link rel="stylesheet" type="text/css" href="{% static 'css/mamweb-dev.css' %}" />
<script src="/static/seminar/treenode_editor.js"></script>
{% endblock custom_css %}
{% load comments %}
{% block content %} {% block content %}
<div id="app">
<app></app>
</div>
{% render_bundle 'chunk-vendors' %}
{% render_bundle 'vue_app_01' %}
<form method="POST">
{% csrf_token %}
{%with obj=tnldata depth=1 template_name="seminar/treenode_recursive.html" %}
{%include template_name%}
{%endwith%}
</form>
{% endblock content %} {% endblock content %}

1
seminar/urls.py

@ -121,6 +121,7 @@ urlpatterns = [
path('temp/nahraj_reseni', views.NahrajReseniView.as_view(),name='seminar_nahraj_reseni'), path('temp/nahraj_reseni', views.NahrajReseniView.as_view(),name='seminar_nahraj_reseni'),
re_path(r'^temp/vue/.*$',views.VueTestView.as_view(),name='vue_test_view'), re_path(r'^temp/vue/.*$',views.VueTestView.as_view(),name='vue_test_view'),
path('temp/image_upload/', views.NahrajObrazekKTreeNoduView.as_view()),
path('', views.TitulniStranaView.as_view(), name='titulni_strana'), path('', views.TitulniStranaView.as_view(), name='titulni_strana'),

51
seminar/views/views_all.py

@ -111,6 +111,7 @@ class TNLData(object):
self.can_podvesit_za = tnltt.canPodvesitZa(self) self.can_podvesit_za = tnltt.canPodvesitZa(self)
self.can_podvesit_pred = tnltt.canPodvesitPred(self) self.can_podvesit_pred = tnltt.canPodvesitPred(self)
self.appendable_children = tnltt.appendableChildren(self) self.appendable_children = tnltt.appendableChildren(self)
print("appChld",self.appendable_children)
if self.parent: if self.parent:
self.appendable_siblings = tnltt.appendableChildren(self.parent) self.appendable_siblings = tnltt.appendableChildren(self.parent)
else: else:
@ -346,18 +347,22 @@ class ProblemView(generic.DetailView):
raise ValueError("Obecný problém nejde zobrazit.") raise ValueError("Obecný problém nejde zobrazit.")
return context return context
# TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného...
class AktualniZadaniView(TreeNodeView):
def get_object(self):
nastaveni = get_object_or_404(Nastaveni)
return nastaveni.aktualni_cislo.cislonode
def get_context_data(self,**kwargs): class AktualniZadaniView(generic.TemplateView):
nastaveni = get_object_or_404(Nastaveni) template_name = 'seminar/treenode.html'
context = super().get_context_data(**kwargs)
verejne = nastaveni.aktualni_cislo.verejne() # TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného...
context['verejne'] = verejne #class AktualniZadaniView(TreeNodeView):
return context # def get_object(self):
# nastaveni = get_object_or_404(Nastaveni)
# return nastaveni.aktualni_cislo.cislonode
#
# def get_context_data(self,**kwargs):
# nastaveni = get_object_or_404(Nastaveni)
# context = super().get_context_data(**kwargs)
# verejne = nastaveni.aktualni_cislo.verejne()
# context['verejne'] = verejne
# return context
#def AktualniZadaniView(request): #def AktualniZadaniView(request):
# nastaveni = get_object_or_404(Nastaveni) # nastaveni = get_object_or_404(Nastaveni)
@ -1492,3 +1497,27 @@ class PasswordChangeView(auth_views.PasswordChangeView):
class VueTestView(generic.TemplateView): class VueTestView(generic.TemplateView):
template_name = 'seminar/vuetest.html' template_name = 'seminar/vuetest.html'
class NahrajObrazekKTreeNoduView(LoginRequiredMixin, CreateView):
model = s.Obrazek
form_class = f.NahrajObrazekKTreeNoduForm
def get_initial(self):
initial = super().get_initial()
initial['na_web'] = self.request.FILES['upload']
return initial
def form_valid(self,form):
print(self.request.headers)
print(self.request.headers['Textid'])
print(form.instance)
print(form)
self.object = form.save(commit=False)
print(self.object.na_web)
self.object.text = m.Text.objects.get(pk=int(self.request.headers['Textid']))
self.object.save()
return JsonResponse({"url":self.object.na_web.url})

3
vue_frontend/package.json

@ -8,9 +8,10 @@
"lint": "vue-cli-service lint" "lint": "vue-cli-service lint"
}, },
"dependencies": { "dependencies": {
"@ckeditor/ckeditor5-build-classic": "^22.0.0", "@ckeditor/ckeditor5-upload": "^23.0.0",
"@ckeditor/ckeditor5-vue": "^1.0.1", "@ckeditor/ckeditor5-vue": "^1.0.1",
"axios": "^0.19.2", "axios": "^0.19.2",
"ckeditor5-build-classic-simple-upload-adapter-image-resize": "^1.0.4",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.4.3" "vue-router": "^3.4.3"

38
vue_frontend/src/components/TextNode.vue

@ -28,7 +28,8 @@
<script> <script>
import axios from 'axios' import axios from 'axios'
import ClassicEditor from '@ckeditor/ckeditor5-build-classic' //import ClassicEditor from '@ckeditor/ckeditor5-build-classic'
import ClassicEditor from 'ckeditor5-build-classic-simple-upload-adapter-image-resize';
import CKEditor from '@ckeditor/ckeditor5-vue'; import CKEditor from '@ckeditor/ckeditor5-vue';
export default { export default {
@ -38,6 +39,14 @@ export default {
editor: ClassicEditor, editor: ClassicEditor,
editorData: '<p>Content of the editor.</p>', editorData: '<p>Content of the editor.</p>',
editorConfig: { editorConfig: {
extraPlugins: ['SimpleUploadAdapter'],
simpleUpload: {
uploadUrl: "/temp/image_upload/",
headers: {
"test":"testh"
},
withCredentials: true
}
// The configuration of the editor. // The configuration of the editor.
}, },
editorShow: false, editorShow: false,
@ -52,7 +61,16 @@ export default {
return { return {
changed: this.currentText !== this.originalText, changed: this.currentText !== this.originalText,
} }
},
textId: function () {
console.log(this.create);
console.log(this.node.text.id);
if (this.create){
return null;
} }
return this.node.text.id;
}
}, },
props: { props: {
item: Object, item: Object,
@ -64,6 +82,7 @@ export default {
}, },
mounted: function() { mounted: function() {
//console.log("mounted"); //console.log("mounted");
this.editorConfig.simpleUpload.headers['X-CSRFToken'] = this.getCookie('csrftoken');
if (this.create){ if (this.create){
this.currentText = ""; this.currentText = "";
this.originalText = ""; this.originalText = "";
@ -72,11 +91,28 @@ export default {
} else { } else {
this.currentText = this.item.node.text.na_web; this.currentText = this.item.node.text.na_web;
this.originalText = this.item.node.text.na_web; this.originalText = this.item.node.text.na_web;
this.editorConfig.simpleUpload.headers.textId = this.item.node.text.id;
} }
//this.getText(); //this.getText();
}, },
methods: { methods: {
getCookie: function (name){
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
},
getText: function() { getText: function() {
this.loading = true; this.loading = true;
console.log(this.item); console.log(this.item);

5
vue_frontend/src/router/index.js

@ -17,6 +17,11 @@ export default new Router({
name: 'treenode', name: 'treenode',
props: true, props: true,
component: TreeNodeRoot component: TreeNodeRoot
}, {
path: '/zadani/aktualni',
name: 'treenode_zadani',
props: {'tnid': 1},
component: TreeNodeRoot
}, },
] ]
}) })

55
vue_frontend/yarn.lock

@ -863,10 +863,47 @@
lodash "^4.17.19" lodash "^4.17.19"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@ckeditor/ckeditor5-build-classic@^22.0.0": "@ckeditor/ckeditor5-core@^23.0.0":
version "22.0.0" version "23.0.0"
resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-22.0.0.tgz#24e4a32a4d68211c58b4ea49e794217bd61bf0b7" resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-23.0.0.tgz#ae1a29bccd100e8fed5998f58abce4e6c47cd208"
integrity sha512-Vcy7vqSDv1xH6ACi2RW25+wIEEKrzEYb+dpgL/yTfhqv0wlswl4tn1VOfEbzGNrgQCio3djxkF813be29IfmWA== integrity sha512-NjelymGQBJPnEplS0rN/y6oDCdg6+5BcFF5NffxCzzXyqrFguIVSzgSaBXB7ujwX6AkecvEPM7yN8UQg+8z98A==
dependencies:
"@ckeditor/ckeditor5-engine" "^23.0.0"
"@ckeditor/ckeditor5-utils" "^23.0.0"
lodash-es "^4.17.15"
"@ckeditor/ckeditor5-engine@^23.0.0":
version "23.0.0"
resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-23.0.0.tgz#9ab22fdaff274b4e94f76f74b70d119cc5d88ddb"
integrity sha512-DKYHxN7WORlX3HsgEXMlIaUQFfyGzg21aMA8vRIl3IZrDKdsyJILu63Z+CTs0NSP5CGZyOqwSPE20Pf5luQrUA==
dependencies:
"@ckeditor/ckeditor5-utils" "^23.0.0"
lodash-es "^4.17.15"
"@ckeditor/ckeditor5-ui@^23.0.0":
version "23.0.0"
resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-23.0.0.tgz#2beead2be04cf23f7af2a3a660ad0ecb1bb7ecd6"
integrity sha512-X8RyCPMRWBYkb+Ze3e588JOGWfVz8C4cwkYbCHoKC9IaAnJhVeFngQIRMEP4+lTdqTEBW6q/5RZotKLlNOPY2g==
dependencies:
"@ckeditor/ckeditor5-core" "^23.0.0"
"@ckeditor/ckeditor5-utils" "^23.0.0"
lodash-es "^4.17.15"
"@ckeditor/ckeditor5-upload@^23.0.0":
version "23.0.0"
resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-23.0.0.tgz#a9cbde33dcbf8e7d40273afd6cc5799233401291"
integrity sha512-mqWpUP5HzRjj5s+fBxVxs+M4xFBK05nQybbOIDZGLTtdUm8dNghOpz9m9PFZlTLu5GaaROGERIXxEatYafqxDw==
dependencies:
"@ckeditor/ckeditor5-core" "^23.0.0"
"@ckeditor/ckeditor5-ui" "^23.0.0"
"@ckeditor/ckeditor5-utils" "^23.0.0"
"@ckeditor/ckeditor5-utils@^23.0.0":
version "23.0.0"
resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-23.0.0.tgz#1e002dbf5dc1890cfea6d3bd9213005205861689"
integrity sha512-el37RemQW207NBN3/DK5XNsFPiyno67bAAQ0Xw0nLqqgQhxPP+UyIWlG2F2Oa7eiVWg2/UdGgeQOOq/OV3ZYTA==
dependencies:
lodash-es "^4.17.15"
"@ckeditor/ckeditor5-vue@^1.0.1": "@ckeditor/ckeditor5-vue@^1.0.1":
version "1.0.1" version "1.0.1"
@ -2377,6 +2414,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
inherits "^2.0.1" inherits "^2.0.1"
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
ckeditor5-build-classic-simple-upload-adapter-image-resize@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/ckeditor5-build-classic-simple-upload-adapter-image-resize/-/ckeditor5-build-classic-simple-upload-adapter-image-resize-1.0.4.tgz#9ded03761c6d3bbc42d995aa038a3304f24dee04"
integrity sha512-9h1ypNTsmZMfKUcWmE0huvRr2BsgPKTyiar5v+aLJS2UkSdNNgD/Lw+baGLgnkVjIG+iVsQCR5V9JRSgyrVrkg==
class-utils@^0.3.5: class-utils@^0.3.5:
version "0.3.6" version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@ -5138,6 +5180,11 @@ locate-path@^5.0.0:
dependencies: dependencies:
p-locate "^4.1.0" p-locate "^4.1.0"
lodash-es@^4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
lodash.defaultsdeep@^4.6.1: lodash.defaultsdeep@^4.6.1:
version "4.6.1" version "4.6.1"
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"

Loading…
Cancel
Save