Module:Tableau qualificateurs
Apparence
[voir] [modifier] [historique] [purger]
Module contenant le code de Modèle:Tableau qualificateurs.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local wikidata = require 'Module:Wikidata'
local p = {}
function sortTypeFromWikibaseType(type)
local map = {
['quantity'] = 'number',
['time'] = 'date', --TODO: check?
['url'] = 'url'
}
if map[type] ~= nil then
return map[type]
else
return nil
end
end
function propertyLabel(property, options)
local i = 0
while options[property] ~= nil and i < 10 do
property = options[property]
i = i + 1
end
if property:match('^Q%d+:P%d+$') then
local parts = mw.text.split(property, ':', true)
return propertyLabel(parts[1], options) .. ' / ' .. propertyLabel(parts[2], options)
elseif property:match('^(Q|P)%d+$') then
return mw.wikibase.label(property)
else
return property
end
end
function claimsToArray(claims_for_entity, options)
local headers = {}
local types = {}
local row_per_main_snak = {}
--Parse options in order to create columns
local newCol = 1
for i, property in pairs(options) do
if type(i) == 'number' then
property = propertyLabel(property, options)
headers[property] = newCol
newCol = newCol + 1
end
end
--Converts claims
for entity,claims in pairs(claims_for_entity) do
for _, claim in pairs(claims) do
property = propertyLabel(claim.mainsnak.property, options)
main_snak = wikidata.formatSnak(claim.mainsnak, {})
if row_per_main_snak[main_snak] == nil then
row_per_main_snak[main_snak] = {}
end
if headers[property] ~= nil then
types[property] = sortTypeFromWikibaseType(claim.mainsnak.datatype)
row_per_main_snak[main_snak][headers[property]] = main_snak
end
if claim.qualifiers ~= nil then
for _, qs in pairs(claim.qualifiers) do
for _, qualifier in pairs(qs) do
--Hacky lookup to find the right property
property = propertyLabel(entity .. ':' .. qualifier.property, options)
if headers[property] == nil then
property = propertyLabel(qualifier.property, options)
end
if headers[property] ~= nil then
types[property] = sortTypeFromWikibaseType(qualifier.datatype)
if row_per_main_snak[main_snak][headers[property]] ~= nil then
row_per_main_snak[main_snak][headers[property]] = row_per_main_snak[main_snak][headers[property]] .. '<br />' .. wikidata.formatSnak(qualifier, {})
else
row_per_main_snak[main_snak][headers[property]] = wikidata.formatSnak(qualifier, {})
end
end
end
end
end
end
end
--Builds final rows
local rows = {{}}
for property, i in pairs(headers) do
if types[property] ~= nil then
rows[1][i] = ' data-sort-type="' .. types[property] .. '" | ' .. property
else
rows[1][i] = property
end
end
local i = 2
for _,row in pairs(row_per_main_snak) do
rows[i + 1] = row
i = i + 1
end
return rows
end
function formatArray(rows)
local str = '{| class="wikitable sortable"'
for i,row in pairs(rows) do
str = str .. '\n|-'
for j,_ in pairs(rows[1]) do
if row[j] == nil then
str = str .. '\n|'
else
if i == 1 or j == 1 then
str = str .. '\n!'
else
str = str .. '\n|'
end
str = str .. ' ' .. row[j]
end
end
end
return str .. '\n|}\n'
end
function p.tableau(frame)
local args = frame:getParent().args
if args['entity'] == nil then
return ''
end
--Retrieves claims for each entity provided
local claims_for_entity = {}
for _,entity in pairs(mw.text.split(args['entity'], '%s')) do
if entity ~= '' then
args['entity'] = entity
claims_for_entity[entity] = wikidata.getClaims(args)
end
end
local rows = claimsToArray(claims_for_entity, args)
return formatArray(rows)
end
return p