Module:Redirect-distinguish: Difference between revisions

From TestWiki
Content added Content deleted
m (Shorter form for orList)
(Added pronoun detection code I originally implemented in Module:About-distinguish)
Line 12: Line 12:


function p._redirectDistinguish(args)
function p._redirectDistinguish(args)
--Check for first argument, and evaluate redirect if present
if not args[1] then
if not args[1] then
return mHatnote.makeWikitextError(
return mHatnote.makeWikitextError(
Line 27: Line 28:
args[1] = args[1] .. '[[Category:Missing redirects]]'
args[1] = args[1] .. '[[Category:Missing redirects]]'
end
end
--Check for second argument
if not args[2] then
if not args[2] then
return mHatnote.makeWikitextError(
return mHatnote.makeWikitextError(
Line 34: Line 37:
)
)
end
end

--Get pronoun from Wikidata. Really basic, but it should work.
local pronouns = {
['female'] = 'She is',
['transgender female'] = "She is",
['male'] = 'He is',
['transgender male'] = 'He is',
['default'] = 'They are'
}
local wde = mw.wikibase.getEntity()
local p31 = (wde and wde:formatPropertyValues('P31').value) == 'human'
local p21 = wde and wde:formatPropertyValues('P21').value
local pronoun = p31 and (pronouns[p21] or pronouns['default']) or 'It is'

--Assemble hatnote and return
args = mTableTools.compressSparseArray(args)
args = mTableTools.compressSparseArray(args)
--Assignment by removal here makes for convenient concatenation later
--Assignment by removal here makes for convenient concatenation later
local redirect = table.remove(args, 1)
local redirect = table.remove(args, 1)
local text = string.format(
local text = string.format(
'"%s" redirects here. It is not to be confused with %s.',
'"%s" redirects here. %s not to be confused with %s.',
redirect,
redirect,
pronoun,
mHatlist.orList(args, true)
mHatlist.orList(args, true)
)
)

Revision as of 16:24, 1 November 2016

local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local mTableTools = require('Module:TableTools')
local p = {}

function p.redirectDistinguish (frame)
	mArguments = require('Module:Arguments')
	local args = mArguments.getArgs(frame)
	return p._redirectDistinguish(args)
end

function p._redirectDistinguish(args)
	--Check for first argument, and evaluate redirect if present
	if not args[1] then
		return mHatnote.makeWikitextError(
			'no redirect supplied',
			'Template:Redirect-distinguish',
			args.category
		)
	end
	local redirectTitle = mw.title.new(args[1])
	if redirectTitle and redirectTitle.exists then
		if not redirectTitle.isRedirect then
			args[1] = args[1] .. '[[Category:Articles with redirect hatnotes needing review]]'
		end
	elseif not string.match(args[1], 'REDIRECT%d+') and not args[1] == 'TERM' then
		args[1] = args[1] .. '[[Category:Missing redirects]]'
	end
	
	--Check for second argument
	if not args[2] then
		return mHatnote.makeWikitextError(
			'no page to be distinguished supplied',
			'Template:Redirect-distinguish',
			args.category
		)
	end

	--Get pronoun from Wikidata. Really basic, but it should work.
	local pronouns = {
		['female'] = 'She is',
		['transgender female'] = "She is",
		['male'] = 'He is',
		['transgender male'] = 'He is',
		['default'] = 'They are'
	}
	local wde = mw.wikibase.getEntity()
	local p31 = (wde and wde:formatPropertyValues('P31').value) == 'human'
	local p21 = wde and wde:formatPropertyValues('P21').value
	local pronoun = p31 and (pronouns[p21] or pronouns['default']) or 'It is'

	--Assemble hatnote and return
	args = mTableTools.compressSparseArray(args)
	--Assignment by removal here makes for convenient concatenation later
	local redirect = table.remove(args, 1)
	local text = string.format(
		'"%s" redirects here. %s not to be confused with %s.',
		redirect,
		pronoun,
		mHatlist.orList(args, true)
	)
	return mHatnote._hatnote(text)
end

return p