Modul:WikidataClassHierarchy
Aspect

Modulul facilitează afișarea unei ierarhii de clase de la Wikidata, definite prin legarea unor itemuri multiple cu ajutorul proprietății subclasă a (P279)
Funcții
Funcții ce pot fi apelate din alte module:
- getClassIdsList returnează o listă a tuturor ID-urilor de Wikidata, cu argumentele:
- qid - id-ul de Wikidata de la care se pornește (poate fi nil, caz în care se pornește de la ID-ul itemului paginii curente)
- limitqid - id-ul de Wikidata până la care se merge (poate fi nil, caz în care se merge până când nu mai este specificată nicio valoare pentru subclasă a (P279))
- fromArgs care returnează text afișabil; în plus față de argumentele funcției de mai sus, această funcție primește în plus parametrul:
- styling - exprimă cum să se afișeze elementele în pagină: br - listă separată de elementul html line-break (<br/>); listă - listă HTML simplă; listă-ierarhică - liste imbricate cu câte un singur element
- fromArray care face ca și fromArgs, doar că primește tabelul de argumente apelabil din format
Funcție ce se apelează din pagini, prin invocare:
- fromFrame - vezi Format:Ierarhie de clase de la Wikidata/doc.
local p = {}
local Wikidata = require('Modul:Wikidata')
local getArgs = require('Modul:Arguments').getArgs
local illWd = require('Modul:Ill-wd').fromArgs
function p.getClassIdsList(qid, limitQid)
local crtQid = qid or mw.wikibase.getEntityIdForCurrentPage()
local entities = {}
while (crtQid and crtQid ~= limitQid) do
table.insert(entities, crtQid)
local subclassOfClaims = Wikidata.findBestClaimsForProperty(crtQid, 'P279')
if not subclassOfClaims or #subclassOfClaims == 0 then
crtQid = nil
else
for _,eachClaim in ipairs(subclassOfClaims) do
if eachClaim.type == 'statement' and eachClaim.mainsnak and eachClaim.mainsnak.snaktype == 'value' then
crtQid = eachClaim.mainsnak.datavalue.value.id
break
end
end
end
end
return entities
end
function p.fromArgs(qid, limitqid, styling)
local classes = p.getClassIdsList(qid, limitqid)
local classesLinks = {}
local classIdx = #classes
while classIdx > 0 do
table.insert(classesLinks, illWd(classes[classIdx]))
classIdx = classIdx - 1
end
if #classesLinks == 0 then return '' end
if styling == 'br' then
return table.concat(classesLinks, tostring(mw.html.create('br')))
elseif styling == 'listă-ierarhică' then
local topElement = mw.html.create('ul'):css('line-height', '100%'):css('margin-left', '15px'):tag('li')
topElement:wikitext(classesLinks[1])
local crtElement = topElement
for classLinkIdx=2,#classesLinks do
crtElement = crtElement:tag('ul'):css('line-height', '100%'):css('margin-left', '5px')
:tag('li')
crtElement:wikitext(classesLinks[classLinkIdx])
end
return tostring(topElement)
elseif styling == 'listă' then
local listElement = mw.html.create('ul')
for _,eachClass in ipairs(classesLinks) do
listElement:tag('li'):wikitext(eachClass)
end
return tostring(listElement)
end
end
function p.fromArray(args)
return p.fromArgs(args.qid, args['id_limită'] or args.limitqid, args.styling or args.stil)
end
function p.fromFrame(frame)
local args = getArgs(frame)
return p.fromArray(args)
end
return p;