import html
import re
+import urllib.parse
from django.db import models, transaction
from django.utils.html import strip_tags
ordering = ['-creation_timestamp']
def get_absolute_url(self):
+ if self.slug == 'index':
+ return '/'
return '/%s/' % self.slug
def lang(self):
self.plain_text = re.sub(
r"[’'\"«»,;:\. ]", ' ', html.unescape(strip_tags(self.text)).replace('’', ' ')
)
+ if not kwargs.get('update_fields'):
+ self.maintain_interlinks()
return super().save(*args, **kwargs)
+
+ def maintain_interlinks(self):
+ links = re.findall(r'href="(.*?)"', self.text or '')
+ with transaction.atomic():
+ Interlink.objects.filter(note1=self).delete()
+ for link in links:
+ parsed = urllib.parse.urlparse(link)
+ if parsed.netloc != '':
+ continue
+ path_parts = parsed.path.strip('/').split()
+ if len(path_parts) != 1:
+ continue
+ try:
+ note2 = Note.objects.get(slug=path_parts[0])
+ Interlink.objects.create(note1=self, note2=note2)
+ except Note.DoesNotExist:
+ pass
+
+
+class Interlink(models.Model):
+ note1 = models.ForeignKey(Note, on_delete=models.SET_NULL, null=True, related_name='+')
+ note2 = models.ForeignKey(Note, on_delete=models.SET_NULL, null=True, related_name='linking_note')