Modul:Benutzer:Kpfiwa/Flagge

aus Wikipedia, der freien Enzyklopädie
noch in Arbeit

--[[ 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 &nbsp; oder &thinsp; 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 '&nbsp;') .. 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