##// END OF EJS Templates
Opus is an audio format too
neko259 -
r1339:2b8dc202 default
parent child Browse files
Show More
@@ -1,82 +1,83 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 'opus',
14 )
15 )
15
16
16 PLAIN_FILE_FORMATS = {
17 PLAIN_FILE_FORMATS = {
17 'pdf': 'pdf',
18 'pdf': 'pdf',
18 'djvu': 'djvu',
19 'djvu': 'djvu',
19 'txt': 'txt',
20 'txt': 'txt',
20 }
21 }
21
22
22
23
23 def get_viewers():
24 def get_viewers():
24 return AbstractViewer.__subclasses__()
25 return AbstractViewer.__subclasses__()
25
26
26
27
27 class AbstractViewer:
28 class AbstractViewer:
28 def __init__(self, file, file_type):
29 def __init__(self, file, file_type):
29 self.file = file
30 self.file = file
30 self.file_type = file_type
31 self.file_type = file_type
31
32
32 @staticmethod
33 @staticmethod
33 def supports(file_type):
34 def supports(file_type):
34 return True
35 return True
35
36
36 def get_view(self):
37 def get_view(self):
37 return '<div class="image">'\
38 return '<div class="image">'\
38 '{}'\
39 '{}'\
39 '<div class="image-metadata"><a href="{}" download >{}, {}</a></div>'\
40 '<div class="image-metadata"><a href="{}" download >{}, {}</a></div>'\
40 '</div>'.format(self.get_format_view(), self.file.url,
41 '</div>'.format(self.get_format_view(), self.file.url,
41 self.file_type, filesizeformat(self.file.size))
42 self.file_type, filesizeformat(self.file.size))
42
43
43 def get_format_view(self):
44 def get_format_view(self):
44 if self.file_type in PLAIN_FILE_FORMATS:
45 if self.file_type in PLAIN_FILE_FORMATS:
45 image = 'images/fileformats/{}.png'.format(
46 image = 'images/fileformats/{}.png'.format(
46 PLAIN_FILE_FORMATS[self.file_type])
47 PLAIN_FILE_FORMATS[self.file_type])
47 else:
48 else:
48 image = FILE_STUB_IMAGE
49 image = FILE_STUB_IMAGE
49
50
50 return '<a href="{}">'\
51 return '<a href="{}">'\
51 '<img src="{}" width="200" height="150"/>'\
52 '<img src="{}" width="200" height="150"/>'\
52 '</a>'.format(self.file.url, static(image))
53 '</a>'.format(self.file.url, static(image))
53
54
54
55
55 class VideoViewer(AbstractViewer):
56 class VideoViewer(AbstractViewer):
56 @staticmethod
57 @staticmethod
57 def supports(file_type):
58 def supports(file_type):
58 return file_type in FILE_TYPES_VIDEO
59 return file_type in FILE_TYPES_VIDEO
59
60
60 def get_format_view(self):
61 def get_format_view(self):
61 return '<video width="200" height="150" controls src="{}"></video>'\
62 return '<video width="200" height="150" controls src="{}"></video>'\
62 .format(self.file.url)
63 .format(self.file.url)
63
64
64
65
65 class AudioViewer(AbstractViewer):
66 class AudioViewer(AbstractViewer):
66 @staticmethod
67 @staticmethod
67 def supports(file_type):
68 def supports(file_type):
68 return file_type in FILE_TYPES_AUDIO
69 return file_type in FILE_TYPES_AUDIO
69
70
70 def get_format_view(self):
71 def get_format_view(self):
71 return '<audio controls src="{}"></audio>'.format(self.file.url)
72 return '<audio controls src="{}"></audio>'.format(self.file.url)
72
73
73
74
74 class SvgViewer(AbstractViewer):
75 class SvgViewer(AbstractViewer):
75 @staticmethod
76 @staticmethod
76 def supports(file_type):
77 def supports(file_type):
77 return file_type == FILE_TYPE_SVG
78 return file_type == FILE_TYPE_SVG
78
79
79 def get_format_view(self):
80 def get_format_view(self):
80 return '<a class="thumb" href="{}">'\
81 return '<a class="thumb" href="{}">'\
81 '<img class="post-image-preview" width="200" height="150" src="{}" />'\
82 '<img class="post-image-preview" width="200" height="150" src="{}" />'\
82 '</a>'.format(self.file.url, self.file.url)
83 '</a>'.format(self.file.url, self.file.url)
General Comments 0
You need to be logged in to leave comments. Login now