Rejigger BlergMedia (now more robust and filling!)
[blerg.git] / www / jssrc / lib / blergmedia.js
1 var BlergMedia = {
2     audioExtensions: [],
3     videoExtensions: []
4 };
5
6 BlergMedia.media_init = function() {
7     var e = document.createElement('audio');
8     if (!!e.canPlayType) {
9         BlergMedia.has_audio = true;
10         if (e.canPlayType('audio/mpeg; codecs="mp3"')) {
11             BlergMedia.has_mp3 = true;
12             BlergMedia.audioExtensions.push('mp3');
13         }
14         if (e.canPlayType('audio/ogg; codecs="vorbis"')) {
15             BlergMedia.has_vorbis = true;
16             BlergMedia.audioExtensions.push('ogg', 'oga');
17         }
18         if (e.canPlayType('audio/wav')) {
19             BlergMedia.has_wav = true;
20             BlergMedia.audioExtensions.push('wav');
21         }
22         BlergMedia.audioTypeRegex =      new RegExp("audio:(" + BlergMedia.audioExtensions.join('|') + ")$");
23         BlergMedia.audioExtensionRegex = new RegExp("\\.(" + BlergMedia.audioExtensions.join('|') + ")$");
24     }
25
26     var e = document.createElement('video');
27     if (!!e.canPlayType) {
28         BlergMedia.has_video = true;
29         if (e.canPlayType('video/mp4; codecs="avc"')) {
30             BlergMedia.has_h264 = true;
31             BlergMedia.videoExtensions.push('mp4');
32         }
33         if (e.canPlayType('video/ogg; codecs="theora, vorbis"')) {
34             BlergMedia.has_theora = true;
35             BlergMedia.videoExtensions.push('ogv');
36         }
37         if (e.canPlayType('video/webm; codecs="vp8, vorbis"')) {
38             BlergMedia.has_webm = true;
39             BlergMedia.videoExtensions.push('webm');
40         }
41         BlergMedia.videoTypeRegex =      new RegExp("video:(" + BlergMedia.videoExtensions.join('|') + ")$");
42         BlergMedia.videoExtensionRegex = new RegExp("\\.(" + BlergMedia.videoExtensions.join('|') + ")$");
43     }
44 }
45
46 BlergMedia.play_audio = function() {
47     var e = event.target.parentElement;
48     var url = event.target.parentElement.href;
49     var audio_element = document.createElement('audio');
50     audio_element.src = url;
51     audio_element.controls = 1;
52     audio_element.autoplay = 1;
53     e.parentElement.replaceChild(audio_element, e);
54 }
55
56 BlergMedia.play_video = function() {
57     var e = event.target.parentElement;
58     var url = event.target.parentElement.href;
59     var p = document.createElement('p');
60     var video_element = document.createElement('video');
61     video_element.src = url;
62     video_element.controls = 1;
63     video_element.autoplay = 1;
64     p.appendChild(video_element);
65     e.parentElement.replaceChild(video_element, e);
66 }
67
68 BlergMedia.process = function(data) {
69     if (BlergMedia.audioExtensionRegex.test(data.url) ||
70         (data.extra && BlergMedia.audioTypeRegex.test(data.extra))) {
71         data.widget = '<a href="' + data.url + '" onclick="BlergMedia.play_audio(); return false"><img src="/images/play.png"></a>';
72     } else if (BlergMedia.videoExtensionRegex.test(data.url) ||
73                (data.extra && BlergMedia.videoTypeRegex.test(data.extra))) {
74         data.widget = '<a href="' + data.url + '" onclick="BlergMedia.play_video(); return false"><img src="/images/play.png"></a>';
75     }
76
77     return data;
78 }
79
80 window.addEventListener('load', BlergMedia.media_init, false);