Modul:SignatureList
Utseende
SignatureList er et bibliotek for å hente ut en liste av signaturer for refererte elementer. Signaturen til et element er identifikatoren, etiketten og beskrivelsen. I tillegg tas med nettstedlenker for elementet.
Dataene hentes ut ved hjelp av de spesifikke metodene, dermed unngår en spørringer etter hele entiteten, og (gitt at dokumentasjonen er riktig) så unngår en å trekke på lastbudsjettet. Det gjør at en tabell på mer enn 500 elementer kan bygges opp.
Bruk
[rediger kilde]Det angis i kallet hvilken egenskap som skal benyttes
-- Example 1
local lib1 = require 'Module:SignatureList'
local data1 = lib1:parts('P527')
-- Example 2
local lib2 = require 'Module:SignatureList'
local data2,indexes2 = lib1('P527')
-- Example 3
local data3,indexes3 = require 'Module:SignatureList'('P527')
De to første eksemplene viser lasting av biblioteket, og separat innhenting av datasettet. I det andre settet blir oppføringene sortert. I det tredje eksempelet blir biblioteket lastet og datasettet hentet inn via chaining.
local lib = {}
function exist( a, b )
if not(a) then
return true
end
if b == '' or type(b) == 'nil' then
return false
end
return true
end
function getLabel( id, languageCode )
local label = nil
if languageCode then
label = mw.wikibase.getLabelByLang( id, languageCode)
else
label = mw.wikibase.getLabel( id )
end
return label or ''
end
function getDescription( id, languageCode )
local description = nil
if languageCode then
description = mw.wikibase.getDescriptionByLang( id, languageCode)
else
description = mw.wikibase.getDescription( id )
end
return description
end
function lib:parts( entityId, propertyId, languageCode, mustHaveLabel, mustHaveDescription, mustHaveSitelink )
local parts = {}
local statements = {}
if entityId then
statements = mw.wikibase.getBestStatements( entityId, propertyId )
end
mustHaveLabel = type( mustHaveLabel ) == 'boolean' and mustHaveLabel or false
mustHaveDescription = type( mustHaveDescription ) == 'boolean' and mustHaveDescription or false
mustHaveSitelink = type( mustHaveSitelink ) == 'boolean' and mustHaveSitelink or false
for i,claim in ipairs( statements ) do
local mainsnak = claim.mainsnak
if mainsnak.snaktype == 'value' and mainsnak.datatype == 'wikibase-item' then
local datavalue = mainsnak.datavalue
if datavalue.type == 'wikibase-entityid' then
local value = datavalue.value
if value['entity-type'] == 'item' then
local id = value.id
local sitelink = mw.wikibase.getSitelink( id )
local label = getLabel( id, languageCode )
local description = getDescription( id, languageCode )
if exist( mustHaveLabel, label )
and exist( mustHaveDescription, description )
and exist( mustHaveSitelink, sitelink ) then
table.insert( parts, { id, label, description, sitelink } )
end
end
end
end
end
return parts
end
setmetatable( lib, {
__call = function( self, entityId, propertyId, languageCode, mustHaveLabel, mustHaveDescription, mustHaveSitelink )
entityId = entityId or mw.wikibase.getEntityIdForCurrentPage()
local parts = self:parts( entityId, propertyId, nil, nil, nil, nil )
table.sort( parts, function( a, b ) return mw.ustring.upper( a[2] ) < mw.ustring.upper( b[2] ) end)
local indexes = {}
for i,part in ipairs( parts ) do
indexes[part[1]] = i
end
return parts, indexes
end })
return lib