Modul:Galeria
Megjelenés
A modult a Modul:Galeria/doc lapon tudod dokumentálni
local p = {}
-- Biztonságos segédfüggvény a képtípus meghatározására és tisztítására
local function detektalKepTipus(nyers_bemenet)
if not nyers_bemenet or nyers_bemenet == "" then return nil end
-- Szétválasztás a '|' karakter mentén
local kep_resz, felirat = nyers_bemenet:match("^%s*([^|]+)%s*|%s*(.*)%s*$")
if not kep_resz then
kep_resz = nyers_bemenet
felirat = nil
end
-- Trim (szóközök letakarítása)
local tiszta = kep_resz:match("^%s*(.-)%s*$")
local tiszta_felirat = felirat and felirat:match("^%s*(.-)%s*$")
if tiszta_felirat == "" then tiszta_felirat = nil end
-- 1. Internetes link
if tiszta:find("^https?://") then
return { tipus = "URL", path = tiszta, felirat = tiszta_felirat }
end
-- 2. Wikimedia Commons tisztítás
if tiszta:find("^[Cc]ommons:") or tiszta:find("^[Cc]:") then
local fajlnev = tiszta:gsub("^[Cc]ommons:", ""):gsub("^[Cc]:", "")
:gsub("^[Ff]ájl:", ""):gsub("^[Ff]ile:", "")
:match("^%s*(.-)%s*$")
return { tipus = "COMMONS", path = fajlnev, felirat = tiszta_felirat }
end
-- 3. Helyi kép tisztítás
local helyi_fajl = tiszta:gsub("^[Ff]ájl:", ""):gsub("^[Ff]ile:", "")
:match("^%s*(.-)%s*$")
return { tipus = "HELYI", path = helyi_fajl, felirat = tiszta_felirat }
end
function p.generalGaleria(frame)
local args = {}
-- Sablon környezet detektálása
if type(frame) == "table" and type(frame.getParent) == "function" then
args = frame:getParent().args
if not args or not args[1] then
args = frame.args
end
else
args = frame
end
if not args or not args[1] then
return '<span style="color:red; font-weight:bold;">[Hiba: A galéria nem kapott képeket!]</span>'
end
local html = {}
table.insert(html, '<div class="egyedi-galeria-container">')
-- Szigorúan csak a számozott paramétereken megyünk végig sorban!
-- Ez kiszűri a MediaWiki összes rejtett, szöveges kulcsú meta-paraméterét.
local i = 1
while args[i] or args[tostring(i)] do
local v = args[i] or args[tostring(i)]
local kepAdat = detektalKepTipus(v)
if kepAdat then
local imgTag = ""
local feliratHTML = ""
local tiszta_felirat = kepAdat.felirat or ""
if kepAdat.tipus == "URL" then
-- Külső kép LightGallery struktúrában (escaped HTML-lel a data attribútumban)
imgTag = string.format('<a href="%s" class="lg-vegyes-item" data-src="%s" data-sub-html="<h4>%s</h4>"><img src="%s" alt="%s" class="galeria-kep url-kep" /></a>',
kepAdat.path, kepAdat.path, tiszta_felirat, kepAdat.path, tiszta_felirat)
if kepAdat.felirat then
feliratHTML = string.format('<div class="galeria-felirat">%s</div>', tiszta_felirat)
end
elseif kepAdat.tipus == "COMMONS" then
-- Ha be van kapcsolva az InstantCommons, a sima Fájl: is jó, de biztosra megyünk a c: prefix-szel (kisbetűvel!)
if kepAdat.felirat then
imgTag = string.format('[[Fájl:c:%s|thumb|180px|%s]]', kepAdat.path, tiszta_felirat)
else
imgTag = string.format('[[Fájl:c:%s|thumb|180px]]', kepAdat.path)
end
else -- HELYI
if kepAdat.felirat then
imgTag = string.format('[[Fájl:%s|thumb|180px|%s]]', kepAdat.path, tiszta_felirat)
else
imgTag = string.format('[[Fájl:%s|thumb|180px]]', kepAdat.path)
end
end
table.insert(html, ' <div class="galeria-elem">')
table.insert(html, ' <div class="galeria-kep-doboz">' .. imgTag .. '</div>')
if kepAdat.tipus == "URL" and feliratHTML ~= "" then
table.insert(html, ' ' .. feliratHTML)
end
table.insert(html, ' </div>')
end
i = i + 1
end
-- ... a ciklus vége után ...
table.insert(html, '</div>')
local vegleges_html = table.concat(html, "\n")
-- Ha a preprocess nem működik, kényszerítsük a parsert egy trükkel:
return frame:preprocess(vegleges_html)
end
return p