Module:Galeria

From Porn Base Central, the free encyclopedia of gay porn
Jump to navigation Jump to search

Documentation for this module may be created at Module:Galeria/doc

local p = {}

--
local function parseval ( value, parm2 ) 
	local par  = value or ''
	local req  = parm2 or ''
	if par ==  '' then
		return ''
	else
		if  mw.ustring.sub(par, -2) == 'px' then 
			par = mw.ustring.sub(par, 1, mw.ustring.len(par) -2)
		end
		local pos = mw.ustring.find(par, 'x');
		if req == 'p' then
			return par;
		elseif req == 'w' then
			if pos == nil then
				return par;
			elseif pos > 1 then
				return mw.ustring.sub(par, 1, pos -1);
			else
				return ''
			end
		elseif  req == 'h' then
			if pos == nil then
				return '';
			else
				return mw.ustring.sub(par, pos +1)
			end
		end
	end
end


--
function p.gallery ( frame )
 	local args = mw.getCurrentFrame():getParent().args;
	local tagtab = {};
	local instab = {};
	local fmat   = args.f or args.format or "";
	local mode   = args.m or args.mode or "";
	local insv   = "";
	local strg   = "";
	tagtab [1]   = "\n";
	
	for _, v in ipairs(args) do
		strg = strg .. "\006"  .. v                  -- replace pipe by ACK
	end
	strg = mw.ustring.gsub( strg, "[\n]" , "\006" ); -- replace CRLF by ACK
	
	local arg2 = args[2] or ".svg"
	if fmat == "" then                                -- when format NOT specified
		if args[2] ~= "" then
 			if mw.ustring.sub (args[1], 1, 1 ) == "\n" then
				local inx = mw.ustring.find( arg2 .. "\n", "\n" );
				arg2 = mw.ustring.sub ( arg2, 1, inx - 1 );
				inx = string.lower(string.gsub(arg2,"^.*%.([^%.]*)$","%1"));
				local map = {svg=1, png=1, jpg=1, jpeg=1, gif=1, tif=1, tiff=1, xcf=1, pdf=1 }
	 			if not map[inx] then
	 				fmat = "2"                       -- default format="2"
		 	 	end
		 	end
		end
	end

	for _, v in ipairs(mw.text.split(strg , "\006") ) do
		if fmat == "2" then 
			if insv == "" then 
				insv = v;
			else 
				if v == "" then 
					v = "{{F|{{PAGENAME:" .. insv .. "}}}}";
				end
				table.insert(instab, insv .. "|<center>" .. v .. "</center>" );
				insv = ""
			end
		else
			table.insert(instab, v )	
		end
	end
	for i, v in ipairs( instab ) do
		if v == "" or v == "+" then 
			tagtab [1] = tagtab [1] .. "\n"
		else
			tagtab [1] = tagtab [1] .. "\n" .. v
		end	end
--
	if      mode == 'n' then mode = 'nolines'
	 elseif mode == 'p' then mode = 'packed'
	 elseif mode == 'o' then mode = 'packed-overlay'
	 elseif mode == 'h' then mode = 'packed-hover'
	 elseif mode == 's' then mode = 'slideshow'
	 elseif mode == 't' then mode = 'traditional'
	end
	local wide  = args.w or args.width  or args.widths or '';
	local high  = args.h or args.height or args.heights or '';
	local disp  = args.d or args.dis or args.disp or args.display or '';
	if wide .. high == '' and disp ~= '' then
		wide = parseval (disp, 'w')
		high = parseval (disp, 'h')
	end
	tagtab [2]   = mode;
	tagtab [3]   = args.c or args.caption or '';
	tagtab [4]   = args.p or args.perrow or '';
	tagtab [5]   = wide;
	tagtab [6]   = high;
	tagtab [7]   = args.s or args.style or '';
	tagtab [8]   = args.a or args.attr or args.class or '';
	tagtab [9]   = args.t or args.text or '';
	tagtab [10]  = fmat;
	if fmat == ''  then
		tagtab [10] = '1';
		if mode == ''  then 
			tagtab [2] = 'nolines';
		end
	end
	return mw.getCurrentFrame():expandTemplate{ title = "G/layout", args = tagtab };
end


-- 
function p.converse (frame) 
	local arg = frame.args
	out = parseval ( arg [1], arg [2] )
	return out;
end

-- remove final "px"
function p.getp (frame) 
	local arg = frame.args
	inp = arg [1]
	out = parseval ( inp, "p")
	return out;
end
function p.getw (frame) 
	local arg = frame.args
	inp = arg [1]
	out = parseval ( inp, "w")
	return out;
end
function p.geth (frame) 
	local arg = frame.args
	inp = arg [1]
	out = parseval ( inp, "h")
	return out;
end

return p;