Modul:SMW: Unterschied zwischen den Versionen

1.900 Bytes hinzugefügt ,  Gestern um 19:11
+ Ask()
(uniFilter() optimiert)
(+ Ask())
Zeile 2: Zeile 2:


local com = require("Modul:Common")
local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local atr = require("Modul:Attribut")


function p.GetValues(frame)
function p.GetValues(frame)
Zeile 135: Zeile 138:
end
end
end
end
end
function p.Ask(frame)
-- Kommandozeile zum Debuggen:
-- p.Ask{pargs={" a "," ? b "," ? c1 # c2 "," ? d1 # d2 = d3 "," ? e1 = e3 ", " ? Ehemals ", " ? Ehemals = Test ", " ? Ehemals # tick ", " ? Ehemals # tick = Test", " ? Ehemals # tick =", Klasse="Straße"}}
local t = ""
local frame, pargs = dev.GetFrameAndParentArgs(frame)
local args = wik.getArgs(pargs) -- filtert "" aus und macht shadow-copy
-- Klasse extrahieren
local klasse = args["Klasse"]
args["Klasse"] = nil
-- newlines und Leerzeichen an Anfang/Ende ausfiltern
for i, _ in ipairs(args) do
args[i] = str.strip(string.gsub(args[i], "\n", ""))
end
-- query-args aufbereiten
for i, _ in ipairs(args) do
if string.sub(args[i], 1, 1) == "?" then
-- aufteilen in  ?attr#format=attr_text
local a = string.sub(args[i], 2)
a = str.split(a, "=")
local attr_text = a[2]
a = str.split(a[1], "#")
local format = a[2]
local attr = str.strip(a[1])
-- Attribute des Attributs attr abfragen
attr_attr = atr.getAttrAttributes(attr, klasse)
if attr_attr ~= nil then
format = format or attr_attr["Anzeigeformat"] -- Anzeigeformat übernehmen
attr_text = attr_text or attr_attr["Einzahl"] -- Anzeigetext Einzahl übernehmen
end
-- jetzt wieder alles zusammenbauen ?...#...=...
local query = "?" .. attr
if format ~= nil then
query = query .. "#" .. str.strip(format)
end
if attr_text ~= nil then
query = query .. "=" .. str.strip(attr_text)
end
args[i] = query
end
end
-- defaults setzen
-- args.class = args.class or "wikitable sortable"
args.headers = args.headers or "plain"
args.sep = args.sep or ", "
-- nun #ask final aufrufen
-- mw.logObject(args, "args")
t = t .. frame:callParserFunction("#ask", args)
return t
end
end


return p
return p