Module:Babel: Difference between revisions
From Test Wiki
Content deleted Content added
wait, it's preprocessed already, right |
Importing from https://meta.wikimedia.org/wiki/Module:Babel. |
||
| (15 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, { |
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 |
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)') |
|||
['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 |
||
ret:cssText(args['extra-css'] or '') |
|||
table_tag:cssText(extracss) |
|||
local color = args.color or 'inherit' |
local color = args.color or 'inherit' |
||
local row1 = |
local row1 = ret:tag('tr') |
||
local row2 = |
local row2 = ret:tag('tr') |
||
local row3 = |
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 |
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 |
||
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( |
return tostring(ret) |
||
end |
end |
||