Module:Redirect template: Difference between revisions
From All Skies Encyclopaedia
| 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 multiple consecutive asterisks/bullets (see Template:Redirect template/testcases, making the second line appear too far out and following rcat templates with uncontrollable intention - User:SD0001) | imported>Ahecht   (Sync from sandbox, add draft namespace) | ||
| (7 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
| require(' | require('strict') | ||
| local p = {} | local p = {} | ||
| Line 11: | Line 11: | ||
| 	help = { 12, '[[wp:help namespace|help]]' }, | 	help = { 12, '[[wp:help namespace|help]]' }, | ||
| 	portal = { 100, '[[wp:portal|portal]]' }, | 	portal = { 100, '[[wp:portal|portal]]' }, | ||
| 	talk = { function(n) return n > 0 and n%2 == 1 end, '[[Help: | 	talk = { function(n) return n > 0 and n%2 == 1 end, '[[Help:Talk pages|talk]]' }, | ||
| 	template = { 10, '[[wp:template namespace|template]]' }, | 	template = { 10, '[[wp:template namespace|template]]' }, | ||
| 	wikipedia = { 4, '[[wp:project namespace|Wikipedia project]]' }, | 	wikipedia = { 4, '[[wp:project namespace|Wikipedia project]]' }, | ||
| 	category = { 14, '[[wp:categorization|category]]' }, | 	category = { 14, '[[wp:categorization|category]]' }, | ||
| 	user = { 2, '[[wp:user pages|user]]' }, | 	user = { 2, '[[wp:user pages|user]]' }, | ||
| 	draft = { 118, '[[wp:drafts|draft]]' }, | |||
| } | } | ||
| -- remove whitespaces from beginning and end of args | |||
| -- Don't convert blank category to nil | |||
| 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 == ' | 		if val == '' then | ||
| 			return nil | 			return nil | ||
| 		end | 		end | ||
| Line 32: | Line 33: | ||
| 	for k in pairs(namespaceCategories) do | 	for k in pairs(namespaceCategories) do | ||
| 		if args[k .. ' category'] then | 		if args[k .. ' category'] then | ||
| 			return  | 			return string.format("'''[[:Category:%s|%s]]''': ", args[k .. ' category'], args.name) | ||
| 		end | 		end | ||
| 	end | 	end | ||
| 	return "''' | 	return string.format("'''%s''': ", args.name) | ||
| end | end | ||
| function p. | function p.main(frame) | ||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| 	local namespace = mw.title.getCurrentTitle().namespace | 	local namespace = mw.title.getCurrentTitle().namespace | ||
| ⚫ | |||
| 	local embedPossible = args.embed == nil or args.embed == 'yes' | |||
| 	--- XXX: this is a HORRIBLE HACK. kill it with fire as soon as https:// | 	--- XXX: this is a HORRIBLE HACK. kill it with fire as soon as https://phabricator.wikimedia.org/T14974 is fixed | ||
| 	--- [[phab:T14974]] was previously known as [[bugzilla:12974]] https://bugzilla.wikimedia.org/show_bug.cgi?id=12974 | |||
| 	local  | 	local beCompatibleWithBug14974 = args.info and (args.info:find('^[:;#*]', 1) == 1 or args.info:find('{|', 1, true) == 1) and '\n' or ' ' | ||
| 	local  | 	local content = string.format('\n<div class="rcat %s">\n*%sThis is a redirect%s%s.%s%s\n</div>', | ||
| 		args.id and ('rcat-' .. string.gsub(args.id, ' ', '_')) 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 '', | ||
| 		args.info and  | 		args.info and beCompatibleWithBug14974 or '', | ||
| 		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 | ||
| 				if args.sortkey then | |||
| ⚫ | |||
| 					content = content .. string.format('[[Category:%s|%s]]', args[k .. ' category'], args.sortkey) | |||
| 					else | |||
| ⚫ | |||
| ⚫ | |||
| 			elseif args['other category'] then | 			elseif args['other category'] then | ||
| 				if args.sortkey then | |||
| 				retval = retval .. otherCategory | |||
| 					content = content .. string.format('[[Category:%s|%s]]', args['other category'], args.sortkey) | |||
| 					else | |||
| ⚫ | |||
| ⚫ | |||
| 			else | 			else | ||
| 				content = content .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v[2]}} | |||
| 			end | 			end | ||
| 		end | 		end | ||
| 	end | 	end | ||
| 	return retval | |||
| ⚫ | |||
| ⚫ | |||
| function p.main(frame) | |||
| 		local yesno = require('Module:Yesno') | |||
| ⚫ | |||
| 	local retval = p.core(frame, args) | |||
| ⚫ | |||
| 	if mw.title.getCurrentTitle().namespace == 0 then | |||
| 		elseif yesno(args.printworthy) == false then | |||
| 			return  | 			return content .. '[[Category:Unprintworthy redirects]]' | ||
| ⚫ | |||
| ⚫ | |||
| 		end | 		end | ||
| 	end | 	end | ||
| 	return  | 	return content | ||
| end | end | ||
Latest revision as of 15:43, 22 August 2024
Documentation for this module may be created at Module:Redirect template/doc
require('strict')
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: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]]' },
	draft = { 118, '[[wp:drafts|draft]]' },
}
-- 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://phabricator.wikimedia.org/T14974 is fixed
	--- [[phab:T14974]] was previously known as [[bugzilla:12974]] https://bugzilla.wikimedia.org/show_bug.cgi?id=12974
	local beCompatibleWithBug14974 = 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\n</div>',
		args.id and ('rcat-' .. string.gsub(args.id, ' ', '_')) or '',
		args.name and getPrettyName(args) or '',
		args.from and (' from ' .. args.from) or '',
		args.to and (' to ' .. args.to) or '',
		args.info and beCompatibleWithBug14974 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
				if args.sortkey then
					content = content .. string.format('[[Category:%s|%s]]', args[k .. ' category'], args.sortkey)
					else
						content = content .. string.format('[[Category:%s]]', args[k .. ' category'])
				end
			elseif args['other category'] then
				if args.sortkey then
					content = content .. string.format('[[Category:%s|%s]]', args['other category'], args.sortkey)
					else
						content = content .. string.format('[[Category:%s]]', args['other category'])
				end
			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







