|
|
| Zeile 1: |
Zeile 1: |
| local p = {} | | local p = {} --p stands for package |
| | local c = require( "Module:Common" ) |
|
| |
|
| local com = require("Modul:Common")
| | function p.Faktenbox( frame ) |
| local str = require("Modul:String")
| | local args = frame:getParent().args |
| local geo = require("Modul:Geo")
| | |
| local fab = require("Modul:Faktenbox")
| | -- Before you ask: No, you cant' use extensionTag here! |
| local kar = require("Modul:Karte")
| | local tpl_bild = p.bild(frame, args) |
| local wik = require("Modul:Wiki")
| | local tab_bild='' |
| local smw = require("Modul:SMW")
| | if tpl_bild:gsub("%s+", "") ~= '' then |
| | | tab_bild='<tab name=Bild>' .. |
| function p.Faktenbox(frame) | | tpl_bild .. '</tab>' |
| -- mw.log("Faktenbox(frame)")
| | end |
| -- mw.logObject(frame, "frame")
| | |
| -- Konsolenzeile zum Debuggen: | | local tpl_karte = p.karte(frame, args) |
| -- =p.Faktenbox{pargs={Stadtteil="Innenstadt;Ronhof",Ort="Buxtehude"}} | | local tab_karte='' |
| | | if tpl_karte:gsub("%s+", "") ~= '' then |
| -- Basis-Faktenbox-Daten (Klasse/Kategorie/Formular)
| | tab_karte='<tab name=Karte>' .. |
| local fbdata = fab.getFbdata(frame) | | tpl_karte .. '</tab>' |
| fbdata.klasse = {"Straße"} | |
| fbdata.kategorie = {"Straßen"} | |
| fbdata.formular = "Straße" -- ggf. "Straße/Work"
| |
| fbdata.positionscheck = true
| |
| | |
| -- Postleitzahl ermitteln
| |
| local stadtteile = str.splitAndStrip(fbdata.pargs["Stadtteil"], ";")
| |
| fbdata.plz = geo.stadtteil2PLZ(stadtteile)
| |
| | |
| -- Tabs einsammeln und zusammenfügen | |
| local t = p.kartenTab(fbdata) .. -- Karten-Tab muss vor Tabs mit zeileGeoDaten() sein | |
| fab.bildTab(fbdata) .. p.datenTab(fbdata) .. fab.benennungenTab(fbdata)
| |
| t = fab.factbox_header_footer(t) | |
| | |
| -- Straßen-spezifische Kategorien usw.
| |
| if fbdata.pargs["Stadtteil"] == nil then | |
| t = t .. "[[Kategorie:Straßen ohne Stadtteil]]" | |
| end | | end |
| if fbdata.pargs["Ort"] == nil then | | |
| smw.addAttrToList(fbdata.attr.list, "Ort", "Fürth")
| | -- The tab "Daten" is visible everytime |
| | local tpl_daten = p.daten(frame, args) |
| | local tab_daten='<tab name=Daten>' .. |
| | tpl_daten .. '</tab>' |
| | |
| | local tpl_benennungen = p.benennungen(frame, args) |
| | local tab_benennungen='' |
| | if tpl_benennungen:gsub("%s+", "") ~= '' then |
| | tab_benennungen='<tab name=Benennungen>' .. |
| | tpl_benennungen .. '</tab>' |
| end | | end |
| | |
| | local t ='<div class=factbox><tabs>' .. |
| | tab_karte .. |
| | tab_bild .. |
| | tab_daten .. |
| | tab_benennungen .. |
| | '</tabs></div>' |
|
| |
|
| -- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...) | | -- Use preprocess to render the factbox and all contens at once |
| t = t .. fab.postprocess(fbdata) | | return frame:preprocess(t) |
| -- Pre-Processing
| |
| -- mw.logObject(t, "t")
| |
| t = fbdata.frame:preprocess(t)
| |
| return t
| |
| end | | end |
|
| |
|
| function p.datenTab(fbdata) | | function p.bild(frame, args) |
| -- mw.log("datenTab(fbdata)")
| | return frame:expandTemplate{title = 'Bildertab', args={Bild=args.Bild}} |
| -- mw.logObject(fbdata, "fbdata")
| | end |
| --[[ Konsolenzeile zum Debuggen:
| |
| fab=require("Modul:Faktenbox"); fbdata=fab.fbdata{pargs={Baujahr="1987",Stadtteil="Innenstadt;Ronhof",Ort="Buxtehude"}};
| |
| fbdata.klasse={"Straße"}; fbdata.kategorie={"Straßen"}; fbdata.fullpagename="Erlanger Straße"; fbdata.subpagename="Erlanger Straße";
| |
| print(p.datenTab(fbdata))
| |
| ]]
| |
| local t = ""
| |
|
| |
|
| -- Zusammenbau
| | function p.karte(frame, args) |
| t = t .. fab.zeileKategorieSeite(fbdata)
| | local args_ = c.shallowcopy(args) |
| t = t .. fab.zeile{fbdata = fbdata, attr_name = "Baujahr", delimiter = ";"}
| | args_["streetlocation"] = frame:expandTemplate{title = 'Straße/Karte/Lokation', args=args} |
| t = t .. fab.zeile{fbdata = fbdata, attr_name = "Stadtteil", delimiter = ";"} | | return frame:expandTemplate{title = 'Straße/Karte', args=args_} |
| t = t .. fab.zeile{fbdata = fbdata, attr_name = "PLZ", attr_val = fbdata.plz}
| | end |
| t = t .. fab.zeile{fbdata = fbdata, attr_name = "Ort", delimiter = ";"}
| |
| t = t .. fab.zeile{fbdata = fbdata, attr_name = "Ehemals"}
| |
| t = t .. fab.zeile{fbdata = fbdata, attr_name = "Abbruchjahr", delimiter = ";"}
| |
| t = t .. fab.zeileGeoDaten(fbdata)
| |
| t = fab.table_header_footer(t)
| |
| t = t .. fab.zeileSemantikBrowsenAbfrage(fbdata)
| |
|
| |
|
| -- Tab draus machen
| | function p.daten(frame, args) |
| t = fab.tab(t, "Daten")
| | return frame:expandTemplate{title = 'Straße/Daten', args=args} |
| -- mw.log("t = " .. t)
| |
| return t | |
| end | | end |
|
| |
|
| function p.kartenTab(fbdata) | | function p.benennungen(frame, args) |
| -- mw.log("kartenTab(fbdata)")
| | return frame:expandTemplate{title = 'Straße/Benennungen'} |
| -- mw.logObject(fbdata, "fbdata")
| | end |
| -- Konsolenzeile zum Debuggen:
| | |
| -- fbdata=require("Modul:Faktenbox").fbdata{pargs={Ehemals="ja";location="Bla"}}; fbdata.pagename="Erlanger Straße"; fbdata.plz={90765}; p.kartenTab(fbdata)
| | function p.HausnummerOhneBuchstaben(frame) |
| local t = ""
| | return string.match( frame.args[1], "%d+" ) |
| if string.find(fbdata.pagename, ";") ~= nil then
| |
| t = t .. "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
| |
| else
| |
| -- Karten-Argumente übernehmen und aufbereiten
| |
| local args = fab.getKartenArgs(fbdata, 16)
| |
| -- Straßen-Lokation ermitteln, sofern location nicht explizit angegeben und keine GeoJson-Karte vorhanden
| |
| if args["location"] == nil and
| |
| not wik.pageExists("GeoJson:" .. (args["geojson"] or fbdata.pagename)) and
| |
| not com.isTrue(args["Ehemals"]) then
| |
| local _, strasse, _ = str.bracketSplitAndStrip(fbdata.pagename) -- Klammern abschneiden wie z. B. "(Straße)"
| |
| args["location"] = strasse .. "," .. (args["Ort"] or "Fürth")
| |
| if #fbdata.plz > 0 then
| |
| args["location"] = args["location"] .. "," .. fbdata.plz[1]
| |
| end
| |
| args["location"] = args["location"] .. ",Bayern,Deutschland"
| |
| end
| |
| local karten_args_vorhanden = kar.kartenArgsVorhanden(args)
| |
| -- Gebäude-Selektor für Queries
| |
| local gebaeude_selector =
| |
| "[[:+]][[Kategorie:Gebäude]][[Straße::" .. fbdata.pagename .. "]] OR " ..
| |
| "[[:+]][[Kategorie:Gebäude]][[Straße2::" .. fbdata.pagename .. "]] OR " ..
| |
| "[[:+]][[Kategorie:Gebäude]][[Straße3::" .. fbdata.pagename .. "]]"
| |
| -- Gebäude-Artikel mit dieser Straße vorhanden?
| |
| local n_gebaeude = 0
| |
| if not karten_args_vorhanden then
| |
| local query = {gebaeude_selector, ["format"] = "count"}
| |
| n_gebaeude = mw.smw.ask(query)
| |
| end
| |
| -- Karte erstellen
| |
| if karten_args_vorhanden or n_gebaeude > 0 then
| |
| args["nomap"] = "ja" -- kar.karte() rendert NICHT die Karte!
| |
| local t_karte -- sondern füllt nur SMW-DB und geoobjects
| |
| t_karte, fbdata.geoobjects = kar.karte(fbdata.frame, args) -- und setzt Kategorien
| |
| t = t .. t_karte
| |
| -- Karten-Query zusammensetzen
| |
| local query = gebaeude_selector
| |
| if not fbdata.geoobjects.geojson.exists then
| |
| query = query .. " OR [[" .. fbdata.pagename .. "]]"
| |
| end
| |
| query = {
| |
| query,
| |
| ["format"] = "leaflet", ["limit"] = "10000",
| |
| ["zoom"] = args["zoom"],
| |
| ["resizable"] = "yes", ["enablefullscreen"] = "yes",
| |
| ["cluster"] = "yes", ["clustermaxzoom"] = "16",
| |
| ["clusterspiderfy"] = "no"}
| |
| for _, q in ipairs{"Geokoordinate", "Objekt", "Architekt",
| |
| "Baujahr", "Baustil", "AktenNr=Akten-Nr.", "Bauherr"} do
| |
| table.insert(query, "?" .. q)
| |
| end
| |
| if fbdata.geoobjects.geojson.exists then
| |
| query["geojson"] = fbdata.geoobjects.geojson.pagename
| |
| elseif args["lat"] ~= nil and args["lon"] ~= nil then
| |
| query["centre"] = args["lat"] .. "," .. args["lon"]
| |
| -- else
| |
| -- query["centre"] = "49.476,10.989"
| |
| end
| |
| -- Karte per #ask rendern
| |
| t = t .. fbdata.frame:callParserFunction("#ask", query)
| |
| end
| |
| end
| |
| -- Tab draus machen
| |
| -- mw.logObject(t, "t")
| |
| t = fab.tab(t, "Karte")
| |
| return t
| |
| end | | end |
|
| |
|
| return p | | return p |