Modulo:Categoria principale

Questo è il Modulo:Categoria principale ed implementa il template {{Categoria principale}} che ricava la categoria principale di una pagina ottenendola dalla proprietà Wikidata categoria principale dell'argomento (P910).

Ad esempio la categoria principale per la voce software libero (Q341) è: Categoria:Software libero.

Uso

Se si ha intenzione di aggiungere automaticamente la categoria principale a tutte le voci che usano un certo sinottico, si può usare il {{Categoria principale}} direttamente in testa al sinottico.

Nel caso in cui tale template sinottico in questione usasse un modulo, per maggiore efficienza allora è meglio adottare questa soluzione direttamente nel modulo di tale sinottico:

local wikitestoCategoriaPrincipale = require('Modulo:Categoria principale')._main()

Documentazione

Metodi forniti dal modulo:

_main(from)
Per ottenere il wikitesto pronto da inserire in una pagina per categorizzarla (sempre se ha una categoria principale). Ritorna sempre una stringa, al massimo vuota.
_hasMainCategory(from)
Per sapere se la voce ha una categoria principale. Ritorna true o false.
_getMainCategory(from)
Per ottenere il nome della categoria senza wikitesto sotto forma di Categoria:... oppure nil se assente.

Tutti questi metodi supportano il parametro from che è opzionale. Se specificato è una funzione dispendiosa.

Pagine correlate


local p = {}

local READ = "[[Categoria:P910 letta da Wikidata]]"
local MISS = ''
local CAT  = '[[%s| ]]'

function existsInThisWiki(category)
	local expected = mw.site.namespaces[14]['name'] .. ':'
	local p = mw.title.new( category )
	local len = string.len(expected)
	return expected == string.sub(category, 0, len) and p.exists
end

local function rawValue(from)
	local entity = mw.wikibase.getEntity(from)
	if entity == nil then
		return nil
	end
	local value = entity:formatPropertyValues('P910')['value']
	return value ~= nil and value ~= '' and existsInThisWiki(value) and value or nil
end

function p._getMainCategory(from)
	return rawValue(from)
end

function p._hasMainCategory(from)
	return nil ~= p._getMainCategory(from)
end

function p._main(from)
	local cat = p._getMainCategory(from)
	return cat and string.format(CAT, cat) .. READ or MISS
end

local function getFrom(frame)
	return require('Module:Arguments').getArgs(frame, {
		wrappers = 'Template:Categoria principale'
	} ).from
end

function p.getMainCategory(frame)
	return p._getMainCategory( getFrom(frame) )
end

function p.hasMainCategory(frame)
	return p._hasMainCategory( getFrom(frame) )
end

function p.main(frame)
	return p._main( getFrom(frame) )
end

return p