X-Git-Url: https://git.0d.be/?p=chloro.git;a=blobdiff_plain;f=chloro%2Fphyll%2Fviews.py;h=2e77fc926842270e743d37c323eb62ef2d470b12;hp=84b40e7fd0071ba633ceb553ffd05dfc20cafc3f;hb=8e97df809b3d4f610a598ff1e1f458c8693c5af5;hpb=f11d4b4f365634feebcb04bc414cc1615c60ceef diff --git a/chloro/phyll/views.py b/chloro/phyll/views.py index 84b40e7..2e77fc9 100644 --- a/chloro/phyll/views.py +++ b/chloro/phyll/views.py @@ -14,15 +14,21 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import os import urllib.parse from django.conf import settings from django.contrib.syndication.views import Feed from django.core.exceptions import PermissionDenied -from django.http import Http404 +from django.core.files.storage import default_storage +from django.http import HttpResponse, Http404, JsonResponse from django.utils.feedgenerator import Atom1Feed +from django.views import View +from django.views.decorators.csrf import csrf_exempt from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView, TemplateView +from sorl.thumbnail.shortcuts import get_thumbnail + from .models import Note @@ -50,6 +56,16 @@ class NoteEditView(UpdateView): fields = ['title', 'slug', 'text', 'tags', 'published'] +class NoteApiSaveView(View): + http_method_names = ['post'] + + def post(self, request, *args, **kwargs): + note = Note.objects.get(slug=kwargs['slug']) + note.text = request.POST['text'] + note.save() + return HttpResponse('ok') + + class NoteAddView(CreateView): model = Note fields = ['title', 'slug', 'text', 'tags', 'published'] @@ -133,3 +149,22 @@ class AtomFeed(Feed): def item_pubdate(self, item): return item.creation_timestamp + + +@csrf_exempt +def ajax_upload(request, *args, **kwargs): + upload = request.FILES['upload'] + upload_path = 'uploads' + if os.path.splitext(upload.name.lower())[-1] in ('.jpg', '.jpeg', '.png', '.gif', '.svg'): + upload_path = 'images' + saved_path = default_storage.save('%s/%s' % (upload_path, upload.name), upload) + url = '/media/' + saved_path + response = {'url': url, 'filename': upload.name} + if upload_path == 'images': + if default_storage.size(saved_path) > 500_000 and not upload.name.endswith('.svg'): + response['orig_url'] = url + try: + response['url'] = get_thumbnail(saved_path, '1000', upscale=False).url + except OSError: + pass + return JsonResponse(response)