Module:Sandbox/Frietjes

local p = {}

local math_module = require("Module:Math")

local function rnd(num, digits)

-- This function implements {{rnd}}

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

  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