Module:CountdownBanner: Difference between revisions

From 20R1
m Alex moved page Module:CountdownTimer to Module:CountdownBanner without leaving a redirect: This was suggested and created by grok 4.1
No edit summary
Line 1: Line 1:
local p = {}
local p = {}


function p.show(frame)
function p.show( frame )
     local currentTime = os.time()
     local currentTime = os.time()
    local soonest = nil
    local soonestDate = nil


    -- Query all events with a start date in the future
-- Use the normal DPL-style SMW query instead of mw.smw.ask
    local events = frame:getParent().args.events or mw.smw.ask({
local query = '{{#ask: [[Category:Events]] [[Event Date::>' .. os.date("!%Y-%m-%d", currentTime) .. ']]'
        "[[Category:Events]]",
              .. '|?Event Date'
        "[[Event Date::>" .. os.date("!%Y-%m-%d", currentTime) .. "]]",
              .. '|?Event Name=Name'
        "?Event Date",
              .. '|?Event Location=Location'
        "?Event Name",
              .. '|?Event Flyer=Flyer'
        "?Event Location",
              .. '|sort=Event Date'
        "?Event Flyer",
              .. '|order=asc'
        "sort=Event Date",
              .. '|limit=1'
        "order=asc",
              .. '|format=template'
        "limit=1"
              .. '|template=CountdownBannerHelper'
    })
              .. '}}'


    if events and events[1] then
local result = frame:preprocess( query )
        soonest = events[1]
        soonestDate = soonest["Event Date"]
    end


    if not soonest then
-- If nothing returned, show friendly message
        return "<div style='background:#b22234;color:white;padding:20px;text-align:center;font-size:18px;'>No upcoming events scheduled</div>" end
if result == '' or result:match'^%s*$' then
  return '<div style="background:#b22234;color:white;padding:20px;text-align:center;font-size:18px;">No upcoming events scheduled</div>'
end


    local eventName = soonest["Event Name"] or "Upcoming Lions Event"
return result
    local location = soonest["Event Location"] or ""
    local flyer = soonest["Event Flyer"] or ""
 
    local banner = "<div style='background:#003366;color:white;padding:25px;text-align:center;font-size:24px;font-weight:bold;'>"
    banner = banner .. "Next District Event<br/>"
    banner = banner .. "<span style='font size='+3'>" .. eventName .. "</span><br/>"
    banner = banner .. location .. "<br/>"
    banner = banner .. "<span id='countdown' data-date='" .. soonestDate .. "'></span>"
    if flyer ~= "" then
        banner = banner .. "<br/><a href='" .. flyer .. "' target='_blank'><img src='" .. flyer .. "' style='height:200px;margin-top:15px;border:3px solid white;'/></a>"
    end
    banner = banner .. "</div>"
 
    banner = banner .. [[
<script>
var countDown = new Date(document.getElementById("countdown").getAttribute("data-date")).getTime();
var x = setInterval(function() {
    var now = new Date().getTime();
    var distance = countDown - now;
    var days = Math.floor(distance / 86400000);
    var hours = Math.floor((distance % 86400000) / 3600000);
    var minutes = Math.floor((distance % 3600000) / 60000);
    document.getElementById("countdown").innerHTML = days + " days " + hours + " hrs " + minutes + " min until start";
    if (distance < 0) clearInterval(x), document.getElementById("countdown").innerHTML = "HAPPENING NOW!";
}, 60000);
</script>]]
 
    return banner
end
end


return p
return p

Revision as of 20:57, 19 November 2025

Documentation for this module may be created at Module:CountdownBanner/doc

local p = {}

function p.show( frame )
    local currentTime = os.time()

 -- Use the normal DPL-style SMW query instead of mw.smw.ask
 local query = '{{#ask: [[Category:Events]] [[Event Date::>' .. os.date("!%Y-%m-%d", currentTime) .. ']]'
              .. '|?Event Date'
              .. '|?Event Name=Name'
              .. '|?Event Location=Location'
              .. '|?Event Flyer=Flyer'
              .. '|sort=Event Date'
              .. '|order=asc'
              .. '|limit=1'
              .. '|format=template'
              .. '|template=CountdownBannerHelper'
              .. '}}'

 local result = frame:preprocess( query )

 -- If nothing returned, show friendly message
 if result == '' or result:match'^%s*$' then
  return '<div style="background:#b22234;color:white;padding:20px;text-align:center;font-size:18px;">No upcoming events scheduled</div>'
 end

 return result
end

return p