summaryrefslogtreecommitdiff
path: root/server/chat/workers
diff options
context:
space:
mode:
Diffstat (limited to 'server/chat/workers')
-rw-r--r--server/chat/workers/messageParser.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/server/chat/workers/messageParser.js b/server/chat/workers/messageParser.js
new file mode 100644
index 0000000..3831f0e
--- /dev/null
+++ b/server/chat/workers/messageParser.js
@@ -0,0 +1,145 @@
+var URLExp = /(https?:\/\/[^\s,]+)/ig,
+ emailExp= /\"([^\"]+)\"\s+\<([^\>]+)\>/ig;
+
+var types={
+ img : {
+ jpg : true,
+ jpeg: true,
+ gif : true,
+ png : true,
+ bmp : true,
+ svg : true,
+ tiff: true,
+ webp: true,
+ wbmp: true
+ },
+ audio : {
+ mp3 : true,
+ wav : true,
+ aac : true
+ },
+ video : {
+ ogg : true,
+ webm: true,
+ mp4 : true
+ }
+}
+
+function convertToHTML(url){
+ if(url.match('@'))
+ return [
+ '<a href="maito:',
+ url,
+ '">',
+ url,
+ '</a>'
+ ].join('');
+
+ var data=url.split('.');
+
+ var extention=data.slice(-1);
+
+ if(types.img[extention])
+ return formatToImg(url,extention);
+
+ if(types.video[extention])
+ return formatToVideo(url,extention);
+
+ if(types.audio[extention]){
+ postMessage(
+ {
+ fetchAudio:url
+ }
+ );
+ return formatToAudio(url);
+ }
+
+ return formatToIFrame(url);
+}
+
+function formatToImg(url,extention){
+ return [
+ '<img class="message-img" src="',
+ url,
+ '"/>'
+ ].join('');
+}
+
+function formatToAudio(url,extention){
+ return [
+ '<hr>',
+ '<audio class="message-audio" controls><source src="',
+ url,
+ '"></audio>',
+ '<hr>'
+ ].join('');
+}
+
+function formatToVideo(url,extention){
+ return [
+ '<hr>',
+ '<video class="message-video" controls><source src="',
+ url,
+ '"></video>',
+ '<hr>'
+ ].join('');
+}
+
+function formatToEmail(url){
+ return [
+ '<a class="message-email" href="maito:',
+ url,
+ '">',
+ url,
+ '</a>'
+ ].join('');
+}
+
+function formatToLink(url){
+ return [
+ '<a class="message-link" href="',
+ url,
+ '">',
+ url,
+ '</a>'
+ ].join('');
+}
+
+function formatToIFrame(url){
+ return [
+ '<hr>',
+ url,
+ '<iFrame class="message-iframe" src="',
+ url,
+ '"></iFrame>',
+ '<hr>'
+ ].join('');
+}
+
+onmessage=function(data){
+ var msg = data.data.msg,
+ urls = msg.match(URLExp),
+ emails = msg.match(emailExp);
+
+ if(!urls){
+ postMessage(msg);
+ return;
+ }
+
+ for(i in urls){
+ msg=msg.replace(
+ urls[i],
+ convertToHTML(urls[i])
+ )
+ }
+
+ for(i in emails){
+ msg=msg.replace(
+ emails[i],
+ convertToHTML(emails[i])
+ )
+ }
+
+ postMessage(msg);
+ close();
+} \ No newline at end of file