Przejdź do zawartości

Moduł:Brudnopis/MarMi wiki/Test

Z Wikipedii, wolnej encyklopedii

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Brudnopis/MarMi wiki/Test/opis

local p = {}

p["usuńDuplikaty"]=function(ramka)
	local tabela={}
	local sep = ramka.args.separator or ';'
	local regex="[^"..sep.."]+"
	local wynik = nil

	for tekst in mw.ustring.gmatch(ramka.args[1], regex) do
		tabela[tekst]=1
	end
	
	for elem,jeden in pairs(tabela) do
		if wynik then
			wynik=elem..sep..wynik
		else
			wynik=elem
		end
	end
	
	return wynik
end
 
function p.testNil(ramka)
	local args =require('Module:Arguments').getArgs(ramka, {frameOnly = true})
	local wart =require('Module:TableTools').compressSparseArray(args)
	return mw.text.listToText(wart, nil, nil)
end

function p.testPusty(ramka)
	local args =require('Module:Arguments').getArgs(ramka, {frameOnly = true})
	local wart =require('Module:TableTools').compressSparseArray(args)
	return mw.text.listToText(wart, '', '')
end

function p.rawnum(ramka)
	local args =require('Module:Arguments').getArgs(ramka, {frameOnly = true})
	local wart =require('Module:TableTools').compressSparseArray(args)[1]
	local lang = mw.getContentLanguage()
	
	wart=lang:parseFormattedNumber(wart)
	return wart
end

function p.preprocess(ramka)
	local args =require('Module:Arguments').getArgs(ramka, {frameOnly = true})
	local wart =require('Module:TableTools').compressSparseArray(args)[1]
	
	mw.log(ramka:preprocess(wart))
end


local function checkUri(uri)
	local urilen = #uri
	for _,v in ipairs(mw.loadData("Moduł:Cytuj/dane").supportedUriSchemas) do
		if (#v < urilen) and (string.lower(string.sub(uri,1, #v)) == v) then
			return not string.match(uri, '%s')
		end
	end
end

local function showTemplate(templateName, args)
	local result = {}
	local flags = {}
	table.insert(result, mw.text.nowiki("{{"))
	if mw.isSubsting() then
		table.insert(result, "subst:")
	end
	
	local title = mw.title.new(templateName)
	
	table.insert(result, '[['..title.nsText)
	table.insert(result, ":")
	
	--szablon
	if title.namespace == 10 then
		table.insert(result, title.text..'|')
	end
	
	table.insert(result, title.text..']]')

	if args then
		local i = 1
		while args[i] do
			table.insert(result, "|")
			table.insert(result, mw.text.nowiki(args[i]))
			i = i + 1
		end
		
		for k, v in pairs(args) do
			local index = tonumber(k)
			if (type(k) == "string") or (index and ((index < 1) or (index > i))) then
				table.insert(result, "|")
				table.insert(result, tostring(k))
				table.insert(result, "=")
				table.insert(result, mw.text.nowiki(v))
			end
		end
	end

	table.insert(result, mw.text.nowiki("}}"))
	return table.concat(result)
end

function p.Parametry(frame)
		local unknown = {}
		local invalid = {}
		local deprecated = {}
		local nakedurl = {}
		local templateName = frame:getParent():getTitle()
		local config = frame.args[""]
		local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$")
		local nl = space and string.match(space, "\n") or ""
		class = class or config

		local function argName(arg)
			return type(arg) ~= "string" and tostring(arg) or ('"'..arg..'"')
		end
		
		local required = {}
		for k, v in pairs(frame.args) do
			if mw.ustring.match(v, 'class="error">') then
				--pominięcie pustego parametru (|=)
				if k ~= "" then
					table.insert(invalid, k)
					table.insert(unknown, v)
				end
			end
			if mw.ustring.match(v, "!$") then
				required[k] = true
			end
		end
		
		local emptyArg = false
		for k, v in pairs(frame:getParent().args) do
			required[k] = false
			local kind = frame.args[k]
			if k == "" then
				emptyArg = v
			elseif not kind then
				table.insert(unknown, argName(k))
			elseif (kind == "num") or (kind == "num!") then
				local n = tonumber(v)
				if not n then table.insert(invalid, argName(k)) end
			elseif kind == "num?" then
				local n = (#v == 0) or tonumber(v)
				if not n then table.insert(invalid, argName(k)) end
			elseif (kind == "uri") or (kind == "uri!") then
				local u = checkUri(v)
				if not u then table.insert(invalid, argName(k)) end
			elseif kind == "uri?" then
				local u = (#v == 0) or checkUri(v)
				if not u then table.insert(invalid, argName(k)) end
			elseif (kind == "txt") or (kind == "txt!") then
				if #v == 0 then
					table.insert(invalid, argName(k))
				elseif checkUri(v) then
					local exception = ((templateName == "Szablon:Cytuj") and ((k == "tytuł") or (k == "url") or (k == "archiwum")))
						or ((templateName == "Szablon:Cytuj stronę") and (k == "tytuł"))
					mw.logObject({v=v,k=k,e=exception},"checkUri: txt")
					if not exception then
						table.insert(nakedurl, argName(k))
					end
				end
			elseif (kind == "text") or (kind == "text!") or (kind == "text?") then
				if ((kind ~= "text?") and (#v == 0)) or findFile(v) then
					table.insert(invalid, argName(k))
				elseif checkUri(v) then
					local exception = ((templateName == "Szablon:Cytuj") and (k == "tytuł"))
						or ((templateName == "Szablon:Cytuj stronę") and (k == "tytuł"))
					mw.logObject({v=v,k=k,e=exception},"checkUri: txt")
					if not exception then
						table.insert(nakedurl, argName(k))
					end
				end
			elseif kind == "old" then
				table.insert(deprecated, argName(k))
			elseif kind == "uri*" then -- specjalny przpadek dla pola 'url' w [[Szablon:Cytuj]]
				local u = checkUri(v) or checkUri(mw.text.unstripNoWiki(v))
				if not u then table.insert(invalid, argName(k)) end
			else
				local pattern = string.match(kind,"^(^.-$)!?$")
				if pattern and not mw.ustring.match(v, pattern) then
					table.insert(invalid, argName(k))
				elseif (#v > 0) and checkUri(v) then
					table.insert(nakedurl, argName(k))
				end
			end
		end
		
		local missing = {}
		for k, v in pairs(required) do
			if v then
				table.insert(missing, k)
			end
		end

		if (#missing == 0) and (#unknown == 0) and (#invalid == 0) and (#deprecated == 0) and (#nakedurl == 0) then
			return nil
		end
		
		if frame.args.nieznane == "wyłącz" then
			unknown = {}
		end
		
		local message = mw.html.create()
		if emptyArg then
			message:wikitext("|=", emptyArg, "| ")
		end
		
		if #missing > 0 then
			message:wikitext("Brakujące pola: ", mw.text.listToText(missing), ". ")
		end

		if #invalid > 0 then
			message:wikitext("Nieprawidłowe pola: ", mw.text.listToText(invalid), ". ")
		end

		if #unknown > 0 then
			message:wikitext("Nieznane pola: ", mw.text.listToText(unknown), ". ")
		end

		if #deprecated > 0 then
			message:wikitext("Przestarzałe pola: ", mw.text.listToText(deprecated), ". ")
		end
		
		if #nakedurl > 0 then
			message:wikitext("Gołe linki: ", mw.text.listToText(nakedurl), ". ")
		end
		
		--if templateName then
		--	showTemplate(templateName, frame:getParent().args)
		--end

		message = tostring(message)

		local result = mw.html.create("span")
		if class then
			result:addClass(class)
		end
		
		result:addClass("problemy")

 		if message ~= "" and templateName then
			result:wikitext(showTemplate(templateName).." ")
 			local warning = mw.html.create()
 			warning:tag("code"):wikitext(showTemplate(templateName, frame:getParent().args))
 			warning:wikitext(" ")
 			warning:tag("span"):addClass("problemy"):wikitext(message)
 			mw.addWarning(tostring(warning))
 		end
 		
 		result:wikitext(message)
 
		if category then
			result:wikitext(category)
		end

		return nl..tostring(result)
end


return p