Module:InfoboxImage

Iz Medžuviki, svobodnoj enciklopedije
Jump to navigation Jump to search

Nema teksta dokumentacije.

-- Inputs:
--    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link
--    page - page to display for multipage images (DjVu)
--    size - size to display the image
--    maxsize - maximum size for image
--    sizedefault - default size to display the image if size param is blank
--    alt - alt text for image
--    title - title text for image
--    border - set to yes if border
--    center - set to yes, if the image has to be centered
--    upright - upright image param
--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it
--    link - page to visit when clicking on image
-- Outputs:
--    Formatted image.
-- More details available at the "Module:InfoboxImage/doc" page

local i = {};

local default_size = 300;

local placeholder_image = {}

function i.IsPlaceholder(image)
	-- change underscores to spaces
	image = mw.ustring.gsub(image, "_", " ");
	assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil')
	-- if image starts with [[ then remove that and anything after |
	if mw.ustring.sub(image,1,2) == "[[" then
		image = mw.ustring.sub(image,3);
		image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");
		assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil')
	end
	-- Trim spaces
	image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
	assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")
	-- remove prefix if exists
	local allNames = mw.site.namespaces[6].aliases
	allNames[#allNames + 1] = mw.site.namespaces[6].name
	allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
	for i, name in ipairs(allNames) do
		if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
			image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
			break
		end
	end
	-- Trim spaces
	image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
	-- capitalise first letter
	image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);

	for i,j in pairs(placeholder_image) do
		if image == j then
			return true
		end
	end
	return false
end

function i.InfoboxImage(frame)
	local image = frame.args["image"];
	
	if image == "" or image == nil then
		return "";
	end
	if image == " " then
		return image;
	end
	-- if frame.args["suppressplaceholder"] ~= "no" then
	-- 	if i.IsPlaceholder(image) == true then
	-- 		return "";
	-- 	end
	-- end

	if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then
		return "";
	end
	if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then
		return "";
	end
	if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[[http:" then
		return "";
	end
	if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then
		return "";
	end
	if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then
		return "";
	end
	if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then
		return "";
	end

	if mw.ustring.sub(image,1,2) == "[[" then
		if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then
			return image;
		end
		image, _ = mw.ustring.gsub(image, '%]%]', '|thumb]]');
		return image;
	elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then
		return image;
	elseif mw.ustring.sub(image,1,1) == "<" then
		return image;
	elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127).."UNIQ" then
		-- Found strip marker at begining, so pass don't process at all
		return image;
	elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then
		-- Found strip marker at begining, so pass don't process at all
		return image;
	else
		local result = "";
		local page = frame.args["page"];
		local size = frame.args["size"];
		local maxsize = frame.args["maxsize"];
		local sizedefault = frame.args["sizedefault"];
		local alt = frame.args["alt"];
		local link = frame.args["link"];
		local title = frame.args["title"];
		local border = frame.args["border"];
		local upright = frame.args["upright"] or "";
		local thumbtime = frame.args["thumbtime"] or "";
		local center= frame.args["center"];
		local class = frame.args["class"] or "";
		
		-- remove prefix if exists
		local allNames = mw.site.namespaces[6].aliases
		allNames[#allNames + 1] = mw.site.namespaces[6].name
		allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
		for i, name in ipairs(allNames) do
			if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
				image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
				break
			end
		end
		
		if maxsize ~= "" and maxsize ~= nil then
			-- if no sizedefault then set to maxsize
			if sizedefault == "" or sizedefault == nil then
				sizedefault = maxsize
			end
			-- check to see if size bigger than maxsize
			if size ~= "" and size ~= nil then
				local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;
				local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;
				if sizenumber>maxsizenumber and maxsizenumber>0 then
					size = maxsize;
				end
			end
		end
		
		result = "[[File:" .. image .. '|thumb|center';
		if page ~= "" and page ~= nil then
			result = result .. "|page=" .. page;
		end
		-- if center == "yes" then
		-- 	result = result .. "|center"
		-- end
		if border == "no" then
			class = 'noborder ' .. class;
		end
		if class ~= "" and class ~= nil then
			result = result .. "|class=" .. class;
		end
		if alt ~= "" and alt ~= nil then
			result = result .. "|alt=" .. alt;
		end
		if link ~= "" and link ~= nil then
			result = result .. "|link=" .. link;
		end
		-- if border == "yes" then
		-- 	result = result .. "|border";
		-- end
		if size ~= "" and size ~= nil then
			result = result .. "|upright=" .. (tonumber(size) / default_size);
		elseif sizedefault ~= "" and sizedefault ~= nil then
			result = result .. "|upright=" .. (tonumber(sizedefault) / default_size);
		elseif upright == "yes" then
			result = result .. "|upright";
		elseif upright ~= "" then
			result = result .. "|upright=" .. upright;
		end
		if thumbtime ~= "" then
			result = result .. "|thumbtime=" .. thumbtime;
		end
		-- if alt value is a keyword then do not use as a description
		if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then
			alt = nil;
		end
		if title ~= "" and title ~= nil then
			-- does title param contain any templatestyles? If yes then set to blank.
			if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then
				title = nil;
			end
		end
		if title ~= "" and title ~= nil then
			result = result .. "|" .. title;
		elseif alt ~= "" and alt ~= nil then
			result = result .. "|" .. alt;
		end
		result = result .. "]]";
		
		return result;
	end
end

return i;