Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Maintenance

-- @brief
--  Maintenance handling.
-- 
-- @author
--  [[meta:User:Danny B.]]
local Maintenance = {}
----------------------------------------


Maintenance.prefix = {
	message = "UPOZORNĚNÍ: ",
	category = "Údržba:"
}
Maintenance.default = {
	message = "Chybné vložení.",
	category = "Opravit chybné volání šablony %s",
	categoryPattern = "%s v šabloně %s"
}
Maintenance.commonTypes = {
	parameterMissing = {
		message = {
			prefix = "Chybí ",
			numbered = "%d. parametr (%s)",
			named = "parametr „%s“ (%s)",
			suffix = "."
		},
		category = {
			prefix = "Doplnit ",
			numbered = "%d. parametr",
			named = "parametr „%s“",
			suffix = ""
		}
	},
	parameterUnknown = {
		message = {
			prefix = "Neznámý ",
			numbered = "parametr „%s“",
			named = "parametr „%s“",
			suffix = "."
		},
		category = {
			prefix = "Zkontrolovat neznámý parametr",
			numbered = "",
			named = "",
			suffix = ""
		}
	},
	valueMissing = {
		message = {
			prefix = "Chybí hodnota ",
			numbered = "%d. parametru (%s)",
			named = "parametru „%s“ (%s)",
			suffix = "."
		},
		category = {
			prefix = "Doplnit hodnotu ",
			numbered = "%d. parametru",
			named = "parametru „%s“",
			suffix = ""
		}
	},
	valueOutOfRange = {
		message = {
			prefix = "Hodnota ",
			numbered = "%d. parametru (%s)",
			named = "parametru „%s“ (%s)",
			suffix = " je mimo akceptovaný rozsah."
		},
		category = {
			prefix = "Opravit hodnotu ",
			numbered = "%d. parametru",
			named = "parametru „%s“",
			suffix = ""
		}
	},
	valueUnknown = {
		message = {
			prefix = "Neznámá hodnota ",
			numbered = "%d. parametru (%s)",
			named = "parametru „%s“ (%s)",
			suffix = "."
		},
		category = {
			prefix = "Opravit hodnotu ",
			numbered = "%d. parametru",
			named = "parametru „%s“",
			suffix = ""
		}
	},
	valueWrongFormat = {
		message = {
			prefix = "Chybný formát hodnoty ",
			numbered = "%d. parametru (%s)",
			named = "parametru „%s“ (%s)",
			suffix = "."
		},
		category = {
			prefix = "Opravit hodnotu ",
			numbered = "%d. parametru",
			named = "parametru „%s“",
			suffix = ""
		}
	}
}


setmetatable( Maintenance, {
	__call = function ( class, ... )
		return class.new( ... )
	end
})


Maintenance.__index = Maintenance

Maintenance.class = "warning mwm-maintenance"


function Maintenance.new( template )
	
	local self = setmetatable( {}, Maintenance )
	
	self.template = template
	self.message = false
	self.category = false
	self.overrideDefaultCategoryPattern = false
	
	return self
	
end


function Maintenance:setMessage( message )
	
	self.message = message
	
	return self
	
end


function Maintenance:setCategory( category, override )
	
	if not ( type( override ) == "boolean" or type( override ) == "nil" ) then
		error( "setCategory: Wrong type of the \"override\" parameter - boolean or nil expected.", 2 )
	end
	
	self.category = category
	self.overrideDefaultCategoryPattern = override
	
	return self
	
end


function Maintenance:getMessage()
	
	local templateLink = ""
	
	if self.template then
		templateLink = mw.ustring.format(
			"<nowiki>{{</nowiki>[[%s:%s|%s]]<nowiki>}}</nowiki> — ",
			mw.site.namespaces.Template.name,
			self.template,
			self.template
		)
	end
	
	return tostring(
		mw.html.create( "strong" )
			:attr( "class", self.class )
			:wikitext(
				self.prefix.message,
				templateLink,
				( self.message or self.default.message )
			)
			:allDone()
	)
	
end


function Maintenance:getCategory()
	
	if self.category then
		self.category = self.overrideDefaultCategoryPattern and self.category or mw.ustring.format( self.default.categoryPattern, self.category, ( self.template or "" ) )
	else
		self.category = mw.ustring.format( self.default.category, ( self.template or "" ) )
	end
	
	return mw.ustring.format(
		"[[%s:%s%s]]",
		mw.site.namespaces.Category.name,
		self.prefix.category,
		mw.text.trim( self.category )
	)
	
end


function Maintenance:getText()
	
	return mw.ustring.format(
		"%s<includeonly>%s</includeonly>",
		self:getMessage(),
		self:getCategory()
	)
	
end


for functionName, functionData in pairs( Maintenance.commonTypes ) do
	
	Maintenance[functionName] = function( self, paramInfo )
		
		if paramInfo and paramInfo.name and paramInfo.desc then
			local paramType = ( tonumber( paramInfo.name ) and "numbered" or "named" )
			self.message = functionData.message.prefix .. functionData.message[paramType]:format( paramInfo.name, paramInfo.desc ) .. functionData.message.suffix
			self.category = functionData.category.prefix .. functionData.category[paramType]:format( paramInfo.name, paramInfo.desc ) .. functionData.category.suffix
			self.overrideDefaultCategoryPattern = false
		else
			error( functionName .. ": Missing paramInfo table or any of its parts.", 2 )
		end
		
		return self
		
	end
	
end


----------------------------------------
return Maintenance