Aller au contenu

Module:Infobox/Route

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[voir] [modifier] [historique] [purger]

Cette page définit un module d'infobox. Pour les conseils sur l'usage de ce module, voyez Modèle:Infobox Route.


local localdata = require 'Module:Infobox/Localdata'
local general = require 'Module:Infobox/Fonctions'
local wikidata = require 'Module:Wikidata'
local linguistic = require 'Module:Linguistique'

local function DivisionsAdministratives()
	if not localdata.item then
		return nil
	end
	-- on cherche le pays pour être sûr de s'arrêter avant
	local country = wikidata.stringTable{entity = localdata.item, property = 'P17', displayformat = 'raw'}
	if table.getn(country) > 1 then
		return nil
	end
	local countryid
	if country then
		countryid = country[1]
	end

	-- récupération des valeurs
	local list = wikidata.transitiveVals(localdata.item, {property = 'P131', atdate = 'today'}, 3, 30, countryid)
	if not list then
		return nil
	end

	-- création des colonnes
	local rows = {}
	for i, div in pairs(list) do
		if (div == countryid) then
			break
		end
		local label = wikidata.formatStatements{
			entity = div,
			property =  'P31',
			defaultlinkquery = {property = 'P2354'},-- si pas de lien, lier vers la page de liste e.g liste des Etats de Califorie 
			defaultlink = '-', -- si aucun lien Wikipédia, pas de lien Wikidata
			labelformat = function(id)
				local str = wikidata.getLabel(id)
				if str then
					return linguistic.removecomplement(str)
				else
					return ''
				end
			end
		}
		local val = wikidata.formatEntity(div)
		
		table.insert(rows, 1, {type = 'row', label = label, value = function() return val end})
	end
	return rows
end

return 
	{
	maincolor = '#CCCCCC',
    parts =
    	{
			-- Titre
			{
				type = 'title',
				value = function() 
					return localdata['numéro de route']
						or wikidata.formatStatements{entity = localdata.item, property = 'P1824', conjtype = ' / '}
						or wikidata.getLabel(id)
					end,
				subtitle = function()
					local localname = localdata['nom']
					if not localname then
						return nil
					end
					localname = '<i>' .. localname .. '</i>'
					local lang = localdata['code langue']
					lang = require 'Module:Langue'.indicationDeLangue{nil, lang}
					return linguistic.conj({lang, localname}, ' ')
				end,
				wikidatasubtitle = function()
					local data = wikidata.formatAndCat({entity = localdata.item, property = 'P1705', conjtype = 'new line', showlang = true})
					if (data == nil) or (data == "") then
						return nil
					else
						return '<i>' .. data .. '</i>'
					end
			end,
				icon = 'route'
			},
		
			-- Cartouche signalétique
			{
				type = 'images',
				defaultsize = '40px',
				defaultalt = 'Cartouche signalétique représentant la route',
				wikidata = {property = 'P14'},
				numval = 5,
				style = {padding = '0 0 6px 0'}
				},
			general.mainimage('Article à illustrer Route'),
			-- Carte de localisation
			{
				type = 'images',
				imageparameters = 'carte',
				sizeparameter = 'taille carte',
				captionparameter = 'légende carte',
				wikidata = {property = 'P15'},
				numval = 1
				},
		-- Tableau sans titre
			{
				type = 'table',
				rows = {
					{
						type = 'mixed',
						label = 'Autre nom',
						plurallabel = 'Autres noms',
						valeur = 'autres noms',
						wikidata = {property = 'P1449', showlang = true, conjtype = 'new line'}
					},
					{
						type = 'mixed',
						label = 'Historique',
						wikidata = {property = 'P793', showdate = true, sorttype = 'chronological',
							conjtype = 'new line'}
					}
				}
			},
		-- Tableau des caractéristiques
			{
				type = 'table',
				title = 'Caractéristiques',
				rows = 	{
					{
						type = 'mixed',
						label = 'Longueur',
						value = 'longueur',
						wikidata = {property = 'P2043', targetunit = 'kilometre', rounding = 1}
					},
					{
						type = 'mixed',
						label = 'Direction',
						value = function(localdata)
							local dir = localdata['direction'] or wikidata.formatStatements{
								entity = localdata.item,
								property = {'P559', 'P609'},
								showonlyqualifier = 'P560',
								conjtype = '/',
								link = '-',
								ucfirst = '-',
								removedupes = true
							}
							if (dir == nil) or (dir == "") then
								return nil
							end
							return dir
							end
						},
					{
						type = 'mixed',
						label = 'Itinéraire',
						value = 'itinéraire',
						wikidata = {
							property = 'P609',
							showqualifiers = 'P559',
							conjtype = ' – ',
							labelformat = function(id)
								return wikidata.formatStatements{entity = id, property = 'P1824', numval = 1} or wikidata.getLabel(id)
							end
						}
					},
					{
						type = 'mixed',
						label = 'Intersections',
						value = 'intersections',
						wikidata = function()
							local data = wikidata.formatAndCat{
								entity = localdata.item,
								property = 'P2789',
								showqualifiers = 'P131',
								conjtype = 'new line',
								labelformat = function(id)
									return wikidata.formatStatements{ entity = id, property = 'P1824', numval = 1 } or wikidata.getLabel(id)
								end
							}
							if (data == nil) or (data == "") then
								return nil
							else
								return "<div class='NavFrame'><div class='NavHead'></div><div class='NavContent' style='text-align:left; display:block;'>" .. data .. '</div></div>'
							end
						end
					},
					{type = 'mixed', label = '[[Ceinture périphérique]]', value = 'ceinture péripherique' },
					{
						type = 'mixed',
						label = 'Réseau',
						plurallabel = 'Réseaux',
						value = 'réseau',
						wikidata = {property = 'P16', defaultlinkquery = {property = 'P2354'}}
					},
					{
						type = 'mixed',
						label = 'Autre classement',
						plurallabel = 'Autres classements',
						value = 'autres classements',
						wikidata = {
							property = {'P361', 'P1382'},
							excludespecial = true,
							labelformat = function(id)
								return wikidata.formatStatements{entity = id, property = 'P1824', numval = 1} or wikidata.getLabel(id)
							end
						}
					},
					{
						type = 'mixed',
						label = 'Exploitant',
						plurallabel = 'Exploitants',
						value = 'exploitant',
						wikidata = {property = 'P137', conjtype = 'new line'}
					},
					{
						type = 'mixed',
						label = 'Gestionnaire',
						plurallabel = 'Gestionnaires',
						value = 'gestionnaire',
						wikidata = {property = 'P126', conjtype = 'new line'}
					}
				}
			},
		-- Territoires traversés
			{
				type = 'table',
				title = 'Territoires traversés',
				rows = 	{
					general.country(),
					{type = 'multi', rows = DivisionsAdministratives() or {} },
					{type = 'mixed', label = 'Ville principale', plurallabel = 'Villes principales', value = 'villes principales', property = 'P1302' },
				}
			}
		}
	}