Modulo:Wikidata: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
aggiunto parametro from, uniforme con #property, per l'utilizzo dell'accesso arbitrario
aggiunto formatting=raw per type wikibase-entityid e funzione indexOf
Riga 1:
--[[
* Modulo per implementare le funzionalità dei template:
* {{Wikidata}}, {{WikidataQ}}, {{WikidataIdx}} e {{WikidataN}}.
* Permette di accedere a Wikidata in modo più avanzato rispetto a {{#property}}.
 
Riga 16 ⟶ 17:
["property-param-not-provided"] = "Parametro ''property'' non fornito.",
["qualifier-param-not-provided"] = "Parametro ''qualifier'' non fornito.",
["value-param-not-provided"] = "Parametro ''valore'' da ricercare non fornito.",
["entity-not-found"] = "Entità non trovata.",
["unknown-claim-type"] = "Tipo asserzione sconosciuta.",
Riga 34 ⟶ 36:
end
 
local function formatEntityId(entityId, options, formatting)
if formatting == 'raw' then
return entityId
end
 
local label = mw.wikibase.label(entityId)
local link = mw.wikibase.sitelink(entityId)
Riga 101 ⟶ 99:
end
 
local function formatDatavalue(datavalue, options, formatting)
local ret
 
--Default formatters
if datavalue.type == 'wikibase-entityid' then
if options.formatting == 'raw' then
ret = formatEntityId(getEntityIdFromValue(datavalue.value), options, formatting)
ret = getEntityIdFromValue(datavalue.value)
else
ret = formatEntityId(getEntityIdFromValue(datavalue.value), options, formatting)
end
elseif datavalue.type == 'string' then
ret = datavalue.value
Riga 124 ⟶ 126:
end
 
local function formatSnak(snak, options, formatting)
if snak.snaktype == 'somevalue' then
return i18n['somevalue']
Riga 130 ⟶ 132:
return i18n['novalue']
elseif snak.snaktype == 'value' then
return formatDatavalue(snak.datavalue, options, formatting)
else
return formatError('unknown-snak-type')
Riga 179 ⟶ 181:
-- Ritorna true se lo statement contiene il qualifier richiesto con un dato valore
local function hasQualifierValue(statement, options)
local formatting = options.formatting
local ret = false
options.formatting = 'raw'
for i, qualifier in pairs(statement.qualifiers[options.qualifier]) do
if formatSnak(qualifier, options, 'raw') == options.qualifiervalue then
ret = true
break
end
end
options.formatting = formatting
return ret
end
Riga 327 ⟶ 332:
end
 
-- get qualifier name
if not args.qualifier then
return formatError('qualifier-param-not-provided')
Riga 353 ⟶ 357:
 
return mw.text.listToText(formattedQualifiers, args.separator, args.conjunction)
end
 
function p._indexOf(args)
local ret, claims
 
-- parametri posizionali
args.property = args[1] and string.upper(args[1]) or nil
args.value = args[2]
 
if not args.value then
return formatError('value-param-not-provided')
end
 
-- get claims
ret, claims = pcall(getClaims, args)
if not ret then
return claims:match('.+%d:%s(.+)$')
end
 
ret = nil
args.formatting = 'raw'
for i, claim in pairs(claims) do
if formatStatement(claim, args) == args.value then
ret = i
end
end
 
return ret or -1
end
 
Riga 373 ⟶ 405:
end
 
-- Entry-point per {{#invoke:Wikidata|getProperty}}
function p.getProperty(frame)
-- Per riabilitare eventualmente la chiamata al modulo diretta,
-- pur usando sempre solo getParent per il template, sostituire con:
-- getArgs(frame, {wrappers = 'Template:Wikidata'})
return p._getProperty(getArgs(frame, {parentOnly = true}))
end
 
-- Entry-point per {{#invoke:Wikidata|getQualifierWikidataQ}}
function p.getQualifier(frame)
return p._getQualifier(getArgs(frame, {parentOnly = true}))
end
 
-- Entry-point per {{#invoke:Wikidata|NWikidataIdx}}
function p.indexOf(frame)
return p._indexOf(getArgs(frame, {parentOnly = true}))
end
 
-- Entry-point per {{WikidataN}}
function p.N(frame)
return p._N(getArgs(frame, {parentOnly = true}))