--[[ Flagge Version 11c BETA, 2020-02-19
Formatierung von alternativer Ländervorlage mit Flagge und diverse zusäzliche Funktionen
muss noch "geputzt" werden
----
Grundübel sind das Fehlen der Formatboxen und das Fehlverhalten von mw-datatable.
Das macht einige eigenartige Konstruktionen nötig, z.B. Tabelle in Tabelle, style-Überschreibungen
--]]
-- Module globals
local flagborder = ''
local fli = {}; local werte={}
local hstd = 12 -- Logohöhe default -- ist via h=??? beeinflussbar
local lang = mw.getContentLanguage():getCode()
local logowidth = 20 -- die historische Weitenangabe
local messagePrefix = "lua-module-Flagge-"
local p = {}
local width = 20 -- nominelle Standartbreite bei 12 hstd
local wstd = 99 --[[ theoretische Vorgabe für Signet, wird ggf. überschrieben mit wstdF oder wstdW, sonst nac tatsächlicher Breite berechnet. --]]
local wstdF= 31 -- mit Rand, gemessen an Katar (28) Iran hatte aber schon 3:1, müsste hier also ~51 sein
local wstdW = 14 -- für Wappen mit Rand, gemessen an 12x12, also quadratisch
local listlang= "Modul:Sprachen"
-- local listlang = "Modul:Benutzer:Kpfiwa/Sprachen"
local pl={'l','f','lf','w','h','b','o','lt','q','a','p','s'}
local tblx, dd, dl1, dl2, dt1, dt2, tdm = 0, 0, '', '', '', ''
local tblxw = 100
local ksp, sp = ', ', ' '
local ref = string.format("%c%c%c", 127, 39, 34) -- um <ref zu erkennen
----- Neue Version mit ausgelagerten Scripts
--local MS = require(LUA_PATH .. "scripts") -- Modul:Benutzer:Kpfiwa/scripts
local MS ={}
MS = require("Modul:Benutzer:Kpfiwa/scripts")
local function trim(s) -- entfernt überflüssige führende und/oder anhängende Leerzeichen
return s:match "^%s*(.-)%s*$"
end
-----------
function p.f(frame)
fli = {}
local a = frame:getParent():getTitle() -- daher kommt XYZ oder der Vorlagentyp
local kzn = a:gsub("(%C+):(%C+)", "%2") --Kennzeichen oder Typ aus dem Vorlagennamen extrahieren
if kzn == 'Flagge' then wstd = wstdF; kzn = nil
elseif kzn == 'Wappen' then wstd = wstdW; kzn = nil
elseif kzn == 'Signet' then kzn=nil -- wstd muss sich aus der Bildbreite +2 ergeben, siehe function M.fpic
else fli = MS.loli(kzn); flix = fli
end -- if kzn
local orig, addon
frame = frame:getParent() --[[ erst mal die im Vorlagenaufruf übergebenen
Parameter auswerten und zuteilen --]]
for key, val in pairs(frame.args) do
key = MS.tu(key) -- das Wirrwar mit key, val, kzn muss noch entshhlüsselt und verbessert werden
val = trim(val); local t = val
if key == "1" then -- dummerweise 3 mögliche Varianten bei der alten Vorlage (Key, Linkziel oder #)
if val == '#' then orient = val -- aus Kompatibilitätsgründen zu Altversion
-- Hier eingreifen und passende Liste öffnen ggf., falls 1=Linkziel Fehler provozieren
else
fli = flix or MS.loli(val) -- falls nach der historischen methode via {{XYZ}} aufgerufen, liegt die Liste schon fest
if fli[t] then kzn = val else linkziel = val end
end -- if val == #
end --if key == "1"
if key == "K" or key=='I' or key == '3' then -- [K]ennzeichen, [I]SO
if val and val ~= '' then fli = MS.loli(val)
kzn = val -- muss das noch sein?
end
elseif key == 'L' then linkziel = val -- [L]ink (könnte ggf. '1' überschreiben.
elseif key == 'Z' then linkziel, linktext = val, val -- '[Z]iel' verändertes Linkziel, auch Linktext-Anzeige
elseif key == 'W' or key == 'P' then logowidth = tonumber(val) -- [p]ixel bzw. [W]IDTH
elseif key == '2' or key == 'T' then
if val ~= "#" then
ksp =''; linktext = MS.exhtml(val); sort = linktext -- link[t]ext und Sortierung abweichend von 1
else orient="#"
end
elseif key == '3' or key == 'T' then --ksp ='';
linktext = MS.exhtml(val); sort = linktext -- link[t]ext und Sortierung abweichend von 1
elseif key == 'H' then logohight = tonumber(val) -- [H]öhe (Zukunftsmusik)
elseif key == 'D' then was = val -- css-Dekos für den Linktext
elseif key == 'B' or key == 'M' then orient = MS.orf(val) -- Flaggen[m]argin oder [bo]rder ggf. wrap bzw. Umbruch ermöglichen siehe function MS.orf()
elseif key == 'E' or key == 'O' then orig = val -- Originalname, ggf mit Sprachkennzeichen aus Liste
elseif key == 'A' then do -- Ergänzungstext aus Liste oder übergeben als ausgeschriebener Parameter
addon = MS.exhtml(val)
if string.find(val,"^%[") then -- nix
elseif string.find(val,ref) or string.find(val,'<[rR][eE][fF]') or string.find(val,'&') or string.find(val,'FN') then ksp =''; sp=''
--[[ Vor <ref, FN sollte kein Leerzeichen und kein ', 'stehen. Zum absichtlichen Löschen
des LZ bzw. ,LZ kann auch a= mit oder   oder sonstigem '&' eingeleitet werden --]]
end -- if string
end -- then do
elseif key == 'S' then sort = val -- [S]ortierwert (beliebiges Wort) oder wie {{AUT|sortable=ja}}
elseif key == 'F' then flglnk = tonumber(val) -- 0 oder 1 oder nil,Bestimmt den Link unter der Flagge
elseif key == 'V' then tblx = tonumber(val) -- soll aus Flagge und Text eine 2-spaltige Tabelle machen
if tblx and (tblx < tblxw) then tblx = tblxw end -- Textbreite ggf. erweitern
elseif key == 'X' then return MS.a2h(val) .. "'''T='''" .. MS.tu(val) --[=[ Nur zum Testen, was übergeben wird,
z.b. bei <ref -- undokumentiert --]=]
end -- if key ...
end -- for key, val in ..
-- Jetzt die Tabellenzeile für 'kzn' (Kennzeichen) auslesen
local val = kzn -- entbehrlich?
local werte = MS.valkombi(fli,val)
if not werte then val = 'ZZZ' end --[[ falsches oder fehlendes Kennzeichen. Jede Liste hat so ein 'ZZZ' --]]
if werte then
local werte = MS.valkombi(fli,val)
linkziel = linkziel or werte.l or '' -- Link auf Lemma
linktext = linktext or werte.lt or werte.l or linkziel -- sichtbarer Linktext, default = Lemma
arh = werte.h or 1 -- Höhe (amtlich, aus aspect ratio)
arw = werte.w or 1 -- Breite dto
flgpic = werte.f or flag -- Bilddatei
if sort and MS.tu(sort,2) == 'JA' then sort = kzn end-- damit funktioniert auch unsinnige {{AUT|sortable=ja}}
sort = sort or werte.s or linktext or linkziel -- Sortierschlüssel aus Liste, default Linkziel
if werte.b then flagborder = '|border' or '' end -- Bildrand
end -- if werte
-- führenden Eintrag mit Sortiervorgabe (unsichtbar) anlegen
if sort then sort = '<span style="display:none;">' .. MS.sortclean(sort) .. '</span>' else sort = '' end
-- Zusatz angaben einbinden, falls aufgerufen und in Liste vorhanden
if not nopic then -- Bildaufbau
bild, nowrap = MS.fpic(orient,werte,logowidth,flglnk) -- Bildaufbau aufrufen, retour auch das Umbruchkennzeichen
else bild = '' end -- ohne Flagge, nur Text
local ad = werte.a -- Zusatzangaben aus Liste '=1' oder manuell eingegeben
if addon == "1" then addon = ad or '' end -- manuelle Eingabe hat Priorität
if orient == '#' or orient == 'C' then return sort .. bild .. (addon or '') end -- Text außer bei a= entffällt
local trailer = '' -- das "Schwänzle"
local on = werte.o
if orig and on then
trailer = MS.tail(on,orig)
if orig ~= "1" and trailer ~= '' then
tt=trailer;
-- trailer = frame:preprocess{text = tt}
--[[ das muss ersetzt werden durch
Wikipedia:Lua/Modul/Vorlage:lang/de#Funktionen_für_Lua-Module
oder besser noch durch eigenes Modul, da 'Modul:lang' sehr miserabel ist
--]]
end -- if orig ~= "1"
end -- if orig
if addon and #addon > 1 then
trailer = sp .. trailer .. ksp .. addon --MS.nnbsp(addon)
end -- if addon
if tblx > 0 then --[[ Verpackt Bild un Text in eine zweispaltige Tabelle;
gut für Tabellen, um Texte bündig untereinander zu setzen --]]
--[[ MÖGLICHKEIT STATT TABLE, geht aber wg. WP-Zensur nicht.
dl1 = "\<figure role=\"group\" style=\"width:" .. wstd+tblx .. "px; border:0; margin:0;padding:0;float:left;box-sizing:border-box; display:flex; align-items:center;\"\>"
tdm="" ; dl2="\</figcaption\>\</figure\>" --]]
dl1 = "<table frame='void'; style='padding:0; border:0; margin:0'><tr style='text-align:left;padding:0; border:0; margin:0'><td style='text-align:center; width:" .. wstd .. "px;padding:0; border:0; margin:0'>"
tdm = "</td><td style='text-align:left; width:" .. tblx .. "px;padding:0; border:0; margin:0'>"
dl2 = "</td></tr></table>" -- p war vor-/nachgesetzt, brachte nur lint-Fehler
end -- if tblx
if not nopic then -- sonst fällt Flagge/Wappen/Logo aus
bild, nowrap = MS.fpic(orient,werte,logowidth,flglnk) -- Bildaufbau aufrufen, retour auch das Umbruchkennzeichen
else bild = '' end -- ohne Flagge, nur Text
if orient == '#' or orient == 'C' then return sort .. bild end -- Text entffällt
if nowrap then linktext = MS.nbsp(linktext) end -- bastelt geschützte Leerzeichen
link= '[[' .. linkziel .. '|' .. MS.linkex(linktext) ..']]' -- Hier Linktext bereinigen, falls in Text bereits Links sind
ret = sort .. dl1 .. dt1 .. bild .. (tdm or ' ') .. MS.emph(link,was) .. dt2 .. trailer .. dl2 -- da ist dann alles zusammen!
return MS.putze(ret) -- Bereinigung von konstruktionsbedingt verbliebenen, überflüssigen oder doppelten Zeichen
end -- function p.f(fram)
----- AB DIE POST!
return p