Modul:SMW/Work

< Modul:SMW
Version vom 9. Dezember 2025, 18:28 Uhr von HeikoBot (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „local p = {} local com = require("Modul:Common") local str = require("Modul:String") function p.GetValues(frame) -- 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 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 va…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Dokumentation für dieses Modul kann unter Modul:SMW/Work/Doku erstellt werden

local p = {}

local com = require("Modul:Common")
local str = require("Modul:String")

function p.GetValues(frame)
	-- 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 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"
	
	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 = ""
	suchtext = str.strip(tostring(suchtext or ""))
	if suchtext == "" or suchtext == "*" then
		filter = "+"
	else
		suchtext = string.gsub(suchtext, "%[", "")
		suchtext = string.gsub(suchtext, "%]", "")
		filter = filter .. suchtext -- exakte Suche (immer)
		filter = filter .. "||~*" .. suchtext .. "*" -- Wildcard-Suche des ganzen Suchtextes (immer)
		semikolonVorhanden = (string.find(suchtext, ";") ~= nil)
	    if semikolonVorhanden then
			suchtextSplit = str.split2(suchtext, ";") -- Einzelwort-Suche
			if #suchtextSplit > 1 then
				for _, ft in ipairs(suchtextSplit) do
					ft = str.strip(ft)
					if ft ~= "" then
						filter = filter .. "||~*" .. ft .. "*" .. "||" .. ft
					end
				end
			end
	    end
	end
--	mw.log(filter)
	return filter
end

function p.dateLastDayCompleter(date)
	local last_date
	if #date == 4 then															-- nur "Jahr" vorhanden
		last_date = date .. "/12/31"
	elseif #date ~= 10 then														-- "Monat Jahr" vorhanden
		local days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
		local month = string.sub(date, 1, string.find(date, " ") - 1)
		month = com.getMonthnr(month)
		local year = string.sub(date, string.find(date, " ") + 1)
		last_date = year .. "/" .. month .. "/"
		if month == 2 and year % 4 == 0 then									-- Sonderfall Feb. Schaltjahr
			last_date = last_date .. "29"
		else
			last_date = last_date .. days[month]
		end
	else
		last_date = date
	end
	return last_date
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

return p