Mercurial Hosting > freedit
diff src/lib/Bbcode.luan @ 28:d9d7aa2a79db
more video types
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Jul 2022 23:44:49 -0600 |
parents | 6871eec2cf4c |
children | a1db5223ced1 |
line wrap: on
line diff
--- a/src/lib/Bbcode.luan Thu Jul 21 00:01:46 2022 -0600 +++ b/src/lib/Bbcode.luan Thu Jul 21 23:44:49 2022 -0600 @@ -2,6 +2,7 @@ local error = Luan.error local type = Luan.type or error() local ipairs = Luan.ipairs or error() +local pairs = Luan.pairs or error() local stringify = Luan.stringify or error() local Io = require "luan:Io.luan" local output_of = Io.output_of or error() @@ -101,33 +102,103 @@ options.strip_newline = true end -local youtube_ptn1 = [[https://youtu.be/([a-zA-Z0-9_-]+)(?:\?t=([0-9]+))?]] -local youtube_ptn2 = [[https://www.youtube.com/watch\?v=([a-zA-Z0-9_-]+)(?:&t=([0-9]+)s)?]] -local bitchute_ptn = [[https://www.bitchute.com/video/([a-zA-Z0-9]+)/]] -local rumble_ptn = [[https://rumble.com/embed/[a-z0-9]+/\?pub=[a-z0-9]+]] +local function video_iframe(url) + %><iframe width="560" height="315" frameborder="0" allowfullscreen src="<%=url%>"></iframe><% +end + +local video_handlers = {} +do + local ptn1 = [[https://youtu.be/([a-zA-Z0-9_-]+)(?:\?t=([0-9]+))?]] + local ptn2 = [[https://www.youtube.com/watch\?v=([a-zA-Z0-9_-]+)(?:&t=([0-9]+)s)?]] + function video_handlers.youtube(url) + local id, start = match(url,ptn1) + if id == nil then + id, start = match(url,ptn2) + end + if id == nil then + return false + end + url = "https://www.youtube.com/embed/"..id + if start ~= nil then + url = url.."?start="..start + end + video_iframe(url) + return true + end +end +do + local ptn = [[https://rumble.com/embed/[a-z0-9]+/\?pub=[a-z0-9]+]] + function video_handlers.rumble(url) + if not matches(url,ptn) then + return false + end + video_iframe(url) + return true + end +end +do + local ptn = [[https://www.bitchute.com/video/([a-zA-Z0-9]+)/]] + function video_handlers.bitchute(url) + local id = match(url,ptn) + if id == nil then + return false + end + url = "https://www.bitchute.com/embed/"..id.."/" + video_iframe(url) + return true + end +end +do + local ptn = [[https://vimeo.com/([0-9]+)]] + function video_handlers.vimeo(url) + local id = match(url,ptn) + if id == nil then + return false + end + url = "https://player.vimeo.com/video/"..id + video_iframe(url) + return true + end +end +do + local ptn = [[https://dai.ly/([a-z0-9]+)]] + function video_handlers.dailymotion(url) + local id = match(url,ptn) + if id == nil then + return false + end + url = "https://www.dailymotion.com/embed/video/"..id + video_iframe(url) + return true + end +end +do + local ptn = [[https://www.tiktok.com/[^/]+/video/([0-9]+)]] + function video_handlers.tiktok(url) + local id = match(url,ptn) + 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><% + return true + end +end +do + local ptn = [[\.[a-zA-Z0-9]+$]] + function video_handlers.file(url) + if not matches(url,ptn) then + return false + end + %><video controls width="560"><source src="<%=html_encode(url)%>"></video><% + return true + end +end function html.video(bbcode,options) local url = bbcode.contents - local id, start = match(url,youtube_ptn1) - if id == nil then - id, start = match(url,youtube_ptn2) - end - if id ~= nil then - %><iframe width="560" height="315" src="https://www.youtube.com/embed/<%=id%><% - if start ~= nil then - %>?start=<%=start%><% - end - %>" frameborder="0" allowfullscreen></iframe><% - return - end - id = match(url,bitchute_ptn) - if id ~= nil then - %><iframe width="560" height="315" scrolling="no" frameborder="0" style="border: none;" src="https://www.bitchute.com/embed/<%=id%>/"></iframe><% - return - end - if matches(url,rumble_ptn) then - %><iframe width="560" height="315" frameborder="0" allowfullscreen src="<%=url%>"></iframe><% - return + for _, handle in pairs(video_handlers) do + if handle(url) then return end end url = html_encode(url) %><a href="<%=url%>"><%=url%></a><%