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",..."
 
No edit summary
 
(40 intermediate revisions by the same user not shown)
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 lb = ' [['
     local soonestDate = nil
     local rb = ']] '
    local query = '{{#ask: '..lb..'Club Name::+'..rb..lb..'Start Date::> '..os.date("!%Y-%m-%d", currentTime)..rb
                .. '|?Start Date'
                .. '|?Event Name=Name'
                .. '|?Event Location=Location'
                .. '|?Event Flyer=Flyer'
                .. '|sort=Start Date'
                .. '|order=asc'
                .. '|limit=1'
                .. '|}}'


    -- Query all events with a start date in the future
     local result = frame:preprocess( query )
     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
     if result == '' or result:match'^%s*$' then
         soonest = events[1]
         local banner = '<div style="background:#b22234;color:white;padding:20px;text-align:center;font-size:18px;">No upcoming events scheduled</div>'
        soonestDate = soonest["Event Date"]
    banner = 'QUERY:'..query..'<br><pre>RESULT:'..result..'<hr>'..banner
    return query
     end
     end


     if not soonest then
     return frame:preprocess( '{{CountdownBannerDisplay|' .. query .. '}}' )
        return "<div style='background:#b22234;color:white;padding:20px;text-align:center;font-size:18px;'>No upcoming events scheduled</div>" end
end


     local eventName = soonest["Event Name"] or "Upcoming Lions Event"
function p.query( frame )
     local location = soonest["Event Location"] or ""
     local currentTime = os.time()
     local flyer = soonest["Event Flyer"] or ""
    local lb = '[[' --' &#91;&#91;'
     local rb = ']]' --'&#93;&#93; '
     local query = '{{#ask: '..lb..'Club Name::+'..rb..' '..lb..'Start Date::> '..os.date("!%Y-%m-%d", currentTime)..rb
                .. '|?Start Date'
                .. '|?Event Name=Name'
                .. '|?Event Location=Location'
                .. '|?Event Photo=Flyer'
                .. '|sort=Start Date'
                .. '|order=asc'
                .. '|limit=1'
                .. '|}}'


     local banner = "<div style='background:#003366;color:white;padding:25px;text-align:center;font-size:24px;font-weight:bold;'>"
     return '<pre>'..query..'</pre>'
    banner = banner .. "Next District Event<br/>"
     --return frame:preprocess( '{{CountdownBannerDisplay|' .. query .. '}}' )
    banner = banner .. "<span style='font size='+3'>" .. eventName .. "</span><br/>"
end
     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 .. [[
function p.result( frame )
<script>
     local currentTime = os.time()
var countDown = new Date(document.getElementById("countdown").getAttribute("data-date")).getTime();
     local lb = '[[' --' &#91;&#91;'
var x = setInterval(function() {
     local rb = ']]' --'&#93;&#93; '
     var now = new Date().getTime();
     local filter = lb..'Club Name::+'..rb..' '..lb..'Start Date::> '..os.date("!%Y-%m-%d", currentTime)..rb
     var distance = countDown - now;
     local query = --'{{#ask: '..
     var days = Math.floor(distance / 86400000);
                '\n|?Start Date'
     var hours = Math.floor((distance % 86400000) / 3600000);
                .. '\n|?Event Name=Name'
     var minutes = Math.floor((distance % 3600000) / 60000);
                .. '\n|?Event Location=Location'
    document.getElementById("countdown").innerHTML = days + " days " + hours + " hrs " + minutes + " min until start";
                .. '\n|?Event Flyer=Flyer'
    if (distance < 0) clearInterval(x), document.getElementById("countdown").innerHTML = "HAPPENING NOW!";
                .. '\n|sort=Start Date'
}, 60000);
                .. '\n|order=asc'
</script>]]
                .. '\n|limit=1'
 
                --.. '\n||}}'
    return banner
end


local result=frame:preprocess( '{{Query|query=' .. query .. '|filter='..filter..'|}}' )
return frame:preprocess( '{{CountdownBannerDisplay|'..result..'|}}' )
end
return p
return p

Latest revision as of 04:19, 20 November 2025

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

local p = {}

function p.show( frame )
    local currentTime = os.time()
    local lb = ' &#91;&#91;'
    local rb = '&#93;&#93; '
    local query = '{{#ask: '..lb..'Club Name::+'..rb..lb..'Start Date::> '..os.date("!%Y-%m-%d", currentTime)..rb
                .. '|?Start Date'
                .. '|?Event Name=Name'
                .. '|?Event Location=Location'
                .. '|?Event Flyer=Flyer'
                .. '|sort=Start Date'
                .. '|order=asc'
                .. '|limit=1'
                .. '|}}'

    local result = frame:preprocess( query )

    if result == '' or result:match'^%s*$' then
        local banner = '<div style="background:#b22234;color:white;padding:20px;text-align:center;font-size:18px;">No upcoming events scheduled</div>'
    	banner = 'QUERY:'..query..'<br><pre>RESULT:'..result..'<hr>'..banner
    	return query
    end

    return frame:preprocess( '{{CountdownBannerDisplay|' .. query .. '}}' )
end

function p.query( frame )
    local currentTime = os.time()
    local lb = '[[' --' &#91;&#91;'
    local rb = ']]' --'&#93;&#93; '
    local query = '{{#ask: '..lb..'Club Name::+'..rb..' '..lb..'Start Date::> '..os.date("!%Y-%m-%d", currentTime)..rb
                .. '|?Start Date'
                .. '|?Event Name=Name'
                .. '|?Event Location=Location'
                .. '|?Event Photo=Flyer'
                .. '|sort=Start Date'
                .. '|order=asc'
                .. '|limit=1'
                .. '|}}'

    return '<pre>'..query..'</pre>'
    --return frame:preprocess( '{{CountdownBannerDisplay|' .. query .. '}}' )
end

function p.result( frame )
    local currentTime = os.time()
    local lb = '[[' --' &#91;&#91;'
    local rb = ']]' --'&#93;&#93; '
    local filter = lb..'Club Name::+'..rb..' '..lb..'Start Date::> '..os.date("!%Y-%m-%d", currentTime)..rb
    local query = --'{{#ask: '..
                '\n|?Start Date'
                .. '\n|?Event Name=Name'
                .. '\n|?Event Location=Location'
                .. '\n|?Event Flyer=Flyer'
                .. '\n|sort=Start Date'
                .. '\n|order=asc'
                .. '\n|limit=1'
                --.. '\n||}}'

	local result=frame:preprocess( '{{Query|query=' .. query .. '|filter='..filter..'|}}' )
	return frame:preprocess( 	'{{CountdownBannerDisplay|'..result..'|}}' )
	end
return p