Module:Dataframe
Barack Obama (Q76) edit
Barack Obama (Kapiolani Medical Center for Women and Children, 4 August 1961 – ) is a American, Americans and Kenyan politician, lawyer, political writer, community organizer, statesperson, jurist, podcaster, academic, memoirist.
Biography edit
Barack Obama was born 4 August 1961 in Kapiolani Medical Center for Women and Children. they is the child of is the 4 August 1961 and Kapiolani Medical Center for Women and Children.
Jean-François Champollion (Q260) edit
Jean-François Champollion (Figeac, 23 December 1790 – Paris, 4 March 1832) is a French egyptologist.
Biography edit
Jean-François Champollion was born 23 December 1790 in Figeac. they is the child of is the 23 December 1790 and Figeac.
Code
-- Utility functions
function getBestStatementsValueStatements( item, property1, property2 )
local values = {}
for _,typeStatement in pairs(item:getBestStatements(property1)) do
if typeStatement.mainsnak.datavalue ~= nil then
local valueItemId = typeStatement.mainsnak.datavalue.value.id
local valueItem = mw.wikibase.getEntity(valueItemId)
if valueItem ~= nil then
for _,value in pairs(valueItem:getBestStatements(property2)) do
if value.mainsnak.datavalue ~= nil then
if value.mainsnak.datavalue.type ~= 'monolingualtext' or
value.mainsnak.datavalue.value.language == mw.getContentLanguage():getCode() then
value = mw.wikibase.formatValue(value.mainsnak)
if value ~= '' then
table.insert(values, value)
end
end
end
end
end
end
end
return mw.text.listToText(values)
end
local genderMapping = {
Q6581097 = 'male',
Q6581072 = 'female',
Q1052281 = 'female',
Q2449503 = 'male'
}
function getGender( item )
for _,genderStatement in pairs(item:getBestStatements('P21')) do
if genderStatement.mainsnak.datavalue ~= nil then
local valueItemId = genderStatement.mainsnak.datavalue.value.id
if genderMapping[valueItemId] ~= nil then
return genderMapping[valueItemId]
end
end
end
return ''
end
-- Frame definitions
local framesDefinitions = {
['person.intro'] = {
en = '{{{subject}}} ({{{birthPlace}}}, {{{birthDate}}} – {{#if:{{{deathPlace|}}}{{{deathDate}}}| {{{deathPlace}}}, {{{deathDate}}}|}}) is a {{{demonym}}} {{{occupation}}}.',
fr = '{{{subject}}} ({{{birthPlace}}}, {{{birthDate}}} – {{#if:{{{deathPlace|}}}{{{deathDate}}}| {{{deathPlace}}}, {{{deathDate}}}|}}) est un {{{occupation}}} {{{demonym}}}.',
he = '{{{subject}}} ({{{birthPlace}}}, {{{birthDate}}} – {{#if:{{{deathPlace|}}}{{{deathDate}}}| {{{deathPlace}}}, {{{deathDate}}}|}}) {{GENDER:{{{gender}}}|הוא|היא}} {{{occupation}}} {{{demonym}}}.'
},
['person.bio.header'] = {
en = '== Biography ==',
fr = '== Biographie ==',
he = '== קורות חיים =='
},
['person.bio.birth'] = {
en = '{{{subject}}} was born {{{birthDate}}} in {{{birthPlace}}}.',
fr = '{{{subject}}} est né le {{{birthDate}}} à {{{birthDate}}}.',
he = '{{{subject}}} {{GENDER:{{{gender}}}|נולד|נולדה}} ב־{{{birthDate}}} ב{{{birthPlace}}}.'
},
['person.bio.parents'] = {
en = '{{GENDER:{{{gender}}}|he is the son|she is the daughter|they is the child}} of is the {{{father}}} and {{{mother}}}.',
en = '{{GENDER:{{{gender}}}|he is the son|she is the daughter|they is the child}} of is the {{{father}}} and {{{mother}}}.',
he = '{{GENDER:{{{gender}}}|הוא הבן|היא הבת}} של {{{father}}} ושל {{{mother}}}.'
}
}
local templatesDefinitions = {
['Q5'] = {
{
type = 'person.intro',
subject = function(item) return item:getLabel() end,
birthDate = function(item) return item:formatStatements('P569').value end,
birthPlace = function(item) return item:formatStatements('P19').value end,
deathDate = function(item) return item:formatStatements('P570').value end,
deathPlace = function(item) return item:formatStatements('P20').value end,
occupation = function(item) return item:formatStatements('P106').value end,
demonym = function(item) return getBestStatementsValueStatements(item, 'P27', 'P1549') end,
},
{
type = 'person.bio.header'
},
{
type = 'person.bio.birth',
subject = function(item) return item:getLabel() end,
birthDate = function(item) return item:formatStatements('P569').value end,
birthPlace = function(item) return item:formatStatements('P19').value end,
},
{
type = 'person.bio.parents',
gender = function(item) return getGender(item) end,
father = function(item) return item:formatStatements('P569').value end,
mother = function(item) return item:formatStatements('P19').value end,
},
}
}
function renderFrames(frames)
local mwFrame = mw.getCurrentFrame()
local language = mw.getContentLanguage():getCode()
local wikitext = ''
for _, frame in pairs(frames) do
local childFrame = mwFrame:newChild{ args = frame }
if framesDefinitions[frame['type']] ~= nil and framesDefinitions[frame['type']][language] ~= nil then
wikitext = wikitext .. childFrame:preprocess(framesDefinitions[frame['type']][language]) .. '\n'
end
end
return wikitext
end
function fillTemplate(template, item)
local frames = {}
for pos, frameTemplate in pairs(template) do
frames[pos] = {}
for k,v in pairs(frameTemplate) do
if type(v) == 'function' then
frames[pos][k] = v(item)
else
frames[pos][k] = v
end
end
end
return frames
end
local p = {}
function p.render(frame)
local itemId = frame.args['item'] or mw.wikibase.getEntityIdForCurrentPage()
item = mw.wikibase.getEntity(itemId)
if item == nil then
return 'Not found'
end
for _,typeStatement in pairs(item:getBestStatements('P31')) do
itemType = typeStatement.mainsnak.datavalue.value.id
if templatesDefinitions[itemType] ~= nil then
return renderFrames(fillTemplate(templatesDefinitions[itemType], item))
end
end
end
return p