X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d9c51b94bfe6b1cda1790d57a9108b83c6e1643b..f7d8acded4a58d423035c5759f6dee9a34396959:/src/bookmarks/models.py diff --git a/src/bookmarks/models.py b/src/bookmarks/models.py new file mode 100644 index 000000000..67a4fa5e6 --- /dev/null +++ b/src/bookmarks/models.py @@ -0,0 +1,63 @@ +import uuid +from django.db import models + + +class Bookmark(models.Model): + uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False) + user = models.ForeignKey('auth.User', models.CASCADE) + book = models.ForeignKey('catalogue.Book', models.CASCADE) + anchor = models.CharField(max_length=100, blank=True) + created_at = models.DateTimeField(auto_now_add=True) + note = models.TextField(blank=True) + + def __str__(self): + return str(self.uuid) + + def get_for_json(self): + return { + 'uuid': self.uuid, + 'anchor': self.anchor, + 'note': self.note, + 'created_at': self.created_at, + } + + +class Quote(models.Model): + uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False) + user = models.ForeignKey('auth.User', models.CASCADE) + book = models.ForeignKey('catalogue.Book', models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + start_elem = models.CharField(max_length=100, blank=True) + end_elem = models.CharField(max_length=100, blank=True) + start_offset = models.IntegerField(null=True, blank=True) + end_offset = models.IntegerField(null=True, blank=True) + text = models.TextField(blank=True) + + def __str__(self): + return str(self.uuid) + + def get_for_json(self): + return { + 'uuid': self.uuid, + 'startElem': self.start_elem, + 'endElem': self.end_elem, + 'startOffset': self.start_offset, + 'startOffset': self.end_offset, + 'created_at': self.created_at, + } + +def from_path(elem, path): + def child_nodes(e): + if e.text: yield (e, 'text') + for child in e: + if child.attrib.get('id') != 'toc': + yield (child, None) + if child.tail: + yield (child, 'tail') + while len(path) > 1: + n = path.pop(0) + elem = list(child_nodes(elem))[n] + return elem + + +