Mercurial Hosting > freedit
diff src/bbcode/Bbcode.luan @ 53:cac477dd1f82
convert image and video urls
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 24 Nov 2022 22:54:43 -0700 |
parents | f225e82b2bf8 |
children |
line wrap: on
line diff
--- a/src/bbcode/Bbcode.luan Wed Nov 23 23:29:16 2022 -0700 +++ b/src/bbcode/Bbcode.luan Thu Nov 24 22:54:43 2022 -0700 @@ -82,7 +82,11 @@ end function html.img(bbcode,options) - %><img src="<%= html_encode(bbcode.contents) %>"><% + %><img src="<%= html_encode(bbcode.contents) %>"<% + if bbcode.param ~= nil then + %> width="<%=bbcode.param%>"<% + end + %>><% end function html.color(bbcode,options) @@ -115,10 +119,17 @@ %><iframe width="560" height="315" frameborder="0" allowfullscreen src="<%=url%>"></iframe><% end +local video_urls = { + [[\.mp4$]] +} local video_handlers = {} +local function regex_video(s) + video_urls[#video_urls+1] = s + return regex(s) +end do - local ptn1 = regex[[^\Qhttps://youtu.be/\E([a-zA-Z0-9_-]+)(?:\?t=([0-9]+))?]] - local ptn2 = regex[[^\Qhttps://www.youtube.com/watch?v=\E([a-zA-Z0-9_-]+)(?:&t=([0-9]+)s)?]] + local ptn1 = regex_video[[^\Qhttps://youtu.be/\E([a-zA-Z0-9_-]+)(?:\?t=([0-9]+))?]] + local ptn2 = regex_video[[^\Qhttps://www.youtube.com/watch?v=\E([a-zA-Z0-9_-]+)(?:&t=([0-9]+)s)?]] function video_handlers.youtube(url) local id, start = ptn1.match(url) if id == nil then @@ -136,7 +147,7 @@ end end do - local ptn = regex[[^\Qhttps://rumble.com/embed/\E[a-z0-9]+/\?pub=[a-z0-9]+]] + local ptn = regex_video[[^\Qhttps://rumble.com/embed/\E[a-z0-9]+/\?pub=[a-z0-9]+]] function video_handlers.rumble(url) if not ptn.matches(url) then return false @@ -146,7 +157,7 @@ end end do - local ptn = regex[[^\Qhttps://www.bitchute.com/video/\E([a-zA-Z0-9]+)/]] + local ptn = regex_video[[^\Qhttps://www.bitchute.com/video/\E([a-zA-Z0-9]+)/]] function video_handlers.bitchute(url) local id = ptn.match(url) if id == nil then @@ -158,7 +169,7 @@ end end do - local ptn = regex[[^\Qhttps://vimeo.com/\E([0-9]+)]] + local ptn = regex_video[[^\Qhttps://vimeo.com/\E([0-9]+)]] function video_handlers.vimeo(url) local id = ptn.match(url) if id == nil then @@ -170,7 +181,7 @@ end end do - local ptn = regex[[^\Qhttps://dai.ly/\E([a-z0-9]+)]] + local ptn = regex_video[[^\Qhttps://dai.ly/\E([a-z0-9]+)]] function video_handlers.dailymotion(url) local id = ptn.match(url) if id == nil then @@ -182,14 +193,13 @@ end end do - local ptn = regex[[^\Qhttps://www.tiktok.com/\E[^/]+/video/([0-9]+)]] + local ptn = regex_video[[^\Qhttps://www.tiktok.com/\E[^/]+/video/([0-9]+)]] function video_handlers.tiktok(url) local id = ptn.match(url) if id == nil then return false end - %><blockquote class="tiktok-embed" data-video-id="<%=id%>" style="max-width: 560px; margin-left: 0;"><section></section></blockquote><% - %><script async src="https://www.tiktok.com/embed.js"></script><% + %><iframe allowfullscreen scrolling="no" width="325" height="720" src="https://www.tiktok.com/embed/<%=id%>"></iframe><% return true end end @@ -204,6 +214,8 @@ end end +local video_regex = regex(concat(video_urls,"|")) + function html.video(bbcode,options) local url = bbcode.contents for _, handle in pairs(video_handlers) do @@ -268,10 +280,33 @@ } local url_regex = regex[[(^|\s)(https?://\S+)]] +local img_regex +do + local endings = { + "jpg" + "jpeg" + "png" + "gif" + "svg" + } + local t = {} + for _, ending in ipairs(endings) do + t[#t+1] = [[\.]]..ending..[[$]] + end + img_regex = regex(concat(t,"|")) +end local function preprocess(bbcode) if type(bbcode) == "string" then - bbcode = url_regex.gsub( bbcode, "$1[url]$2[/url]" ) + bbcode = url_regex.gsub( bbcode, function(prefix,url) + if video_regex.matches(url) then + return prefix.."[video]"..url.."[/video]" + elseif img_regex.matches(url) then + return prefix.."[img]"..url.."[/img]" + else + return prefix.."[url]"..url.."[/url]" + end + end ) %><%= bbcode %><% else type(bbcode) == "table" or error()