« Module:Infobox/Core » : différence entre les versions
De Nefald
Autres actions
m A protégé « Module:Infobox/Core » ([Modifier=Autoriser uniquement les administrateurs] (infini) [Renommer=Autoriser uniquement les administrateurs] (infini)) |
m map |
||
| Ligne 1 : | Ligne 1 : | ||
local p = {} | local p = {} | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
-- Fonction pour générer le lien de carte dynamique | |||
local function buildMapLink(args) | |||
-- Vérifier les champs obligatoires | |||
if not args.x or args.x == '' then return nil end | |||
if not args.y or args.y == '' then return nil end | |||
if not args.z or args.z == '' then return nil end | |||
if not args.worldname or args.worldname == '' then return nil end | |||
-- Valeurs par défaut pour les champs optionnels | |||
local mapname = args.mapname or 'flat' | |||
local zoom = args.zoom or '4' | |||
-- Construction de l'URL | |||
local url = string.format( | |||
'https://map.nefald.fr/?worldname=%s&mapname=%s&zoom=%s&x=%s&y=%s&z=%s', | |||
mw.uri.encode(args.worldname, 'PATH'), | |||
mw.uri.encode(mapname, 'PATH'), | |||
zoom, | |||
args.x, | |||
args.y, | |||
args.z | |||
) | |||
-- Retourner le lien formaté | |||
return string.format('[%s %s, %s, %s]', url, args.x, args.y, args.z) | |||
end | |||
-- Fonction de validation du champ "type" | -- Fonction de validation du champ "type" | ||
| Ligne 65 : | Ligne 92 : | ||
return categoryString | return categoryString | ||
end | end | ||
function p.build(args, config, frame) | function p.build(args, config, frame) | ||
| Ligne 120 : | Ligne 146 : | ||
local body = mw.html.create('div') | local body = mw.html.create('div') | ||
:addClass('infobox-body') | :addClass('infobox-body') | ||
-- Vérifier si on a des coordonnées complètes | |||
local mapLink = buildMapLink(args) | |||
local coordinatesDisplayed = false | |||
for _, section in ipairs(config.sections or {}) do | for _, section in ipairs(config.sections or {}) do | ||
| Ligne 128 : | Ligne 158 : | ||
body:node(sectionDiv) | body:node(sectionDiv) | ||
end | end | ||
for _, champ in ipairs(section.champs or {}) do | for _, champ in ipairs(section.champs or {}) do | ||
-- | -- Gestion spéciale pour les coordonnées | ||
if | if mapLink and not coordinatesDisplayed and (champ.cle == 'x' or champ.cle == 'y' or champ.cle == 'z' or champ.cle == 'worldname' or champ.cle == 'coordonnees') then | ||
local rowDiv = mw.html.create('div') | local rowDiv = mw.html.create('div') | ||
:addClass('infobox-row') | :addClass('infobox-row') | ||
| Ligne 145 : | Ligne 171 : | ||
local valueDiv = mw.html.create('div') | local valueDiv = mw.html.create('div') | ||
:addClass('infobox-value') | :addClass('infobox-value') | ||
:wikitext(mapLink) | |||
rowDiv:node(labelDiv):node(valueDiv) | rowDiv:node(labelDiv):node(valueDiv) | ||
| Ligne 160 : | Ligne 177 : | ||
coordinatesDisplayed = true | coordinatesDisplayed = true | ||
-- | -- Traitement normal des autres champs (ignorer x, y, z, worldname s'ils sont déjà affichés comme coordonnées) | ||
elseif not ( | elseif not (mapLink and (champ.cle == 'x' or champ.cle == 'y' or champ.cle == 'z' or champ.cle == 'worldname' or champ.cle == 'mapname' or champ.cle == 'zoom')) then | ||
local rawValue = args[champ.cle] | local rawValue = args[champ.cle] | ||
| Ligne 227 : | Ligne 244 : | ||
end | end | ||
-- Ajouter les catégories automatiques | -- Ajouter les catégories automatiques | ||
local categories = addCategories(args, config, frame) | local categories = addCategories(args, config, frame) | ||