viewers.py
68 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
neko259
|
r1273 | from django.template.defaultfilters import filesizeformat | ||
neko259
|
r1290 | from django.contrib.staticfiles.templatetags.staticfiles import static | ||
neko259
|
r1273 | |||
neko259
|
r1279 | FILE_STUB_IMAGE = 'images/file.png' | ||
FILE_TYPE_WEBM = 'webm' | ||||
neko259
|
r1284 | FILE_TYPE_SVG = 'svg' | ||
neko259
|
r1279 | FILE_TYPES_AUDIO = ( | ||
'ogg', | ||||
'mp3', | ||||
) | ||||
neko259
|
r1273 | |||
neko259
|
r1286 | def get_viewers(): | ||
return AbstractViewer.__subclasses__() | ||||
neko259
|
r1273 | class AbstractViewer: | ||
def __init__(self, file, file_type): | ||||
self.file = file | ||||
self.file_type = file_type | ||||
@staticmethod | ||||
def supports(file_type): | ||||
neko259
|
r1279 | return True | ||
neko259
|
r1273 | |||
def get_view(self): | ||||
return '<div class="image"><a href="{}">'\ | ||||
neko259
|
r1275 | '<img src="{}" width="200" height="150"/>'\ | ||
neko259
|
r1273 | '</a>'\ | ||
'<div class="image-metadata">{}, {}</div>'\ | ||||
neko259
|
r1279 | '</div>'.format(self.file.url, static(FILE_STUB_IMAGE), | ||
self.file_type, filesizeformat(self.file.size)) | ||||
neko259
|
r1273 | |||
class WebmViewer(AbstractViewer): | ||||
@staticmethod | ||||
def supports(file_type): | ||||
neko259
|
r1279 | return file_type == FILE_TYPE_WEBM | ||
neko259
|
r1273 | |||
def get_view(self): | ||||
return '<div class="image">'\ | ||||
neko259
|
r1279 | '<video width="200" height="150" controls src="{}"/>'\ | ||
neko259
|
r1273 | '</div>'.format(self.file.url) | ||
neko259
|
r1279 | |||
class AudioViewer(AbstractViewer): | ||||
@staticmethod | ||||
def supports(file_type): | ||||
return file_type in FILE_TYPES_AUDIO | ||||
def get_view(self): | ||||
return '<div class="image">' \ | ||||
'<audio controls src="{}"/>' \ | ||||
'</div>'.format(self.file.url) | ||||
neko259
|
r1284 | |||
class SvgViewer(AbstractViewer): | ||||
@staticmethod | ||||
def supports(file_type): | ||||
return file_type == FILE_TYPE_SVG | ||||
def get_view(self): | ||||
return '<div class="image">'\ | ||||
neko259
|
r1285 | '<a class="thumb" href="{}">'\ | ||
'<img class="post-image-preview" width="200" height="150" src="{}"/>'\ | ||||
'</a>'\ | ||||
'</div>'.format(self.file.url, self.file.url) | ||||