Module:Category handler: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
m (Protected Module:Category handler: High-risk Lua module ([Edit=Protected template] (indefinite) [Move=Protected template] (indefinite))) |
(Created page with "---------------------------------------------------------------------------------------------------------- --...") |
||
Line 10: | Line 10: | ||
-- -- |
-- -- |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
-- Configuration data -- |
-- Configuration data -- |
||
-- Language-specific parameter names and values can be set here. -- |
-- Language-specific parameter names and values can be set here. -- |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
local cfg = {} |
local cfg = {} |
||
-- The following config values set the names of parameters that suppress categorisation. They are used |
-- The following config values set the names of parameters that suppress categorisation. They are used |
||
-- with Module:Yesno, and work as follows: |
-- with Module:Yesno, and work as follows: |
||
Line 34: | Line 34: | ||
cfg.nocat = 'nocat' |
cfg.nocat = 'nocat' |
||
cfg.categories = 'categories' |
cfg.categories = 'categories' |
||
-- The parameter name for the legacy "category2" parameter. This skips the blacklist if set to the |
-- The parameter name for the legacy "category2" parameter. This skips the blacklist if set to the |
||
-- cfg.category2Yes value, and suppresses categorisation if present but equal to anything other than |
-- cfg.category2Yes value, and suppresses categorisation if present but equal to anything other than |
||
Line 41: | Line 41: | ||
cfg.category2Yes = 'yes' |
cfg.category2Yes = 'yes' |
||
cfg.category2Negative = '¬' |
cfg.category2Negative = '¬' |
||
-- cfg.subpage is the parameter name to specify how to behave on subpages. cfg.subpageNo is the value to |
-- cfg.subpage is the parameter name to specify how to behave on subpages. cfg.subpageNo is the value to |
||
-- specify to not categorise on subpages; cfg.only is the value to specify to only categorise on subpages. |
-- specify to not categorise on subpages; cfg.only is the value to specify to only categorise on subpages. |
||
Line 47: | Line 47: | ||
cfg.subpageNo = 'no' |
cfg.subpageNo = 'no' |
||
cfg.subpageOnly = 'only' |
cfg.subpageOnly = 'only' |
||
-- The parameter for data to return in all namespaces. |
-- The parameter for data to return in all namespaces. |
||
cfg.all = 'all' |
cfg.all = 'all' |
||
-- The parameter name for data to return if no data is specified for the namespace that is detected. This |
-- The parameter name for data to return if no data is specified for the namespace that is detected. This |
||
-- must be the same as the cfg.other parameter in [[Module:Namespace detect]]. |
-- must be the same as the cfg.other parameter in [[Module:Namespace detect]]. |
||
cfg.other = 'other' |
cfg.other = 'other' |
||
-- The parameter name used to specify a page other than the current page; used for testing and |
-- The parameter name used to specify a page other than the current page; used for testing and |
||
-- demonstration. This must be the same as the cfg.page parameter in [[Module:Namespace detect]]. |
-- demonstration. This must be the same as the cfg.page parameter in [[Module:Namespace detect]]. |
||
cfg.page = 'page' |
cfg.page = 'page' |
||
-- The categorisation blacklist. Pages that match Lua patterns in this list will not be categorised. |
-- The categorisation blacklist. Pages that match Lua patterns in this list will not be categorised. |
||
-- (However, see the explanation of cfg.nocat, cfg.categories and cfg.category2 for some exceptions.) |
-- (However, see the explanation of cfg.nocat, cfg.categories and cfg.category2 for some exceptions.) |
||
Line 65: | Line 65: | ||
cfg.blacklist = { |
cfg.blacklist = { |
||
'^Main Page$', -- don't categorise the main page. |
'^Main Page$', -- don't categorise the main page. |
||
-- Don't categorise the following pages or their subpages. |
-- Don't categorise the following pages or their subpages. |
||
'^Wikipedia:Cascade%-protected items$', |
'^Wikipedia:Cascade%-protected items$', |
||
Line 73: | Line 73: | ||
'^User_talk:UBX$', |
'^User_talk:UBX$', |
||
'^User_talk:UBX/.*$', |
'^User_talk:UBX/.*$', |
||
-- Don't categorise subpages of these pages, but allow |
-- Don't categorise subpages of these pages, but allow |
||
-- categorisation of the base page. |
-- categorisation of the base page. |
||
'^Wikipedia:Template messages/.+$', |
'^Wikipedia:Template messages/.+$', |
||
'/[aA]rchive' -- Don't categorise archives. |
'/[aA]rchive' -- Don't categorise archives. |
||
} |
} |
||
-- This is a table of namespaces to categorise by default. They should be in the format of parameter |
-- This is a table of namespaces to categorise by default. They should be in the format of parameter |
||
-- names accepted by [[Module:Namespace detect]]. |
-- names accepted by [[Module:Namespace detect]]. |
||
Line 89: | Line 89: | ||
'category' |
'category' |
||
} |
} |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
-- End configuration data -- |
-- End configuration data -- |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
-- Get dependent modules |
-- Get dependent modules |
||
local nsDetect = require('Module:Namespace detect') |
local nsDetect = require('Module:Namespace detect') |
||
local yesno = require('Module:Yesno') |
local yesno = require('Module:Yesno') |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
-- Local functions -- |
-- Local functions -- |
||
-- The following are internal functions, which we do not want to be accessible from other modules. -- |
-- The following are internal functions, which we do not want to be accessible from other modules. -- |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
-- Find whether we need to return a category or not. |
-- Find whether we need to return a category or not. |
||
local function needsCategory(pageObject, args) |
local function needsCategory(pageObject, args) |
||
Line 132: | Line 132: | ||
return true |
return true |
||
end |
end |
||
-- Find whether we need to check the blacklist or not. |
-- Find whether we need to check the blacklist or not. |
||
local function needsBlacklistCheck(args) |
local function needsBlacklistCheck(args) |
||
Line 144: | Line 144: | ||
end |
end |
||
end |
end |
||
-- Find whether any namespace parameters have been specified. |
-- Find whether any namespace parameters have been specified. |
||
-- Mappings is the table of parameter mappings taken from |
-- Mappings is the table of parameter mappings taken from |
||
Line 161: | Line 161: | ||
return false |
return false |
||
end |
end |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
-- Global functions -- |
-- Global functions -- |
||
Line 167: | Line 167: | ||
-- from other Lua modules. -- |
-- from other Lua modules. -- |
||
---------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------- |
||
local p = {} |
local p = {} |
||
-- Find if a string matches the blacklist. Returns the match if one is found, or nil otherwise. |
-- Find if a string matches the blacklist. Returns the match if one is found, or nil otherwise. |
||
-- Input should be a page title with a namespace prefix, e.g. "Wikipedia talk:Articles for deletion". |
-- Input should be a page title with a namespace prefix, e.g. "Wikipedia talk:Articles for deletion". |
||
Line 181: | Line 181: | ||
end |
end |
||
end |
end |
||
-- The main structure of the module. Checks whether we need to categorise, |
-- The main structure of the module. Checks whether we need to categorise, |
||
-- and then passes the relevant arguments to [[Module:Namespace detect]]. |
-- and then passes the relevant arguments to [[Module:Namespace detect]]. |
||
Line 190: | Line 190: | ||
local pageObject = nsDetect.getPageObject(args[cfg.page]) |
local pageObject = nsDetect.getPageObject(args[cfg.page]) |
||
local mappings = nsDetect.getParamMappings() |
local mappings = nsDetect.getParamMappings() |
||
if not needsCategory(pageObject, args) then return end |
if not needsCategory(pageObject, args) then return end |
||
local ret = '' |
local ret = '' |
||
-- Check blacklist if necessary. |
-- Check blacklist if necessary. |
||
Line 217: | Line 217: | ||
ret = ret .. all |
ret = ret .. all |
||
end |
end |
||
-- Get the arguments to pass to [[Module:Namespace detect]]. |
-- Get the arguments to pass to [[Module:Namespace detect]]. |
||
local ndargs = {} |
local ndargs = {} |
||
Line 228: | Line 228: | ||
ndargs.page = args.page |
ndargs.page = args.page |
||
ndargs.demospace = args.demospace |
ndargs.demospace = args.demospace |
||
local data = nsDetect._main(ndargs) |
local data = nsDetect._main(ndargs) |
||
-- Work out what to return based on the result of the namespace detect call. |
-- Work out what to return based on the result of the namespace detect call. |
||
local datanum = tonumber(data) |
local datanum = tonumber(data) |
||
Line 253: | Line 253: | ||
return ret |
return ret |
||
end |
end |
||
function p.main(frame) |
function p.main(frame) |
||
-- If called via #invoke, use the args passed into the invoking |
-- If called via #invoke, use the args passed into the invoking |
||
Line 268: | Line 268: | ||
origArgs = frame |
origArgs = frame |
||
end |
end |
||
-- Trim whitespace and remove blank arguments for the following args: |
-- Trim whitespace and remove blank arguments for the following args: |
||
-- 1, 2, 3 etc., "nocat", "categories", "subpage", and "page". |
-- 1, 2, 3 etc., "nocat", "categories", "subpage", and "page". |
||
Line 289: | Line 289: | ||
end |
end |
||
end |
end |
||
-- Lower-case "nocat", "categories", "category2", and "subpage". These |
-- Lower-case "nocat", "categories", "category2", and "subpage". These |
||
-- parameters are put in lower case whenever they appear in the old |
-- parameters are put in lower case whenever they appear in the old |
||
Line 300: | Line 300: | ||
end |
end |
||
end |
end |
||
return p._main(args) |
return p._main(args) |
||
end |
end |
||
return p |
return p |