Module:WikiProject banner/auxiliary

require('strict') local p = {} local sandbox-- = '/sandbox' local cfg = mw.loadData('Module:WikiProject banner/config' .. (sandbox or '')) local yesno = require('Module:Yesno') local lang = mw.getLanguage(cfg.language)

p.b_checklist = function(args, raw_args, class, demo, assessment_link) --- -- B-class checklist -- --- local show_checklist = false local parameters_used = args.b1 or args.b2 or args.b3 or args.b4 or args.b5 or args.b6 if (class=='B' or class=='C' or class=='BL' or class=='CL')-- always displayed on C or B	or ((class=='Start' or class=='List') and yesno(args.B_DISPLAY_ON_START))-- show on Start/List if option selected or ((class=='Start' or class=='Stub') and parameters_used) then-- show on Start or Stub if any parameters used show_checklist = true end if show_checklist then local scale = args.QUALITY_CRITERIA=='custom' and assessment_link and assessment_link..'#'..lang:ucfirst(cfg.quality.name) or cfg.b_checklist.default_scale local text = string.format(		cfg.b_checklist.text,		parameters_used and cfg.b_checklist.checked or cfg.b_checklist.not_checked,		scale	) local syntax = {} local criteria = mw.html.create('ol') for i = 1, 6 do		local b = raw_args['b'..i]		if b and b~='unused' then -- crtierion in use b = cfg.b_checklist.mask[string.lower(b)] or cfg.b_checklist.mask.default local image = '' local failed_cat = args['B'..i..'_CAT'] local category = '' if b~='y' and b~='x' and failed_cat and not demo then -- criterion failed category = '' end if (b=='u' or b=='i') and args.B_MAIN_CAT and not demo then -- unevaluated or invalid parameter category = category .. ''			end criteria:tag('li') :wikitext(image .. ' ' .. cfg.b_checklist.criteria[i] .. ': ') :tag('span') :css('font-style', 'italic') :wikitext(cfg.b_checklist.status[b]) :wikitext(category) :allDone local new_syntax = mw.html.create('li') :addClass('nowrap') :wikitext(string.format( cfg.b_checklist.syntax.prompt, tostring(i), cfg.b_checklist.criteria[i] .. string.rep(' ', cfg.b_checklist.syntax.max_width-#cfg.b_checklist.criteria[i]) ))			:done table.insert(syntax, tostring(new_syntax)) end end local prompt if not parameters_used then prompt = mw.html.create('span') :wikitext(string.format( cfg.b_checklist.syntax.text, tostring(mw.title.getCurrentTitle:fullUrl({action = 'edit'})) ))			:tag('ul') :css('font-size', '88%'):css('margin', '0px'):css('font-family', 'monospace, sans-serif'):css('padding', '1em'):css('border', '1px dashed #2f6fab') :css('background-color', '#f9f9f9'):css('line-height', '1.1em'):css('list-style', 'none') :node(table.concat(syntax)) :done :wikitext(cfg.b_checklist.syntax.assess) :done end local checklist = mw.html.create('tr') :tag('td') :addClass('assess-b') :css('background', cfg.quality.colour.B):css('color', 'inherit'):css('padding-bottom', '5px') :wikitext(cfg.b_checklist.image) :done :tag('td') :addClass('wpb-collapsed-notes') :tag('table') :addClass('plainlinks mw-collapsible mw-collapsed') :tag('tr') :tag('th'):addClass('wpb-collapsed-head mbox-text'):attr('colspan', '3'):css('font-weight', 'normal'):wikitext(text):done :tag('td'):css('min-width', '3em'):done -- empty cell for show/hide toggle :done :tag('tr') :tag('td'):css('font-size', '90%'):node(criteria):done :tag('td'):css('font-size', '88%'):node(prompt):done :tag('td'):addClass('empty-cell'):done :done :done :done :done return checklist end end

p.todo_list = function(args, frame) --- -- To-do list - --- local list if args.TODO_LINK then local link = function(action) local url = mw.uri.fullUrl(args.TODO_LINK, {action = action}) return mw.html.create('li'):wikitext('[' .. tostring(url) .. ' ' .. cfg.todo_list[action] .. ']') end local links = yesno(args.TODO_EDITLINKS or true, 'true') and frame:expandTemplate{title = 'Flatlist', args = { class = 'plainlinks', style = 'text-align:center;font-size:90%;', [1] = tostring(mw.html.create('ul')			:node(link('edit'))			:node(link('history'))			:node(link('watch'))			:node(link('purge'))		) }} or '' list = links .. '\n' .. frame:expandTemplate{title = args.TODO_LINK} else list = ('\n' .. args.TODO_TEXT) or '' end local todo_list = mw.html.create('tr') :tag('td'):attr('colspan', '3'):css('padding', '0') :tag('table'):addClass('mw-collapsible mw-collapsed'):css('background', 'transparent'):css('color', 'var( --color-base )'):css('width', '100%') :tag('tr') :tag('th'):css('text-align', 'left'):css('padding', '0.2em 2px 0.2em 0') :cssText(args.TODO_TITLE_STYLE):wikitext((args.TODO_TITLE or cfg.todo_list.default_title) .. ':') :done:done :tag('tr') :tag('td'):css('text-align', 'left'):css('padding', '5px'):css('background-color', 'white'):css('color', 'black') :css('border', '1px solid #c0c090'):css('margin-top', '5px') :cssText(args.TODO_STYLE):wikitext(list)
 * allDone

return todo_list end p.todo_list_ = function(frame) return p.todo_list(frame.args, frame) end

p.quality_importance_insection = function(args, class, importance, importance_name, tf_prefix) --- -- Category intersection -- --- local suppress = false local prefix = tf_prefix or '' if class=='NA' and (yesno(args[prefix..'QII_SUPPRESS_NA']) or yesno(args[prefix..'QII_SUPPRESS_NA_CLASS'])) then suppress = true end if importance=='NA' and (yesno(args[prefix..'QII_SUPPRESS_NA']) or yesno(args[prefix..'QII_SUPPRESS_NA_IMPORTANCE'])) then suppress = true end if not class or not importance then suppress = true end local format = args[prefix..'QII_FORMAT']:gsub('C', '_C_'):gsub('I', '_I_'):gsub('T', '_T_') if format and not suppress then local new_class if class=='' then new_class = 'Unassessed' .. (args[prefix..'QII_UNASSESSED_APPENDIX'] or '') else new_class = class .. '-Class' end local assessment_cat = args[prefix..'ASSESSMENT_CAT'] or args.PROJECT..' articles' local cat_name = format:gsub('_C_', new_class):gsub('_I_', importance .. '-' .. importance_name):gsub('_T_', assessment_cat) local cat = mw.title.new('Category:' .. cat_name) return cat.exists and #cat:getContent>0 and cat_name end end

p.image_needed = function(args, pagetype) --- -- Image needed --- --- local type = cfg.image_needed.default_type if args['image-type'] then local add_article = function(word) local article = cfg.image_needed.article.consonant if cfg.image_needed.vowels[string.sub(word, 1, 1)] then article = cfg.image_needed.article.vowel end return article .. '  .. word .. '	end type = add_article(args['image-type']) end local details = '' if args['image-details'] then details = ' ' .. string.format(cfg.image_needed.details, args['image-details']) end local location = '' if args['image-location'] then local location_cat = mw.title.new('Category:Wikipedians in ' .. args['image-location']) if location_cat.exists then location = ' ' .. string.format(			cfg.image_needed.help,			 .. location_cat.text .. 		) end end local category_exists = function(category) local title = mw.title.new('Category:' .. category) if title.exists then return category end end return { text = string.format(cfg.image_needed.text, type, details, pagetype, location), image_name = args.IM_IMAGE or cfg.image_needed.default_image, category = args['image-location'] and category_exists(string.format( cfg.image_needed.location, args['image-type'] or 'photograph', args['image-location'] )) or args.IM_LOCATION_CATEGORY, category2 = args['image-topic'] and category_exists(string.format( cfg.image_needed.topic, args['image-type'] or 'photograph', args['image-topic'] )) or args.IM_TOPIC_CATEGORY } end

p.collaboration = function(args, pagetype, title) --- -- Collaboration -- --- local image = args.COLL_IMAGE or cfg.collaboration.default_image local link =  .. (args.COLL_TEXT or cfg.collaboration.default_text) ..  local note_args = {candidate = {}, current = {}, past = {}} if yesno(args['collaboration-candidate'], true) then local subpage_link = (args.COLL_LINK or '') .. '#' .. title.subjectPageTitle.text note_args.candidate = { text = string.format(cfg.collaboration.candidate, pagetype, subpage_link, link), image_name = image, size = cfg.collaboration.size, category = args.COLL_CANDIDATE_CAT } end if yesno(args['collaboration-current'], true) then note_args.current = { text = string.format(cfg.collaboration.current, pagetype, link), image_name = image, size = cfg.collaboration.size, category = args.COLL_CURRENT_CAT } end if yesno(args['collaboration-past'], true) then note_args.past = { text = string.format(cfg.collaboration.past, pagetype, link), image_name = image, size = cfg.collaboration.size, category = args.COLL_PAST_CAT } end return note_args end

p.a_class = function(args, lang) --- -- A-class review - --- local status = cfg.a_class.mask[lang:lc(args['a class'])] if status==nil then return {} end local subpage = args.ACR_SUBPAGE_LINK or '' local link_exists = args.ACR_SUBPAGE_LINK and mw.title.new(subpage).exists or false local category = { pass = 'ACR_PASS_CAT', fail = 'ACR_FAIL_CAT', current = 'ACR_CURRENT_CAT' } return { text = string.format(		cfg.a_class.text,		subpage,		cfg.a_class.status[status],		args.ACR_REVIEW_LINK or ''	), image_name = args.ACR_IMAGE or cfg.a_class.icon[status], size = args.ACR_SIZE or '18x18px', background = cfg.a_class.background, category = args[category[status]], category2 = not link_exists and args.ACR_INVALID_CAT } end

p.peer_review = function(args, title) --- -- Peer review --- local image = args.PR_IMAGE or cfg.peer_review.default_image local size = args.PR_SIZE or cfg.peer_review.size local link = args.PR_LINK or '' local pr_title = args['peer review title'] and mw.title.new(args['peer review title']) or title local subpage_link = link .. '/' .. pr_title.subjectPageTitle.text local invalid_cat = not mw.title.new(subpage_link).exists and args.PR_INVALID_CAT local note_args = {current = {}, past = {}} if yesno(args['peer review'], true) then note_args.current = { text = string.format(cfg.peer_review.current, subpage_link, link), image_name = image, size = size, category = args.PR_CAT, category2 = invalid_cat } end if yesno(args['old peer review'], true) then note_args.past = { text = string.format(cfg.peer_review.past, link, subpage_link), image_name = image, size = size, category = args.PR_OLD_CAT, category2 = invalid_cat } end return note_args

end return p