# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+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
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']
class HomeView(TemplateView):
template_name = 'phyll/home.html'
+ def get_context_data(self, **kwargs):
+ context = super(HomeView, self).get_context_data(**kwargs)
+ context['posts'] = Note.objects.filter(published=True).order_by('-creation_timestamp')[:5]
+ return context
+
class ArchivesView(ListView):
model = Note
return item.text
def item_guid(self, item):
- legacy_id = None
for tag in item.tags.all():
if tag.name.startswith('old-post-id-'):
return 'http://www.0d.be/posts/%s' % tag.name.split('-')[-1]
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)