Module:Sandbox/Frietjes

local p = {}

local math_module = require("Module:Math")

local function rnd(num, digits) -- This function implements return math_module._precision_format(tostring(num), digits) end

function p.ifexists(frame) page = frame.args[1] if not page then return (frame.args['no'] or '') end if mw.title.new(page).exists then return (frame.args['yes'] or 'yes') end return (frame.args['no'] or '') end

function p.lists(frame) local s = '\n' .. (frame.args[1] or '') .. '\n' s = mw.ustring.gsub(s, '([\r\n])%*([^\r\n]*)', '%1%2') s = mw.ustring.gsub(s, '([\r\n])#([^\r\n]*)', '%1%2') s = mw.ustring.gsub(s, '%s*([\r\n]*)', '%1') s = mw.ustring.gsub(s, '%s*([\r\n]*)', '%1') s = mw.ustring.gsub(s, '^[\r\n](.*)[\r\n]$', '%1') return s end

function p.precision(frame) return math_module._precision(frame.args[1]) end

function p.wpct(frame) local w = tonumber(frame.args[1]) or 0 local l = tonumber(frame.args[2]) or 0 local pct = '–' if (w + l) > 0 then pct = rnd(w / (w + l), 3):gsub('^0', '') end return pct end

function p.extractcolor(frame) local str = frame.args[1] or '' local color = mw.ustring.match(';' .. str .. ';', '.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;') return color or 'NO MATCH' end

local function getBestStatement(item_id, property_id) if not(item_id) or not(mw.wikibase.isValidEntityId(item_id)) or not(mw.wikibase.entityExists(item_id)) then return false end local statements = mw.wikibase.getBestStatements(item_id, property_id) if not statements or #statements == 0 then return false end local hasNoValue = ( statements[1].mainsnak and statements[1].mainsnak.snaktype == 'novalue' ) if hasNoValue then return false end return statements[1] end

function p.hasOSM(frame) return getBestStatement(mw.wikibase.getEntityIdForCurrentPage, 'P402') and 'yes' or 'no' end

function p.main(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame, {parentFirst = true,	valueFunc = function (key, val)		if key == 'text_IPS' then			return nil		end		if type(val) == 'string' then			val = val:match('^%s*(.-)%s*$')			if val == '' then				return nil			else				return val			end		else			return val		end	end	}) local team_list = {} local ii = 1 while args['team'..ii] ~= nil do		team_list[args['team'..ii]] = ii		ii = ii + 1 end local max_team = ii - 1 local first_team, last_team = 1, max_team if args['showteam'] and team_list[args['showteam']] then first_team = team_list[args['showteam']] - 2 last_team = first_team + 4 if first_team < 1 then first_team = 1 last_team = first_team + 4 end if last_team > max_team then last_team = max_team first_team = max_team - 4 end if first_team < 1 then first_team = 1 end end local hasnotes = false local ii = first_team local res = '{| class="wikitable"\n' res = res .. '! Pos. !! Team !! Result\n' while args['team'..ii] ~= nil and (ii <= last_team) do res = res .. '|-\n' res = res .. '| ' .. ii .. '\n' res = res .. '| ' .. (args['name_'..args['team' .. ii]] or '') .. '\n' local text_result = args['result'..ii] and args['text_'..args['result'..ii]] or '' local style_text = '' if text_result:match('fbmulticompefn') then hasnotes = true style_text = style_text .. 'padding:0;' end style_text = style_text .. (args['result'..ii] and ('background:' .. args['col_'..args['result'..ii]]) or '') res = res .. '| style="' .. style_text .. '" | ' .. text_result .. '\n' ii = ii + 1 end res = res .. '|}'	if hasnotes == true then res = res .. 'Table notes:' .. frame:expandTemplate{ title = 'notelist'} end -- Generate tracking if not args['notracking'] then -- Step 1: Generate a team and result list for k,v in pairs(args) do			-- nothing end end

return res end

return p