From Wikipedia, the free encyclopedia

require('Module:Lua class')

require('strict')



local BarBox = class('BarBox', {

	_css = 'Module:Bar/sandbox/styles.css',



	__init = function (self, args)

		self.css			 = args1  or args.css

		self.float			 = args2  or args.float or 'none'

		self.backgroundcolor = args3  or args.backgroundcolor or 'white'

		self.borderwidth	 = args4  or args.borderwidth or '1'

		self.style			 = args5  or args.style

		self.width			 = args6  or args.width-- or 'auto'

		self.barwidth		 = args7  or args.barwidth or '100px'

		self.lineheight		 = args8  or args.lineheight-- or '1.6'

		self.title			 = args9  or args.title

		self.titlebar		 = args10 or args.titlebar-- or 'none'

		self.left1			 = args11 or args.left1

		self.left2			 = args12 or args.left2

		self.right1			 = args13 or args.right1

		self.right2			 = args14 or args.right2

		self.bars			 = args15 or args.bars

		self.caption		 = args16 or args.caption -- deprecated

		self.footer			 = args17 or args.footer or args16 or args.caption

	end,



	create = function (cls, args)

		args = mw.clone(args)

		args.float	  = args.float and args.float:lower()

		args.width	  = tonumber(args.width) and args.width .. 'px' or args.width and args.width:lower()

		args.barwidth = tonumber(args.barwidth) and args.barwidth .. 'px' or args.barwidth and args.barwidth:lower()

		return cls(args)

	end,



	_sDefaultAlign = 'lrlr',

	_tDefaultAlign = {false, 'r', false, 'r'},



	_setAlign = function (obj, align)

		obj._alignClasses = {}

		for i, d in ipairs(obj._tDefaultAlign) do

			local a = align:sub(i,i)

			if a == 'l' then

				a = false

			elseif a == 'd' then

				a = d

			elseif a ~= 'c' and a ~= 'r' then

				error('unrecognized align[' .. i .. ']')

			end

			obj._alignClassesi = a and 'class=bb-' .. a

		end

	end,



	html = function (self)

		local output = {}



		local frame = mw.getCurrentFrame()

		output1 = frame:extensionTag('templatestyles', '', {src=self._css}) .. '\n'

		output2 = self.css and frame:extensionTag('templatestyles', '', {src=self.css}) .. '\n' or ''



		local class = 'barbox'

		if self.float == 'left' or self.float == 'right' then

			class = class .. ' t' .. self.float

		end



		output3 =

			'<div class="' .. class .. '" style="background:' .. self.backgroundcolor ..

			'; border:' .. self.borderwidth .. 'px solid silver' ..

			(self.float == 'center' and '; margin:0 auto' or '') ..

			(self.width and '; width:' .. self.width or '') ..

			(self.style and '; ' .. self.style or '') .. '">\n' ..

				'{|' .. (self.lineheight and ' style="line-height:' .. self.lineheight .. '"' or '') .. '\n'



			output4 = self.title and

				'|+ class=bb-default' .. (self.titlebar and ' style="background:' .. self.titlebar .. '"' or '') .. ' |\n' ..

				self.title .. '\n'

			or ''



			output5 = '|- class=bb-default style="font-size:88%; min-height:4px"\n'

				if self._alignClasses then -- same as self.__class._alignClasses

					self._alignClasses = self._alignClasses

					self.__class._alignClasses = nil

				else

					self._setAlign(self, self._sDefaultAlign)

				end



				local attributes =

					not self.left2 and 'colspan=2' .. (self._alignClasses1 and ' ' .. self._alignClasses1 or '') or self._alignClasses1

				output6 = '!' .. (attributes and attributes .. '|' or '') .. (self.left1 or ' ')

				output7 = self.left2 and '!!' .. (self._alignClasses2 and self._alignClasses2 .. '|' or '') .. self.left2 or ''

				output8 = '!!style="width:' .. self.barwidth .. '"| '

				attributes =

					not self.right2 and 'colspan=2' .. (self._alignClasses4 and ' ' .. self._alignClasses4 or '') or self._alignClasses3

				output9 = '!!' .. (attributes and attributes .. '|' or '') .. (self.right1 or self.right2 and ' ' or '')

				output10 = self.right2 and '!!' .. (self._alignClasses4 and self._alignClasses4 .. '|' or '') .. self.right2 or ''

			output11 = '\n'



			output12 = self.bars and self.bars .. '\n' or ''



			if self.caption then

				output15 = '\n[[Category:Pages using bar box with deprecated caption parameter]]'

			else

				output15 = ''

			end

			output13 = self.footer and

				'|- class=bb-default\n| colspan=5 style="padding:5px 0" | ' .. -- <p> is created if \n precedes the footer

				self.footer .. '\n'

			or ''

		output14 = '|}\n</div>'



		return table.concat(output)

	end,



	__tostring = function (self)

		return self.html()

	end,



	percent = function (args)

		local output = {}

		local percentage = (args3 or '0') .. '%'



		output1 = '|-' .. (args.bg and 'style="background:' .. args.bg .. '"' or '') .. '\n'

			output2 = '|colspan=2 class=bb-min8|' .. (args1 or ' ')

			output3 = '||class=bb-b|'

				output4 = '<div style="background:' .. (args2 or 'gray') .. '; width:' .. percentage .. '">&#8203;</div>'

			output5 = '||' .. (args.note and '' or 'colspan=2 class=bb-r|') .. (args4 or percentage)

			output6 = args.note and '||class=bb-r|' .. args.note or ''



		return table.concat(output)

	end,



	pixel = function (args)

		local output = {}

		local pixels = args3 or '0'



		output1 = '|-' .. (args.bg and 'style="background:' .. args.bg .. '"' or '') .. '\n'

			output2 = '|colspan=2|' .. (args1 or ' ')

			output3 = '||class=bb-b|'

				output4 = '<div style="background:' .. (args2 or 'gray') .. '; width:' .. pixels .. 'px">&#8203;</div>'

			output5 = '||class="bb-min3' .. (args.note and '"' or ' bb-r" colspan=2') .. '|' .. (args5 or pixels .. (args4 or ''))

			output6 = args.note and '||class=bb-r|' .. args.note or ''



		return table.concat(output)

	end,



	stacked = function (cls, args)

		local output = {}



		output1 = args.id and

			'|-class="mw-collapsible' .. (args.collapsed and ' mw-collapsed' or '') .. '" id=mw-customcollapsible-' .. args.id .. '\n'

		or '|-\n'

			if not cls._alignClasses then

				cls._setAlign(cls, args.align and args.align:lower() or cls._sDefaultAlign)

			end



			local attributes =

				not args.note1 and 'colspan=2' .. (cls._alignClasses1 and ' ' .. cls._alignClasses1 or '') or cls._alignClasses1

			output2 = '|' .. (attributes and attributes .. '|' or '') .. (args1 or ' ')

			output3 = args.note1 and '||' .. (cls._alignClasses2 and cls._alignClasses2 .. '|' or '') .. args.note1 or ''

			output4 = '||class=bb-b|'



				local len = 0 -- can't use #args because of [[Module:Arguments#Known limitations]]

				for k in pairs(args) do

					local idx = tonumber(k) or 0

					if idx > len then len = idx end

				end



				if args.bkgclasses then -- used when wikitext minimization is essential

					for i = 1, len-2 do

						local width, delim, title --is delim reset every cycle?

						width = argsi+2 or 0

						width = tonumber(('%.2f'):format(width))

						if width > 0 then

							if not delim then -- assuming title types are consistent

								delim = tonumber(args'title' .. i]) and '' or '"'

							end

							title = args'title' .. i and ' title=' .. delim .. args'title' .. i .. delim or ''

							output#output+1 =

								'<div' .. title .. ' class=' .. args.bkgclassesi .. ' style=width:' .. width .. 'px></div>'

						end

					end

				else

					for i = 1, (len-2) / 2 do

						local width, title, background

						width = args2*i + 2 or 0

						width = tonumber(('%.2f'):format(width))

						if width > 0 then

							title = args'title' .. i and ' title="' .. args'title' .. i .. '"' or ''

							background = args2*i + 1 or 'gray'

							output#output+1 =

								'<div' .. title .. ' style="background:' .. background .. ';width:' .. width .. 'px"></div>'

						end

					end

				end



				if #output == 4 then

					output5 = ' '

				end



			attributes =

				not args.note2 and 'colspan=2' .. (cls._alignClasses4 and ' ' .. cls._alignClasses4 or '') or cls._alignClasses3

			output#output+1 = '||' .. (attributes and attributes .. '|' or '') .. (args2 or args.note2 and ' ' or '')

			output#output+1 = args.note2 and '||' .. (cls._alignClasses4 and cls._alignClasses4 .. '|' or '') .. args.note2 or ''



		return table.concat(output)

	end,



	gap = function (args)

		local output = {}

		local height = tonumber(args.height) and args.height .. 'px' or args.height and args.height:lower() or '10px'



		output1 = '|-\n'

			output2 = '|colspan=5 style="height:' .. height .. '"|' .. (args1 or '')



		return table.concat(output)

	end,



	__classmethods = {'create', 'stacked'},

	__staticmethods = {'_setAlign', 'percent', 'pixel', 'gap'},

	__slots = {'_alignClasses'}

})





local getArgs = require('Module:Arguments').getArgs



local p = {BarBox}



function p.box(frame)

	local args = getArgs(frame)

	local box = BarBox.create(args)

	return tostring(box)

end



function p.percent(frame)

	local args = getArgs(frame)

	return BarBox.percent(args)

end



function p.pixel(frame)

	local args = getArgs(frame)

	return BarBox.pixel(args)

end



function p.stacked(frame)

	local yesno = require('Module:Yesno')

	local args = getArgs(frame, {

		valueFunc = function (key, value)

			if value then

				if key == 'collapsed' then

					return yesno(value)

				elseif key == 'bkgclasses' then

					return mw.text.jsonDecode(value) -- string to table

				end

				value = mw.text.trim(value)

				if value ~= '' then

					return value

				end

			end

			return nil

		end

	})

	return BarBox.stacked(args)

end



function p.gap(frame)

	local args = getArgs(frame)

	return BarBox.gap(args)

end



return p
From Wikipedia, the free encyclopedia

require('Module:Lua class')

require('strict')



local BarBox = class('BarBox', {

	_css = 'Module:Bar/sandbox/styles.css',



	__init = function (self, args)

		self.css			 = args1  or args.css

		self.float			 = args2  or args.float or 'none'

		self.backgroundcolor = args3  or args.backgroundcolor or 'white'

		self.borderwidth	 = args4  or args.borderwidth or '1'

		self.style			 = args5  or args.style

		self.width			 = args6  or args.width-- or 'auto'

		self.barwidth		 = args7  or args.barwidth or '100px'

		self.lineheight		 = args8  or args.lineheight-- or '1.6'

		self.title			 = args9  or args.title

		self.titlebar		 = args10 or args.titlebar-- or 'none'

		self.left1			 = args11 or args.left1

		self.left2			 = args12 or args.left2

		self.right1			 = args13 or args.right1

		self.right2			 = args14 or args.right2

		self.bars			 = args15 or args.bars

		self.caption		 = args16 or args.caption -- deprecated

		self.footer			 = args17 or args.footer or args16 or args.caption

	end,



	create = function (cls, args)

		args = mw.clone(args)

		args.float	  = args.float and args.float:lower()

		args.width	  = tonumber(args.width) and args.width .. 'px' or args.width and args.width:lower()

		args.barwidth = tonumber(args.barwidth) and args.barwidth .. 'px' or args.barwidth and args.barwidth:lower()

		return cls(args)

	end,



	_sDefaultAlign = 'lrlr',

	_tDefaultAlign = {false, 'r', false, 'r'},



	_setAlign = function (obj, align)

		obj._alignClasses = {}

		for i, d in ipairs(obj._tDefaultAlign) do

			local a = align:sub(i,i)

			if a == 'l' then

				a = false

			elseif a == 'd' then

				a = d

			elseif a ~= 'c' and a ~= 'r' then

				error('unrecognized align[' .. i .. ']')

			end

			obj._alignClassesi = a and 'class=bb-' .. a

		end

	end,



	html = function (self)

		local output = {}



		local frame = mw.getCurrentFrame()

		output1 = frame:extensionTag('templatestyles', '', {src=self._css}) .. '\n'

		output2 = self.css and frame:extensionTag('templatestyles', '', {src=self.css}) .. '\n' or ''



		local class = 'barbox'

		if self.float == 'left' or self.float == 'right' then

			class = class .. ' t' .. self.float

		end



		output3 =

			'<div class="' .. class .. '" style="background:' .. self.backgroundcolor ..

			'; border:' .. self.borderwidth .. 'px solid silver' ..

			(self.float == 'center' and '; margin:0 auto' or '') ..

			(self.width and '; width:' .. self.width or '') ..

			(self.style and '; ' .. self.style or '') .. '">\n' ..

				'{|' .. (self.lineheight and ' style="line-height:' .. self.lineheight .. '"' or '') .. '\n'



			output4 = self.title and

				'|+ class=bb-default' .. (self.titlebar and ' style="background:' .. self.titlebar .. '"' or '') .. ' |\n' ..

				self.title .. '\n'

			or ''



			output5 = '|- class=bb-default style="font-size:88%; min-height:4px"\n'

				if self._alignClasses then -- same as self.__class._alignClasses

					self._alignClasses = self._alignClasses

					self.__class._alignClasses = nil

				else

					self._setAlign(self, self._sDefaultAlign)

				end



				local attributes =

					not self.left2 and 'colspan=2' .. (self._alignClasses1 and ' ' .. self._alignClasses1 or '') or self._alignClasses1

				output6 = '!' .. (attributes and attributes .. '|' or '') .. (self.left1 or ' ')

				output7 = self.left2 and '!!' .. (self._alignClasses2 and self._alignClasses2 .. '|' or '') .. self.left2 or ''

				output8 = '!!style="width:' .. self.barwidth .. '"| '

				attributes =

					not self.right2 and 'colspan=2' .. (self._alignClasses4 and ' ' .. self._alignClasses4 or '') or self._alignClasses3

				output9 = '!!' .. (attributes and attributes .. '|' or '') .. (self.right1 or self.right2 and ' ' or '')

				output10 = self.right2 and '!!' .. (self._alignClasses4 and self._alignClasses4 .. '|' or '') .. self.right2 or ''

			output11 = '\n'



			output12 = self.bars and self.bars .. '\n' or ''



			if self.caption then

				output15 = '\n[[Category:Pages using bar box with deprecated caption parameter]]'

			else

				output15 = ''

			end

			output13 = self.footer and

				'|- class=bb-default\n| colspan=5 style="padding:5px 0" | ' .. -- <p> is created if \n precedes the footer

				self.footer .. '\n'

			or ''

		output14 = '|}\n</div>'



		return table.concat(output)

	end,



	__tostring = function (self)

		return self.html()

	end,



	percent = function (args)

		local output = {}

		local percentage = (args3 or '0') .. '%'



		output1 = '|-' .. (args.bg and 'style="background:' .. args.bg .. '"' or '') .. '\n'

			output2 = '|colspan=2 class=bb-min8|' .. (args1 or ' ')

			output3 = '||class=bb-b|'

				output4 = '<div style="background:' .. (args2 or 'gray') .. '; width:' .. percentage .. '">&#8203;</div>'

			output5 = '||' .. (args.note and '' or 'colspan=2 class=bb-r|') .. (args4 or percentage)

			output6 = args.note and '||class=bb-r|' .. args.note or ''



		return table.concat(output)

	end,



	pixel = function (args)

		local output = {}

		local pixels = args3 or '0'



		output1 = '|-' .. (args.bg and 'style="background:' .. args.bg .. '"' or '') .. '\n'

			output2 = '|colspan=2|' .. (args1 or ' ')

			output3 = '||class=bb-b|'

				output4 = '<div style="background:' .. (args2 or 'gray') .. '; width:' .. pixels .. 'px">&#8203;</div>'

			output5 = '||class="bb-min3' .. (args.note and '"' or ' bb-r" colspan=2') .. '|' .. (args5 or pixels .. (args4 or ''))

			output6 = args.note and '||class=bb-r|' .. args.note or ''



		return table.concat(output)

	end,



	stacked = function (cls, args)

		local output = {}



		output1 = args.id and

			'|-class="mw-collapsible' .. (args.collapsed and ' mw-collapsed' or '') .. '" id=mw-customcollapsible-' .. args.id .. '\n'

		or '|-\n'

			if not cls._alignClasses then

				cls._setAlign(cls, args.align and args.align:lower() or cls._sDefaultAlign)

			end



			local attributes =

				not args.note1 and 'colspan=2' .. (cls._alignClasses1 and ' ' .. cls._alignClasses1 or '') or cls._alignClasses1

			output2 = '|' .. (attributes and attributes .. '|' or '') .. (args1 or ' ')

			output3 = args.note1 and '||' .. (cls._alignClasses2 and cls._alignClasses2 .. '|' or '') .. args.note1 or ''

			output4 = '||class=bb-b|'



				local len = 0 -- can't use #args because of [[Module:Arguments#Known limitations]]

				for k in pairs(args) do

					local idx = tonumber(k) or 0

					if idx > len then len = idx end

				end



				if args.bkgclasses then -- used when wikitext minimization is essential

					for i = 1, len-2 do

						local width, delim, title --is delim reset every cycle?

						width = argsi+2 or 0

						width = tonumber(('%.2f'):format(width))

						if width > 0 then

							if not delim then -- assuming title types are consistent

								delim = tonumber(args'title' .. i]) and '' or '"'

							end

							title = args'title' .. i and ' title=' .. delim .. args'title' .. i .. delim or ''

							output#output+1 =

								'<div' .. title .. ' class=' .. args.bkgclassesi .. ' style=width:' .. width .. 'px></div>'

						end

					end

				else

					for i = 1, (len-2) / 2 do

						local width, title, background

						width = args2*i + 2 or 0

						width = tonumber(('%.2f'):format(width))

						if width > 0 then

							title = args'title' .. i and ' title="' .. args'title' .. i .. '"' or ''

							background = args2*i + 1 or 'gray'

							output#output+1 =

								'<div' .. title .. ' style="background:' .. background .. ';width:' .. width .. 'px"></div>'

						end

					end

				end



				if #output == 4 then

					output5 = ' '

				end



			attributes =

				not args.note2 and 'colspan=2' .. (cls._alignClasses4 and ' ' .. cls._alignClasses4 or '') or cls._alignClasses3

			output#output+1 = '||' .. (attributes and attributes .. '|' or '') .. (args2 or args.note2 and ' ' or '')

			output#output+1 = args.note2 and '||' .. (cls._alignClasses4 and cls._alignClasses4 .. '|' or '') .. args.note2 or ''



		return table.concat(output)

	end,



	gap = function (args)

		local output = {}

		local height = tonumber(args.height) and args.height .. 'px' or args.height and args.height:lower() or '10px'



		output1 = '|-\n'

			output2 = '|colspan=5 style="height:' .. height .. '"|' .. (args1 or '')



		return table.concat(output)

	end,



	__classmethods = {'create', 'stacked'},

	__staticmethods = {'_setAlign', 'percent', 'pixel', 'gap'},

	__slots = {'_alignClasses'}

})





local getArgs = require('Module:Arguments').getArgs



local p = {BarBox}



function p.box(frame)

	local args = getArgs(frame)

	local box = BarBox.create(args)

	return tostring(box)

end



function p.percent(frame)

	local args = getArgs(frame)

	return BarBox.percent(args)

end



function p.pixel(frame)

	local args = getArgs(frame)

	return BarBox.pixel(args)

end



function p.stacked(frame)

	local yesno = require('Module:Yesno')

	local args = getArgs(frame, {

		valueFunc = function (key, value)

			if value then

				if key == 'collapsed' then

					return yesno(value)

				elseif key == 'bkgclasses' then

					return mw.text.jsonDecode(value) -- string to table

				end

				value = mw.text.trim(value)

				if value ~= '' then

					return value

				end

			end

			return nil

		end

	})

	return BarBox.stacked(args)

end



function p.gap(frame)

	local args = getArgs(frame)

	return BarBox.gap(args)

end



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook