Difference between revisions of "Module:Redirect template"

From Nordic Larp Wiki
Jump to navigation Jump to search
m (1 revision imported)
en>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...)
Line 22: Line 22:
 
if type(val) == 'string' then
 
if type(val) == 'string' then
 
val = val:match('^%s*(.-)%s*$')
 
val = val:match('^%s*(.-)%s*$')
if val == '' then
+
if val == '' and key ~= 'category' and key ~= 'embed' 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 string.format("<b>[[:Category:%s|%s]]</b>: ", args[k .. ' category'], args.name)
+
return "'''[[:Category:" .. args[k .. ' category'] .. "|" .. args.name .. "]]''': "
 
end
 
end
 
end
 
end
return string.format("<b>%s</b>", args.name)
+
return "'''" .. args.name .. "''': "
 
end
 
end
  
function p.main(frame)
+
function p.core(frame, args)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc})
+
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 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 content = string.format('<ul class="rcat %s"><li>%sThis is a redirect%s%s.%s%s</li></ul>',
+
local retval = string.format('*%sThis is a redirect%s%s.%s%s',
args.class or '',
+
embedPossible and args.name and getPrettyName(args) 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 53: Line 56:
 
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
content = content .. string.format('[[Category:%s]]', args[k .. ' category'])
+
retval = retval .. (args.category or string.format('[[Category:%s]]', args[k .. ' category']))
 
elseif args['other category'] then
 
elseif args['other category'] then
content = content .. string.format('[[Category:%s]]', args['other category'])
+
retval = retval .. otherCategory
 
else
 
else
content = content .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}}
+
retval = retval .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}}
 
end
 
end
 
end
 
end
 
end
 
end
 +
return retval
 +
end
  
if namespace == 0 then
+
function p.main(frame)
local yesno = require('Module:Yesno')
+
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc})
if yesno(args.printworthy) == true then
+
local retval = p.core(frame, args)
return content .. '[[Category:Printworthy redirects]]'
+
if mw.title.getCurrentTitle().namespace == 0 then
elseif yesno(args.printworthy) == false then
+
if args.printworthy == 'yes' then
return content .. '[[Category:Unprintworthy redirects]]'
+
return retval .. (args.category or '[[Category:Printworthy redirects]]')
 +
elseif args.printworthy == 'no' then
 +
return retval .. (args.category or '[[Category:Unprintworthy redirects]]')
 
end
 
end
 
end
 
end
return content
+
return retval
 
end
 
end
  
 
return p
 
return p

Revision as of 23:08, 2 January 2019

This module implements {{redirect template}} and {{redirect template/core}}. Please see the template pages for documentation.



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]]' },
}

-- 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('[[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
	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('[[Category:%s]]', 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 '[[Category:Printworthy redirects]]')
		elseif args.printworthy == 'no' then
			return retval .. (args.category or '[[Category:Unprintworthy redirects]]')
		end
	end
	return retval
end

return p