1 from django.http import Http404, JsonResponse
2 from django.shortcuts import render, get_object_or_404
3 from django.utils.timezone import now
4 from django.views.decorators import cache
5 import catalogue.models
6 from wolnelektury.utils import is_ajax
15 def bookmarks(request):
16 if not request.user.is_authenticated:
17 return JsonResponse({})
19 slug = request.headers['Referer'].rsplit('.', 1)[0].rsplit('/', 1)[-1]
21 slug = 'w-80-dni-dookola-swiata'
24 book = catalogue.models.Book.objects.get(slug=slug)
25 except catalogue.models.Book.DoesNotExist:
28 if request.method == 'POST':
30 bm, created = models.Bookmark.objects.update_or_create(
33 anchor=request.POST.get('anchor', ''),
35 'note': request.POST.get('note', ''),
38 return JsonResponse(bm.get_for_json())
41 bm.anchor: bm.get_for_json()
42 for bm in models.Bookmark.objects.filter(
50 def bookmark(request, uuid):
51 bm = get_object_or_404(models.Bookmark, user=request.user, uuid=uuid)
52 if request.method == 'POST':
53 bm.note = request.POST.get('note', '')
55 return JsonResponse(bm.get_for_json())
58 def bookmark_delete(request, uuid):
59 models.Bookmark.objects.filter(user=request.user, uuid=uuid).update(
63 return JsonResponse({})
70 if not request.user.is_authenticated:
71 return JsonResponse({})
73 slug = request.headers['Referer'].rsplit('.', 1)[0].rsplit('/', 1)[-1]
75 slug = 'w-80-dni-dookola-swiata'
78 book = catalogue.models.Book.objects.get(slug=slug)
79 except catalogue.models.Book.DoesNotExist:
82 if request.method == 'POST':
84 # ensure unique? or no?
86 text = request.POST.get('text', '')
89 stext = re.sub(r'\s+', ' ', text)
95 with book.html_file.open('r') as f:
97 tree = html.fromstring(ht)
99 for sel in ('.//a[@class="theme-begin"]',
100 './/a[@class="anchor"]',
102 for e in tree.xpath(sel):
103 e.clear(keep_tail=True)
104 htext = html.tostring(tree, encoding='unicode', method='text')
105 htext = re.sub(r'\s+', ' ', htext)
110 if stext not in htext:
116 q = models.Quote.objects.create(
119 start_elem=request.POST.get('startElem', ''),
120 end_elem=request.POST.get('startElem', ''),
121 start_offset=request.POST.get('startOffset', None),
122 end_offset=request.POST.get('startOffset', None),
125 return JsonResponse(q.get_for_json())
127 return JsonResponse({
128 q.start_elem: q.get_for_json()
129 for q in models.Quote.objects.filter(
137 def quote(request, uuid):
138 q = get_object_or_404(models.Quote, user=request.user, uuid=uuid)
140 return JsonResponse(q.get_for_json())
142 return render(request, 'bookmarks/quote_detail.html', {