Initial bookmarks.
[wolnelektury.git] / src / bookmarks / models.py
1 import uuid
2 from django.db import models
3
4
5 class Bookmark(models.Model):
6     uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
7     user = models.ForeignKey('auth.User', models.CASCADE)
8     book = models.ForeignKey('catalogue.Book', models.CASCADE)
9     anchor = models.CharField(max_length=100, blank=True)
10     created_at = models.DateTimeField(auto_now_add=True)
11     note = models.TextField(blank=True)
12
13     def __str__(self):
14         return str(self.uuid)
15     
16     def get_for_json(self):
17         return {
18             'uuid': self.uuid,
19             'anchor': self.anchor,
20             'note': self.note,
21             'created_at': self.created_at,
22         }
23
24
25 class Quote(models.Model):
26     uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
27     user = models.ForeignKey('auth.User', models.CASCADE)
28     book = models.ForeignKey('catalogue.Book', models.CASCADE)
29     created_at = models.DateTimeField(auto_now_add=True)
30     start_elem = models.CharField(max_length=100, blank=True)
31     end_elem = models.CharField(max_length=100, blank=True)
32     start_offset = models.IntegerField(null=True, blank=True)
33     end_offset = models.IntegerField(null=True, blank=True)
34     text = models.TextField(blank=True)
35
36     def __str__(self):
37         return str(self.uuid)
38
39     def get_for_json(self):
40         return {
41             'uuid': self.uuid,
42             'startElem': self.start_elem,
43             'endElem': self.end_elem,
44             'startOffset': self.start_offset,
45             'startOffset': self.end_offset,
46             'created_at': self.created_at,
47         }
48
49 def from_path(elem, path):
50     def child_nodes(e):
51         if e.text: yield (e, 'text')
52         for child in e:
53             if child.attrib.get('id') != 'toc':
54                 yield (child, None)
55             if child.tail:
56                 yield (child, 'tail')
57     while len(path) > 1:
58         n = path.pop(0)
59         elem = list(child_nodes(elem))[n]
60     return elem
61             
62             
63