Modul:Stadtteil

local p = {}

local com = require("Modul:Common")
local str = require("Modul:String")
local fab = require("Modul:Faktenbox")
local kla = require("Modul:Klasse")
local fom = require("Modul:Formular")

function p.Faktenbox(frame)
	-- Basis-Faktenbox-Daten (Klasse/Kategorie/Formular)
	local fbdata = fab.getFbdata(frame)
	fbdata.klasse = {"Stadtteil"}
	fbdata.kategorie = {kla.getCategory("Stadtteil")}
	fbdata.formular = fbdata.alias or "Stadtteil" -- ggf. "Stadtteil/Work"
	fbdata.positionscheck = true
	-- StadtteilAusprägung
	local stadtteilauspraegung = fbdata.pargs["StadtteilAusprägung"]
	if stadtteilauspraegung ~= nil then
		stadtteilauspraegung =
			str.splitAndStrip(fbdata.pargs["StadtteilAusprägung"], ";")
	end
	fbdata.attr.list["StadtteilAusprägung"] = 
		stadtteilauspraegung or fbdata.alias or "Stadtteil"
	if stadtteilauspraegung ~= nil then
		fbdata.alias = table.concat(stadtteilauspraegung, ", ")
	end
	-- Stadtbezirk Aufbereitung als Link
	if fbdata.pargs["Stadtbezirk"] ~= nil then
		fbdata.pargs["Stadtbezirk"] =
			"[[Stadtbezirk " .. fbdata.pargs["Stadtbezirk"] .. "|" ..
			fbdata.pargs["Stadtbezirk"] .. "]]"
	end
	-- Tabs einsammeln und zusammenfügen
	local t = 
		p.kartenTab(fbdata) .. -- Karten-Tab muss vor Tabs mit zeileGeoDaten() sein
		fab.bildTab(fbdata) ..
		kla.faktenboxDatenTab(fbdata)
	t = fab.factbox_header_footer(t)
	-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...)
	t = t .. "[[Kategorie:" .. fbdata.pagename .. "|*]]"
	t = t .. fab.postprocess(fbdata)
	-- Pre-Processing
	t = fbdata.frame:preprocess(t)
	return t
end

function p.Formular(frame)
	-- Kommandozeile zum Debuggen:
	-- = p.Formular(mw.getCurrentFrame())
	local alias = frame.args["Alias"]
	local template = alias or "Stadtteil"
	local t = ""
	t = t .. "{{{for template|" .. template .. "|label=" .. template .. "}}}"
	t = t .. kla.attrFormTable(frame, "Stadtteil")								-- gemäß AttributListe der Klasse
	t = t .. frame:expandTemplate{title = "Formular:PositionKarte"} 
	t = t .. "{{{end template}}}"
	t = t .. fom.articleEditAndCommon()
	return t
end

function p.kartenTab(fbdata)
	local t = ""
	-- defaults
	fbdata.pargs["zoom"] = fbdata.pargs["zoom"] or 13
	-- location ermitteln
	if fbdata.pargs["location"] == nil and
		not com.isTrue(fbdata.pargs["Ehemals"]) then
		-- suburb probieren
		local location = "suburb " .. fbdata.pagename .. ",Fürth,Bayern,Deutschland"
		local geocode = fbdata.frame:callParserFunction("#geocode", location)
		if geocode == "Geocoding failed" then
			-- nochmal nackt probieren, wenn keine Koordinate übergeben
			if fbdata.pargs["lat"] == nil or fbdata.pargs["lon"] == nil then
				location = fbdata.pagename .. ",Fürth,Bayern,Deutschland"
				geocode = fbdata.frame:callParserFunction("#geocode", location)
			end
		end
		if geocode ~= "Geocoding failed" then
			fbdata.pargs["location"] = location
		end
	end
	-- Standard-Karten-Tab
	t = t .. fab.kartenTab(fbdata)
	return t
end

return p