Module:Babel: Difference between revisions

From Test Wiki
Content deleted Content added
No edit summary
Importing from https://meta.wikimedia.org/wiki/Module:Babel.
 
(16 intermediate revisions by 11 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'})
local args = getArgs(frame, {
wrappers = 'Template:Babel'
})
local table_tag = mw.html.create('table')
:addClass('userboxes')
local table_styling = {
{'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', ''}
}
local ret = mw.html.create('table')
for _,v in ipairs(table_styling) do
:attr('role', 'presentation')
table_tag:css(v[1],v[2]..v[3])
:addClass('userboxes')
end
: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 bordercolor = args.bordercolor or '#99B3FF'
local nocat = args.nocat and string.lower(args.nocat) == 'yes'
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
ret:css({
table_tag: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)')
['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 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')


local body_cells = row2:tag('td')
: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 = args.noboxestext or
userboxes = "''You haven't set up any languages. Please see [[Template:Babel/doc]] for help.''"
"''You haven't set up any languages. Please see [[:en:Template:Babel/doc|the template's documentation]] 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')
:attr('colspan', col_span)
:css({
['background-color'] = color,
['text-align'] = 'center'
})
:wikitext(args.header or '[[:m:User language|User language]]')
:done()
row3:tag('td')
:attr('colspan', col_span)
:css({
['background-color'] = color,
['text-align'] = 'center'
})
:wikitext(args.footer or '[[:Category:Users by language|Search user languages]]')
:done()
if args['special-boxes'] then
if args['special-boxes'] then
userboxes = userboxes..frame:preprocess(args['special-boxes'])
body_cells:wikitext(args['special-boxes'])
end
end

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