Modul:Wikidata2/Aux
Från Järnvägsdata
Dokumentationen för denna modul kan skapas på Modul:Wikidata2/Aux/dok
p = {}
local wikidata = require('Modul:Wikidata2').formatStatementsFromLua
function p.data(frame)
local args = frame.args
if args[1] == 'ref' then
local data = wikidata({entityId = args.item, property = args.property, sortbytime = 'chronological', enbarten = 'yes', raw = 'true', avoidqualifier='P518'})
return data[1].ref
end
if args[1] == 'year' then
local data = wikidata({entityId = args.item, property = args.property, sortbytime = 'chronological', enbarten = 'yes', raw = 'true', avoidqualifier='P518', noref='true', modifyqualifiertime = 'Y'})
return data[1].datum
end
if args[1] == 'number' then
local data = wikidata({entityId = args.item, property = args.property, sortbytime = 'chronological', enbarten = 'yes', raw = 'true', avoidqualifier='P518', noref='true'})
if not data then
return nil
end
local data2 = tostring(data[1].amount)
if string.sub(data2, 1, 1) == '+' then
return string.sub(data2, 2)
else
return data2
end
end
if args[1] == 'unit' then
local data = wikidata({entityId = args.item, property = args.property, sortbytime = 'chronological', enbarten = 'yes', raw = 'true', avoidqualifier='P518', noref='true'})
if data then
return data[1].unit
else
return nil
end
end
if args[1] == 'kommun' then
local s = {}
local data = wikidata({entityId = args.item, property = args.property, noref='true', avoidqualifier='P582', getonly=args.typ, claimindex=args.index})
return data
end
if args[1] == 'bild' then
local data = wikidata({entityId = args.item, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'en'})
if data and #data > 0 then
return data[1].value
end
end
if args[1] == 'bild2' then
local data = wikidata({entityId = args.item, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'en'})
if data and #data > 1 then
return data[2].value
end
end
if args[1] == 'bildtext' then
local data = wikidata({entityId = args.item, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
if data and #data > 0 then
data = data[1]
if data then
return data.bildtext
end
end
end
if args[1] == 'bildtext2' then
local data = wikidata({entityId = args.item, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
if data and #data > 1 then
data = data[2]
if data then
return data.bildtext
end
end
end
if args[1] == 'motiv' then
local data = wikidata({entityId = args.item, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
if data and #data > 0 then
data = data[1]
if data then
return data.motiv
end
end
end
if args[1] == 'motiv2' then
local data = wikidata({entityId = args.item, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
if data and #data > 1 then
data = data[2]
if data then
return data.motiv
end
end
end
if args[1] == 'utbredningskarta' then
local data = wikidata({entityId = args.item, property = 'P181', raw = 'true', noref='true', enbarten = 'true', langpref = 'en'})
if data and #data > 0 then
return data[1].value
end
end
if args[1] == 'utbredningskartabeskrivning' then
local data = wikidata({entityId = args.item, property = 'P181', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
if data and #data > 0 then
data = data[1]
if data then
return data.bildtext
end
end
end
if args[1] == 'vapenbild' then
local data = wikidata({entityId = args.item, property = 'P94', raw = 'true', noref='true', enbarten = 'true', langpref = 'en'})
if data and #data > 0 then
return data[1].value
end
end
if args[1] == 'vapenbildbeskrivning' then
local data = wikidata({entityId = args.item, property = 'P94', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
if data and #data > 0 then
data = data[1]
if data then
return data.bildtext
end
end
end
return nil
end
p.datediff = function(frame)
local wikidata = require('Modul:Wikidata2').formatStatementsFromLua
local entityId = frame.args['entityId']
local entity = mw.wikibase.getEntityObject()
if not entityId and entity then entityId = entity.id end
if not entityId then return '' end
local date1 = frame.args['date1']
local date2 = frame.args['date2']
local prefix = frame.args['prefix'] or ''
local suffix = frame.args['suffix'] or ''
t1 = wikidata({entityId=entityId, property=date1, noref='ja', nolink='ja', rank='best'})
if date2=='nu' then
t2=os.date(">%Y-%m-%d")
else
t2 = wikidata({entityId=entityId, property=date2, noref='ja', nolink='ja', rank='best'})
end
if string.match(t1,'och') or string.match(t2, 'och') then
return '' --skip if more than one date with best rank
end
y1,m1,d1=string.match(t1,'>(%d+)-(%d+)-(%d+)')
y2,m2,d2=string.match(t2,'>(%d+)-(%d+)-(%d+)')
if not d1 or not d2 then
return '' -- skip if not both dates are full dates
end
diff = y2-y1
if m2 < m1 then diff = diff-1 end
if m2 == m1 and d2 < d1 then diff = diff - 1 end
return prefix .. diff .. suffix
end
function tablesize(T)
local n = 0
for _ in pairs(T) do n = n + 1 end
return n
end
p.property_med_land = function(frame)
local res = ''
local args = frame.args
local item = args.item or mw.wikibase.getEntityIdForCurrentPage()
if item == nil or item == '' then return nil end
local entity = mw.wikibase.getEntityObject(item)
if entity == nil then return nil end
local property = args['property'] or 'P19'
local noref = args['noref'] or 'noimport'
local labelfromnameproperty = args['labelfromnameproperty'] or 'P569'
local somevalue = args['somevalue'] or ''
if entity['claims'][property] == nil then return nil end
local claims = entity['claims'][property]
res = res .. (wikidata({entityId=item, property=property, noref=noref, labelfromnameproperty=labelfromnameproperty, somevalue=''}) or '')
local numberofclaims = tablesize(entity['claims'][property]) -- TODO: ignore possible claims with deprecated rank
if numberofclaims > 1 then return res end
if entity['claims'][property][1].mainsnak.datatype ~= 'wikibase-item' then return res end
if entity['claims'][property][1].mainsnak.snaktype == 'somevalue' then return res end
local claim = entity['claims'][property][1].mainsnak.datavalue.value.id
local claimentity = mw.wikibase.getEntityObject(claim)
if claimentity['claims'] == nil then return res end
if claimentity['claims']['P17'] == nil then return res end
-- TODO: select P17 that don't give an anachronism, for now just skip if there are more than one P17
if tablesize(claimentity['claims']['P17']) > 1 then return res end
if claimentity['claims']['P17'][1].mainsnak.datatype ~= 'wikibase-item' then return res end
if claimentity['claims']['P17'][1].mainsnak.datavalue.value.id == claim then return res end -- don't repeat if P17 is self-referencing
local result = wikidata({property='p17', noref='ja', entityId=claim})
if result then res = res .. ', ' .. result end
return res
end
return p
