Module:WikiProject banner/sandbox: Difference between revisions

Content deleted Content added
this check needs to happen earlier
m Removed protection from "Module:WikiProject banner/sandbox"
 
(67 intermediate revisions by 6 users not shown)
Line 153:
page = demo_page,
dab = 'disambiguation page',
sia = 'set index article',
draft = 'draft'
})
local article = pagetype=='article' or pagetype=='set index article'
Line 322 ⟶ 323:
assessment_link = nil
end
local fallback_suffix
-- if this is non-nil, this is the suffix which must be used with the class check_fallbacks returned
-- returns the most specific class for which the given category exists
-- FM is unusual: FM > File > NA
-- all other non-article classes: Category > NA, Redirect > NA, etc.
-- performance note: this is expensive whenever BOTH article is false AND class is nonempty
local check_fallbacks = function(class, category)
if article or args.QUALITY_CRITERIA=='custom' then -- no fallbacks for articles or projects with custom quality scales
fallback_suffix = nil
if article or class=='' then -- no fallbacks for non-article classes or the absence of a class
return class
else -- check fallbacks for non-article classes
end
local new_class = class
-- check fallbacks for non-article classes
local new_classcategory_exists = function(class)
local cat = mw.title.new(cfg.quality.assessment_category:format(class, category .. ' ' .. (article and 'articles' or 'pages')))
local category_exists = function(class, new_suffix_style)
return cat.exists and #cat:getContent()>0 -- check if category exists and is not blank
local cat = mw.title.new(cfg.quality.assessment_category:format(
class,
category .. ' ' .. (new_suffix_style and 'pages' or 'articles')
))
return cat.exists -- check if category exists
end
local class_works = function(class)
if category_exists(class, true) then -- try preferred suffix
fallback_suffix = 'pages'
return true
elseif category_exists(class, false) then -- fall back to old suffix
fallback_suffix = 'articles'
return true
else
return false
end
if class=='FM' and not category_exists('FM') then
new_class = 'File' -- fall back to File-class if FM category does not exist
end
if not category_exists(new_class) then
new_class = 'NA' -- use NA for non-article pages if category does not exist
end
return new_class
end
if class=='FM' and not class_works('FM') and not args.QUALITY_CRITERIA=='custom' then
new_class = 'File' -- fall back to File-class if FM-class doesn't work
end
if not class_works(new_class) and not args.QUALITY_CRITERIA=='custom' then
new_class = 'NA' -- use NA for non-article pages if class doesn't work
end
return new_class
end
local class = raw_args.class
Line 403 ⟶ 383:
class = check_fallbacks(article_class, assessment_cat) -- check fallbacks again now that class may have changed
check_redundant()
elseif class==article_class then -- local class matches article class or is blank
check_redundant()
elseif article_class=='' then -- local class defined and no article class defined
show = true
add_category(cfg.banner_shell.category.no_quality_rating)
if args.QUALITY_CRITERIA~='custom' then
warning = warning .. display_error(cfg.banner_shell.piqa_warning)
end
elseif article_class=='FM' and not args.QUALITY_CRITERIA=~='custom' then
class = check_fallbacks(article_class'FM', assessment_cat) -- TODO performance?
check_redundant()
elseif not article and class~='FM' then -- article class and local class are both non-article classes
Line 419 ⟶ 400:
else -- article class exists and differs from local class
show = 'conflict'
add_category(class .. cfg.banner_shell.conflict.categorycategory2:format(class, article_class))
end
else -- banner shell does not exist
show = true
end
local category = (class=='' and 'Unassessed' or class..'-Class') .. ' ' .. assessment_cat .. ' ' .. (article and 'articles' or 'pages')
-- use "pages" for non-articles if the category exists: temporary transition code
if fallback_suffix then
category = category .. ' ' .. fallback_suffix
elseif not article and mw.title.new('Category:' .. category .. ' pages').exists then
category = category .. ' pages'
else
category = category .. ' articles'
end
if show then -- quality rating shown in banner
local rating
Line 482 ⟶ 455:
local importance_name = args.IMPN or (raw_args.priority and 'priority' or cfg.importance.default_name)
if importance then -- banner gives importance ratings
local category = importance .. '-' .. importance_name .. ' ' .. assessment_cat .. ' ' .. (importance=='NA' and 'pages' or 'articles')
if importance=='NA' and mw.title.new('Category:' .. category .. ' pages').exists then
category = category .. ' pages' -- use "pages" for non-articles if the category exists: temporary transition code
else
category = category .. ' articles'
end
if importance~='NA' then -- display importance rating
local rating = importance=='Unknown' and cfg.importance.not_yet or cfg.importance.rated:format(importance, importance_name)
Line 517 ⟶ 485:
add_category(category)
end
page_assessment(project,if class, or importance) then
page_assessment(project, class, importance)
end
if args.HOOK_IMPORTANCE then
table.insert(rows, args.HOOK_IMPORTANCE)
end
if args.QII_FORMAT then
add_category(require(auxiliary).quality_importance_insection(args, class, importance, importance_name, assessment_cat, article))
end
---------------------------
Line 577 ⟶ 547:
args[tf_prefix..'NAME']
)
if yesno(args[tf_prefix..'QUALITY']) and class then
local tf_class = check_fallbacks(class, tf_assessment_cat)
add_category((tf_class=='' and 'Unassessed' or tf_class..'-Class') .. ' ' .. tf_assessment_cat .. ' ' .. (article and 'articles' or 'pages'))
end
local tf_importance, tf_importance_category
if raw_args['tf '..k..' importance'] then
Line 583 ⟶ 557:
tf_importance = importance
end
tf_importance_category = tf_importance .. '-' .. importance_name .. ' ' .. tf_assessment_cat .. ' ' .. (tf_importance=='NA' and 'pages' or 'articles')
if tf_importance=='NA' and mw.title.newadd_category('Category:' .. tf_importance_category .. ' pages').exists then
tf_importance_category = tf_importance_category .. ' pages' -- use "pages" for non-articles if the category exists: temporary transition code
else
tf_importance_category = tf_importance_category .. ' articles'
end
end
if args[tf_prefix .. 'TEXT']~='none' then
Line 635 ⟶ 605:
if args[tf_prefix..'HOOK'] then
table.insert(taskforce_output, args[tf_prefix..'HOOK'])
end
if yesno(args[tf_prefix..'QUALITY']) and class then
local tf_class = check_fallbacks(class, tf_assessment_cat)
local category = (tf_class=='' and 'Unassessed' or tf_class..'-Class') .. ' ' .. tf_assessment_cat
-- use "pages" for non-articles if the category exists: temporary transition code
if fallback_suffix then
category = category .. ' ' .. fallback_suffix
elseif not article and mw.title.new('Category:' .. category .. ' pages').exists then
category = category .. ' pages'
else
category = category .. ' articles'
end
add_category(category)
end
if tf_importance then
add_category(tf_importance_category)
end
if args[tf_prefix..'QII_FORMAT'] then
add_category(require(auxiliary).quality_importance_insection(args, class, tf_importance, importance_name, tf_assessment_cat, article, tf_prefix))
end
if args[tf_prefix..'NAME'] then
Line 856 ⟶ 810:
:wikitext(wikilink(project_link.prefixedText, project) .. nested_tf_str .. ' ' .. nested_ratings_str)
:done()
---------------------------
-- Default sort -----------
---------------------------
if args.listas then
frame:preprocess('{{DEFAULTSORT:' .. args.listas .. '}}')
if title.namespace~=3 then -- exclude user talk namespace
local success, shell_listas_value = require('Module:Template parameter value').getParameter(
title.prefixedText,
cfg.banner_shell.redirects,
'listas',
{ignore_subtemplates = true, ignore_blank = true}
)
if success and shell_listas_value~='' then
if args.listas==shell_listas_value then -- same value in both (with spacing trimming)
add_category(cfg.banner_shell.category.redundant_listas)
end
else -- listas is blank or not defined in banner shell
add_category(cfg.banner_shell.category.move_listas)
end
end
end
---------------------------
-- Prepare categories -----
Line 930 ⟶ 863:
local category = parent_args.category or args.category or true
local demo_page = parent_args.demo_page
local config, project
if args.project then -- check for config page
project = args.project
local config_file = mw.title.new('Template:WikiProject ' .. args.project .. '/config')
if config_file.exists then
config = mw.loadJsonData(config_file.fullText)
else
return nil
end
end
if config then -- use config file
if parent_args.taskforce then -- split comma-separated list
for taskforce in mw.text.gsplit(parent_args.taskforce, ',%s*') do
parent_args[taskforce] = 'yes'
end
end
args, raw_args = require(auxiliary).map_config(config, parent_args) -- map parameters from config page
args.PROJECT = project
end
local on_template_page = false
local banner_name = mw.title.new(args.BANNER_NAME or 'Template:WikiProject ' .. (args.PROJECT or 'PROJECT'))
Line 946 ⟶ 898:
table.insert(parameters, parameter)
end
parameters.showblankpositional = "1"
local check_for_unknown = require('Module:Check for unknown parameters')._check
local unknowns = check_for_unknown(parameters, parent_args)
if unknowns and unknowns~='' then -- there are some unknown parameters
parameters.preview = cfg.unknown_parameters.preview:format(wikilink(banner_name.fullText))
local unknown_category = cfg.unknown_parameters.tracking:format(project_name)
Line 960 ⟶ 913:
if on_template_page then
local templatepage = require('Module:WikiProject banner/templatepage' .. (sandbox or '')).templatepage
return templatepage(args, raw_args, inactive_status, config)
else
return unknown_parameters