Zum Inhalt springen

Modul:Spielwiese

Überprüft
aus Wikipedia, der freien Enzyklopädie

Hier können kurzzeitige Code-Tests oder sonstige Spielereien durchgeführt werden.

Zu weitergehenden und dauerhaften Tests siehe Hilfe:Lua #Erprobung.


local p = {}

local function printError(code)
	return '<span class="error">' .. (i18n.errors[code] or code) .. '</span>'
end

local function getChronoLink(pid)
	local entity = mw.wikibase.getEntity()
	
	if not entity then
		return printError("entity-not-found")
	end
	
	-- prefer predecessor/successor
	local qid, result
	local chrono =
	{
		P155 = entity:getBestStatements('P155'),
		P156 = entity:getBestStatements('P156')
	}
	
	if next(chrono["P155"])~=nil or next(chrono["P156"])~=nil then
		if next(chrono[pid])~=nil then
			qid = chrono[pid][1].mainsnak.datavalue.value.id
		end
	else
		local series = entity:getBestStatements('P179')
		if next(series)~=nil and next(series[1].qualifiers[pid])~=nil then
			qid = series[1].qualifiers[pid][1].datavalue.value.id
		end
	end

	if qid then
		result = mw.wikibase.getLabel(qid)
		local sitelink = mw.wikibase.getSitelink(qid)
		local title = mw.wikibase.getBestStatements(qid, 'P1476')
		
		if next(title)~=nil and string.find(result,title[1].mainsnak.datavalue.value.text,0,true) then
			result = title[1].mainsnak.datavalue.value.text
		end
		
		if sitelink then
			result = '[[' ..sitelink .. '|' .. result .. ']]'
		end
		
		result = '<span class="wikidata-content">' .. result .. '</span>'
	end
	
	return result
end


function p.getPred(frame)
	return getChronoLink('P155')
end

function p.getSucc(frame)
	return getChronoLink('P156')
end

function p.description(frame)
	local lemma = frame.args[1]
	local wikidata_id
	if lemma then
		wikidata_id = mw.wikibase.getEntityIdForTitle(lemma) or ""
	else wikidata_id = mw.wikibase.getEntityIdForCurrentPage() or ""
	end
	local description = mw.wikibase.getDescription(wikidata_id) or ""
	return "Kurzbeschreibung: " .. description .. " ([[D:" .. wikidata_id .. "|Auf Wikidata bearbeiten]])"
end

-- Funktionen von Benutzer Antonsusi
-- Teilen einer Zeichenkette an enthaltenen Zeilenumbrüchen, entspricht mw.text.split()
local function GetLines(str)
	local tbl = {};
	local text = str;
	local teil;
	sep = '\n';
	if #str == 0 then
		return tbl;
	end
	text = text ..sep
	for i = 1,32767 do   -- while vermeiden, damit sich das im Testbetrieb nicht aufhängen kann, 32767 Zeilen sollten reichen.
		pos = string.find(text,sep) or 0;
		teil = string.sub(text,1,pos-1);
		if pos < 1 then
			break;
		end
		table.insert (tbl,teil);
		text = string.sub(text,pos+1);
	end
	return tbl;
end

-- GetPage liest den Quelltext einer Seite aus und speichert die Zeilen in einer table.
-- Aufruf durch {{#invoke:Spielwiese|GetPage|<namespace>|<pagename>}}
function p.GetPage(frame)
	local namespace = frame.args[1];
	local title = frame.args[2];
	local Seite = mw.title.makeTitle( namespace, title);
	local Content = Seite:getContent()
	local Lines = {};
	local c = 0;
	Text = mw.ustring.sub( Content, 1, 10000); -- Begrenzung 
	Lines = mw.text.split( Content, "%s*\n" );
	-- hier liegen die Zeilen als table vor. Es folgt testweise eine "Dummy-Ausgabe"
	for i = 1,#Lines do
		Lines[i] = 	Lines[i] ..'\n';
	end
	local Info = table.concat(Lines)
	return Info;
end
-- GetPage liest den Quelltext einer Seite aus und speichert die Zeilen in einer table.
-- Aufruf durch {{#invoke:Spielwiese|GetPage|<namespace>|<pagename>}}
function p.GetPageEasy(frame)
	local namespace = frame.args[1];
	local title = frame.args[2];
	local Seite = mw.title.makeTitle( namespace, title);
	local Content = Seite:getContent()

	Text = "<pre>" .. Content .."</pre>"
	return Text;
end

--Aufruf in V. E.: 
-- {{#invoke:Spielwiese|getjson}}
function p.getjson(frame)
	local lucky, json ={}
	local text = ""
	local values={}
	lucky, json = pcall( mw.loadJsonData, 'Benutzer:Antonsusi/Daten.json' )
	if type(json) == "string" then
		text = "lucky=".. tostring(lucky) .."<br/> json=" .. json;
		return  text
	end
	if type(json) == "table" then
		local tbl = json["data"]["SPKID20015760"]
		local Felder = json["fields"]
		for i, v in ipairs(Felder) do
			if type(tbl[i]) ~= nil then
				values[v] = tbl[i];
			else
				values[v] = "null"
			end
		end
		if type(values.ad) ~= nil then
			return values.ad
		end
	end
	return "Oops!"
end


function p.stringcompare(frame)
	return mw.ustring.len(frame.args[1]) .. '\n' .. string.len(frame.args[1]) .. '\n';
end

function p.getcolor()
	local _, Standardfarbe = pcall( require, "Module:Vorlage:Standardfarbe" )
	if type( Standardfarbe ) == "table" then
    	Standardfarbe = Standardfarbe()
	end
	return Standardfarbe.getColor("hintergrund", "4")
end

return p