Zum Inhalt springen

Modul:Flagge

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. Oktober 2019 um 09:35 Uhr durch Kpfiwa (Diskussion | Beiträge) (Neuanlage). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Die Arbeitsweise und Funktionen ergeben sich aus den im Code eingefügten Erklärungen.

Das gesamte Modul müsste noch optimiert werden. Einige kleine unschöne Parameterumsetzungen müssten verbessert werden. Derzeit werden in der deutschen Version AUSSCHLIESSLICH auffällige oder gemeldete Funktionsfehler notdürftig behoben. Weitere Features sind nur in den Modulen meiner ausländischen Freunde enthalten. Die spezielle Verarbeitung von Wappen und allg. Logos, die einer besonderen Breitenberechnung bedürfen, werden hier vorterst nicht übernommen.

Grund der Einschränkung

Ein besorgter, wenn in diesem Fall auch etwas oberflächlicher User fühlte sich bemüßigt, Vorlage:Flagge mit einen Warnhinweis zu versehen, der mangelhafte Funktionalität, Fehlerverarbeitung und allgemein Wartung des Moduls sowie für ihn zu üppige Funktionalität und Universalität bemängelt. Einige der Argumente, die auch von seiner Fangemeinde nachgeplappert werden, sind schlicht lächerlich, da er vermutlich die Funktionen nicht überblickt und auch nie die vorlaufende Diskussion beachtet hat. Eher ist es Frust, dass eine vor vielen Jahren begonnene Portierung von en:Template:Flagicon bzw. en:Module:Flagg nie funktionsfähig umgesetzt wurde und weiterhin lang und breit diskutiert wird (inzwischen wieder sanft eingeschlafen).

Logisch, Verbesserungen sind sinnvoll und angebracht. Doch der de-WP gilt: Konfrontation geht vor Kommunikation und und es gibt nur zwei Meinungen: „Die eigene Auffassung und die falsche“. Konstruktive, freundliche Zusammenarbeit kenne ich nur bei den fremdsprachigen Wikis.


--[=[ Flagge 2019-10-25
Formatierung von alternativer Ländervorlage mit Flagge
]=]
-- Module globals
local messagePrefix = "lua-module-Flagge-"

local p = {}
local fli = {}
local logowidth = 20 -- die historische Weitenangabe
local wstd = 31 -- mit Rand, gemessen an katar (28) Iran hatte aber schon 3:1, müsste hier also ~51 sein
local hstd = 12 -- Logohöhe default -- ist via h=??? beeinflussbar
local h, w = 2, 3 -- default h/w
local width = 20 -- nominelle Standartbreite bei 12 hstd
local flagborder = ''
local noflag = 'Flag of None.svg' -- falls nichts ankommt
local linktext = nil -- 'nicht erkannt'
local flgpic = flag
local flglnk= ''
local lang = mw.getContentLanguage():getCode()
local listtyp = nil
local sort = nil
local kzn = nil

-----
local function tu(a,z) -- wandelt in Versalien und extrahiert erstes Zeichen oder Anzahl z
	return string.sub(string.upper(a), 1, z or 1)
end

local function loli(v) -- 
	local lang = mw.getContentLanguage():getCode()
	--local Liste = "Modul:Flagge/Flaglist_" .. lang  .. '_' .. abc
	local Liste = "Modul:Flagge/Flaglist_" .. lang  .. '_' .. tu(v)
return mw.loadData(Liste)
end


function nbsp(k) --Hier wird das Leerzeichen durch ' ' ersetzt => NOWRAP
	return string.gsub(k, " ", " ")
end -- function nbsp

function nnbsp(k) --Hier wird ein schmales, geschütztes Leerzeichen => NOWRAP eingefügt bzw. (wenn k) ' ' damit ersetzt
	if k then return string.gsub(k, " ", " ")
    else return "&#8239;" -- evtl. wäre '<span style="font-size:0.167em;">&nbsp;</span>' oder '&thinsp;' besser
  end -- if k
end -- function nnbsp

function sortclean(k)
	-- In der Liste stören im Lemma vorhandene Sonder-/Satzzeichen bei der Sortierung. Daher radikal putzen
	return string.gsub(k, "%A+", "")
end

function round(val, decimal) -- css will bei zu vielen Nachkommastellen streiken
 if (decimal) then
  return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
 else
  return math.floor(val+0.5)
 end
end

function fpic(o, val, logowidth) -- (orient, val, logowidth)
	local h,w
	local nowrap = 'white-space:nowrap;'
	local f = fli[val].f -- Grafik/Flagge
	if fli[val].h and fli[val].w then --falls es Größeneintrag gibt, ...
		h = fli[val].h; w = fli[val].w -- Höhe, Breite
	else -- ... sonst via FileMedia.get... Das ist aber teurer!
		local FileMedia = require("Module:FileMedia" )
	    FileMedia = FileMedia.FileMedia()
		h = FileMedia.getHeight(f) -- Höhe
		w = FileMedia.getWidth(f)  -- Breite
	end
		flglnk = '|link=' ..  linkziel or fli[val].l or nil -- Flaggenlink
		flgpic = fli[val].f or noflag -- Bilddatei (File: ..) -- statt Datei: da 'international'
		if fli[val].b == 1 then flagborder = '|border' or '' end -- Bildrand  'international'
	--end
	--[[ setzt den Bildaufruf zusammen
		dabei werden Größenangaben aus der Liste berücksichtigt und ggf. gem WIDTH neu berechnet.
		Ein Problem bleibt bei Listen/Tabellen, die die historische Flagge vom Iran enthalten, da doer 3:1 --]]
		if logohight then 
			zoom = round(logohight/hstd, 2)
			hightreal = logohight
		else
			zoom = round(logowidth/width, 2)
			hightreal = hstd * zoom -- Errechnete Höhe bei WIDTH-Angabe
		end -- if logohight
	divi = round(h/w,3)
	margins= wstd*zoom-hstd*zoom/h*w
	margin_half = margins/2

	local file = '[[File:' .. flgpic .. '|x' .. hightreal .. 'px' .. flglnk .. flagborder .. '|class=noviewer]]'
	if o == '#' then return file --.. '&nbsp;'
	elseif o == 'W' then -- Zeilenumbruch (wrap) erlaubt, Flagge an Text
			rightmrg, leftmrg, nowrap = 0, 0, ''
			elseif o == 'L' then -- linksbündig
			rightmrg, leftmrg =  margins, 0
		elseif o == 'R' then -- rechtsbündig
			rightmrg, leftmrg = 0, margins
		elseif o == 'N' then -- 
			rightmrg, leftmrg = 0, 0
		else
			leftmrg, rightmrg = margin_half, margin_half
	end
	return '<span style="margin:0px ' .. rightmrg .. 'px 0px '.. leftmrg ..'px;' .. nowrap .. '">' .. file .. '</span>'
end

function orf(v)
	v = tu(v)
	local t = {'L', 'R', 'N', 'W', '#'}
	--[[	L: links-/leftbündig
			R: rechts-/rightbündig
			N: Flagge direkt an Text, nowrap
			W: Flagge direkt an Text, Zeilenumbruch möglich
			#: Kein Linktext, nur Flagge --]]
  for index, value in ipairs(t) do
    if value == v then
      return v
    end -- if value
  end -- for ...
  return false
end -- orf(v)

function p.f(frame)
	fli = {}
	local a = frame:getParent():getTitle() -- daher kommt XYZ
	local kzn = string.gsub(a, "(%C+):(%C+)", "%2") --Kennzeichen aus dem Vorlagennamen extrahieren
	if kzn == 'Flagge' then kzn = nil else fli = loli(kzn); flix = fli end
	--[[ beim Zugang via vorlage "Flagge" ist die Abfrage nicht erforderlich.
	 flix könnte ggf unten noch abgefragt werden --]]

	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 = tu(key) -- das Wirrwar mit key, val, kzn muss noch entshlüsselt werden
		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 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
	    	fli = loli(val)
	    	kzn = val -- muss das noch sein?
	    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 linktext = val -- link[t]ext abweichend von 1
	    elseif key == 'H' then logohight = tonumber(val) -- [H]öhe (Zukunftsmusik)
	    elseif key == 'B' or key == 'M' then orient = orf(val) -- Flaggen[m]argin oder [bo]rder ggf. wrap bzw. Umbruch ermöglichen siehe function orf()
	    elseif key == 'E' or key == 'O' then orig = val -- Originalname, ggf mit Sprachkennzeichen aus Liste
	    elseif key == 'A' then addon = val -- Ergänzungstext aus Liste oder übergeben als ausgeschriebener Parameter
	    elseif key == 'S' then sort = val -- [S]ortierwert (beliebiges Wort) oder wie {{AUT|sortable=ja}}
		end -- if key ...
	end -- for key, val in ..

	-- Jetzt die Tabellenzeile für 'kzn' (Kennzeichen) auslesen
	local val = kzn -- entbehrlich?
	if not fli[val] then val='ZZZ' end --[[ falsches oder fehlendes Kennzeichen. Jede Liste hat so ein 'ZZZ' --]]
	if fli[val] then
		linkziel = linkziel or fli[val].l or '' -- Link auf Lemma
		linktext = linktext or fli[val].ltxt or fli[val].l or linkziel -- sichtbarer Linktext, default = Lemma
		arh = fli[val].h or 1 -- Höhe (amtlich, aus aspect ratio)
	    arw = fli[val].w or 1 -- Breite dto
		flgpic = fli[val].f or flag -- Bilddatei
		flglnk = linkziel or flgpic -- Flaggenlink
		if sort and tu(sort,2) == 'JA' then sort = kzn end-- damit funktioniert auch {{AUT|sortable=ja}}
		sort = sort or fli[val].s or linktext or linkziel -- Sortierschlüssel aus Liste, default Linkziel
		if fli[val].b then flagborder = '|border' or '' end -- Bildrand
	end -- if fli[val]
	
	-- führenden Eintrag mit Sortiervorgabe (unsichtbar) anlegen
	if sort then sort = '<span style="display:none;">' .. sortclean(sort) .. '</span>' else sort = '' end
	-- Zusatz angaben einbinden, falls aufgerufen und in Liste vorhanden
	local tail = '' -- das "Schwänzle"
	if orig then
		local o1 = fli[val].lo -- Sprache
		local o2 = fli[val].o -- "Originalname" in Landessprache 'lo'
		if orig == "1" and o2 then linktext = o2
		elseif orig == "2" and o2 then tail = ' (' .. o2 ..')'
		elseif orig == "3" and o2 and o1 then
			tt='{{nowrap|{{' .. o1 .. 'S|' .. o2 ..'}}}}'
			tail= " (" .. frame:preprocess{ text = tt } ..")"
		end
	end -- if orig
	local ad=fli[val].a -- Zusatzangaben aus Liste '=1' oder manuell eingegeben
	if addon and ad then
		if addon == "1" and ad then addon = ad end
		if addon ~= "1" then addon = addon end -- manuelle Eingabe hat Priorität
		tail = tail .. ', ' .. nnbsp(addon)
	end

	bild = fpic(orient, val, logowidth) -- Bildaufbau
	if orient == '#' then return sort .. bild end -- Text entffällt
	if nowrap then linktext = nbsp(linktext) end -- bastelt geschützte Leerzeichen
	link= '&nbsp;[[' .. linkziel .. '|' .. linktext ..']]'
	return sort .. bild .. link  .. tail  -- da iat dann alle zusammen
end -- function p.f(frame)
-----------
return p