Modul:Sandlådan/GunnarLarsson/test2
Dokumentationen för denna modul kan skapas på Modul:Sandlådan/GunnarLarsson/test2/dok
local p = {}
local wd = require( 'Modul:Wikidata2' )
p.helloworld = function(frame)
return "Hello world!"
end
p.resultat = function(frame)
sap=mw.wikibase.getEntity( 'Q3486827')
iRefcounter=0
local d={}
local t={}
local claims = sortbyqualifier( sap:getBestStatements( 'P1344' ), { ['sortbytime'] = 'inverted',['sortingproperty'] ='P580',['modifytime']='Y'} )
local all={}
for key, value in pairs( claims ) do
local id = value['mainsnak']['datavalue']['value']['id']
local tmp={}
txtLeague,txtDate,txtSeason=sasongsinfo_local(id)
tmp.txtLeague=txtLeague
tmp.txtDate=txtDate
tmp.txtSeason=txtSeason
if value['qualifiers']['P1352'] then
local placering=mw.wikibase.renderSnak( value['qualifiers']['P1352'][1] )
tmp.placering='(' ..placering .. ')'
else
tmp.placering=''
end
refparts=getReference(value['references'][1])
if refparts then
iRefcounter=iRefcounter+1
bNotInTable=true
iIdInTable=k
if d[refparts]~=nil then
bNotInTable=false
result = frame:extensionTag("ref", refparts,{ name = 'wikidata'..d[refparts] })
else
result = frame:extensionTag("ref", refparts,{ name = 'wikidata'..iRefcounter })
d[refparts]=iRefcounter
end
tmp.result=result
else
tmp.result=''
end
table.insert(all,tmp)
end
table.sort(all, function(a, b) return a.txtDate > b.txtDate end)
txt='<table class="wikitable sortable"><tr><th>Liga</th><th>Säsong</th><th>Resultat</th><th>Referens</th></tr>'
txtOldLeague=''
for i = 1,#all do
txt=txt .. "<tr>"
if (all[i].txtLeague==txtOldLeague) then
txt=txt .. '<td></td>'
else
txt=txt .. '<td>' .. all[i].txtLeague .. '</td>'
end
txtOldLeague=all[i].txtLeague
txt=txt .. "<td>" .. all[i].txtSeason .. '</td>'
txt = txt .. '<td>' ..all[i].placering .. '</td>'
txt=txt.. '<td>' .. all[i].result .. '</td>'
txt=txt .. '</tr>'
end
txt=txt .. '</table>'
-- txt=txt..tprint(all)
return txt
end
sasongsinfo_local= function(txtId)
nla2021=mw.wikibase.getEntity(txtId)
local formatedLeague= nla2021:formatPropertyValues( 'P3450' )
local claimsLiga = nla2021:getAllStatements( 'P3450' )
idSerie=claimsLiga[1]['mainsnak']['datavalue']['value']['id']
nla=mw.wikibase.getEntity(idSerie):getSitelink( 'svwiki' )
local txtLeague = '[[' .. nla .. '|' .. formatedLeague['value'] .. ']]'
local formatedStartYear= nla2021:formatPropertyValues( 'P580' )
local formatedEndYear= nla2021:formatPropertyValues( 'P582' )
txtDate=nla2021:getAllStatements( 'P580' )[1].mainsnak.datavalue.value.time
txtYearFrom=string.sub(nla2021:getAllStatements( 'P580' )[1].mainsnak.datavalue.value.time,2,5)
txtYearTo=string.sub(nla2021:getAllStatements( 'P582' )[1].mainsnak.datavalue.value.time,2,5)
txtSitelink = nla2021:getSitelink( 'svwiki' )
if (txtSitelink==nil) then
txtLink=nla2021:getLabel('sv')
else
txtLink=txtSitelink
end
txtSeason=' [[' .. txtLink .. '|' .. txtYearFrom .. ' - ' .. txtYearTo .. ']]'
return txtLeague,txtDate,txtSeason
end
-- the "qualifiers" and "snaks" field have a respective "qualifiers-order" and "snaks-order" field
-- use these as the second parameter and this function instead of the built-in "pairs" function
-- to iterate over all qualifiers and snaks in the intended order.
local function orderedpairs(array, order)
if not order then return pairs(array) end
-- return iterator function
local i = 0
return function()
i = i + 1
if order[i] then
return order[i], array[order[i]]
end
end
end
local function getSnakValue(snak, parameter)
if snak.snaktype == "value" then
-- call the respective snak parser
if snak.datavalue.type == "string" then return snak.datavalue.value
elseif snak.datavalue.type == "globecoordinate" then return printDatavalueCoordinate(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "quantity" then return printDatavalueQuantity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "time" then return printDatavalueTime(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "wikibase-entityid" then return printDatavalueEntity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "monolingualtext" then return printDatavalueMonolingualText(snak.datavalue.value, parameter)
end
end
return mw.wikibase.renderSnak(snak)
end
getReference=function(thisref)
local refparts=thisref.snaks
-- table.sort(refparts, function(a, b) return a.txtDate > b.txtDate end)
table.sort(refparts)
txt='{{webbref'
for key, value in orderedPairs( refparts) do
if (key=='P123') then
iPublisher=value[1].datavalue.value.id
txt=txt .. '|utgivare=[[' .. getLabelByEntity( iPublisher ) .. ']]'
end
if (key=='P813') then
txt = txt .. '|hämtdatum='.. string.sub(value[1].datavalue.value.time,2,11)
end
if (key=='P854') then
txt = txt .. '|url='.. value[1].datavalue.value
end
if (key=='P1476') then
txt = txt .. '|språk='.. value[1].datavalue.value.language
-- txt = txt .. '|språk='.. regexEscape(value[1].datavalue.value.language,"|"," ")
txt = txt .. '|titel='.. string.gsub(value[1].datavalue.value.text,"|"," - ")
end
end
txt=txt .. '}}'
-- return txt
return txt
-- for snakkey, snakval in orderedpairs(thisref.snaks or {}, thisref["snaks-order"]) do
-- if refparts then refparts = refparts .. ", " else refparts = "" end
-- -- output the label of the property of the reference part, e.g. "imported from" for P143
-- refparts = refparts .. tostring(mw.wikibase.getLabel(snakkey)) .. ": "
-- -- output all values of this reference part, e.g. "German Wikipedia" and "English Wikipedia" if the referenced claim was imported from both sites
-- for snakidx = 1, #snakval do
-- if snakidx > 1 then refparts = refparts .. ", " end
-- refparts = refparts .. getSnakValue(snakval[snakidx])
-- end
-- end
-- return refparts
end
p.sasongsinfo= function(frame)
txt= tprint(frame)
local out = {}
nla2021=mw.wikibase.getEntity('Q110474763')
local tmp=nla2021:getLabel('sv')
local formatedLeague= nla2021:formatPropertyValues( 'P3450' )
local claimsLiga = nla2021:getAllStatements( 'P3450' )
idSerie=claimsLiga[1]['mainsnak']['datavalue']['value']['id']
nla=mw.wikibase.getEntity(idSerie):getSitelink( 'svwiki' )
txt = txt .. '[[' .. nla .. '|' .. formatedLeague['value'] .. ']]'
local formatedStartYear= nla2021:formatPropertyValues( 'P580' )
local formatedEndYear= nla2021:formatPropertyValues( 'P582' )
txtSitelink = nla2021:getSitelink( 'svwiki' )
if (txtSitelink==nil) then
txt = txt ..' [[' .. formatedStartYear['value'] .. ' - ' .. formatedEndYear['value'] .. ']]'
else
txt = txt ..' [[' .. txtSitelink .. '|' .. formatedStartYear['value'] .. ' - ' .. formatedEndYear['value'] .. ']]'
end
return txt
end
function isClub( id )
local isClub = false
for key, value in pairs( mw.wikibase.getEntity( id ):getBestStatements( 'P3450' ) ) do
if value['mainsnak']['datavalue']['value']['id'] == 'Q15720476' then
isClub = true
end
end
return isClub
end
function getLabelByEntity( id )
return mw.wikibase.getEntity( id ):getLabel( 'sv' )
end
-- Funktion från https://stackoverflow.com/questions/41942289/display-contents-of-tables-in-lua
function tprint (tbl, indent)
if not indent then indent = 0 end
local toprint = string.rep(" ", indent) .. "{\r\n"
indent = indent + 2
for k, v in pairs(tbl) do
toprint = toprint .. string.rep(" ", indent)
if (type(k) == "number") then
toprint = toprint .. "[" .. k .. "] = "
elseif (type(k) == "string") then
toprint = toprint .. k .. "= "
end
if (type(v) == "number") then
toprint = toprint .. v .. ",\r\n"
elseif (type(v) == "string") then
toprint = toprint .. "\"" .. v .. "\",\r\n"
elseif (type(v) == "table") then
toprint = toprint .. tprint(v, indent + 2) .. ",\r\n"
else
toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n"
end
end
toprint = toprint .. string.rep(" ", indent-2) .. "}"
return toprint
end
function __genOrderedIndex( t )
local orderedIndex = {}
for key in pairs(t) do
table.insert( orderedIndex, key )
end
table.sort( orderedIndex )
return orderedIndex
end
function orderedNext(t, state)
-- Equivalent of the next function, but returns the keys in the alphabetic
-- order. We use a temporary ordered key table that is stored in the
-- table being iterated.
local key = nil
--print("orderedNext: state = "..tostring(state) )
if state == nil then
-- the first time, generate the index
t.__orderedIndex = __genOrderedIndex( t )
key = t.__orderedIndex[1]
else
-- fetch the next value
for i = 1,table.getn(t.__orderedIndex) do
if t.__orderedIndex[i] == state then
key = t.__orderedIndex[i+1]
end
end
end
if key then
return key, t[key]
end
-- no more value to return, cleanup
t.__orderedIndex = nil
return
end
function orderedPairs(t)
-- Equivalent of the pairs() function on tables. Allows to iterate
-- in order
return orderedNext, t, nil
end
return p