Modulo:Tabella beni culturali

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Questo modulo serve al template {{Tabella beni culturali}} per estrarre i dati da wikidata.


require('strict')

local getArgs = require('Module:Arguments').getArgs
local errorCategory = '[[Categoria:Errori di compilazione del template Tabella beni culturali]]'
local p = {}

local function errhandler(msg)
	local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or ''
	return string.format('<span class="error">%s</span>%s', msg, cat)
end

function p._tabella(frame, args)
	local i = 1
	local imappa = 1
	local wmappac = {}
	table.insert(wmappac,'\n{{Mappa OSM|dati = [ ')
	local wid, entita, wlabel, wlink, wdesc, wimma, wtipo, wluogo, wluoghi, wcoord, wlat, wlon, wmappa, wcommons
	local ww, t, wwid, wwlabel, wwlink
	local comune
	local comune2 = ''
	local wTabella = {}
	local mostramappa = tonumber(args['mappa']) or 0
	table.insert(wTabella, '{| class="wikitable sortable" width=100%\n|-\n!style="width:45px|Num !!style="width:100px"|Immagine !!style="width:25%"|Elemento !!Tipologia !!style="width:25%"|Luogo !!style="width:50px"|Mappa !!style="width:50px"|Commons')
	while args[i] do
		wid = args[i]
		entita = mw.wikibase.getEntity(wid)
		if not entita then error('Entità ' .. wid .. ' non presente') end
		wlabel = entita:getLabel('it')
		if not wlabel then wlabel = '' end
		wlabel = string.gsub(wlabel,'"','')
		wlink = entita:getSitelink('itwiki')
		if wlink then
			if wlabel == '' then
				wlink = '[[' .. wlink .. ']]'
			else
				wlink = '[[' .. wlink .. '|' .. wlabel .. ']]'
			end
		else
			wlink = wlabel
		end
		wdesc = entita:getDescription('it')
		if wdesc then
			wdesc = '<br/><span style="font-size:90%">\'\'' .. wdesc .. '\'\'</span>'
		else
			wdesc = ''
		end
		wtipo = entita:formatPropertyValues('P31').value
		wluogo = ''
		wimma = ''
		if entita.claims then
			t = entita.claims['P18']
			if t then
				wimma = '[[File:' .. t[1].mainsnak.datavalue.value .. '|80x80px]]'
			else
				wimma = '[[File:Monumento - Immagine mancante.svg|80px|alt=Immagine mancante|link=|Immagine mancante]]'
			end

			ww = 1
			t = entita.claims['P131']
			comune = ''
			while t[ww] do
				wwid = t[ww].mainsnak.datavalue.value.id
				if string.len(comune)>0 then comune = comune .. ',' .. wwid else comune = wwid end
				if string.len(comune2)>0 then comune2 = comune2 .. ',' .. wwid else comune2 = wwid end
				wwlabel = mw.wikibase.getLabel(wwid)
				wwlink = mw.wikibase.getSitelink(wwid,'itwiki')
				if wwlink then
					if wwlabel then
						wluogo = wluogo .. '• [[' .. wwlink .. '|' .. wwlabel .. ']] '
					else
						wluogo = wluogo .. '• [[' .. wwlink .. ']] '
					end
				else
					if wwlabel then
						wluogo = wluogo .. '• ' .. wwlink
					else
						wluogo = wluogo .. '• ...'
					end
				end
				ww = ww+1
			end
		end

		wcommons = entita:formatPropertyValues('P373').value
		if wcommons ~= '' then
			wcommons = '[[File:Commons-logo.svg|24px|alt=Categoria su Commons|link=c:Category:' .. wcommons .. '|Categoria su Commons]]'
		end
		wcoord = entita:formatPropertyValues('P625').value
		if wcoord ~= "" then
			wlat = entita.claims.P625[1].mainsnak.datavalue.value.latitude
			wlon = entita.claims.P625[1].mainsnak.datavalue.value.longitude
			wmappa = '{{#tag:maplink|[ { "type": "ExternalData", "service": "geoshape", "ids": "' .. comune ..'", "properties": { "stroke": "#0060c0", "fill-opacity": 0 } },'..
				'{ "type": "Feature", "properties": {"title": "'.. wlabel ..'", "marker-color": "0060c0"},'..
				'"geometry": { "type": "Point", "coordinates": [ '.. wlon .. ',' .. wlat ..' ] } } ] |text=Mappa}}'
			table.insert(wmappac,'{ "type": "Feature", "properties": {"title": "['.. i .. '] ' .. wlabel ..'", "marker-color": "0060c0"},'..
				'"geometry": { "type": "Point", "coordinates": [ '.. wlon .. ',' .. wlat ..' ] } },')
			imappa = imappa + 1
		else
			wmappa = ''
		end
		table.insert(wTabella, '\n|-')
		--if (i == 2*math.floor(i/2)) then table.insert(wTabella, ' style="background-color:#f0f2f4"') end
		table.insert(wTabella, '\n|align=center| ' .. i)
		table.insert(wTabella, '\n|align=center| ' .. wimma)
		table.insert(wTabella, '\n|[[File:Wikidata-logo.svg|24px|alt=Vedi su Wikidata|link=d:'.. wid .. '|Vedi su Wikidata]]&nbsp;')
		table.insert(wTabella, wlink)
		table.insert(wTabella, wdesc)
		table.insert(wTabella, '\n|style="font-size:90%"|' .. wtipo)
		table.insert(wTabella, '\n| ' .. wluogo)
		table.insert(wTabella, '\n|align=center| ' .. wmappa)
		table.insert(wTabella, '\n|align=center| ' .. wcommons)
		i = i+1
	end
	table.insert(wTabella,'\n|}\n')
	table.insert(wmappac,' { "type": "ExternalData", "service": "geoshape", "ids": "' .. comune2 ..'", "properties": { "stroke": "#0060c0", "fill-opacity": 0 } } ] |cornice=0|allinea=center|larghezza=600}}\n')

	if (mostramappa == 1 and imappa>1) then
		table.insert(wmappac, table.concat(wTabella))
		return frame:preprocess(table.concat(wmappac))
	else
		return frame:preprocess(table.concat(wTabella))
	end
end

function p.tabella(frame)
	return select(2, xpcall(function()
		return p._tabella(frame,getArgs(frame, { parentOnly = true }))
	end, errhandler))end
return p