Module:CountdownBanner: Difference between revisions

From 20R1
Created page with "local p = {} function p.show(frame) local currentTime = os.time() local soonest = nil local soonestDate = nil -- Query all events with a start date in the future local events = frame:getParent().args.events or mw.smw.ask({ "Category:Events", "[[Event Date::>" .. os.date("!%Y-%m-%d", currentTime) .. "]]", "?Event Date", "?Event Name", "?Event Location", "?Event Flyer", "sort=Event Date",..."
 
m Alex moved page Module:CountdownTimer to Module:CountdownBanner without leaving a redirect: This was suggested and created by grok 4.1
(No difference)

Revision as of 20:52, 19 November 2025

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

local p = {}

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

    -- Query all events with a start date in the future
    local events = frame:getParent().args.events or mw.smw.ask({
        "[[Category:Events]]",
        "[[Event Date::>" .. os.date("!%Y-%m-%d", currentTime) .. "]]",
        "?Event Date",
        "?Event Name",
        "?Event Location",
        "?Event Flyer",
        "sort=Event Date",
        "order=asc",
        "limit=1"
    })

    if events and events[1] then
        soonest = events[1]
        soonestDate = soonest["Event Date"]
    end

    if not soonest 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"
    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

return p