|
@@
-1,70
+1,82
b''
|
|
1
|
from django.template.defaultfilters import filesizeformat
|
|
1
|
from django.template.defaultfilters import filesizeformat
|
|
2
|
from django.contrib.staticfiles.templatetags.staticfiles import static
|
|
2
|
from django.contrib.staticfiles.templatetags.staticfiles import static
|
|
3
|
|
|
3
|
|
|
4
|
FILE_STUB_IMAGE = 'images/file.png'
|
|
4
|
FILE_STUB_IMAGE = 'images/file.png'
|
|
5
|
|
|
5
|
|
|
6
|
FILE_TYPES_VIDEO = (
|
|
6
|
FILE_TYPES_VIDEO = (
|
|
7
|
'webm',
|
|
7
|
'webm',
|
|
8
|
'mp4',
|
|
8
|
'mp4',
|
|
9
|
)
|
|
9
|
)
|
|
10
|
FILE_TYPE_SVG = 'svg'
|
|
10
|
FILE_TYPE_SVG = 'svg'
|
|
11
|
FILE_TYPES_AUDIO = (
|
|
11
|
FILE_TYPES_AUDIO = (
|
|
12
|
'ogg',
|
|
12
|
'ogg',
|
|
13
|
'mp3',
|
|
13
|
'mp3',
|
|
14
|
)
|
|
14
|
)
|
|
15
|
|
|
15
|
|
|
|
|
|
16
|
PLAIN_FILE_FORMATS = {
|
|
|
|
|
17
|
'pdf': 'pdf',
|
|
|
|
|
18
|
'djvu': 'djvu',
|
|
|
|
|
19
|
'txt': 'txt',
|
|
|
|
|
20
|
}
|
|
|
|
|
21
|
|
|
16
|
|
|
22
|
|
|
17
|
def get_viewers():
|
|
23
|
def get_viewers():
|
|
18
|
return AbstractViewer.__subclasses__()
|
|
24
|
return AbstractViewer.__subclasses__()
|
|
19
|
|
|
25
|
|
|
20
|
|
|
26
|
|
|
21
|
class AbstractViewer:
|
|
27
|
class AbstractViewer:
|
|
22
|
def __init__(self, file, file_type):
|
|
28
|
def __init__(self, file, file_type):
|
|
23
|
self.file = file
|
|
29
|
self.file = file
|
|
24
|
self.file_type = file_type
|
|
30
|
self.file_type = file_type
|
|
25
|
|
|
31
|
|
|
26
|
@staticmethod
|
|
32
|
@staticmethod
|
|
27
|
def supports(file_type):
|
|
33
|
def supports(file_type):
|
|
28
|
return True
|
|
34
|
return True
|
|
29
|
|
|
35
|
|
|
30
|
def get_view(self):
|
|
36
|
def get_view(self):
|
|
31
|
return '<div class="image">'\
|
|
37
|
return '<div class="image">'\
|
|
32
|
'{}'\
|
|
38
|
'{}'\
|
|
33
|
'<div class="image-metadata"><a href="{}" download >{}, {}</a></div>'\
|
|
39
|
'<div class="image-metadata"><a href="{}" download >{}, {}</a></div>'\
|
|
34
|
'</div>'.format(self.get_format_view(), self.file.url,
|
|
40
|
'</div>'.format(self.get_format_view(), self.file.url,
|
|
35
|
self.file_type, filesizeformat(self.file.size))
|
|
41
|
self.file_type, filesizeformat(self.file.size))
|
|
36
|
|
|
42
|
|
|
37
|
def get_format_view(self):
|
|
43
|
def get_format_view(self):
|
|
|
|
|
44
|
if self.file_type in PLAIN_FILE_FORMATS:
|
|
|
|
|
45
|
image = 'images/fileformats/{}.png'.format(
|
|
|
|
|
46
|
PLAIN_FILE_FORMATS[self.file_type])
|
|
|
|
|
47
|
else:
|
|
|
|
|
48
|
image = FILE_STUB_IMAGE
|
|
|
|
|
49
|
|
|
38
|
return '<a href="{}">'\
|
|
50
|
return '<a href="{}">'\
|
|
39
|
'<img src="{}" width="200" height="150"/>'\
|
|
51
|
'<img src="{}" width="200" height="150"/>'\
|
|
40
|
'</a>'.format(self.file.url, static(FILE_STUB_IMAGE))
|
|
52
|
'</a>'.format(self.file.url, static(image))
|
|
41
|
|
|
53
|
|
|
42
|
|
|
54
|
|
|
43
|
class VideoViewer(AbstractViewer):
|
|
55
|
class VideoViewer(AbstractViewer):
|
|
44
|
@staticmethod
|
|
56
|
@staticmethod
|
|
45
|
def supports(file_type):
|
|
57
|
def supports(file_type):
|
|
46
|
return file_type in FILE_TYPES_VIDEO
|
|
58
|
return file_type in FILE_TYPES_VIDEO
|
|
47
|
|
|
59
|
|
|
48
|
def get_format_view(self):
|
|
60
|
def get_format_view(self):
|
|
49
|
return '<video width="200" height="150" controls src="{}"></video>'\
|
|
61
|
return '<video width="200" height="150" controls src="{}"></video>'\
|
|
50
|
.format(self.file.url)
|
|
62
|
.format(self.file.url)
|
|
51
|
|
|
63
|
|
|
52
|
|
|
64
|
|
|
53
|
class AudioViewer(AbstractViewer):
|
|
65
|
class AudioViewer(AbstractViewer):
|
|
54
|
@staticmethod
|
|
66
|
@staticmethod
|
|
55
|
def supports(file_type):
|
|
67
|
def supports(file_type):
|
|
56
|
return file_type in FILE_TYPES_AUDIO
|
|
68
|
return file_type in FILE_TYPES_AUDIO
|
|
57
|
|
|
69
|
|
|
58
|
def get_format_view(self):
|
|
70
|
def get_format_view(self):
|
|
59
|
return '<audio controls src="{}"></audio>'.format(self.file.url)
|
|
71
|
return '<audio controls src="{}"></audio>'.format(self.file.url)
|
|
60
|
|
|
72
|
|
|
61
|
|
|
73
|
|
|
62
|
class SvgViewer(AbstractViewer):
|
|
74
|
class SvgViewer(AbstractViewer):
|
|
63
|
@staticmethod
|
|
75
|
@staticmethod
|
|
64
|
def supports(file_type):
|
|
76
|
def supports(file_type):
|
|
65
|
return file_type == FILE_TYPE_SVG
|
|
77
|
return file_type == FILE_TYPE_SVG
|
|
66
|
|
|
78
|
|
|
67
|
def get_format_view(self):
|
|
79
|
def get_format_view(self):
|
|
68
|
return '<a class="thumb" href="{}">'\
|
|
80
|
return '<a class="thumb" href="{}">'\
|
|
69
|
'<img class="post-image-preview" width="200" height="150" src="{}" />'\
|
|
81
|
'<img class="post-image-preview" width="200" height="150" src="{}" />'\
|
|
70
|
'</a>'.format(self.file.url, self.file.url)
|
|
82
|
'</a>'.format(self.file.url, self.file.url)
|