Module:Show Path Items
La documentation pour ce module peut être créée à Module:Show Path Items/Documentation
local path = require "Module:Wikidata/Chemin"
local p = {}
local item_rendering_template = "WD Q"
local property_rendering_template = "WD P"
p.format_list_path_items = function(start, path_str , frame, max)
max = tonumber(max) or 10
local path_obj = path.PropertyPath:new(path_str)
local res = ""
local i = 0
if path_obj.node then
local it = path_obj:iterate(start)
for elem in it do
i = i + 1
if i > max then
break
end
local template = nil
if elem:has_an_item() then
template = item_rendering_template
elseif elem:has_a_property() then
template = property_rendering_template
end
if template then
res = res .. "* " .. frame:expandTemplate{
title = template,
args = {
[1] = elem:entity_value()
}
} .. "\n"
else
res = res .. "* " .. mw.wikibase.formatValue(elem:snak()) .. "\n"
end
end
if i == max + 1 then
res = res .. "* ...(?)"
end
else
res = res .. "parse error !!!!"
end
return res
end
function table.slice(tbl, first, last, step)
local sliced = {}
for i = first or 1, last or #tbl, step or 1 do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
p.slice = table.slice
local function count_args(table)
local nargs = 0
for num, _ in ipairs(table) do
nargs = num
end
return nargs
end
p.show_path_items = function(frame)
frame = frame:getParent()
local start = frame.args[1]
local bound
local nargs = count_args(frame.args)
if tonumber(frame.args[nargs]) then
max = tonumber(frame.args[nargs])
bound = nargs - 1
else
bound = nargs
end
local slice = table.slice(frame.args, 2, bound)
local path_str = table.concat(slice, "|")
return p.format_list_path_items(start, path_str, frame, max)
end
return p