Moduł:Sandbox/Draco flavus/TestFields

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Sandbox/Draco flavus/TestFields/opis

local p = {}
function p.FindFields(frame)

-- Wywołanie: {{#invoke: Sandbox/Draco flavus/TestFields | FindFields | Ostatnia brygada | pattern1 | pattern2| pattern3 | … }}
-- Przeznaczenie znajduje na jakiejś stronie szablon {{:Dane tekstu}} kopiuje go, ale podmienia lub dodaje dodatkowe pola
-- tj. te wymienione w dalszych parametrach (pattern1, pattern2, pattern3 … )
-- Wynik: na nowo ewaluowany szablon {{Dane tekstu}}
-- każde pole szablonu źródłowego {{Dane tekstu}} musi być w osobnej linii (tak zazwyczaj robimy dla przejrzystości, tu jest to wymóg techniczny)
-- a więc na przykład chcąc zrezygnować z okładki napiszemy | okładka = | strona z okładką =
-- chcąc dodać pole pochodzenie napiszemy | pochodzenie = tutaj skąd pochodzi

    local PageResult = ""
    local PageName = frame.args[1]
    local PageContent= mw.title.new(PageName):getContent()
    local i = 0
    local j = 0
    local k = ""
    local v = ""
	i, j =  string.find(PageContent, "%b{}"  )
   	PageResult = " " .. string.sub(PageContent, i, j-2):gsub("[^|]*","",1)
   	for k,v in pairs(frame.args) do
   		if k ~= 1
   		then
			if (string.find(PageResult, "| *" .. k .." *=[^|]*") ~= nil)
			then
				PageResult=PageResult:gsub("| *" .. k .. " *=[^\n]*", "| " .. k .. " = " .. v:gsub("^%s+","")  )
			else
				PageResult = PageResult  ..  " | ".. k .. " = " .. v:gsub("^%s+","") .. string.char(10)
			end
		end
   	end
   	return frame:preprocess("{{Dane tekstu" .. PageResult .. "}}") 
	-- FOR TESTS return PageResult
end

return p