Модул:Игралиште/Zenfiric/stablo
Документацију овог модула можете да направите на страници Модул:Игралиште/Zenfiric/stablo/док
require('strict')
local p = {}
local wd = require('Module:Wd')
local function renderHeadings(tbl, count)
-- First row
local row1 = tbl:tag('tr')
local sections = {"Mother", "Subject", "Father"}
for i = 1, count do
row1:tag('td')
:attr('colspan', tostring(3))
:css('text-align', 'center')
:css('border', '1px solid #aaa')
:css('background-color', '#f2f2f2')
:wikitext(sections[i])
end
end
function p.printTest(qid, n_root)
local tbl = mw.html.create('table')
:attr('cellpadding', '0')
:css('border-style', 'none')
:css('font-size', '90%')
:css('border-collapse', 'separate')
:css('border-spacing', '0')
:css('margin', '1em 2em 1em 1em')
renderHeadings(tbl, n_root)
return tostring(tbl)
end
function p.printTree(qid)
-- Source: https://en.wikipedia.org/wiki/Module:Team_bracket
local tbl = mw.html.create('table')
:attr('cellpadding', '0')
:css('border-style', 'none')
:css('font-size', '90%')
:css('border-collapse', 'separate')
:css('border-spacing', '0')
:css('margin', '1em 2em 1em 1em')
local row1 = tbl:tag('tr')
row1:tag('td')
row1:tag('td')
:attr('colspan', '4')
:css('text-align', 'center')
:css('border', '1px solid #aaa')
:css('background-color', '#f2f2f2')
:wikitext('Mother')
row1:tag('td')
row1:tag('td')
row1:tag('td')
:attr('colspan', '4')
:css('text-align', 'center')
:css('border', '1px solid #aaa')
:css('background-color', '#f2f2f2')
:wikitext('Subject')
row1:tag('td')
row1:tag('td')
row1:tag('td')
:attr('colspan', '4')
:css('text-align', 'center')
:css('border', '1px solid #aaa')
:css('background-color', '#f2f2f2')
:wikitext('Father')
row1:tag('td')
local row2 = tbl:tag('tr')
row2:tag('td')
:css('width', '1px')
row2:tag('td')
:css('width', '25px')
:wikitext(' ')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-right-width', '1px')
:wikitext(' ')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-left-width', '1px')
:css('border-bottom-width', '1px')
:wikitext(' ')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
:wikitext(' ')
row2:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
row2:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
:wikitext(' ')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
:wikitext(' ')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
:wikitext(' ')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
row2:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
row2:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-bottom-width', '1px')
:css('border-right-width', '1px')
row2:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-left-width', '1px')
local row3 = tbl:tag('tr')
row3:tag('td')
:css('width', '1px')
row3:tag('td')
:css('width', '25px')
:wikitext(' ')
row3:tag('td')
:css('width', '25px')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
:wikitext(' ')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
:wikitext(' ')
row3:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
:wikitext(' ')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
:css('border-right-width', '1px')
:wikitext(' ')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
:css('border-left-width', '1px')
:wikitext(' ')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '1px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '25px')
:css('border-style', 'solid')
:css('border-width', '0')
:css('border-top-width', '1px')
row3:tag('td')
:css('width', '25px')
row3:tag('td')
:css('width', '25px')
row3:tag('td')
:css('width', '1px')
local row4 = tbl:tag('tr')
row4:tag('td')
:attr('colspan', '6')
row4:tag('td')
:attr('rowspan', '3')
:attr('colspan', '2')
:css('text-align', 'center')
:css('background-color', '#f2f2f2')
:css('border', '1px solid #aaa')
:css('border-top-width', '1px')
:wikitext('1')
row4:tag('td')
:attr('rowspan', '2')
:attr('colspan', '4')
:css('background-color', '#f9f9f9')
:css('padding', '0 2px')
:css('border', '1px solid #aaa')
:css('border-top-width', '1px')
:wikitext(p.getLabel(qid))
row4:tag('td')
:attr('colspan', '4')
:css('background-color', '#f9f9f9')
:css('padding', '0 2px')
:css('border', '1px solid #aaa')
:css('border-top-width', '1px')
:wikitext(wd._property({"Q211827", 'P569'}) .. " -- " .. wd._property({"Q211827", 'P570'}))
row4:tag('td')
:attr('colspan', '6')
return tostring(tbl)
end
function p.wrapper(frame)
local func = frame.args[1]
local qid = frame.args[2]
if func == 'getLabel' then
return p.getLabel(qid)
elseif func == 'splitQIDs' then
local qids = p.splitQIDs(qid)
return p.outputTable(qids)
elseif func == 'getAncestors' then
local generations = frame.args[3]
return p.getAncestors(qid, generations)
elseif func == 'getOffspring' then
local generations = frame.args[3]
local offspring = p.getOffspring(qid, generations)
return p.outputTable(offspring)
elseif func == 'tree' then
return p.printTree(qid)
end
end
function p.getLabel(qid)
return wd._label({"linked", qid}) .. " (" .. wd._label({"raw", "linked", qid}) .. ")"
end
function p.splitQIDs(qidString)
local qids = {}
for qid in qidString:gmatch("Q%d+") do
table.insert(qids, qid)
end
return qids
end
function p.tree(frame)
local qid = frame.args[1]
local generations = 4
return p.getAncestors(qid, generations)
end
function p.getAncestors(qid, generations)
if generations == 0 then
return ''
end
local qid_name = wd._label({qid})
local qid_father = wd._properties({'raw', qid, 'P22'})
local qid_mother = wd._properties({'raw', qid, 'P25'})
local father_label = p.getLabel(qid_father)
local mother_label = p.getLabel(qid_mother)
local tree = p.getAncestors(qid_father, generations - 1) .. "\n"
tree = tree .. string.rep(" ", 4 - generations) .. mother_label .. " --> " .. qid_name .. " <-- " .. father_label
return tree
end
function p.getOffspring(qid)
local offspring = wd._properties({'raw', qid, 'P40'})
local offspring = p.splitQIDs(offspring)
return offspring
end
function p.outputTable(qids)
if type(qids)=='table' then
local formattedQids = "table#1 {\n"
for _, qid in ipairs(qids) do
formattedQids = formattedQids .. string.format(' "%s",\n', qid)
end
formattedQids = formattedQids .. "}"
return formattedQids
elseif type(qids)=='string' then
return 'string#1'..qids
end
end
return p