diff src/test/tiny.html @ 28:d9d7aa2a79db

more video types
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Jul 2022 23:44:49 -0600
parents 6871eec2cf4c
children 8ff35379cc89
line wrap: on
line diff
--- a/src/test/tiny.html	Thu Jul 21 00:01:46 2022 -0600
+++ b/src/test/tiny.html	Thu Jul 21 23:44:49 2022 -0600
@@ -6,29 +6,94 @@
 		<style>
 		</style>
 		<script>
-			var youtubePtn1 = new RegExp('https://youtu.be/([a-zA-Z0-9_-]+)(?:\\?t=([0-9]+))?');
-			var youtubePtn2 = new RegExp('https://www.youtube.com/watch\\?v=([a-zA-Z0-9_-]+)(?:\\?t=([0-9]+)s)?');
-			var bitchutePtn = new RegExp('https://www.bitchute.com/video/([a-zA-Z0-9]+)/');
-			var rumblePtn = new RegExp('https://rumble.com/embed/[a-z0-9]+/\\?pub=[a-z0-9]+');
-			var url2;
+			function videoIframe(url) {
+				return '<iframe data-video="'+url+'" width="560" height="315" frameborder="0" allowfullscreen src="'+url+'"></iframe>';
+			}
+
+			var videoHandlers = {};
+			{
+				let ptn1 = new RegExp('https://youtu.be/([a-zA-Z0-9_-]+)(?:\\?t=([0-9]+))?');
+				let ptn2 = new RegExp('https://www.youtube.com/watch\\?v=([a-zA-Z0-9_-]+)(?:\\?t=([0-9]+)s)?');
+				videoHandlers.youtube = function(url) {
+					let result = url.match(ptn1) || url.match(ptn2);
+					if( result ) {
+						url = 'https://www.youtube.com/embed/' + result[1];
+						if( result[2] )
+							url += '?start=' + result[2];
+						return videoIframe(url);
+					}
+				}
+			}
+			{
+				let ptn = new RegExp('https://rumble.com/embed/[a-z0-9]+/\\?pub=[a-z0-9]+');
+				videoHandlers.rumble = function(url) {
+					if( url.match(ptn) ) {
+						return videoIframe(url);
+					}
+				}
+			}
+			{
+				let ptn = new RegExp('https://www.bitchute.com/video/([a-zA-Z0-9]+)/');
+				videoHandlers.bitchute = function(url) {
+					let result = url.match(ptn);
+					if( result ) {
+						url = 'https://www.bitchute.com/embed/' + result[1];
+						return videoIframe(url);
+					}
+				}
+			}
+			{
+				let ptn = new RegExp('https://vimeo.com/([0-9]+)');
+				videoHandlers.vimeo = function(url) {
+					let result = url.match(ptn);
+					if( result ) {
+						url = 'https://player.vimeo.com/video/' + result[1];
+						return videoIframe(url);
+					}
+				}
+			}
+			{
+				let ptn = new RegExp('https://dai.ly/([a-z0-9]+)');
+				videoHandlers.dailymotion = function(url) {
+					let result = url.match(ptn);
+					if( result ) {
+						url = 'https://www.dailymotion.com/embed/video/' + result[1];
+						return videoIframe(url);
+					}
+				}
+			}
+			{
+				let ptn = new RegExp('https://www.tiktok.com/[^/]+/video/([0-9]+)');
+				videoHandlers.tiktok = function(url) {
+					let result = url.match(ptn);
+					if( result ) {
+						let html = '<blockquote class="tiktok-embed" data-video-id="'+result[1]+'" style="max-width: 560px; margin-left: 0;"><section></section></blockquote>';
+						//html += '<script async src="https://www.tiktok.com/embed.js"></'+'script>';
+						return html;
+					}
+				}
+			}
+			{
+				let ptn = new RegExp('\\.[a-zA-Z0-9]+$');
+				videoHandlers.file = function(url) {
+					if( url.match(ptn) ) {
+						return '<video controls width="560" height><source src="'+url+'"></video>';
+					}
+				}
+			}
+
+			function videoUrlToHtml(url) {
+				for (let key in videoHandlers) {
+					let handle = videoHandlers[key];
+					let html = handle(url);
+					if(html) return html;
+				}
+				return '<a data-video="'+url+'" href="'+url+'">'+url+'</a>';
+			}
+			console.log(videoUrlToHtml('https://www.tiktok.com/@chantelleef/video/7112118342181276933?is_from_webapp=1&sender_device=pc&web_id=7073254106622838318'));
 
 			function media_url_resolver(data,resolve,reject) {
-				let html;
-				let url = data.url;
-				url2 = url;
-				let result;
-				if( result = url.match(youtubePtn1) || url.match(youtubePtn2) ) {
-					html = '<iframe data-video="'+url+'" width="560" height="315" src="https://www.youtube.com/embed/' + result[1];
-					if( result[2] )
-						html += '?start=' + result[2]
-					html += '" frameborder="0" allowfullscreen></iframe>';
-				} else if( result = url.match(bitchutePtn) ) {
-					html = '<iframe data-video="'+url+'" width="560" height="315" scrolling="no" frameborder="0" style="border: none;" src="https://www.bitchute.com/embed/' + result[1] + '/"></iframe>';
-				} else if( url.match(rumblePtn) ) {
-					html = '<iframe data-video="'+url+'" width="560" height="315" frameborder="0" allowfullscreen src="' + url + '"></iframe>';
-				} else {
-					html = '<a data-video="'+url+'" href="'+url+'">'+url+'</a>';
-				}
+				let html = videoUrlToHtml(data.url);
 				resolve({ html: html });
 			}