Module:Babel: Difference between revisions

From Test Wiki
Jump to navigation Jump to search
Content deleted Content added
wait, it's preprocessed already, right
No edit summary
 
(14 intermediate revisions by 10 users not shown)
Line 2: Line 2:


local getArgs
local getArgs

local function showUserbox(frame, v, nocat)
local maybeNocat = ''
if nocat then
maybeNocat = '|nocat=yes'
end
return frame:preprocess('{{User '..v..maybeNocat..'}}')
end


function p.main(frame)
function p.main(frame)
Line 8: Line 16:
end
end
local args = getArgs(frame, {wrappers = 'Template:Babel'})
local args = getArgs(frame, {wrappers = 'Template:Babel'})

local table_tag = mw.html.create('table')
local ret = mw.html.create('table')
:attr('role', 'presentation')
:addClass('userboxes')
:addClass('userboxes')
:css( {
local table_styling = {
{'float', args.align or 'right', ''},
float = args.align or 'right',
{'margin-left', args.left or '1', 'em'},
['margin-left'] = (args.left or '1') .. 'em',
{'margin-bottom', args.bottom or '0', 'em'},
['margin-bottom'] = (args.bottom or '0') .. 'em',
{'width', args.width or '248', 'px'},
width = (args.width or '248') .. 'px',
{'clear', args.align or 'right', ''},
clear = args.align or 'right',
{'color', args.textcolor or '#000000', ''}
color = args.textcolor or '#000000',
border = (args.bordercolor or '#99B3FF') .. ' solid ' .. (args.solid or 1)..'px'
}
} )

for _,v in ipairs(table_styling) do
local nocat = args.nocat and string.lower(args.nocat) == 'yes'
table_tag:css(v[1],v[2]..v[3])

end
local bordercolor = args.bordercolor or '#99B3FF'
local solid = args.solid or '1'
table_tag:css('border',bordercolor..' solid '..solid..'px')
if args.shadow and string.lower(args.shadow) == 'yes' then
if args.shadow and string.lower(args.shadow) == 'yes' then
table_tag:css('box-shadow','0 2px 4px rgb(0,0,0,0.2)')
ret:css({ ['box-shadow'] = '0 2px 4px rgb(0,0,0,0.2)' })
:css('-mox-box-shadow','0 2px 4px rgb(0,0,0,0.2)')
:css('-webkit-box-shadow','0 2px 4px rgb(0,0,0,0.2)')
end
end

local extracss = args.extracss or ''
ret:cssText( args['extra-css'] or '' )

table_tag:cssText(extracss)
local color = args.color or 'inherit'
local color = args.color or 'inherit'
local row1 = mw.html.create('tr')
local row1 = ret:tag('tr')
local row2 = mw.html.create('tr')
local row2 = ret:tag('tr')
local row3 = mw.html.create('tr')
local row3 = ret:tag('tr')

local header = args.header or '[[Wikipedia:Babel]]'
local body_cells = row2:tag('td')
local footer = args.footer or '[[:Category:Wikipedians by language|Search user languages]]'
local footer_td = mw.html.create('td')
:css('background-color',color)
:css('text-align','center')
:attr('colspan','10')
:wikitext(footer)
local header_th = mw.html.create('th')
:css('background-color',color)
:css('text-align','center')
:attr('colspan','10')
:wikitext(header)
row1:node(header_th)
row3:node(footer_td)
local body_cells = mw.html.create('td')
:css('vertical-align', 'middle !important')
:css('vertical-align', 'middle !important')


local userboxes
local userboxes
-- Special message for when first argument is blank; otherwise treat it as normal
if args[1] and args[1]:find('%S') then
if args[1] and args[1]:find('%S') then
userboxes = frame:expandTemplate{title='User '..args[1]}
userboxes = showUserbox(frame, args[1], nocat)
else
else
userboxes = "''You haven't set up any languages. Please see [[Template:Babel/doc]] for help.''"
userboxes = args.noboxestext or "''You haven't set up any languages. Please see [[Template:Babel/doc]] for help.''"
end
end

body_cells:wikitext(userboxes)

-- "remove" args[1] so it isn't looked at in the loop
-- table.remove(args,1) doesn't produce desired result
args[1] = ''
args[1] = ''

-- Keep track of how many columns are in this table
local unclosed_td = false
local col_span = 1
for i, v in ipairs( args ) do
for _, v in ipairs( args ) do
local boxtext
-- ! indicates a new cell should be created
if v:find('%S') and v ~= '!' then
if v:find('%S') and v ~= '!' then
body_cells:wikitext( showUserbox(frame, v, nocat) )
boxtext = frame:expandTemplate{title='User '..v}
-- Recycling body_cells for <td>
userboxes = userboxes..boxtext
elseif v and v == '!' then
elseif v and v == '!' then
col_span = col_span + 1
userboxes = userboxes..'</td>\n<td>'
body_cells:done()
unclosed_td = true
body_cells = row2:tag('td')
end
end
end
end

row1:tag('th')
:css({ ['background-color'] = color,
['text-align'] = 'center' })
:attr('colspan',col_span)
:wikitext( args.header or '[[WP:Wikipedia:Babel|Babel]]' )
:done()

row3:tag('td')
:css({ ['background-color'] = color,
['text-align'] = 'center' })
:attr('colspan',col_span)
:wikitext( args.footer or '[[:Category:Test Wiki users by language|Search user languages]]' )
:done()


if args['special-boxes'] then
if args['special-boxes'] then
userboxes = userboxes..args['special-boxes']
body_cells:wikitext(args['special-boxes'])
end
end


body_cells:done()
if unclosed_td then

userboxes = userboxes..'</td>'
return tostring(ret)
end
body_cells:wikitext(userboxes)
row2:node(body_cells)
table_tag:node(row1)
:node(row2)
:node(row3)
return tostring(table_tag)
end
end



Latest revision as of 16:53, 12 March 2024

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

local p = {}

local getArgs

local function showUserbox(frame, v, nocat)
	local maybeNocat = ''
	if nocat then
		maybeNocat = '|nocat=yes'
	end
	return frame:preprocess('{{User '..v..maybeNocat..'}}')
end

function p.main(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	local args = getArgs(frame, {wrappers = 'Template:Babel'})

	local ret = mw.html.create('table')
				:attr('role', 'presentation')
				:addClass('userboxes')
				:css( {
						float = args.align or 'right',
						['margin-left'] = (args.left or '1') .. 'em',
						['margin-bottom'] = (args.bottom or '0') .. 'em',
						width = (args.width or '248') .. 'px',
						clear = args.align or 'right',
						color = args.textcolor or '#000000',
						border = (args.bordercolor or '#99B3FF') .. ' solid ' .. (args.solid or 1)..'px'
					} )

	local nocat = args.nocat and string.lower(args.nocat) == 'yes'

	if args.shadow and string.lower(args.shadow) == 'yes' then
		ret:css({ ['box-shadow'] = '0 2px 4px rgb(0,0,0,0.2)' })
	end

	ret:cssText( args['extra-css'] or '' )

	local color = args.color or 'inherit'
	local row1 = ret:tag('tr')
	local row2 = ret:tag('tr')
	local row3 = ret:tag('tr')

	local body_cells = row2:tag('td')
				:css('vertical-align', 'middle !important')

	local userboxes
	-- Special message for when first argument is blank; otherwise treat it as normal
	if args[1] and args[1]:find('%S') then
		userboxes = showUserbox(frame, args[1], nocat)
	else
		userboxes = args.noboxestext or "''You haven't set up any languages. Please see [[Template:Babel/doc]] for help.''"
	end

	body_cells:wikitext(userboxes)

	-- "remove" args[1] so it isn't looked at in the loop
	-- table.remove(args,1) doesn't produce desired result
	args[1] = ''

	-- Keep track of how many columns are in this table
	local col_span = 1
	for _, v in ipairs( args ) do
		-- ! indicates a new cell should be created
		if v:find('%S') and v ~= '!' then
			body_cells:wikitext( showUserbox(frame, v, nocat) )
		-- Recycling body_cells for <td>
		elseif v and v == '!' then
			col_span = col_span + 1
			body_cells:done()
			body_cells = row2:tag('td')
		end
	end

	row1:tag('th')
			:css({ ['background-color'] = color,
					['text-align'] = 'center' })
			:attr('colspan',col_span)
			:wikitext( args.header or '[[WP:Wikipedia:Babel|Babel]]' )
			:done()

	row3:tag('td')
			:css({ ['background-color'] = color,
					['text-align'] = 'center' })
			:attr('colspan',col_span)
			:wikitext( args.footer or '[[:Category:Test Wiki users by language|Search user languages]]' )
			:done()

	if args['special-boxes'] then
		body_cells:wikitext(args['special-boxes'])
	end

	body_cells:done()

	return tostring(ret)
end

return p