Moduł:Przypisy

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Moduł techniczny do obsługi szablonów {{przypisy}} i {{uwagi}}.

Przypisy

Funkcja generująca sekcję lub treść sekcji przypisów lub uwag.

Parametry

Pole Do czego służy? {{Przypisy}} {{Uwagi}}
przypisy z parametrami Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem z parametrami ===?%s*Przypisy%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{!}}. ===?%s*Uwagi%s*===?%s+{{((}}%s*[Uu]wagi%s*{{!}}.
przypisy bez parametrów Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem bez parametrów ===?%s*Przypisy%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{))}}. ===?%s*Uwagi%s*===?%s+{{((}}%s*[Uu]wagi%s*{{))}}.
grupa przypisów z parametrami Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem z parametrami ===?%s*Grupa przypisów%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{!}}. ===?%s*Grupa uwag%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{!}}.
grupa przypisów bez parametrów Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem bez parametrów ===?%s*Grupa przypisów%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{))}}. ===?%s*Grupa uwag%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{))}}.
nagłówek przypisów Nagłówek sekcji, przy nie ustawionej zmiennej: group lub o nazwie pustej, w rodzicu, do wstawienia, jeśli nie zostanie wykryty za pomocą podanego wyrażenia regularnego == Przypisy == == Uwagi ==
nagłówek grupy przypisów Nagłówek sekcji, przy ustawionej zmiennej: group lub o nazwie pustej w rodzicu, do wstawienia, jeśli nie zostanie wykryty za pomocą podanego wyrażenia regularnego == Grupa przypisów == == Grupa uwag ==
kategoria przypisów do sprawdzenia Link do kategorii błędu dodawanej jeśli wykryte zostanie użycie nieudokumentowanego pola w szablonie. [[Kategoria:Szablon:Przypisy %s do sprawdzenia]] [[Kategoria:Szablon:Uwagi %s do sprawdzenia]]
kategoria grupy przypisów do sprawdzenia Link do kategorii błędu dodawanej jeśli wykryte zostanie użycie nieudokumentowanego pola w szablonie. [[Kategoria:Szablon:Grupa przypisów %s do sprawdzenia]] [[Kategoria:Szablon:Grupa uwag %s do sprawdzenia]]
kategoria przepisów z oczekiwanym nagłówkiem Link do kategorii jest, jeśli są przypisy (uwagi) z oczekiwanym nagłówkiem. [[Kategoria:Szablon:Przypisy %s z oczekiwanym nagłówkiem]] [[Kategoria:Szablon:Uwagi %s z oczekiwanym nagłówkiem]]
kategoria przepisów bez oczekiwanego nagłówka Link do kategorii jest, jeśli są przypisy (uwagi) bez oczekiwanego nagłówka. [[Kategoria:Szablon:Przypisy %s bez oczekiwanego nagłówka]] [[Kategoria:Szablon:Uwagi %s bez oczekiwanego nagłówka]]
kategoria grupy przepisów z oczekiwanym nagłówkiem Link do kategorii jest, jeśli są grupy przypisów (uwag) z oczekiwanym nagłówka. [[Kategoria:Szablon:Grupy przypisów %s z oczekiwanym nagłówkiem]] [[Kategoria:Szablon:Grupy uwag %s z oczekiwanym nagłówkiem]]
kategoria grupy przepisów bez oczekiwanego nagłówka Link do kategorii jest, jeśli są grupy przypisów (uwag) bez oczekiwanego nagłówka. [[Kategoria:Szablon:Grupy przypisów %s bez oczekiwanego nagłówka]] [[Kategoria:Szablon:Grupy uwag %s bez oczekiwanego nagłówka]]
grupa Domyślna nazwa grupy przypisów. Brak uwaga

Błędy

Błędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.


return {
	
["Przypisy"] = function(frame)
	--mw.logObject(frame:getParent():getTitle(), "parent:title")
	local parametry_modul=require("Module:Parametry");
	local nazwy_modul=require("Module:Nazwy");
	local pudelko_modul=require("Module:Pudełko");
	local pf=parametry_modul.PobierzFrameEwentualnieParent(frame);
	local nazwa_przestrzeni_nazw=pudelko_modul["Nazwa przestrzeni nazw 2"](frame);
	local nazwa_jednostki=pudelko_modul["Nazwa jednostki 2"](frame);
	local uchwyt_strony=mw.title.makeTitle(nazwa_przestrzeni_nazw,nazwa_jednostki);
	uchwyt_strony=((uchwyt_strony)and(uchwyt_strony.exists))and uchwyt_strony or mw.title.getCurrentTitle();
	
	local typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={
		["obsługiwane jednostki jako nieopisowe strony"]="tak",
		["nazwa przestrzeni nazw"]=uchwyt_strony.nsText,
		["nazwa jednostki"]=uchwyt_strony.text,
	},};
	local typ_strony_w_nawiasach;
	if(typ_jednostki=="artykuł")then 
		typ_strony_w_nawiasach="(artykuły)";
	elseif(typ_jednostki=="artykuł dla dzieci")then 
		typ_strony_w_nawiasach="(artykuły dla dzieci)";
	elseif(typ_jednostki=="strona użytkownika")then
		typ_strony_w_nawiasach="(strony użytkowników)";
	elseif(typ_jednostki=="strona brudnopisu projektu")then
		typ_strony_w_nawiasach="(strony brudnopisu projektu)";
	else
		typ_strony_w_nawiasach="(strony niepodręcznikowe)";
	end;
	
	local result = {}
	
	local wzor_przypisow_do_sprawdzenia = frame.args["przypisy z parametrami"];
	local wzor_przypisow_bez_parametrow = frame.args["przypisy bez parametrów"] or wzor_przypisow_do_sprawdzenia;
    local wzor_grupy_przypisow_z_parametrami = frame.args["grupa przypisów z parametrami"];
	local wzor_grupy_przypisow_bez_parametrow = frame.args["grupa przypisów bez parametrów"] or wzor_grupy_przypisow_z_parametrami
	local naglowek_przypisow = frame.args["nagłówek przypisów"];
	local naglowek_grupy_przypisow = frame.args["nagłówek grupy przypisów"];
	local kategoria_przypisow_do_sprawdzenia = (frame.args["kategoria przypisów do sprawdzenia"])and string.format(frame.args["kategoria przypisów do sprawdzenia"],typ_strony_w_nawiasach) or nil;
	local kategoria_grupy_przypisow_do_sprawdzenia = (frame.args["kategoria grupy przypisów do sprawdzenia"])and string.format(frame.args["kategoria grupy przypisów do sprawdzenia"],typ_strony_w_nawiasach) or nil;
	local kategoria_przypisow_z_oczekiwanym_naglowkiem = (frame.args["kategoria przepisów z oczekiwanym nagłówkiem"])and string.format(frame.args["kategoria przepisów z oczekiwanym nagłówkiem"],typ_strony_w_nawiasach) or nil;
	local kategoria_przypisow_bez_oczekiwanego_naglowkiem = (frame.args["kategoria przepisów bez oczekiwanego nagłówka"])and string.format(frame.args["kategoria przepisów bez oczekiwanego nagłówka"],typ_strony_w_nawiasach) or nil;
	local kategoria_grupy_przypisow_z_oczekiwanym_naglowkiem = (frame.args["kategoria grupy przepisów z oczekiwanym nagłówkiem"])and string.format(frame.args["kategoria grupy przepisów z oczekiwanym nagłówkiem"],typ_strony_w_nawiasach) or nil;
	local kategoria_grupy_przypisow_bez_oczekiwanego_naglowka = (frame.args["kategoria grupy przepisów bez oczekiwanego nagłówka"])and string.format(frame.args["kategoria grupy przepisów bez oczekiwanego nagłówka"],typ_strony_w_nawiasach) or nil;
	local defaultGroup = frame.args["grupa"]

	local hasIgnoredFields = false

	-- grupa  przekazywana w polu o pustej nazwie
	-- aby docelowo zwolnić wszystkie nazwy na przypisy
	local group = pf.args[""]
	if group and string.match(group, "^=*$") then
		-- z wyjątkiem błednych wywołań w stylu "=="
		hasIgnoredFields = true
		group = nil
	end
	
	-- alternatywnie do czasu przebotowania z pola o nazwie "grupa"
	if not group then
		group = pf.args["grupa"]
		if group and (#group == 0) then
			group = nil
		end
	end
	
	local parametry_modul=require("Module:Parametry");
	local function missingHeader(pattern, naglowek_przypisow_lub_grupy_przypisow,czy_bez_parametrow)
		local stronicowyparser_modul=require("Module:StronicowyParser");
		local spreparowany_wikikod_strony=stronicowyparser_modul.SpreparowanyWikikodStrony(uchwyt_strony.fullText,true);
		---mw.log(tekst_rozwinietej_strony);
		local czy_dopasowano_wedlug_wzorca;
		local szablon=frame.args["szablon"];
		if(not parametry_modul.CzyTak(szablon))then
			czy_dopasowano_wedlug_wzorca=mw.ustring.match(spreparowany_wikikod_strony, pattern);
		else
			local szablonowe_modul=require("Module:Szablonowe")
			czy_dopasowano_wedlug_wzorca=parametry_modul.CzyTak(szablonowe_modul["SprawdzanieCzyWystępujeDanySzablonWTekście"]{["tekst"]=spreparowany_wikikod_strony,["wzór"]=pattern,["szablon"]=szablon,["z parametrami"]=not czy_bez_parametrow,});
		end;
		return
			pattern -- wymagany wzór na wyszukiwanie wywołania z nagłówkiem
			and naglowek_przypisow_lub_grupy_przypisow-- wymagany nagłówek do wstawienia
			and pattern~="" --wyrażenie regularne do sprawdzania, czy występują oczekiwane niepuste nagłówki sekcji
			and naglowek_przypisow_lub_grupy_przypisow~="" --wstawiany nagłówek sekcji, gdy nie ma oczekiwanych niepustych nagłówków
			and not czy_dopasowano_wedlug_wzorca;
	end
	--mw.logObject(pattern, "pattern")
    local args=pf.args;
    local ze_zwracanymi_kategoriami=not parametry_modul.CzyTak{[1]=args["bez kategorii"],};
	local function cat(kategoria_przypisow_lub_grupy_przepisow_z_oczekiwanym_naglowkiem, kategoria_przypisow_lub_grupy_przypisow_bez_oczekiwanego_naglowka)
		local sprawdz_modul=require("Module:Sprawdź");
		local czy_bez_parametrow=sprawdz_modul["bez parametrów"](frame);
		
	    local pattern=czy_bez_parametrow and ((not group)and wzor_przypisow_bez_parametrow or wzor_grupy_przypisow_bez_parametrow) or ((not group)and wzor_przypisow_do_sprawdzenia or wzor_grupy_przypisow_z_parametrami)
	    local naglowek_przypisow_lub_grupy_przypisow=(((not group)and(naglowek_przypisow)) or (group and(naglowek_grupy_przypisow)))
		if missingHeader(pattern,naglowek_przypisow_lub_grupy_przypisow,czy_bez_parametrow) then
			if((not args["stopień nagłówka"])or((args["stopień nagłówka"])and(mw.ustring.find(args["stopień nagłówka"],"^=+$"))))then
				table.insert(result, naglowek_przypisow_lub_grupy_przypisow)
				table.insert(result, "\n")
			end;
		    if ze_zwracanymi_kategoriami then
				if(parametry_modul.CzyTak(kategoria_przypisow_lub_grupy_przypisow_bez_oczekiwanego_naglowka))then
					table.insert(result,frame:preprocess(kategoria_przypisow_lub_grupy_przypisow_bez_oczekiwanego_naglowka))
				end;
			end;
		elseif ze_zwracanymi_kategoriami then
			if(parametry_modul.CzyTak(kategoria_przypisow_lub_grupy_przepisow_z_oczekiwanym_naglowkiem))then
					table.insert(result,frame:preprocess(kategoria_przypisow_lub_grupy_przepisow_z_oczekiwanym_naglowkiem))
			end;
		end;
	end
	if(not group)then
		cat(kategoria_przypisow_z_oczekiwanym_naglowkiem,kategoria_przypisow_bez_oczekiwanego_naglowkiem)
	elseif(group~="")then
		cat(kategoria_grupy_przypisow_z_oczekiwanym_naglowkiem,kategoria_grupy_przypisow_bez_oczekiwanego_naglowka)
	end
	table.insert(result, '<div class="do-not-make-smaller refsection')
	if group or defaultGroup then
		local groupClass, _ = (group or defaultGroup) == "uwaga" and "uwagi" or string.gsub(group or defaultGroup, ' ', '_')
		table.insert(result, " refsection-")
		table.insert(result, groupClass)
	end
	table.insert(result, '">')
	
	-- to jest lista powszechnie występujących pól
	-- w wywołaniach szablonów przypisów i/lub uwag
	local exceptions = {
		"", -- to jest docelowo jedyne wyjątkowe pole
		"colwidth", -- kopia z enwiki?
		"group", -- kopia z enwiki?
		"grupa",
		"poziom",
		"przypis",
		"przypisy",
		"Przypisy",
		"refs", -- kopia z enwiki?
		"status",
		"stopien",
		"stopień",
		"Stopień",
		"stopnień",
		"uwagi",
	}
	local parametry_niepotrzebne_w_przypisach={
		---- parametry pudełka
		["nazwa jednostki"]=true,
		["nazwa przestrzeni nazw"]=true,
		---- parametry kategorii
    	["bez kategorii"]=true,
    	---- parametry szablonu [[Szablon:Przypisy-lista]]
    	["liczba kolumn"]=true,
    }
	local ignore = {}
	for i, v in ipairs(exceptions) do
		ignore[v] = true
	end
	
	local contents = {}
	for k, v in pairs(args) do
		if (type(k) == "number") and (k == 1) then
			--mw.logObject( {k, v}, "pole {{{1}}} puste lub z przypisami w stylu <ref name=...>")
			table.insert(contents, v)
		elseif(k=="stopień nagłówka")then
			-- gdy poziom nagłówka oznaczany przez parametr w szablonie: stopień nagłówka
			if(not string.match(v,"^=+$"))then 
				 -- wchodzę, gdy wartość parametru stopień nagłówka nie składa się z samych równości lub nie jest wartością pustą
				 hasIgnoredFields=true;
	        end;
	    elseif(parametry_niepotrzebne_w_przypisach[k])then
		elseif ignore[k] then
		-- !!! TO WYŁĄCZĘ PO PRZEBOTOWANIU !!!
		       hasIgnoredFields = k ~= "";
			-- pole ignorowane
			--mw.logObject( {k, v}, "ignorowane pole z potencjalnymi przypisami w stylu <ref name=...>")
			table.insert(contents, v)
		elseif (type(k) == "string") then
			-- pole podanej nazwie tłumaczymy na przypis o takiej samej nazwie
			local ref = frame:extensionTag('ref', v, {name=k, group=group or defaultGroup})
			--mw.logObject( {k, v, ref}, "indywidualny przypis")
			table.insert(contents, ref)
		else
			-- pole indeksowane
			--mw.logObject( {k, v}, "indeksowane pole z potencjalnymi przypisami w stylu <ref name=...>")
			table.insert(contents, v)
			hasIgnoredFields = true
		end
	end
	
	local references = frame:extensionTag('references', table.concat(contents), {group=group or defaultGroup, responsive="1"})
	
	table.insert(result, references)
	table.insert(result, '</div>')
	if ze_zwracanymi_kategoriami and hasIgnoredFields and parametry_modul.CzyTak(kategoria_przypisow_do_sprawdzenia and kategoria_przypisow_do_sprawdzenia) then
		--mw.logObject({hasIgnoredFields, category}, "hasIgnoredFields and category")
		if(not group)then 
			table.insert(result, frame:preprocess(kategoria_przypisow_do_sprawdzenia)) 
		else 
			table.insert(result, frame:preprocess(kategoria_grupy_przypisow_do_sprawdzenia)) 
		end
	end
	
	--mw.logObject(table.concat(result), "result")
	return table.concat(result)
end,
}