Zum Inhalt springen

Modul:Vorlage:Mosaik

Aus Wikibooks

Informationen zu dieser Dokumentation
Modul Vorlage:Mosaik

Modulbeschreibung

Modul für die Mosaikdarstellung für Vorlage:Mosaik

Die Vorlage ruft das dieses Modul über die Wrapperfunktion mosaikWrapper auf. Es wird eine Tabelle erzeugt.

  • Der erste und zweite Parameter gibt die Breite und Höhe in Stück Mosaiksteinen an. Das ergibt die Spalten- und Zeilenanzahl der Tabelle.
  • Parameter liste1, liste2, .. ist eine Zahlenliste mit den hervorgehobenen Steinen. Die Zahlen sind die Steinnummern von 1 bis (Spalten mal Zeilen). Die Zahlen werden mit , getrennt.
  • Parameter style1, style2, .. ist der css-Style der hervorgehobenen Steine/ Zellen, z.B. die Farbe.
  • Parameter styleRest ist der css-Style der nicht hervorgehobenen Steine/ Zellen.
  • Parameter styleTabelle ist ein zusätzlicher css-Style der Tabelle
  • Parameter steinhöhe und steinbreite sind Längenmaße in html-Einheiten (px, em..).

Beispiel:

{{Mosaik |8 |5
|liste1= 1,2,3,5,10
|style1= background: yellow
|liste2= 1,6,23,15,20
|style2= background: orange
|styleRest= background: greenyellow |steinbreite= 3em |steinhöhe= 2em}}

Ergebnis:


Funktionen

mosaik

Hauptfunktion

mosaikWrapper

Wrapperfunktion, von der Vorlage ohne Parameter aufrufbar


Information


--- Modul für die Mosaikdarstellung für [[Vorlage:Mosaik]] <br><br>
-- Die Vorlage ruft das dieses Modul über die Wrapperfunktion <code>mosaikWrapper</code> auf. 
-- Es wird eine Tabelle erzeugt. 
-- * Der erste und zweite Parameter gibt die Breite und Höhe in Stück Mosaiksteinen an. Das ergibt die Spalten- und Zeilenanzahl der Tabelle.
-- * Parameter <code>liste1</code>, <code>liste2</code>, .. ist eine Zahlenliste mit den hervorgehobenen Steinen. Die Zahlen sind die Steinnummern von 1 bis (Spalten mal Zeilen). Die Zahlen werden mit <code>,</code> getrennt.
-- * Parameter <code>style1</code>, <code>style2</code>, .. ist der css-Style der hervorgehobenen Steine/ Zellen, z.B. die Farbe.
-- * Parameter <code>styleRest</code> ist der css-Style der nicht hervorgehobenen Steine/ Zellen.
-- * Parameter <code>styleTabelle</code> ist ein zusätzlicher css-Style der Tabelle
-- * Parameter <code>steinhöhe</code> und <code>steinbreite</code> sind Längenmaße in html-Einheiten (px, em..).
-- Beispiel:<br>
-- <pre><nowiki>{{Mosaik |8 |5 
-- |liste1= 1,2,3,5,10 
-- |style1= background: yellow 
-- |liste2= 1,6,23,15,20 
-- |style2= background: orange 
-- |styleRest= background: greenyellow |steinbreite= 3em |steinhöhe= 2em}}
-- </nowiki></pre>
-- Ergebnis:<br>
-- {{Mosaik |8 |5 
-- |liste1= 1,2,3,5,10 
-- |style1= background: yellow 
-- |liste2= 1,6,23,15,20 
-- |style2= background: orange 
-- |styleRest= background: greenyellow |steinbreite= 3em |steinhöhe= 2em}}
local p = {}

--- Hauptfunktion
function p.mosaik(frame)
	spalten= assert(tonumber(frame.args[1]), "nonumber arg1-2")
	zeilen= assert(tonumber(frame.args[2]), "nonumber arg1-2")
	
	paintLists= {}	
	for i= 1, 100 do
		if frame.args["liste"..i] then
			pl= {}
			for match in mw.text.gsplit(frame.args["liste"..i], ",") do 
				n= assert(tonumber(match), "nonumber liste"..i)
				pl[n]= true
			end
			paintLists[i]= pl
		else
			break
		end
	end
	--mw.addWarning("paintLists "..mw.dumpObject( paintLists ) )

	heightStyle= "height:1.5em; "; widthStyle= "width:1.5em;"
	if frame.args["steinhöhe"] then heightStyle= "height:"..frame.args["steinhöhe"]..";" end
	if frame.args["steinbreite"] then widthStyle= "width:"..frame.args["steinbreite"]..";" end
	
	styleTabelle= frame.args["styleTabelle"] or ""
	styles= {}
	styleUnpainted= "background-color: #eed;"
	if frame.args["styleRest"] then styleUnpainted= frame.args["styleRest"] end
	for i= 1, #paintLists do
		if frame.args["style"..i] then
			styles[i]= frame.args["style"..i]..";"
		else
			styles[i]= "background-color: #88d"
		end
	end
	--mw.addWarning("styles "..mw.dumpObject( styles ) )

	cellcount= 1
	out= '<table style="border-collapse:collapse;'..styleTabelle..'">'
	for i = 1, zeilen do
		out= out..'<tr>'
		for ii = 1, spalten do
			cellStyle= styleUnpainted
			for j= 1, #paintLists do
				if paintLists[j][cellcount] then
					cellStyle= styles[j]
				end
			end
			cellcount= cellcount+1
			out= out
			..'<td style="border:thin solid black;'
			..heightStyle..widthStyle..cellStyle
			..'"></td>'
		end
		out= out..'</tr>'
	end
	out= out..'</table>'
	return (out)
end

--- Wrapperfunktion, von der Vorlage ohne Parameter aufrufbar
function p.mosaikWrapper(frame)
	return p.mosaik(frame:getParent())
end

return p