Difference between revisions of "Module:Babel/sandbox"

From blackwiki
Jump to navigation Jump to search
blackwiki>The Mol Man
m (15 revisions imported)
 
(13 intermediate revisions by 4 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 7: Line 15:
 
getArgs = require('Module:Arguments').getArgs
 
getArgs = require('Module:Arguments').getArgs
 
end
 
end
local args = getArgs(frame, {wrappers = {'Template:Babel', 'Template:Babel instruments'}})
+
local args = getArgs(frame, {wrappers = 'Template:Babel'})
+
 
local table_tag = mw.html.create('table')
+
local ret = mw.html.create('table')
 
:addClass('userboxes')
 
:addClass('userboxes')
local table_styling = {
+
:css( {
{'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
+
 
table_tag:css(v[1],v[2]..v[3])
+
local nocat = args.nocat and string.lower(args.nocat) == 'yes'
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)')
+
['-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)')
+
['-webkit-box-shadow'] = '0 2px 4px rgb(0,0,0,0.2)' })
 
end
 
end
+
 
local extracss = args['extra-css'] 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 footer = args.footer or '[[:Category:Wikipedians by language|Search user languages]]'
+
local body_cells = row2:tag('td')
 
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:preprocess('{{User '..args[1]..'}}')
+
userboxes = showUserbox(frame, args[1], nocat)
 
else
 
else
 
userboxes = args.noboxestext or "''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] = ''
+
 
local unclosed_td = false
+
-- Keep track of how many columns are in this table
for i, v in ipairs( args ) do
+
local col_span = 1
local boxtext
+
for _, v in ipairs( args ) do
 +
-- ! indicates a new cell should be created
 
if v:find('%S') and v ~= '!' then
 
if v:find('%S') and v ~= '!' then
boxtext = frame:preprocess('{{User '..v..'}}')
+
body_cells:wikitext( showUserbox(frame, v, nocat) )
userboxes = userboxes..boxtext
+
-- Recycling body_cells for <td>
 
elseif v and v == '!' then
 
elseif v and v == '!' then
userboxes = userboxes..'</td>\n<td>'
+
col_span = col_span + 1
unclosed_td = true
+
body_cells:done()
 +
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 '[[Wikipedia:Babel]]' )
 +
:done()
 +
 +
row3:tag('td')
 +
:css({ ['background-color'] = color,
 +
['text-align'] = 'center' })
 +
:attr('colspan',col_span)
 +
:wikitext( args.footer or '[[:Category:Wikipedians 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
  
if unclosed_td then
+
body_cells:done()
userboxes = userboxes..'</td>'
+
 
end
+
return tostring(ret)
body_cells:wikitext(userboxes)
 
 
row2:node(body_cells)
 
 
table_tag:node(row1)
 
:node(row2)
 
:node(row3)
 
 
return tostring(table_tag)
 
 
end
 
end
  
 
return p
 
return p

Latest revision as of 13:22, 26 September 2020

Documentation for this module may be created at Module:Babel/sandbox/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')
				: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)',
						['-mox-box-shadow'] = '0 2px 4px rgb(0,0,0,0.2)',
						['-webkit-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 '[[Wikipedia:Babel]]' )
			:done()

	row3:tag('td')
			:css({ ['background-color'] = color,
					['text-align'] = 'center' })
			:attr('colspan',col_span)
			:wikitext( args.footer or '[[:Category:Wikipedians 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