Jump to content

Module:Redirect template/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
categoristation not working, reset to main version, meh
Remove variable embedPossible as it isn't doing anything since the deprecation of {{This is a redirect}}
Line 44: Line 44:
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 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
Line 50: Line 49:
local retval = string.format('*%sThis is a redirect%s%s.%s%s',
local retval = string.format('*%sThis is a redirect%s%s.%s%s',
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 '',

Revision as of 06:57, 21 December 2018

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']))

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