Przejdź do zawartości

Moduł:Plik

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
p["W pikselach"]=function(frame)
   local parametry_modul=require("Module:Parametry");
   local PobierzParametr=parametry_modul.PobierzParametr(frame);
   local rozmiar=PobierzParametr(1);
   
   local liczba,jednostka=mw.ustring.match(rozmiar,"^(%d*%.?%d*)(%a*)$")
   liczba=tonumber(liczba) or nil;
   if(not liczba)then return rozmiar;end;
   return p.ZamianaJednostekAbsolutnychNaPiksele(liczba,jednostka,true) or rozmiar;
end;
function p.ZamianaJednostekAbsolutnychNaPiksele(liczba,jednostka,czy_nie_ta_jednostka)
	  if(not jednostka)then return liczba;end;
	  if(jednostka=="")then return liczba;end;
	  if(jednostka=="px")then return liczba;end;
	  if(jednostka=="pc")then return liczba*16;end;
	  if(jednostka=="pt")then return  liczba*4/3;end;
	  if(jednostka=="in")then return liczba*96;end;
	  if(jednostka=="Q")then return liczba*96/25.4/4;end;
	  if(jednostka=="mm")then return liczba*96/25.4;end;
	  if(jednostka=="cm")then return liczba*96/2.54;end;
	  return ((not czy_nie_ta_jednostka) and liczba or nil);
end;
function p.RozmiarWEmach(liczba,jednostka)
	if((jednostka=="px")or(jednostka=="pc")or(jednostka=="pt")or(jednostka=="in")or(jednostka=="Q")or(jednostka=="mm")or(jednostka=="cm"))then
		return ((liczba/16).."em");
	end;
	if(jednostka~="")then
		return liczba..jednostka;
	end;
	return liczba.."em";
end;
function p.Plik(frame)
    local parametry_modul=require("Module:Parametry");
    local PobierzParametr=parametry_modul.PobierzParametr(frame);
    
	local plik_nieprzetworzone=PobierzParametr("plik") or PobierzParametr(1);
	local czy_plik=parametry_modul.CzyTak(plik_nieprzetworzone);
	if(not czy_plik)then
		local blad_modul=require("Module:Błąd");
		local brak_pliku_komunikat="Wykryto w szablonie {{Plik}} nie podanie nazwy rysunku.";
		local brak_plik=blad_modul.error({args={tekst=brak_pliku_komunikat,},});
		return brak_plik;
	end;
	local nazwy_modul=require("Module:Nazwy");
	local tabela_nazw={};
	local plik=nazwy_modul.NAZWASTRONY(plik_nieprzetworzone,tabela_nazw);
	if(not parametry_modul.CzyTak(plik))then
		local blad_modul=require("Module:Błąd");
		local brak_pliku_komunikat="Wykryto w szablonie {{Plik}} w nazwie rysunku tylko prefix.";
		local brak_plik=blad_modul.error({args={tekst=brak_pliku_komunikat,},});
		return brak_plik;
	else
		local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
		local nazwa_przestrzeni=nazwy_modul.NAZWAPRZESTRZENI(plik_nieprzetworzone,tabela_nazw);
		if((nazwy_np_modul.File~=nazwa_przestrzeni)and(nazwy_np_modul.Media~=nazwa_przestrzeni)and(nazwy_np_modul.Main~=nazwa_przestrzeni))then
			local blad_modul=require("Module:Błąd");
			local brak_pliku_komunikat="Wykryto w szablonie {{Plik}} nieodpowiednią przestrzeń nazw, o ile ją podano.";
			local brak_plik=blad_modul.error({args={tekst=brak_pliku_komunikat,},});
			return brak_plik;
		end;
	end;
	
	local ramka=PobierzParametr("ramka");
	local alt=PobierzParametr("alt");
	local link=PobierzParametr("link");
	local opis=PobierzParametr("opis");
	local skala=PobierzParametr("skala");
	local pozycja=PobierzParametr("pozycja");
	local rozmiar=PobierzParametr("rozmiar");
	local nomobile=PobierzParametr("nomobile");
	local nomedia=PobierzParametr("nomedia");
	local auto=PobierzParametr("auto");
	local rys=PobierzParametr("rys");
	local czy_rys=parametry_modul.CzyTak(rys);
	
	local czy_ramka=parametry_modul.CzyTak(ramka);
	local czy_alt=parametry_modul.CzyTak(alt);
	local czy_opis=parametry_modul.CzyTak(opis);
	local czy_skala=parametry_modul.CzyTak(skala);
	local czy_rozmiar=parametry_modul.CzyTak(rozmiar);
	local czy_pozycja=parametry_modul.CzyTak(pozycja);
	local czy_auto=parametry_modul.CzyTak(auto);
	if(czy_auto)then
		local function TempFuncRozmiar(auto_1)
			local function y(x,a,b)
				x=x and tonumber(x) or 9;
				local y=a*x+b;
				return tostring(y).."px";
			    	-- _  - a=10   - a=20 ---
					-- 0  - 80px   - 80px = b
			    	-- 1  - 90px;  - 100px
			    	-- 2  - 100px  - 120px
			    	-- 3  - 110px; - 140px
			    	-- 4  - 120px; - 160px
			    	-- 5  - 130px; - 180px
			    	-- 6  - 140px; - 200px
			    	-- 7  - 150px; - 220px
			    	-- 8  - 160px; - 240px
			    	-- 9  - 170px; - 260px
			    	-- 10 - 180px; - 280px
			    	-- 11 - 190px; - 300px
			    	-- 12 - 200px; - 320px
			    	-- 13 - 210px; - 340px
			    	-- 14 - 220px; - 360px
			    	-- 15 - 230px; - 380px
			    	-- 16 - 240px; - 400px
			    	-- 17 - 250px; - 420px
			    	-- 18 - 260px; - 440px
			    	-- 19 - 270px; - 460px
			    	-- 20 - 280px; - 480px
			    	-- 21 - 290px; - 500px
			    	-- 22 - 300px; - 520px
			end;
			local __a=20;local __b=80;
			local tab_a=parametry_modul.CzyTak(auto_1) and mw.text.split(auto_1,",") or {};
			
			local a=tab_a[2] and mw.text.trim(tab_a[2]) or __a;local b=tab_a[3] and mw.text.trim(tab_a[3]) or __b;
			a=tonumber(a) or __a;b=tonumber(b) or __b;
			
			local x=tab_a[1] and mw.text.trim(tab_a[1]) or nil;
			
			if(x)then
				local szerokosc,wysokosc=mw.ustring.match(x,"^(%d*)x(%d*)$");
				szerokosc=parametry_modul.CzyTak(szerokosc) and szerokosc or nil;
				wysokosc=parametry_modul.CzyTak(wysokosc) and wysokosc or nil;
				if((szerokosc)and(wysokosc))then
					return tostring(y(szerokosc,a,b)).."x"..tostring(y(wysokosc,a,b));
				elseif(szerokosc)then
					return tostring(y(szerokosc,a,b));
				elseif(wysokosc)then
					return "x"..tostring(y(wysokosc,a,b));
				end;
			end;
			local x=tab_a[1] and tonumber(mw.text.trim(tab_a[1])) or nil;
			if(not x)then
				return y(9,a,b);
			end;
			return y(x,a,b);
	    end;
		local function TempFuncPozycja(auto_2)
			auto_2=auto_2 and mw.text.trim(auto_2) or auto_2;
			local auto_2=tonumber(auto_2);
			if(not auto_2)then return "prawo";
			elseif(auto_2>0)then return "prawo";
			elseif(auto_2<0)then return "lewo";
			elseif(auto_2==0)then return "centruj";end;
			return "prawo";
		end;
		local tab_auto=mw.text.split(auto,";");
		ramka=(not czy_ramka) and "mały" or ramka;
		rozmiar=(not czy_rozmiar) and TempFuncRozmiar(tab_auto[1]) or rozmiar;
		pozycja=(not czy_pozycja)and TempFuncPozycja(tab_auto[2]) or pozycja;
		czy_ramka=(not czy_ramka) and true or czy_ramka;
		czy_rozmiar=(not czy_rozmiar) and true or czy_rozmiar;
		czy_pozycja=(not czy_pozycja)and true or czy_pozycja;
	end;
	
	local Plik=function()
		local tab_plik={};
		table.insert(tab_plik,"[[File:");
		table.insert(tab_plik,plik);
		if(czy_ramka)then
			if(ramka=="mały")then
				table.insert(tab_plik,"|thumb")
			elseif(ramka=="duży")then
				table.insert(tab_plik,"|frame");
			elseif(ramka=="bezramki")then
				table.insert(tab_plik,"|frameless");
			end;
		end;
		if(czy_rys)then
			if(czy_pozycja)then
				if(pozycja=="prawo")then
					table.insert(tab_plik,"|right");
				elseif(pozycja=="lewo")then
					table.insert(tab_plik,"|left");
				elseif(pozycja=="centruj")then
					table.insert(tab_plik,"|center");
				end;
			end;
			if(czy_rozmiar)then
				table.insert(tab_plik,"|"..rozmiar);
			end;
		end;
		if(czy_skala)then
			table.insert(tab_plik,"|upright="..skala);
		end;
		if(czy_alt)then
			table.insert(tab_plik,"|alt="..alt);
		end;
		if(link)then
			table.insert(tab_plik,"|link="..link);
		end;
		if(czy_opis)then
			table.insert(tab_plik,"|"..opis);
		end;
		table.insert(tab_plik,"]]");
		return table.concat(tab_plik,"");
	end;
	if(czy_rys)then
		local plik=Plik();
		return plik;
	end;
	local id=PobierzParametr("id");
	local styl=PobierzParametr("styl");
	local klasa=PobierzParametr("klasa");
	
	local RamkaPlik=function(kontenerramka,kontenerramka2)
		if(parametry_modul.CzyTak(id))then kontenerramka:attr("id",id);end;
		if(parametry_modul.CzyTak(styl))then kontenerramka:attr("style",styl);end;
		if(parametry_modul.CzyTak(klasa))then kontenerramka:attr("class",klasa);end;
		if(parametry_modul.CzyTak(nomobile))then kontenerramka:addClass("nomobile");end;
		if(parametry_modul.CzyTak(nomedia))then kontenerramka:addClass("nomedia");end;
		if(czy_rozmiar)then
			local Rozmiary=function(rozmiar)
				local szerokosc,jednostka1,wysokosc,jednostka2=mw.ustring.match(rozmiar,"^(%d+%.?%d*)([%a%%]*)x(%d+%.?%d*)([%a%%]*)$");
				jednostka1=parametry_modul.CzyTak(jednostka1) and jednostka1 or jednostka2;
				if((szerokosc)and(wysokosc)and(jednostka1)and(jednostka2))then return szerokosc,jednostka1,wysokosc,jednostka2;end;
				local wysokosc,jednostka=mw.ustring.match(rozmiar,"^x(%d+%.?%d*)([%a%%]*)$");
				if((wysokosc)and(jednostka))then return nil,nil,wysokosc,jednostka;end;
				local szerokosc,jednostka=mw.ustring.match(rozmiar,"(%d+%.?%d*)([%a%%]*)");
				return szerokosc,jednostka;
			end;
		
			local szerokosc,jednostka1,wysokosc,jednostka2=Rozmiary(rozmiar);
			if((szerokosc)and(wysokosc)and(jednostka1)and(jednostka2))then
				local szerokosc_temp=p.ZamianaJednostekAbsolutnychNaPiksele(szerokosc,jednostka1,true);
				local wysokosc_temp=p.ZamianaJednostekAbsolutnychNaPiksele(wysokosc,jednostka2,true);
				szerokosc_temp=p.RozmiarWEmach(szerokosc_temp or szerokosc,jednostka1);
				kontenerramka2:css("width",szerokosc_temp);
				wysokosc_temp=p.RozmiarWEmach(wysokosc_temp or wysokosc,jednostka2);
				kontenerramka2:css("height",wysokosc_temp);
				kontenerramka:addClass("szablon_plik_rozmiar");
			else
				if((wysokosc)and(jednostka2))then
					local wysokosc_temp=p.ZamianaJednostekAbsolutnychNaPiksele(wysokosc,jednostka2,true);
					wysokosc_temp=p.RozmiarWEmach(wysokosc_temp or wysokosc,jednostka2);
					kontenerramka2:css("height",wysokosc_temp);
					kontenerramka:addClass("szablon_plik_rozmiar");
				else
					if((szerokosc)and(jednostka1))then
						local szerokosc_temp=p.ZamianaJednostekAbsolutnychNaPiksele(szerokosc,jednostka1,true);
						szerokosc_temp=p.RozmiarWEmach(szerokosc_temp or szerokosc,jednostka1);
						kontenerramka2:css("width",szerokosc_temp);
						kontenerramka:addClass("szablon_plik_rozmiar");
					else
						kontenerramka2:css("width","fit-content");
						kontenerramka:addClass("szablon_plik_rozmiar");
					end;
				end;
			end;
		else
			kontenerramka2:css("width","fit-content");
			kontenerramka:addClass("szablon_plik_rozmiar");
		end;
	end;
	local jaka_pozycja=((czy_pozycja)and((pozycja=="prawo")or(pozycja=="lewo")or(pozycja=="centruj")or(pozycja=="brak")));
	local ramka_znacznik;
	if(jaka_pozycja)then ramka_znacznik="div";else ramka_znacznik="span";end;
		
	local kontenerramka=mw.html.create(ramka_znacznik);
	local SpecyfikacjaStrukturyPliku=function(kontenerramka,pozycja)
		local kontenerramka2=mw.html.create(ramka_znacznik);
		local plik=Plik();
		kontenerramka2:node(plik);
		RamkaPlik(kontenerramka,kontenerramka2);
		kontenerramka:node(kontenerramka2);
		kontenerramka:addClass("szablon_plik_"..pozycja);
		kontenerramka:addClass('szablon_plik');
	end;
	if(jaka_pozycja)then
		SpecyfikacjaStrukturyPliku(kontenerramka,pozycja);
	else
		SpecyfikacjaStrukturyPliku(kontenerramka,"pozycja_nic");
	end;
	if(czy_ramka)then
		local RamkaKlasaPlik=function(ramka)
			kontenerramka:addClass("szablon_plik_ramka");
			kontenerramka:addClass("szablon_plik_ramka_"..ramka);
		end;
		if((ramka=="mały")or(ramka=="duży")or(ramka=="bezramki"))then
			RamkaKlasaPlik(ramka);
		end;
	end;
	return tostring(kontenerramka:allDone());
end;
return p;