Module:Sandbox/GKFX
Appearance
local pagetype = require('Module:Pagetype')
local banner = {}
local params = {}
-- A function to make empty strings be nil and return others unchanged
function x(str)
return str == '' and nil or str
end
--[[
A space to determine the value of parameters considering defaults etc.
It is not obligatory to pass every argument through this function.
]]
function banner.processArguments(frame)
local args = frame.args
local status_table = {
inactive = 'inactive-wikiproject',
['semi-active'] = 'semi-active-wikiproject',
semiactive = 'semi-active-wikiproject',
defunct = 'defunct-wikiproject'
}
params.status = status_table[string.lower(args['PROJECT_STATUS'] or '')] or 'active-wikiproject';
params.project = args['PROJECT']
params.project_link = args['PROJECT_LINK'] or ('Wikipedia:WikiProject ' .. params.project)
params.project_name = args['PROJECT_NAME'] or ('WikiProject ' .. params.project)
params.assessment_cat = args['ASSESSMENT_CAT'] or (params.project .. ' articles')
params.banner_name = args['BANNER_NAME'] or ('Template:WikiProject ' .. params.project)
params.task_forces = {}
for i = 1, 20 do
if args['tf ' .. i] then
params.task_forces[i] = {
image = args['TF_' .. i .. '_IMAGE'],
link = args['TF_' .. i .. '_LINK'],
name = args['TF_' .. i .. '_NAME'],
nested = args['TF_' .. i .. '_NESTED'],
quality = args['TF_' .. i .. '_QUALITY'],
assessment_cat = args['TF_' .. i .. '_ASSESSMENT_CAT'],
main_cat = args['TF_' .. i .. '_MAIN_CAT'],
importance = args['tf_' .. i .. '_importance'],
text = args['TF_' .. i .. '_TEXT']
}
end
end
params.image_left = {name = args['IMAGE_LEFT'], size = args['IMAGE_LEFT_SIZE'] or args['IMAGE_LEFT_LARGE'] or '80px'}
params.image_right = {name = args['IMAGE_RIGHT'], size = args['IMAGE_RIGHT_SIZE'] or args['IMAGE_RIGHT_LARGE'] or '80px'}
params.tf_size = args['TF_SIZE'] or args['TF_1_SIZE'] or 'x25px'
if args['QUALITY_SCALE'] == 'inline' then
params.class = args['class']
elseif args['QUALITY_SCALE'] == 'subpage' then
params.class = frame:expandTemplate{title = params.banner_name .. '/class', args = {
class = args['class'] or '¬',
b1 = args['b1'] or '¬', b2 = args['b2'] or '¬',
b3 = args['b3'] or '¬', b4 = args['b4'] or '¬',
b5 = args['b5'] or '¬', b6 = args['b6'] or '¬'
}}
else
params.class = frame:expandTemplate{title = 'Class mask', args = {
class = args['class'] or '¬',
FQS = args['QUALITY_SCALE'] == 'expanded' and 'yes' or 'no',
b1 = args['b1'] or '¬', b2 = args['b2'] or '¬',
b3 = args['b3'] or '¬', b4 = args['b4'] or '¬',
b5 = args['b5'] or '¬', b6 = args['b6'] or '¬'
}}
end
if params.class == '' then
params.class = nil
end
if args['ASSESSMENT_LINK'] == 'no' then
params.assessment_link = ''
elseif args['ASSESSMENT_LINK'] and args['ASSESSMENT_LINK'] ~= '' then
params.assessment_link = args['ASSESSMENT_LINK']
else
params.assessment_link = params.project_link .. '/Assessment'
if not mw.title.new(params.assessment_link).exists then
params.assessment_link = ''
end
end
-- boolean, default true, if false prevents categories from being set
params.category = not (args['category'] == 'no' or args['category'] == 'n' or args['category'] == 'false'
or args['category'] == 'f' or args['category'] == 'off' or args['category'] == '0')
-- TODO> convert WPBannerMeta/importance to Lua too.
params.importance = frame:expandTemplate{title = 'WPBannerMeta/importance', args = {
args['importance'] or args['priority'] or '¬',
BANNER_NAME = params.banner_name,
class = args['class'] or '¬',
IMPORTANCE_SCALE = args['IMPORTANCE_SCALE']
}}
end
function banner.qualityScale(frame, html)
local current = html:tag('tr'):wikitext(
frame:expandTemplate{title = 'Class', args = {
params.class, category = params.category and 'yes' or ''
}})
:tag('td'):attr({class = 'mbox-text', colspan = '2'})
:wikitext('This ')
-- (params.category and pagetype._main(page = params.class)))
if params.category then
current:wikitext('[[Category:',
(params.class and (params.class .. '-Class ') or 'Unassessed '),
params.assessment_cat, ']]')
end
end
function banner.importanceScale(frame, html)
end
function banner._main(frame)
banner.processArguments(frame)
local result = mw.html.create('table')
local current = result:attr({class = 'tmbox tmbox-notice mw-collapsible innercollapse wpb ' .. params.status, style = 'height:0'})
:tag('tr'):addClass('wpb-header-')
:tag('td'):cssText('text-align:right; padding:0.3em 1em 0.3em 0.3em; width:50%; font-weight:bold;')
:wikitext('[[', params.project_link, '|', params.project_name, ']]')
for _, tf in ipairs(params.task_forces) do
if tf.nested then
current:wikitext('/ [[' .. tf.link .. '|' .. tf.nested .. ']] ')
end
end
current = current:done()
:tag('th'):cssText('text-align:left; width:50%; padding:0.3em;')
:wikitext("(Rated etc...)"):done():done()
:tag('tr')
:tag('td'):attr({class='mbox-text', style='padding:3px 0 3px 5px;', colspan='2'})
:tag('table'):cssText('background:transparent; border:none; padding:0; width:100%; border-spacing:0')
:tag('tr')
if params.image_left.name then
current:wikitext('<td class="mbox-image" style="padding:2px 0;">[[File:', params.image_left.name,
'|', params.image_left.size, '|alt=WikiProject icon]]</td>')
else
current:wikitext('<td class=mbox-empty-cell></td>')
end
current = current:tag('td'):addClass('mbox-text')
if frame.args['PORTAL'] then
current:wikitext(frame:expandTemplate{title = 'portal', args = {frame.args['PORTAL']}})
end
current:wikitext(frame:expandTemplate{title = 'navbar', args =
{mini = '1', style = 'float:right; clear:right; margin:-1em 0.1em; display:none;'}})
if frame.args['MAIN_TEXT'] then
current:wikitext(frame.args['MAIN_TEXT'])
else
current:wikitext('This ', 'article',
[=[ is within the scope of '''[[]=], params.project_link, '|', params.project_name,
[=[]]''', a collaborative effort to improve the coverage of ]=])
if frame.args['MAIN_ARTICLE'] then
current:wikitext(mw.title.new(frame.args['MAIN_ARTICLE']).exists and ('[[' .. frame.args['MAIN_ARTICLE'] .. ']]')
or frame.args['MAIN_ARTICLE'])
else
current:wikitext(mw.title.new(params.project).exists and ('[[' .. params.project .. ']]')
or (params.project .. ' articles'))
end
current:wikitext(' on Wikipedia. If you would like to participate, please visit the project page, where you can join the [[',
tostring(mw.title.new(params.project_link).talkPageTitle), '|discussion]] and see a list of open tasks.')
end
current:wikitext('<span class="metadata" style="display:none; speak:none;"><span class="wpb-project">',
params.project, '</span><span class="wpb-banner_name">', params.banner_name,
'</span><span class="wpb-assessment_cat">', params.assessment_cat, '</span></span>')
current = current:done() -- </td>
if params.image_right.name then
current:wikitext('<td class="mbox-imageright" style="padding:2px 4px 2px 0;">[[File:', params.image_right.name,
'|', params.image_right.size, '|alt=WikiProject icon]]</td>')
else
current:wikitext('<td class=mbox-empty-cell></td>')
end
current = current:done() -- </tr>
banner.qualityScale(frame, current)
-- Opportunity to dump in any content under the quality banner
current:wikitext(frame.args['HOOK_ASSESS'])
banner.importanceScale(frame, current)
return tostring(result)
end
return banner