62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
|
|
from django.conf import settings
|
||
|
|
from django.db import models
|
||
|
|
from django.utils.translation import gettext_lazy as _
|
||
|
|
|
||
|
|
EMBED_TYPES = (
|
||
|
|
("video", "Video"),
|
||
|
|
("photo", "Photo"),
|
||
|
|
("link", "Link"),
|
||
|
|
("rich", "Rich"),
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class Embed(models.Model):
|
||
|
|
"""
|
||
|
|
When embed code is fetched from a provider (eg, youtube) we cache that code
|
||
|
|
in the database so we don't need to ask for it again.
|
||
|
|
|
||
|
|
This model is used for caching the embed html code. It also stores some
|
||
|
|
metadata which gets displayed in the editor.
|
||
|
|
|
||
|
|
If an instance of this model is deleted, it will be automatically refetched
|
||
|
|
next time the embed code is needed.
|
||
|
|
"""
|
||
|
|
|
||
|
|
url = models.TextField()
|
||
|
|
max_width = models.SmallIntegerField(null=True, blank=True)
|
||
|
|
hash = models.CharField(max_length=32, unique=True, db_index=True)
|
||
|
|
type = models.CharField(max_length=10, choices=EMBED_TYPES)
|
||
|
|
html = models.TextField(blank=True)
|
||
|
|
title = models.TextField(blank=True)
|
||
|
|
author_name = models.TextField(blank=True)
|
||
|
|
provider_name = models.TextField(blank=True)
|
||
|
|
thumbnail_url = models.TextField(blank=True)
|
||
|
|
width = models.IntegerField(null=True, blank=True)
|
||
|
|
height = models.IntegerField(null=True, blank=True)
|
||
|
|
last_updated = models.DateTimeField(auto_now=True)
|
||
|
|
cache_until = models.DateTimeField(null=True, blank=True, db_index=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
verbose_name = _("embed")
|
||
|
|
verbose_name_plural = _("embeds")
|
||
|
|
|
||
|
|
@property
|
||
|
|
def ratio(self):
|
||
|
|
if self.width and self.height:
|
||
|
|
return self.height / self.width
|
||
|
|
|
||
|
|
@property
|
||
|
|
def ratio_css(self):
|
||
|
|
ratio = self.ratio
|
||
|
|
if ratio:
|
||
|
|
return str(ratio * 100) + "%"
|
||
|
|
|
||
|
|
@property
|
||
|
|
def is_responsive(self):
|
||
|
|
if not getattr(settings, "WAGTAILEMBEDS_RESPONSIVE_HTML", False):
|
||
|
|
return False
|
||
|
|
return self.ratio is not None
|
||
|
|
|
||
|
|
def __str__(self):
|
||
|
|
return self.url
|