梦到和死人说话是什么意思| 地米是什么药| 什么鱼嘌呤含量低| 嗷呜是什么意思| 拉直和软化有什么区别| 避孕环是什么样子图片| 睚眦什么意思| 卒中患者什么意思| 锅贴是什么| 凝望什么| 尿蛋白质阳性是什么意思| 黄瓜籽有什么功效| 1997年是什么生肖| hyq什么意思| 梦见死人复活什么预兆| En什么意思| 一什么火箭| 软化血管吃什么药| 汉菜不能和什么一起吃| mers是什么病毒| 一个叉念什么| 舌吻是什么感觉| 孕妇吃海带有什么好处| 为什么门牙突然有缝了| 裂纹舌是什么原因引起的| qcy是什么牌子| 什么是阴虚火旺| 反话是什么意思| 86年属什么的生肖| 老丈人是什么意思| 做美甲有什么危害| 肝经不通吃什么中成药| 富三代是什么意思| 贪嗔痴是什么意思| 菊花代表什么象征意义| 什么是三观不合| 双眸是什么意思| 阳痿吃什么药效果好| 疖肿什么意思| 眼睛红了是什么原因| 天麻有什么作用| 6月26号是什么星座| 嘴巴里长水泡是什么原因| 消心痛又叫什么| 鼻子经常出血是什么病征兆| 大利月小利月什么意思| 桂花像什么| 什么助听器| 做手术后吃什么对伤口恢复快| 女人喝什么茶好减肥| 外耳炎用什么药| 什么是认知障碍| 吃饼是什么意思| 贴切的意思是什么| 掂过碌蔗是什么意思| 变色龙指什么样的人| 1971年是什么命| 副词是什么| 湿阻病是什么病| 不伤肝的他汀类药是什么| 怀孕三个月吃什么对胎儿好| 吃山楂片有什么好处| 孕吐吃什么可以缓解| bp是什么意思医学上面| 阿根廷讲什么语言| 人被老鼠咬了什么预兆| 正常白带是什么味道| 地龙是什么| 鸡子是什么东西| cd138阳性是什么意思| 蚊虫叮咬涂什么药| 老公梦见蛇是什么预兆| 胆结石吃什么药| 动卧是什么意思| 大米放什么不生虫子| 舌尖痛什么原因| 中年人喝什么奶粉好| 心火旺吃什么药| 杨贵妃是什么生肖| mlb是什么意思| 沙悟净是什么生肖| 天气热吃什么解暑| 鬼斧神工是什么意思| 胃反流是什么原因| 万事如意是什么生肖| 主任医师是什么职称| boys是什么意思| 什么是好词| 拉血是什么原因| 百日咳是什么意思| 刮痧不出痧是什么原因| 肠梗阻是什么| 颈椎酸胀是什么原因| 人活着到底是为了什么| 葬爱家族是什么意思| 天外飞仙是什么意思| 梦见过生日是什么意思| 心脏上有个小洞是什么病| 诈尸是什么意思| 吹泡泡是什么意思| 喉咙干是什么病的前兆| 减震器坏了有什么症状| 阴血亏虚吃什么中成药| 祛斑什么季节做最好| s代表什么意思| 文心什么字| 阎王叫什么名字| 什么血型的人最聪明| 孕吐吃什么可以缓解| 傻子是什么意思| 一片片什么| 兔对冲生肖是什么| 社会保险是什么意思| 喝什么酒容易醉| 检查艾滋病挂什么科| 核磁共振是查什么的| 钟表挂在客厅什么位置好| 嘌呤高会引起什么症状| 女的排卵期一般是什么时间| 什么是机械键盘| 原生态是什么意思| 姓郑的男孩取什么名字好| 养膘是什么意思| 3.17是什么星座| kitty是什么意思| 祎字五行属什么| 槟榔中间的膏是什么| 黑豆有什么功效和作用| 胃疼胃胀吃什么药好| 分期是什么意思| 客厅沙发后面墙上挂什么画好| hipanda是什么牌子| 枫树叶子像什么| 睡眠不好吃什么中成药| 禾加农是什么字| unny是什么牌子| 13岁属什么生肖| 人生赢家什么意思| 精神恍惚是什么意思| 最大的沙漠是什么沙漠| 牙疼有什么办法| 3月26号是什么星座| 胃痛吃什么药最有效| 投诚是什么意思| 罚金属于什么处罚| 什么东西蛋白质含量高| 哥斯拉是什么| 手指甲有竖纹是什么原因| 乳腺增生是什么| 短头发烫什么发型好看| 人为什么打哈欠| 记忆力下降是什么原因引起的| 自食其力是什么意思| 为什么海水是咸的| 子宫肌瘤伴钙化是什么意思| 火车无座是什么意思| 五常法指的是什么| 2023是什么年| 田七和三七有什么区别| 帝旺是什么意思| 5月31号什么星座| 紫癜病是什么病| 绿豆汤不能和什么一起吃| 六月六吃什么| 背德感是什么意思| 弥漫性病变是什么意思| 为什么耳朵后面会臭| 知见是什么意思| 静心什么意思| 阿玛尼手表算什么档次| 颂字五行属什么| 原发性肝ca什么意思| 曲解什么意思| 卧推80公斤什么水平| ed是什么意思| 为什么会有乳腺结节| 谷丙转氨酶高吃什么药可以降下来| 血管造影是什么检查| 一阵一阵的胃疼是什么原因| 夫妻肺片有什么材料| 春分是什么意思| MC是什么牌子的车| 什么夺目| 张学良为什么不回大陆| 痔核是什么样子图片| 孩子结膜炎用什么眼药水| 什么是陈述句| 什么地问填词语| 顽疾是什么意思| 为什么腋下会长小肉揪| 十二朵玫瑰花代表什么意思| 79年出生属什么生肖| 淋巴结肿大吃什么药消肿效果好| 项羽是什么生肖| 肠道易激惹综合征的症状是什么| 尿酸高吃什么水果好| 为什么长白头发| 苦海无涯回头是岸是什么意思| 兔和什么生肖最配| dazzle是什么牌子| 测脸型适合什么发型| ooh什么意思| 响是什么意思| 年轻人长老年斑是什么原因| 血沉是什么| 白露是什么季节的节气| 吸烟有害健康为什么国家还生产烟| 月经为什么推迟不来| 血压是什么意思| 子宫内膜厚吃什么食物好| 绿茶婊是什么意思| 皮肤黑适合穿什么颜色的衣服| 失败是成功之母是什么意思| 肿脚是什么原因引起的| 甘油三酯高会引起什么病| 8朵玫瑰花代表什么意思| 什么样的眼睛| 轻度三尖瓣反流是什么| 合欢树为什么叫鬼树| 蝉蜕是什么| 请佛容易送佛难什么意思| 什么人容易得骨肿瘤| 黄瓜敷脸有什么功效| 眼睛散光是什么症状| 壬午五行属什么| 市级三好学生有什么用| 关节间隙变窄什么意思| 思念到极致是什么感觉| 甲减是一种什么病| 女人梦到火是什么预兆| 2.7是什么星座| 2008是什么年| 胸胀疼是什么原因| 包皮炎挂什么科| 为什么会岔气| 红细胞分布宽度偏低是什么意思| 上海的特产是什么| gd是什么元素| oem贴牌是什么意思| cu什么意思| 牙龈肿痛上火吃什么药最好| 很什么很什么| 乳腺瘤是什么引起的| 牛b克拉斯什么意思| 轧戏是什么意思| 做爱为什么舒服| 鸭嘴鱼吃什么食物| 海口有什么好玩的| 下焦湿热吃什么中成药| 喉炎是什么原因引起的| 眼胀是什么原因| 半月板变性是什么意思| 吃什么可以降火| 吴优为什么叫大胸姐| 卖萌什么意思| 硬度不够吃什么中成药| cps是什么单位| 婴儿什么时候吃辅食| 准生证什么时候办理| 草莓的花是什么颜色| eo什么意思| 月经期间吃什么最好| 灵芝孢子粉治什么病| 肛门指检是检查什么| 百度Vai al contenuto

车讯:7座布局 大众Tiguan Allspace将1月发布

Questa pagina è protetta dallo spostamento
Questa pagina è protetta
Da Wikipedia, l'enciclopedia libera.
Info Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Interprogetto/man (modifica · cronologia)
Sandbox: Modulo:Interprogetto/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Interprogetto/test (modifica · cronologia · esegui)
百度 据伊朗国家电视台15日报道,伊朗外交部发言人巴赫拉姆·卡西米对此作出严厉回应,称沙特王储是一个“妄想而天真的人”,对政治一无所知。

Modulo Lua per svolgere le funzioni di {{Interprogetto}}.

Ha una sottopagina di configurazione: Modulo:Interprogetto/Configurazione.


-- Modulo per implementare le funzionalità di template:Interprogetto
require('strict')

local p = {} -- per l'esportazione delle funzioni del modulo

local cfg = {}
local root = mw.html.create('') -- radice del markup html
local debug = {} -- per debug
local categories = {} -- categorie di errore da aggiungere
local errors_msg = {} -- messaggi di errore da aggiungere

-- per non usare numeri "magici" nel codice
local category_namespace_number = 14

-- ============================================================================================================
-- Ritorna la stringa se è definita e diversa da stringa vuota, altrimenti nil
-- ============================================================================================================
local function is_defined(s)
	if s and s ~= '' then
		return s
	else
		return nil
	end
end

-- ============================================================================================================
-- Aggiunge uno spazio alla stringa se non termina per "'" (apostrofo)
-- ============================================================================================================
local function add_space(s)
	if not is_defined(s) then
		return ''
	elseif mw.ustring.sub(s, -1) == "'" then
		return s
	else
		return s .. ' '
	end
end

-- ============================================================================================================
-- Aggiunge la categoria "category" alla lista di categorie da aggiungere alla voce
-- ============================================================================================================
local function add_category(category)
	if category then
		categories[category] = true
	end
end

-- ============================================================================================================
-- Aggiunge il messaggio di errore "error_msg" alla lista di messaggi di errore da visualizzare.
-- Se viene precisata una categoria di errore la aggiunge alle categorie in cui inserire la voce,
-- altrimenti inserisce la categoria di errore standard
-- ============================================================================================================
local function add_error(error_msg, category)
	if error_msg then
		errors_msg[#errors_msg+1] = error_msg
		if category then
			add_category(category)
		else
			add_category('Errori di compilazione del template Interprogetto')
		end
	end
end

-- ============================================================================================================
-- Ritorna un collegamento di default dato il nome di un progetto, nil in caso di errori
-- ============================================================================================================
local function get_default_collegamento(key_progetto, fullpagename)
	if cfg.parameters[key_progetto] then
		if cfg.parameters[key_progetto]['collegamento_non_esistente'] then
			add_error(cfg.parameters[key_progetto]['collegamento_non_esistente'])
			return nil
		elseif cfg.parameters[key_progetto].collegamento_default_minuscolo then
			return mw.ustring.gsub(fullpagename, '^%u', string.lower)
		else
			return fullpagename
		end
	else
		return nil
	end
end

-- ============================================================================================================
-- Ordina una tabella in funzione della chiave "ordine" degli elementi della tabella
-- ============================================================================================================
local function sort_by_ordine(t1, t2)
	if t1.ordine < t2.ordine or t1.ordine == t2.ordine and t1.lingua < t2.lingua then
		return true
	end
end

-- ============================================================================================================
-- Classe per gestire la raccolta di informazioni da Wikidata
-- ============================================================================================================
local Wikidata_entity = {}

function Wikidata_entity:new(ignore_wikidata)
	-- Carica i dati da Wikidata se esistono
	local self = {}
	if not ignore_wikidata then
		self.entity = mw.wikibase.getEntityObject()
	end
	setmetatable(self, { __index = Wikidata_entity,
						 __tostring = function(t) return self:__tostring() end })
	self.collegamenti = {}
	self.badge = {}
	self.from_property_category = {}
	self.article_link = {}
	self.lingua = {}
	if self.entity then
		self.etichetta = self.entity:getLabel('it')
		-- Imposta il corsivo se la pagina su Wikidata ha la proprietà P31 ("Istance of", [[wikidata:Property:P31]])
		-- con valore corrispondente a un'opera, come definito in cfg.check_opera
		self.corsivo = self:hasPropertyValue('P31', cfg.check_opera)
		-- Considera disambigua se la pagina su Wikidata ha la proprietà P31 ("Istance of", [[wikidata:Property:P31]])
		-- con valore 4167410 ("Wikimedia disambiguation page", [[wikidata:Q4167410]])
		self.disambigua = self:hasPropertyValue('P31', '4167410')
		-- Controlla se la voce è relativa a una categoria
		self.is_category = self:hasPropertyValue('P31', '4167836')
		self:loadCollegamenti()
	end
	return self
end

function Wikidata_entity:getClaim(property_id)
	if self.entity.claims and
			self.entity.claims[property_id] and
			self.entity.claims[property_id][1].mainsnak.datavalue and
			self.entity.claims[property_id][1].mainsnak.datavalue.type == 'string' then
		return self.entity.claims[property_id][1].mainsnak.datavalue.value
	else
		return nil
	end
end

function Wikidata_entity:getInterwiki(project, property_language)
	local interwiki = { project }
	if property_language and self.entity.claims and self.entity.claims[property_language] then
		project = project:sub(3)
		for _, claim in ipairs(self.entity.claims[property_language]) do
			if claim.mainsnak.datavalue.type == 'wikibase-entityid' then
				local entityId = 'Q' .. claim.mainsnak.datavalue.value['numeric-id']
				if entityId ~= 'Q652' then
					local claims = mw.wikibase.getBestStatements(entityId, 'P424')
					if claims[1] and claims[1].mainsnak.datavalue then
						local language_code = claims[1].mainsnak.datavalue.value
						if language_code then
							if project == 'wikisource' and language_code == 'grc' then
								language_code = 'el'
							end
							table.insert(interwiki, language_code .. project)
							self.lingua[language_code .. project] = language_code
						end
					end
				end
			end
		end
	end
	return interwiki
end

-- ============================================================================================================
-- Carica collegamenti e badge da Wikidata controllando i progetti elencati in cfg.automatic_link
-- ============================================================================================================
function Wikidata_entity:loadCollegamenti()
	for key_progetto, progetto in pairs(cfg.automatic_link) do
		-- Carica i collegamenti di un progetto solo se non disambigua o tipo di progetto abilitato in disambigua
		if not self.disambigua or cfg.parameters[key_progetto].abilita_in_disambigua then
			for i, interwiki in ipairs(self:getInterwiki(progetto.interwiki, progetto.property_language)) do
				local sitelink = self.entity:getSitelink(interwiki)
				-- Dà sempre precedenza al sitelink se è una categoria
				if sitelink and mw.ustring.find(sitelink, '^Category:') then
					-- 'false' disabilita la consultazione della proprietà
					self.from_property_category[key_progetto] = false
				end
				local claim
				if progetto.property_category and self.from_property_category[key_progetto] ~= false then
					claim = self:getClaim(progetto.property_category)
					if claim then
						self.collegamenti[key_progetto] = 'Category:' .. claim
						self.from_property_category[key_progetto] = true
					end
				end
				if sitelink then
					if self.from_property_category[key_progetto] then
						self.article_link[key_progetto] = sitelink
					elseif i > 1 then
						local lingua = self.lingua[interwiki]
						key_progetto = string.format('%s_%s', key_progetto, lingua)
						self.lingua[key_progetto] = lingua
						self.collegamenti[key_progetto] = string.format('%s:%s', lingua, sitelink)
					else
						self.collegamenti[key_progetto] = sitelink
					end
					if i == 1 and self.entity.sitelinks[interwiki].badges then
						local badge_class = {}
						local badge_title = {}
						for _, badge_quality in ipairs(self.entity.sitelinks[interwiki].badges) do
							if cfg.badges[badge_quality] then
								badge_class[#badge_class+1] = cfg.badges[badge_quality].class
								badge_title[#badge_title+1] = cfg.badges[badge_quality].title
							end
						end
						self.badge[key_progetto] = {}
						self.badge[key_progetto].class = table.concat(badge_class, ' ' )
						self.badge[key_progetto].title = table.concat(badge_title, ', ' )
					end
				elseif not self.is_category and progetto.property_gallery and not self.from_property_category[key_progetto] then
					claim = self:getClaim(progetto.property_gallery)
					self.collegamenti[key_progetto] = claim
				end
			end
		end
	end
end

-- ============================================================================================================
-- Verifica se una determinata proprietà ha uno dei valori specificati nella lista "values".
-- Riadattata da "hasPropertyValue" su [[wikiquote:it:Modulo:Interprogetto]] a sua volta
-- riadattata da "instanceof(arg)" su [[wikisource:it:Modulo:Autore]]
-- ============================================================================================================
function Wikidata_entity:hasPropertyValue(propertyId, values)
	if self.entity.claims and self.entity.claims[propertyId] then
		for _, claim in ipairs(self.entity.claims[propertyId]) do
			if claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then
				local datavalue = claim.mainsnak.datavalue
				if datavalue.type == 'wikibase-entityid' and
						datavalue.value['entity-type'] == 'item' and
						(type(values) == 'table' and values[tostring(datavalue.value['numeric-id'])]) or
						values == tostring(datavalue.value['numeric-id']) then
					return true
				end
			end
		end
	end
	return false
end
-- ============================================================================================================
-- Fine definizione della classe Wikidata_entity
-- ============================================================================================================

-- ============================================================================================================
-- Classe per gestire i collegamenti interprogetto
-- ============================================================================================================
local Collegamento = {}

function Collegamento:new(key_progetto, args, entity, default)
	-- Crea un collegamento a un progetto, riceve il nome del progetto, gli argomenti da usare per determinare
	-- i valori dei vari parametri del collegamento. Si appoggia alla tabella esterna cfg.parameters per i
	-- valori di default del progetto e alla tabella globale default per i valori di default generali

	local self = {}
	setmetatable(self, { __index = Collegamento,
						 __tostring = function(t) return self:__tostring() end })
	local default_progetto = cfg.parameters[key_progetto:match('^[^_]+')]
	if default_progetto == nil then
		-- Progetto non riconosciuto
		return nil
	end
	self.collegamento = args[key_progetto]
	if not is_defined(self.collegamento) then
		-- Collegamento non definito correttamente
		return nil
	else
		self.default_progetto = default_progetto
		self.ordine = default_progetto.ordine
		self.badge_leftbar = {}
		self.badge_leftbar.class = (entity.badge[key_progetto] and entity.badge[key_progetto].class) or ''
		self.badge_leftbar.title = (entity.badge[key_progetto] and entity.badge[key_progetto].title) or ''
		self.etichetta = is_defined(args[key_progetto .. '_etichetta']) or (default_progetto.etichetta_lower and default.etichetta_lower) or default.etichetta
		-- elabora l'oggetto per i testi completi su wikisource quando il collegamento è ricavato da wikidata e il parametro testo_preposizione è compilato
		local alias_s_oggetto = key_progetto == 's' and args.testo_preposizione and not args.orig_s and not args.s_preposizione and cfg.parameters['testo'].oggetto
		self.oggetto = args[key_progetto .. '_oggetto'] or alias_s_oggetto or default.oggetto or default_progetto.oggetto
		if default.frase_unificata or default_progetto.preposizione then
			-- consulta il parametro testo_preposizione se il collegamento a wikisource non è manuale
			local alias_s_preposizione = key_progetto == 's' and not args.orig_s and args.testo_preposizione
			self.preposizione = args[key_progetto .. '_preposizione'] or alias_s_preposizione or default.preposizione or default_progetto.preposizione
		else
			self.preposizione = ''
		end
		if default.frase_unificata then
			self.testo_prima = ''
			self.testo_dopo = ''
		else
			self.testo_prima = default_progetto.testo_prima
			self.testo_dopo = default_progetto.testo_dopo
		end
		if key_progetto == 'notizia' and is_defined(args.data) then
			self.testo_dopo = ' <small>' .. args.data .. '</small>'
		end
		local lingua = key_progetto == 's_el' and 'lingua greca' or
				entity.lingua[key_progetto] and require('Modulo:Lingue').get_voce(entity.lingua[key_progetto]) or
				args[key_progetto .. '_lingua'] and 'lingua ' .. args[key_progetto .. '_lingua']
		if default_progetto.lingua and lingua then
			self.lingua = ' in ' .. lingua
		else
			self.lingua = ''
		end
		return self
	end
end

function Collegamento:Link()
	local default_progetto = self.default_progetto
	if default_progetto.link == 'Link' then
		return self:Link_text()
	elseif default_progetto.link == 'LinkWithLanguage' then
		return self:Link_language()
	elseif default_progetto.link == 'LinkRicette' then
		return self:Link_ricette()
	elseif default_progetto.link == 'LinkIncubator' then
		return self:Link_incubator()
	end
	add_error('Errore interno modulo Interprogetto')
	return ''
end

function Collegamento:Link_lb()
	local default_progetto = self.default_progetto
	if default_progetto.link == 'Link' then
		return self:Link_text_lb()
	elseif default_progetto.link == 'LinkWithLanguage' then
		return self:Link_language_lb()
	elseif default_progetto.link == 'LinkRicette' then
		return self:Link_text_lb()
	elseif default_progetto.link == 'LinkIncubator' then
		return self:Link_incubator_lb()
	end
	add_error('Errore interno modulo Interprogetto')
	return ''
end

function Collegamento:Link_text()
	local default_progetto = self.default_progetto
	return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefix, "|", default_progetto.dimensione_icona, "|Collabora a ",
			default_progetto.nome_progetto, "]] [[", default_progetto.prefix, "|", default_progetto.nome_progetto, "]] contiene ",
			self.oggetto, self.lingua, " ", add_space(self.preposizione), self.testo_prima, "'''[[", default_progetto.prefix,
			self.collegamento, "|", self.etichetta, "]]'''", self.testo_dopo
end

function Collegamento:Link_text_lb()
	local default_progetto = self.default_progetto
	return "[[", default_progetto.prefix, self.collegamento, "|", default_progetto.nome_leftbar or default_progetto.nome_progetto, "]]"
end

function Collegamento:Link_ricette()
	local default_progetto = self.default_progetto
	return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefix, "|", default_progetto.dimensione_icona,
			"|Collabora a ", default_progetto.nome_progetto, "]] Il ''[[b:Libro di cucina|Libro di cucina]]'' di [[b:|Wikibooks]] contiene '''[[",
			default_progetto.prefix, self.collegamento, "|ricette]]''' relative a questo argomento"
end

function Collegamento:Link_language()
	local default_progetto = self.default_progetto
	local main_page_link = tostring(mw.uri.fullUrl(default_progetto.prefix, {uselang='it'}))
	return "* [[File:", default_progetto.icona, "|link=", main_page_link, "|", default_progetto.dimensione_icona, "|Collabora a ",
			default_progetto.nome_progetto, "]] <span class=\"plainlinks\">[", main_page_link, " ", default_progetto.nome_progetto,
			"]</span> contiene ", self.oggetto, " ", add_space(self.preposizione), self.testo_prima,
			"'''<span class=\"plainlinks\">[", tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})),
			" ", self.etichetta, "]</span>'''", self.testo_dopo
end

function Collegamento:Link_language_lb()
	local default_progetto = self.default_progetto
	return "<span class=\"plainlinks\" title=\"", default_progetto.prefix , self.collegamento, "\">[",
			tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})), " ",
			default_progetto.nome_leftbar or default_progetto.nome_progetto, "]</span>"
end

function Collegamento:Link_incubator()
	local default_progetto = self.default_progetto
	local oggetto = self.oggetto
	if not cfg.prefix_incubator[oggetto] then
		oggetto = default_progetto.oggetto
	end
	local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', cfg.prefix_incubator[oggetto],
										'/', self.collegamento}), {uselang='it'}))
	local main_page_incubator = tostring(mw.uri.fullUrl('incubator:Incubator:Main Page/it', {uselang='it'}))
	local main_page_progetto = ''
	if oggetto == 'wikipedia' then
		main_page_progetto = '[[Wikipedia]]'
	else
		main_page_progetto = table.concat({'[[', oggetto, ':it:|', oggetto:gsub('^%l', string.upper), ']]'})
	end
	return "* [[File:", default_progetto.icona, "|link=", main_page_incubator, "|", default_progetto.dimensione_icona,
			"|Collabora a Incubator]] <span class=\"plainlinks\">[", main_page_incubator, " Incubator]</span> contiene un test su ",
			main_page_progetto, self.lingua, " ", add_space(self.preposizione), "'''<span class=\"plainlinks\">[", collegamento, " ", self.etichetta, "]</span>'''"
end

function Collegamento:Link_incubator_lb()
	local default_progetto = cfg.parameters[self.key_progetto]
	local oggetto = self.oggetto
	if not cfg.prefix_incubator[oggetto] then
		oggetto = default_progetto.oggetto
	end
	local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', cfg.prefix_incubator[oggetto],
										'/', self.collegamento}), {uselang='it'}))
	return mw.message.newRawMessage("<span class=\"plainlinks\" title=\"$1\">[$2 Incubator]</span>", {self.etichetta, collegamento}):plain()
end
-- ============================================================================================================
-- Fine definizione della classe Collegamento
-- ============================================================================================================

-- ============================================================================================================
-- Scandisce la tabella progetti e produce il codice html per l'elenco dei collegamenti nella barra di sinistra
-- Imposta il tag div id="interProject" (vedi [[MediaWiki:InterProject.js]] incluso da [[Mediawiki:Common.js]])
-- ============================================================================================================
local function RenderLeftBar(progetti)

	local leftbar = mw.html.create('ul'):attr('title', 'Collegamenti verso gli altri progetti Wikimedia')
	for _, progetto in ipairs(progetti) do
		leftbar:newline()
		leftbar:wikitext('<li class=\"', progetto.badge_leftbar.class, '\" title=\"', progetto.badge_leftbar.title, '\">')
		leftbar:wikitext(progetto:Link_lb())
		if progetto.default_progetto.nome_leftbar then
			leftbar:wikitext('<br />(', progetto.default_progetto.nome_progetto, ')')
		end
		leftbar:wikitext('</li>')
	end
	root:tag('div')
		:attr('id', 'interProject')
		:addClass('toccolours')
		:cssText('display: none; clear: both; margin-top: 2em')
		:tag('p')
			:attr('id', 'sisterProjects')
			:cssText('background-color: #efefef; color: black; font-weight: bold; margin: 0')
			:tag('span')
				:wikitext('Altri progetti')
				:done()
			:done()
		:node(leftbar)
end

-- ============================================================================================================
-- Scandisce la tabella progetti e produce il codice html per l'elenco puntato dei collegamenti interprogetto
-- ============================================================================================================
local function RenderLinksInText(progetti)
	for _, progetto in ipairs(progetti) do
		root:newline()
		root:wikitext(progetto:Link())
	end
end

-- ============================================================================================================
-- Confronta i collegamenti manuali con quelli automatici e genera le categorie di classificazione nei casi di:
-- - Presenza di link manuale e assenza di link su wikidata
-- - Differenza tra link manuale e link su wikidata
-- - Differenza tra link manuale a categoria e categoria su wikidata
-- - Presenza di link manuale a categoria e a categoria su wikidata
-- ============================================================================================================
local function check_with_wikidata(key_progetto, entity, collegamento)
	if collegamento == nil then return end -- se non c'è un collegamento manuale ritorna immediatamente
	local entity_collegamento = entity.collegamenti[key_progetto]
	-- si assicura che il collegamento manuale inizi con la 'C' maiuscola se è una categoria
	local collegamento_normalizzato = mw.ustring.gsub(collegamento, '^category:', 'Category:')
	local collegamento_is_category = mw.ustring.find(collegamento_normalizzato, '^Category:')
	-- Check se il collegamento manuale è una categoria, se il tipo di progetto prevede una proprietà a parte
	-- per le categorie e se la sua consultazione non è stata disabilitata
	if collegamento_is_category and cfg.automatic_link[key_progetto].property_category and entity.from_property_category[key_progetto] ~= false then
		-- se esiste un collegamento su wikidata dalla proprietà per la categoria la confronta con quello manuale
		if entity.from_property_category[key_progetto] then
			if entity_collegamento ~= collegamento_normalizzato then
				add_category(cfg.automatic_link[key_progetto].category_wikidata_category_diff)
			end
		-- se non esiste un collegamento manuale su wikidata lo marca come assente
		else
			add_category(cfg.automatic_link[key_progetto].category_wikidata_category_missing)
		end
	else
		local article_link
		-- recupera il collegamento automatico alla voce (può essere in entity.article_link[key_progetto] o
		-- in entity.collegamento[key_progetto] a seconda del sitelink e della proprietà per le categorie)
		if entity.from_property_category[key_progetto] then
			article_link = entity.article_link[key_progetto]
		else
			article_link = entity_collegamento
		end
		-- Se ha recuperato un valore per article_link lo confronta con quello normalizzato
		-- altrimenti aggiunge il tracking di collegamento mancante in wikidata
		if article_link then
			if article_link ~= collegamento_normalizzato then
				add_category(cfg.automatic_link[key_progetto].category_wikidata_diff)
			end
		else
			add_category(cfg.automatic_link[key_progetto].category_wikidata_missing)
		end
	end
end

-- ============================================================================================================
-- Funzione principale richiamata dal template Interprogetto
-- ============================================================================================================
function p.interprogetto(frame)


	-- se chiamata da una sandbox carica la configurazione della sandbox
	if nil ~= string.find (frame:getTitle(), 'sandbox', 1, true) then   
		cfg = mw.loadData('Module:Interprogetto/Configurazione/sandbox')	   
	else																
		cfg = mw.loadData('Module:Interprogetto/Configurazione')
	end
	local origArgs
	-- ========================================================================================================
	-- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante.
	-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
	-- ========================================================================================================
	if frame == mw.getCurrentFrame() then
		origArgs = frame:getParent().args
	else
		origArgs = frame
	end
	-- Tabella con i parametri di default valorizzati
	local default = {}
	-- ========================================================================================================
	-- Carica il nome della pagina corrente
	-- ========================================================================================================
	local current_page = mw.title.getCurrentTitle()
	local current_namespace = current_page.namespace
	local current_pagename = current_page.text
	-- Per i namespace usa il nome canonico (inglese) per non avere differenze tra progetti:
	-- esempio: Utente/User, Categoria/Category, ma anche Wikiquote/Wikipedia (Project), ecc.
	if current_namespace ~= 0 then
		default.current_fullpagename = mw.site.namespaces[current_namespace].canonicalName .. ':' .. current_pagename
	else
		default.current_fullpagename = current_pagename
	end
	-- ========================================================================================================
	-- Carica i dati da Wikidata nell'oggetto "entity"
	-- ========================================================================================================
	local ignore_wikidata = false
	local nowikidata = origArgs.nowikidata and origArgs.nowikidata:lower()
	if nowikidata == 's' or nowikidata == 'sì' or nowikidata == 'si' then
		ignore_wikidata = true
	end
	local entity = Wikidata_entity:new(ignore_wikidata)
	-- ========================================================================================================
	-- Calcola l'etichetta di default per i collegamenti, in ordine di priorità:
	-- 1) Se è definita l'etichetta in lingua italiana su Wikidata usa questa (eliminando un eventuale
	--	"Categoria:" di fronte alla voce)
	-- 2) Altrimenti usa il nome della pagina corrente, eliminando un'eventuale disambigua in coda alla voce,
	--	e definisce etichetta_lower come il nome della voce con iniziale minuscola.
	-- Se la voce è segnalata come opera su Wikidata allora l'etichetta è in corsivo (senza iniziale minuscola)
	-- ========================================================================================================
	if is_defined(origArgs.etichetta) then
		default.etichetta = origArgs.etichetta
	else
		if entity.etichetta then
			-- Elimina un eventuale "Categoria:" in fronte del nome
			default.etichetta = mw.ustring.gsub(entity.etichetta, '^Categoria:', '')
		else
			-- Elimina un'eventuale disambigua dal nome
			default.etichetta = mw.ustring.gsub(current_pagename, ' %(.*%)$', '')
			if current_namespace == 0 then
				default.etichetta_lower = mw.ustring.gsub(default.etichetta, '^%u', string.lower)
			end
		end
		if entity.corsivo then
			default.etichetta = '<span style=\"font-style:italic;\">' .. default.etichetta .. '</span>'
			default.etichetta_lower = default.etichetta
		end
	end
	-- ========================================================================================================
	-- Calcola preposizione e oggetto di default, modificandoli se il namespace quello delle categorie
	-- ========================================================================================================
	if current_namespace ~= category_namespace_number then
		default.preposizione = origArgs.preposizione
		default.oggetto = origArgs.oggetto
	else
		default.preposizione = origArgs.preposizione or "sull'argomento"
		default.oggetto = origArgs.oggetto or "una categoria"
		default.frase_unificata = true
	end
	-- ========================================================================================================
	-- Copia i parametri in una nuova tabella, creando coppie progetto/collegamento per i parametri posizionali
	-- e controllando per parametri duplicati e nomi di progetto non conosciuti
	-- ========================================================================================================
	local newArgs = {}
	local nolink = false
	newArgs.orig_s = origArgs.s
	for key, value in pairs(origArgs) do
		if tonumber(key) then
			local key_progetto = mw.text.trim(value)
			if cfg.parameters[key_progetto] then
				if origArgs[key_progetto] then
					add_error('Collegamento a \"' .. value .. '\" inserito sia come parametro posizionale che nominale')
				else
					if key_progetto == 's' then newArgs.orig_s = key_progetto end
					newArgs[key_progetto] = get_default_collegamento(key_progetto, default.current_fullpagename)
				end
			elseif key_progetto == 'nolink' then
				nolink = true
			else
				add_error('Il parametro \"' .. value .. '\" non corrisponde a nessun progetto riconosciuto dal template')
			end
		else
			newArgs[key] = value
		end
	end
	-- ========================================================================================================
	-- Controlla i collegamenti inseriti manualmente integrandoli eventualmente con quelli presenti in Wikidata.
	-- Salta questo passo se c'è un collegamento a "notizia" dato che in questo caso deve essere unico e quindi
	-- non deve aggiungere i collegamenti da Wikidata. Inoltre, in caso di "disambigua", salta i progetti non
	-- abilitati in disambigua che in ogni caso non devono essere aggiunti
	-- ========================================================================================================
	if not newArgs.notizia then
		-- ====================================================================================================
		-- Controlla il collegamento compilato manualmente e quello caricato da Wikidata
		-- ====================================================================================================
		for key_progetto, collegamento in pairs(newArgs) do
			if cfg.parameters[key_progetto] and cfg.automatic_link[key_progetto] and entity.entity then
				if not entity.disambigua or cfg.parameters[key_progetto].abilita_in_disambigua then
					check_with_wikidata(key_progetto, entity, collegamento)
				end
			end
		end
		-- ====================================================================================================
		-- Aggiunge il collegamento da Wikidata se non è presente quello compilato manualmente o se rinvia a
		-- un progetto in lingua non italiana che non è registrato nella configurazione e non va sovrascritto
		-- ====================================================================================================
		for key_progetto, collegamento in pairs(entity.collegamenti) do
			if not cfg.automatic_link[key_progetto] or not (newArgs[key_progetto] or newArgs[cfg.automatic_link[key_progetto].alias]) then
				newArgs[key_progetto] = collegamento
				-- Segnala che il collegamento è stato aggiunto da Wikidata
				add_category(cfg.automatic_link[key_progetto:match('^[^_]+')].category_wikidata)
			end
		end
	end
	-- ========================================================================================================
	-- Sulla base della lista di argomenti ripulita costruisce la lista dei collegamenti da inserire
	-- ========================================================================================================
	local progetti = {}
	local collegamento_found = false
	for key_progetto, collegamento in pairs(newArgs) do
		if cfg.parameters[key_progetto] or entity.collegamenti[key_progetto] then
			-- Salta i collegamenti a Wikidata per le voci nel namespace principale eccetto che per la Pagina principale
			if key_progetto ~= 'wikidata' or current_namespace ~= 0 or current_pagename == 'Pagina principale' then
				local progetto = Collegamento:new(key_progetto, newArgs, entity, default)
				if progetto then
					collegamento_found = true
					-- Se è disambigua registra solo i valori per i progetti abilitati in disambigua
					if not entity.disambigua or cfg.parameters[key_progetto] and cfg.parameters[key_progetto].abilita_in_disambigua then
						progetti[#progetti+1] = progetto
					end
				end
			end
		end
	end
	table.sort(progetti, sort_by_ordine)
	-- ========================================================================================================
	-- Genera il codice html
	-- ========================================================================================================
	if entity.disambigua and #progetti == 0 and collegamento_found then
		add_error('Collegamenti non visualizzabili perché la voce è una disambigua su Wikidata',
				  'Errori di compilazione del template Interprogetto - collegamenti in disambigua')
	elseif #progetti == 0 then
		--add_error('Template interprogetto vuoto e senza dati da recuperare da Wikidata', 'Errori di compilazione del template Interprogetto - template vuoto')
		add_error('', 'Errori di compilazione del template Interprogetto - template vuoto')
	else
		local nobarra = origArgs.nobarra and origArgs.nobarra:lower()
		if nobarra ~= 's' and nobarra ~= 'sì' and nobarra ~= 'si' then
			RenderLeftBar(progetti)
		end
		if not nolink then
			RenderLinksInText(progetti)
		end
	end
	-- =================================================================================================================================
	-- Nei namespace ammessi inserisce le categorie di segnalazione di errori/avvisi
	-- =================================================================================================================================
	if cfg.whitelist_category[current_namespace] then
		for category, _ in pairs(categories) do
			root:wikitext('[[Categoria:' .. category .. ']]')
		end
	end
	-- =================================================================================================================================
	-- Aggiunge i messaggi di errore
	-- =================================================================================================================================	
	if #errors_msg > 0 then
		if #progetti > 0 then
			root:wikitext('\n')
		end
		root:wikitext('<strong class=\"error\">' .. table.concat(errors_msg, '; ') .. '</strong>')
	end
	return tostring(root)
end

return p
北京市长是什么级别 land rover是什么车 秋刀鱼在中国叫什么鱼 打氨基酸点滴有什么好处和害处 什么是甲醛
一月十八是什么星座 深海鱼油的作用是什么 前列腺炎吃什么药好 永恒是什么意思 鸭子喜欢吃什么食物
甲状腺偏高是什么原因引起的 水绿色是什么颜色 痛风不能吃什么 完全性右束支传导阻滞是什么意思 胆固醇偏高有什么危害
青椒炒什么好吃又简单 大便不成型吃什么药 什么之交 打蛋器什么牌子好 白蚂蚁长什么样子图片
六月十六什么星座hcv8jop1ns8r.cn 酸菜鱼加什么配菜好吃hcv8jop8ns4r.cn sos是什么意思hcv8jop4ns7r.cn 足癣用什么药最快好xianpinbao.com 有个马的标志是什么车kuyehao.com
孕妇吃什么血糖降得快hcv9jop5ns5r.cn 继发性肺结核是什么意思hcv9jop4ns7r.cn 王晶为什么不娶邱淑贞hcv9jop6ns2r.cn 为什么的拼音hcv9jop8ns0r.cn 前列腺液和精液有什么区别hcv8jop8ns9r.cn
声情并茂的意思是什么hcv8jop6ns3r.cn 情面是什么意思hcv9jop1ns1r.cn 九月24日是什么星座hcv8jop8ns5r.cn 10.11是什么星座hcv8jop7ns8r.cn 食道炎吃什么药hcv8jop3ns1r.cn
素的部首是什么hcv8jop0ns3r.cn 频繁打嗝是什么原因zhongyiyatai.com 为什么睡觉会流口水hcv7jop4ns8r.cn 高铁为什么没有ehcv8jop6ns0r.cn BS是什么意思啊hcv8jop3ns7r.cn
百度