23.089
Bearbeitungen
(Aufteilung GetValues/getValues) |
(uniFilter() optimiert) |
||
| (34 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local com = require("Modul:Common") | |||
local str = require("Modul:String") | |||
function p.GetValues(frame) | function p.GetValues(frame) | ||
-- Gets the values from an attribute on a page | -- Gets the values from an attribute on a page to be called from Wikitext by #invoke | ||
local page = frame.args | -- mw.log("GetValues(frame)") | ||
local attr = frame.args | -- mw.logObject(frame) | ||
local | local page = frame.args.page or "" | ||
local attr = frame.args.attr or "" | |||
local sep = frame.args.sep or ";" | |||
local plain = frame.args.plain or false | |||
local values = p.getValues(page, attr, plain) | |||
local vallist = table.concat(values, sep) | |||
-- mw.logObject(vallist) | |||
return vallist | |||
end | |||
function p.getValues(page, attr, plain) | |||
-- Gets the values from an attribute on a page to be called inside lua | |||
-- mw.log("getValues(" .. page .. ", " .. attr .. ", " .. tostring(plain) .. ")") | |||
local query = "[[:" .. page .."]]|?" .. attr -- selektiert nur die Seite selbst | |||
if plain then | |||
query = query .. "#-" | |||
end | |||
query = query .. "|mainlabel=-|limit=1" | |||
return p. | local ask_result = mw.smw.ask(query) | ||
local values = {} | |||
if not com.isEmpty(ask_result) then | |||
values = ask_result[1][attr] -- Erste Ergebnis-Zeile, attr-Spalte | |||
if type(values) ~= "table" then -- Immer als table rückgeben, auch wenn keine (dann umformen) | |||
values = { [1]=values } | |||
end | |||
end | |||
-- mw.logObject(values) | |||
return values | |||
end | |||
function p.getPages(query, plain) | |||
-- mw.log("getPages(" .. query .. ", " .. tostring(plain) .. ")") | |||
if plain then | |||
query = query .. "|?#-" | |||
end | |||
query = query .. "|mainlabel=-" | |||
local ask_result = mw.smw.ask(query) | |||
local values = {} | |||
if not com.isEmpty(ask_result) then | |||
for _, v in pairs(ask_result) do | |||
table.insert(values, v[1]) -- jede Zeile, 1. Spalte | |||
end | |||
end | |||
-- mw.logObject(values) | |||
return values | |||
end | |||
function p.UniFilter(frame) | |||
-- mw.log("UniFilter(frame)") | |||
-- mw.logObject(frame) | |||
local suchtext = frame.args[1] or "" | |||
local filter = p.uniFilter(suchtext) | |||
-- mw.log(filter) | |||
return filter | |||
end | |||
function p.uniFilter(suchtext) | |||
-- mw.log("uniFilter(" .. suchtext .. ")") | |||
local filter = "" | |||
if not com.isEmpty(suchtext) and type(suchtext) ~= "table" then | |||
suchtext = tostring(suchtext) -- Suchtext bereinigen | |||
suchtext = string.gsub(suchtext, "%[", "") -- Link-Klammern rauslöschen | |||
suchtext = string.gsub(suchtext, "%]", "") | |||
suchtext = string.gsub(suchtext, "|", " ") | |||
suchtext = str.strip(suchtext) | |||
if suchtext == "*" or suchtext == "" then -- Filter irgendein Wert | |||
filter = "+" | |||
else | |||
filter = uniFilterAddGrossKlein(suchtext) -- Suchtext in Gänze | |||
local suchtext = str.splitAndStrip(suchtext, ";") -- Suchbegriffsliste hinzufügen | |||
if #suchtext > 1 then | |||
for _, st in ipairs(suchtext) do | |||
filter = filter .. "||" .. uniFilterAddGrossKlein(st) | |||
end | |||
end | |||
end | |||
end | |||
-- mw.log(filter) | |||
return filter | |||
end | end | ||
function | function uniFilterAddGrossKlein(suchtext) | ||
local filter = "" | |||
suchtext = -- zuerst klein geschrieben | |||
string.lower(string.sub(suchtext, 1, 1)) .. string.sub(suchtext, 2) | |||
filter = filter .. | |||
"~*" .. suchtext .. "*" .. "||" .. suchtext | |||
local suchtext_gross = -- dann groß geschrieben | |||
string.upper(string.sub(suchtext, 1, 1)) .. string.sub(suchtext, 2) | |||
if suchtext_gross ~= suchtext then | |||
filter = filter .. | |||
"||~*" .. suchtext_gross .. "*" .. "||" .. suchtext_gross | |||
end | |||
return filter | |||
end | |||
function p.subobjectIdCleaner(id) | |||
local id_clean = "" | |||
for i = 1, mw.ustring.len(id) do | |||
local char = mw.ustring.sub(id, i, i) | |||
if char == "." then | |||
id_clean = id_clean .. "_" | |||
else | |||
id_clean = id_clean .. char | |||
end | |||
end | end | ||
return id_clean | |||
end | |||
function p.addAttrToList(attrlist, attr, val) | |||
-- Kommandozeile zum Debuggen: | |||
-- attrlist={["t"]={"1","2"}}; p.addAttrToList(attrlist, "t", {"3", "4"}); mw.logObject(attrlist) | |||
if val ~= nil then | |||
if type(val) ~= "table" then | |||
val = {val} | |||
end | |||
if attrlist[attr] == nil then | |||
attrlist[attr] = val | |||
else | |||
for _, v in ipairs(val) do | |||
table.insert(attrlist[attr], v) | |||
end | |||
end | |||
end | end | ||
end | end | ||
return p | return p | ||