Module:Redirect template

From Charak Samhita
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

require('Module:No globals')

local p = {}

-- key is beginning of arg name. value is table with namespace number and link -- alternatively, a function taking the namespace number and returning a validity -- can be used local namespaceCategories = { all = { function() return true end }, main = { 0, 'main' }, help = { 12, 'help' }, portal = { 100, 'portal' }, talk = { function(n) return n > 0 and n%2 == 1 end, 'talk' }, template = { 10, 'template' }, wikipedia = { 4, 'Wikipedia project' }, category = { 14, 'category' }, user = { 2, 'user' }, }

-- Don't convert blank category to nil local function valueFunc(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == and key ~= 'category' and key ~= 'embed' then return nil end end return val end

local function getPrettyName(args) for k in pairs(namespaceCategories) do if args[k .. ' category'] then return "[[:Category:" .. args[k .. ' category'] .. "|" .. args.name .. "]]: " end end return "" .. args.name .. ": " end

function p.core(frame, args) if not args then args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template/core', valueFunc = valueFunc}) end local namespace = mw.title.getCurrentTitle().namespace local otherCategory = args['other category'] and (args.category or string.format(, args['other category'])) local embedPossible = args.embed == nil or args.embed == 'yes'

--- XXX: this is a HORRIBLE HACK. kill it with fire as soon as https://bugzilla.wikimedia.org/show_bug.cgi?id=12974 is fixed local beCompatibleWithBug12974 = args.info and (args.info:find('^[:;#*]', 1) == 1 or args.info:find('{|', 1, true) == 1) and '\n' or ' '

local retval = string.format('*%sThis is a redirect%s%s.%s%s', embedPossible and args.name and getPrettyName(args) or , args.from and (' from ' .. args.from) or , args.to and (' to ' .. args.to) or , args.info and beCompatibleWithBug12974 or , args.info or ) for k,v in pairs(namespaceCategories) do if args[k .. ' category'] then if type(v[1]) == 'function' and v[1](namespace) or v[1] == namespace then retval = retval .. (args.category or string.format(, args[k .. ' category'])) elseif args['other category'] then retval = retval .. otherCategory else retval = retval .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}} end end end return retval end

function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc}) local retval = p.core(frame, args) if mw.title.getCurrentTitle().namespace == 0 then if args.printworthy == 'yes' then return retval .. (args.category or ) elseif args.printworthy == 'no' then return retval .. (args.category or ) end end return retval end

return p