Modul:SMW: Unterschied zwischen den Versionen

Aus FürthWiki

uniFilter() optimiert
K (Schützte „Modul:Queries“ ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt)))
(uniFilter() optimiert)
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local c = require("Module:Common")
 
local s = require("Module:String")
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 to be called from Wikitext by #invoke
-- Gets the values from an attribute on a page to be called from Wikitext by #invoke
-- mw.log("GetValues(frame)")
-- mw.logObject(frame)
local page = frame.args.page or ""
local page = frame.args.page or ""
local attr = frame.args.attr or ""
local attr = frame.args.attr or ""
Zeile 11: Zeile 14:


local values = p.getValues(page, attr, plain)
local values = p.getValues(page, attr, plain)
local vallist = s.list(values, sep)
local vallist = table.concat(values, sep)
-- mw.log("GetValues(frame)=" .. vallist)
-- mw.logObject(vallist)
-- mw.log("frame=")
-- mw.logObject(frame)
return vallist
return vallist
end
end
Zeile 20: Zeile 21:
function p.getValues(page, attr, plain)
function p.getValues(page, attr, plain)
-- Gets the values from an attribute on a page to be called inside lua
-- 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
local query = "[[:" .. page .."]]|?" .. attr -- selektiert nur die Seite selbst
if plain then
if plain then
Zeile 26: Zeile 28:
query = query  .. "|mainlabel=-|limit=1"
query = query  .. "|mainlabel=-|limit=1"
local askResult = mw.smw.ask(query)
local ask_result = mw.smw.ask(query)
local values = {}
local values = {}
if not c.isEmpty(askResult) then
if not com.isEmpty(ask_result) then
values = askResult[1][attr] -- Erste Ergebnis-Zeile, attr-Spalte
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)
if type(values) ~= "table" then -- Immer als table rückgeben, auch wenn keine (dann umformen)
values = { [1]=values }
values = { [1]=values }
end
end
end
end
-- mw.log("getValues(" .. page .. "," ..  attr .. ")=")
-- mw.logObject(values)
-- mw.logObject(values)
-- mw.log("query=" .. query)
-- mw.log("askResult=")
-- mw.logObject(askResult)
-- mw.log("values=")
-- mw.logObject(values)
-- mw.log("type(values[1])=" .. type(values[1]))
return values
return values
end
end


function p.getPages(query, plain)
function p.getPages(query, plain)
local queryl = query
-- mw.log("getPages(" .. query .. ", " ..  tostring(plain) .. ")")
if plain then
if plain then
queryl = queryl .. "|?#-"
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
end
queryl = queryl .. "|mainlabel=-"
-- mw.log(filter)
return filter
end


local askResult = mw.smw.ask(queryl)
function uniFilterAddGrossKlein(suchtext)
local table = {}
local filter = ""
if not c.isEmpty(askResult) then
suchtext = -- zuerst klein geschrieben
for i = 1, #askResult do
string.lower(string.sub(suchtext, 1, 1)) .. string.sub(suchtext, 2)
table[i] = askResult[i][1] -- i-te Zeile, 1. Spalte
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
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
-- mw.log("getPages()=")
-- mw.logObject(table)
-- mw.log("queryl=")
-- mw.logObject(queryl)
-- mw.log("askResult=")
-- mw.logObject(askResult)
return table
end
end


return p
return p