Questa pagina è semiprotetta. Può essere modificata solo da utenti registrati

Modulo:Sito ufficiale: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
di default i parametri in funzione del titolo del template
m modulo no globals obsoleto
 
(9 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
--[[
--[[
* Modulo che implementa il template {{Sito ufficiale}} ed altri template molto simili
* Modulo che implementa il template Sito ufficiale.
]]
]]--
require('Modulo:No globals')
require('strict')


local mWikidata = require('Modulo:Wikidata')
local mWikidata = require('Modulo:Wikidata')
local mEditAtWikidata = require('Modulo:Modifica su Wikidata').showMessage
local mEditAtWikidata = require('Modulo:Modifica su Wikidata')

-- Titolo predefinito per il {{Cita web}}
local defaultTitle = 'Sito ufficiale'

-- Categoria adattata. ↓ Valore identico al {{Controllo Wikidata}}
local wdCategory = '[[Categoria:%s letto da Wikidata]]'

-- Categoria adattata. ↓ Titolo del template corrente
local errorCategory = '[[Categoria:Voci con template %s e senza dati da recuperare da Wikidata]]'

-- Quanti byte occupa la parola "Template:" + 1
local STRIP_BYTES = 10

local p = {}
local p = {}


local function formatWebsite(website, titolo)
local function formatWebsite(website, title)
return mw.getCurrentFrame():expandTemplate {
return mw.getCurrentFrame():expandTemplate {
title = 'Cita web',
title = 'Cita web',
args = {
args = {
url = website.url,
url = website.url,
titolo = titolo,
titolo = title,
lingua = table.concat(website.langs, ' ')
lingua = table.concat(website.langs, ',')
}
}
}
}
end
end


local function getWebsites(pid)
--[[
* @param int pid Wikidata Property ID
]]
local function getWebsites(pid, from)
local claims
local claims
local websites = {}
local websites = {}


claims = mWikidata._getClaims(pid, {from = from}) or {}
claims = mWikidata._getClaims(pid) or {}
for idx, claim in ipairs(claims) do
for idx, claim in ipairs(claims) do
local langs = mWikidata._formatQualifiers(claim, 'P407', { formatting = 'raw' }, true)
local langs = mWikidata._formatQualifiers(claim, 'P407', { formatting = 'raw' }, true)
Riga 56: Riga 40:
end
end


-- Funzione per il template
--[[
* Entry-point per il template {{Sito ufficiale}}
]]
function p.main(frame)
function p.main(frame)
local parent = frame:getParent()
local websites = getWebsites(frame.args.pid or 'P856')

-- Proprietà generica (è letta da mEditAtWikidata):
frame.args.pid = frame.args and frame.args.pid or 'P856'

-- Elemento Wikidata generico (sempre nil, usato solo nel /man) (è letto da mEditAtWikidata):
frame.args.qid = parent and parent.args and parent.args.qid

--[[
* Titolo del template padre.
*
* Un giorno un hacker verrà e si chiederà:
* «Non sarebbe meglio fruire della funzione dispendiosa "mw.title" per la creazione di un "title object"
* avvantaggiandosi della proprietà "text" equipollente ad un titolo senza namespace?»
*
* Quando questo capiterà, dategli una carezza, allontanatevi con garbo e lasciatelo solo insieme ad un estintore.
]]
local template_title = string.sub(parent:getTitle(), STRIP_BYTES)

-- Titolo per il cita web
local title = frame.args and frame.args.title or template_title

-- Categoria adattata al titolo del template padre
errorCategory = string.format(errorCategory, template_title)

-- Categoria adattata per essere identica a quella del Template:Controllo Wikidata
wdCategory = string.format(wdCategory, frame.args.catpart or template_title)

local websites = getWebsites(frame.args.pid, frame.args.qid)
for idx, website in ipairs(websites) do
for idx, website in ipairs(websites) do
-- P856 è di tipo "valore singolo", aggiunge l'elenco puntato solo per le eccezioni
-- le proprietà utilizzate sono di tipo "valore singolo", aggiunge l'elenco puntato solo per le eccezioni
websites[idx] = (idx > 1 and '*' or '') .. formatWebsite(website, title) .. mEditAtWikidata(frame)
websites[idx] = (idx > 1 and '*' or '') ..
formatWebsite(website, frame.args.title or 'Sito ufficiale') ..
mEditAtWikidata._showMessage({ pid = frame.args.pid or 'P856' })
end
end
return #websites > 0 and
return #websites > 0 and table.concat(websites, '\n') or ''
(table.concat(websites, '\n') .. wdCategory) or
(mw.title.getCurrentTitle().namespace == 0 and errorCategory or nil)
end
end



Versione attuale delle 20:24, 22 ott 2022

Modulo che implementa il template {{Sito ufficiale}} (verifica).

Uso

Il modulo non va utilizzato direttamente, ma per implementare un template per i collegamenti esterni che debba ottenere il collegamento esterno esclusivamente da una proprietà Wikidata di tipo URL e di tipo "valore singolo". Possono esserci eccezioni che sono gestite automaticamente dal template visualizzando una lista. Se su Wikidata è stato utilizzato il qualificatore lingua dell'opera o del nome (P407) sarà anche indicata la lingua del sito web. Se il qualificatore ha più valori verrà visualizzata ciascuna lingua.

{{#invoke:Sito ufficiale|main|pid=|title=}}
  • pid: identificativo della proprietà Wikidata, il valore di default è "P856"
  • title: titolo del {{Cita web}}, il valore di default è "Sito ufficiale"

--[[
* Modulo che implementa il template Sito ufficiale.
]]--
 
require('strict')

local mWikidata = require('Modulo:Wikidata')
local mEditAtWikidata = require('Modulo:Modifica su Wikidata')
local p = {}

local function formatWebsite(website, title)
	return mw.getCurrentFrame():expandTemplate {
		title = 'Cita web',
		args = {
			url = website.url,
			titolo = title,
			lingua = table.concat(website.langs, ',')
		}
	}
end

local function getWebsites(pid)
	local claims
	local websites = {}

	claims = mWikidata._getClaims(pid) or {}
	for idx, claim in ipairs(claims) do
		local langs = mWikidata._formatQualifiers(claim, 'P407', { formatting = 'raw' }, true)
		langs = (#langs == 1 and langs[1] == 'Q652') and {} or langs
		for i, lang in ipairs(langs) do
			langs[i] = mWikidata._getLabel({ lang })
		end
		websites[idx] = {
			url = mWikidata._formatStatement(claim),
			langs = langs
		}
	end

	return websites
end

-- Funzione per il template
function p.main(frame)
	local websites = getWebsites(frame.args.pid or 'P856')
	for idx, website in ipairs(websites) do
		-- le proprietà utilizzate sono di tipo "valore singolo", aggiunge l'elenco puntato solo per le eccezioni
		websites[idx] = (idx > 1 and '*' or '') ..
						formatWebsite(website, frame.args.title or 'Sito ufficiale') ..
						mEditAtWikidata._showMessage({ pid = frame.args.pid or 'P856' })
	end
	return #websites > 0 and table.concat(websites, '\n') or ''
end

return p