Difference between revisions of "Module:Redirect template"

Jump to navigation Jump to search
imported>Steel1943
(Undid revision 876443655 by MSGJ (talk) undoing this change as it seems to break the formatting of the rcat text if multiple rcat templates are used and contains wiki text with at least one example of m...)
imported>Paine Ellsworth
(xfer from sandbox per edit request at template talk page)
 
Line 18: Line 18:
 
}
 
}
  
-- Don't convert blank category to nil
+
-- remove whitespaces from beginning and end of args
 
local function valueFunc(key, val)
 
local function valueFunc(key, val)
 
if type(val) == 'string' then
 
if type(val) == 'string' then
 
val = val:match('^%s*(.-)%s*$')
 
val = val:match('^%s*(.-)%s*$')
if val == '' and key ~= 'category' and key ~= 'embed' then
+
if val == '' then
 
return nil
 
return nil
 
end
 
end
Line 32: Line 32:
 
for k in pairs(namespaceCategories) do
 
for k in pairs(namespaceCategories) do
 
if args[k .. ' category'] then
 
if args[k .. ' category'] then
return "'''[[:Category:" .. args[k .. ' category'] .. "|" .. args.name .. "]]''': "
+
return string.format("'''[[:Category:%s|%s]]''': ", args[k .. ' category'], args.name)
 
end
 
end
 
end
 
end
return "'''" .. args.name .. "''': "
+
return string.format("'''%s''': ", args.name)
 
end
 
end
  
function p.core(frame, args)
+
function p.main(frame)
if not args then
+
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc})
args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template/core', valueFunc = valueFunc})
 
end
 
 
local namespace = mw.title.getCurrentTitle().namespace
 
local namespace = mw.title.getCurrentTitle().namespace
local otherCategory = args['other category'] and (args.category or string.format('[[Category:%s]]', 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
 
--- 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 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',
+
local content = string.format('\n<div class="rcat %s">\n*%sThis is a redirect%s%s.%s%s</div>',
embedPossible and args.name and getPrettyName(args) or '',
+
args.class or '',
 +
args.name and getPrettyName(args) or '',
 
args.from and (' from ' .. args.from) or '',
 
args.from and (' from ' .. args.from) or '',
 
args.to and (' to ' .. args.to) or '',
 
args.to and (' to ' .. args.to) or '',
Line 56: Line 53:
 
args.info or ''
 
args.info or ''
 
)
 
)
 +
 
for k,v in pairs(namespaceCategories) do
 
for k,v in pairs(namespaceCategories) do
 
if args[k .. ' category'] then
 
if args[k .. ' category'] then
 
if type(v[1]) == 'function' and v[1](namespace) or v[1] == namespace then
 
if type(v[1]) == 'function' and v[1](namespace) or v[1] == namespace then
retval = retval .. (args.category or string.format('[[Category:%s]]', args[k .. ' category']))
+
content = content .. string.format('[[Category:%s]]', args[k .. ' category'])
 
elseif args['other category'] then
 
elseif args['other category'] then
retval = retval .. otherCategory
+
content = content .. string.format('[[Category:%s]]', args['other category'])
 
else
 
else
retval = retval .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}}
+
content = content .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}}
 
end
 
end
 
end
 
end
 
end
 
end
return retval
 
end
 
  
function p.main(frame)
+
if namespace == 0 then
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc})
+
local yesno = require('Module:Yesno')
local retval = p.core(frame, args)
+
if yesno(args.printworthy) == true then
if mw.title.getCurrentTitle().namespace == 0 then
+
return content .. '[[Category:Printworthy redirects]]'
if args.printworthy == 'yes' then
+
elseif yesno(args.printworthy) == false then
return retval .. (args.category or '[[Category:Printworthy redirects]]')
+
return content .. '[[Category:Unprintworthy redirects]]'
elseif args.printworthy == 'no' then
 
return retval .. (args.category or '[[Category:Unprintworthy redirects]]')
 
 
end
 
end
 
end
 
end
return retval
+
return content
 
end
 
end
  
 
return p
 
return p

Latest revision as of 01:46, 5 January 2019

Documentation for this module may be created at Module:Redirect template/doc

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, '[[wp:mainspace|main]]' },
	help = { 12, '[[wp:help namespace|help]]' },
	portal = { 100, '[[wp:portal|portal]]' },
	talk = { function(n) return n > 0 and n%2 == 1 end, '[[Help:Using talk pages|talk]]' },
	template = { 10, '[[wp:template namespace|template]]' },
	wikipedia = { 4, '[[wp:project namespace|Wikipedia project]]' },
	category = { 14, '[[wp:categorization|category]]' },
	user = { 2, '[[wp:user pages|user]]' },
}

-- remove whitespaces from beginning and end of args
local function valueFunc(key, val)
	if type(val) == 'string' then
		val = val:match('^%s*(.-)%s*$')
		if val == '' then
			return nil
		end
	end
	return val
end

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

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc})
	local namespace = mw.title.getCurrentTitle().namespace

	--- 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 content = string.format('\n<div class="rcat %s">\n*%sThis is a redirect%s%s.%s%s</div>',
		args.class or '',
		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
				content = content .. string.format('[[Category:%s]]', args[k .. ' category'])
			elseif args['other category'] then
				content = content .. string.format('[[Category:%s]]', args['other category'])
			else
				content = content .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}}
			end
		end
	end

	if namespace == 0 then
		local yesno = require('Module:Yesno')
		if yesno(args.printworthy) == true then
			return content .. '[[Category:Printworthy redirects]]'
		elseif yesno(args.printworthy) == false then
			return content .. '[[Category:Unprintworthy redirects]]'
		end
	end
	return content
end

return p