From Wikipedia, the free encyclopedia

-- This module implements [[Template:Request redirect]].



local p, templates = {}, {}



--------------------------------------------------------------------------------

-- Templates

--

-- These are templates used in the module's output. The templates use two

-- different kinds of parameter. Parameters that look like ${parameter} will be

-- replaced with the corresponding value from a data table. Parameters that 

-- look like ${@TEMPLATE_NAME} will be replaced recursively by other templates

-- in the templates table. This helps to reduce duplication of template code

-- while also avoiding tricky conditional logic inside templates.

-- 

-- Templates can contain arbitrary wikitext; wikitext will be expanded on

-- transclusion, and left as-is on substitution.

--------------------------------------------------------------------------------



templates.HEADING = '== Redirect request: [[:${title}]] =='



templates.BODY = [=[

* Target of redirect: [[:${target}]]

* Reason: ${reason}

* Source (if applicable): ${source}

~~~~]=]



templates.OPEN_REQUEST = [=[

${@HEADING}

${@BODY}]=]



templates.CLOSED_REQUEST = [=[

${@HEADING}

{{afc-c|d}}

${@BODY}



${afcredirect} <small>(Automatically declined)</small>

{{afc-c|b}}]=]



templates.REQUEST_WITH_ERROR = [=[

${@HEADING}

${@BODY}



{{error|Error: ${errormsg}}}<!--subst:afc redirect|${closereason}-->]=]



--------------------------------------------------------------------------------

-- Helper functions

--------------------------------------------------------------------------------



-- Substitutes parameters like ${parameter} and ${@TEMPLATE_NAME}. Templates

-- are transcluded recursively.

local function substituteParameters(template, data)

	local content = templatestemplate

	if not content then

		error(string.format(

			"the template '%s' does not exist",

			tostring(template)

		))

	end

	content = content:gsub('${(@?)([a-zA-Z_]+)}', function (at, param)

		if at == '@' then

			return substituteParameters(param, data)

		else

			return dataparam or ''

		end

	end)

	return content

end



-- Expand a template, substituting parameters and expanding wikitext as

-- appropriate.

local function expand(template, data, frame)

	frame = frame or mw.getCurrentFrame()

	local content = substituteParameters(template, data)

	if mw.isSubsting() then

		return content

	else

		return frame:preprocess(content)

	end

end



-- Finds a page's status. This can be either:

-- * "noinput" - for missing user input

-- * "invalid" - for invalid titles (e.g. page names containing the "|" symbol)

-- * "missing" - valid titles that don't exist

-- * "exists"  - valid titles that exist

local function getPageStatus(page)

	if not page then

		return 'noinput'

	end

	local title = mw.title.new(page)

	if not title then

		return 'invalid'

	elseif title.exists then

		return 'exists'

	else

		return 'missing'

	end

end



--------------------------------------------------------------------------------

-- Exports

--------------------------------------------------------------------------------



function p._main(args, frame)

	frame = frame or mw.getCurrentFrame()



	local data = {}

	data.title = args.title or args1

	data.target = args.target or args2

	data.reason = args.reason or args3

	data.source = args.source or args4



	-- Check parameters for errors.

	local titleStatus = getPageStatus(data.title)

	local targetStatus = getPageStatus(data.target)

	local closeReason

	if titleStatus == 'invalid' then

		closeReason = 'notitle'

		data.errormsg = string.format(

			'"%s" is an invalid title.',

			data.title

		)

	elseif targetStatus == 'invalid' then

		closeReason = 'notarget'

		data.errormsg = string.format(

			'"%s" is an invalid title.',

			data.target

		)

	elseif titleStatus == 'exists' then

		if targetStatus == 'exists' then

			closeReason = 'exist'

			data.errormsg = string.format(

				'[[:%s]] already exists on Wikipedia.',

				data.title

			)

		elseif targetStatus == 'missing' then

			-- Assume the user got the pages the wrong way round.

			data.title, data.target = data.target, data.title

		else

			-- targetStatus == 'noinput'

			closeReason = 'notitle'

			data.errormsg = 'You have not specified the title of the redirect that you want created.'

		end

	elseif titleStatus == 'missing' then

		-- If targetStatus == 'exists' the submission is good and we don't need

		-- to do anything.

		if targetStatus == 'missing' then

			closeReason = 'notarget'

			data.errormsg = string.format(

				"Redirect target [[:%s]] doesn't exist.",

				data.target

			)

		elseif targetStatus == 'noinput' then

			closeReason = 'notarget'

			data.errormsg = 'Redirect target was not specified.'

		end

	else

		-- titleStatus == 'noinput'

		if targetStatus == 'exists' then

			closeReason = 'notitle'

			data.errormsg = 'You have not specified the title of the redirect that you want created.'

		elseif targetStatus == 'missing' then

			closeReason = 'notarget'

			data.errormsg = string.format(

				"Redirect target [[:%s]] doesn't exist.",

				data.target

			)

		else

			-- targetStatus == 'noinput'

			closeReason = 'blank'

			data.errormsg = 'We cannot accept empty submissions.'

		end

	end



	-- Find the template we need, and expand {{Afc redirect}} if it is needed.

	local template

	if closeReason and args.close then

		template = 'CLOSED_REQUEST'

		data.afcredirect = frame:expandTemplate{

			title = 'afc redirect',

			args = {closeReason}

		}

	elseif closeReason then

		template = 'REQUEST_WITH_ERROR'

	else

		template = 'OPEN_REQUEST'

	end



	-- Return the template with parameters substituted.

	return expand(template, data, frame)

end



function p.main(frame)

	local args = require('Module:Arguments').getArgs(frame, {

		wrappers = 'Template:Request redirect'

	})

	return p._main(args, frame)

end



return p
From Wikipedia, the free encyclopedia

-- This module implements [[Template:Request redirect]].



local p, templates = {}, {}



--------------------------------------------------------------------------------

-- Templates

--

-- These are templates used in the module's output. The templates use two

-- different kinds of parameter. Parameters that look like ${parameter} will be

-- replaced with the corresponding value from a data table. Parameters that 

-- look like ${@TEMPLATE_NAME} will be replaced recursively by other templates

-- in the templates table. This helps to reduce duplication of template code

-- while also avoiding tricky conditional logic inside templates.

-- 

-- Templates can contain arbitrary wikitext; wikitext will be expanded on

-- transclusion, and left as-is on substitution.

--------------------------------------------------------------------------------



templates.HEADING = '== Redirect request: [[:${title}]] =='



templates.BODY = [=[

* Target of redirect: [[:${target}]]

* Reason: ${reason}

* Source (if applicable): ${source}

~~~~]=]



templates.OPEN_REQUEST = [=[

${@HEADING}

${@BODY}]=]



templates.CLOSED_REQUEST = [=[

${@HEADING}

{{afc-c|d}}

${@BODY}



${afcredirect} <small>(Automatically declined)</small>

{{afc-c|b}}]=]



templates.REQUEST_WITH_ERROR = [=[

${@HEADING}

${@BODY}



{{error|Error: ${errormsg}}}<!--subst:afc redirect|${closereason}-->]=]



--------------------------------------------------------------------------------

-- Helper functions

--------------------------------------------------------------------------------



-- Substitutes parameters like ${parameter} and ${@TEMPLATE_NAME}. Templates

-- are transcluded recursively.

local function substituteParameters(template, data)

	local content = templatestemplate

	if not content then

		error(string.format(

			"the template '%s' does not exist",

			tostring(template)

		))

	end

	content = content:gsub('${(@?)([a-zA-Z_]+)}', function (at, param)

		if at == '@' then

			return substituteParameters(param, data)

		else

			return dataparam or ''

		end

	end)

	return content

end



-- Expand a template, substituting parameters and expanding wikitext as

-- appropriate.

local function expand(template, data, frame)

	frame = frame or mw.getCurrentFrame()

	local content = substituteParameters(template, data)

	if mw.isSubsting() then

		return content

	else

		return frame:preprocess(content)

	end

end



-- Finds a page's status. This can be either:

-- * "noinput" - for missing user input

-- * "invalid" - for invalid titles (e.g. page names containing the "|" symbol)

-- * "missing" - valid titles that don't exist

-- * "exists"  - valid titles that exist

local function getPageStatus(page)

	if not page then

		return 'noinput'

	end

	local title = mw.title.new(page)

	if not title then

		return 'invalid'

	elseif title.exists then

		return 'exists'

	else

		return 'missing'

	end

end



--------------------------------------------------------------------------------

-- Exports

--------------------------------------------------------------------------------



function p._main(args, frame)

	frame = frame or mw.getCurrentFrame()



	local data = {}

	data.title = args.title or args1

	data.target = args.target or args2

	data.reason = args.reason or args3

	data.source = args.source or args4



	-- Check parameters for errors.

	local titleStatus = getPageStatus(data.title)

	local targetStatus = getPageStatus(data.target)

	local closeReason

	if titleStatus == 'invalid' then

		closeReason = 'notitle'

		data.errormsg = string.format(

			'"%s" is an invalid title.',

			data.title

		)

	elseif targetStatus == 'invalid' then

		closeReason = 'notarget'

		data.errormsg = string.format(

			'"%s" is an invalid title.',

			data.target

		)

	elseif titleStatus == 'exists' then

		if targetStatus == 'exists' then

			closeReason = 'exist'

			data.errormsg = string.format(

				'[[:%s]] already exists on Wikipedia.',

				data.title

			)

		elseif targetStatus == 'missing' then

			-- Assume the user got the pages the wrong way round.

			data.title, data.target = data.target, data.title

		else

			-- targetStatus == 'noinput'

			closeReason = 'notitle'

			data.errormsg = 'You have not specified the title of the redirect that you want created.'

		end

	elseif titleStatus == 'missing' then

		-- If targetStatus == 'exists' the submission is good and we don't need

		-- to do anything.

		if targetStatus == 'missing' then

			closeReason = 'notarget'

			data.errormsg = string.format(

				"Redirect target [[:%s]] doesn't exist.",

				data.target

			)

		elseif targetStatus == 'noinput' then

			closeReason = 'notarget'

			data.errormsg = 'Redirect target was not specified.'

		end

	else

		-- titleStatus == 'noinput'

		if targetStatus == 'exists' then

			closeReason = 'notitle'

			data.errormsg = 'You have not specified the title of the redirect that you want created.'

		elseif targetStatus == 'missing' then

			closeReason = 'notarget'

			data.errormsg = string.format(

				"Redirect target [[:%s]] doesn't exist.",

				data.target

			)

		else

			-- targetStatus == 'noinput'

			closeReason = 'blank'

			data.errormsg = 'We cannot accept empty submissions.'

		end

	end



	-- Find the template we need, and expand {{Afc redirect}} if it is needed.

	local template

	if closeReason and args.close then

		template = 'CLOSED_REQUEST'

		data.afcredirect = frame:expandTemplate{

			title = 'afc redirect',

			args = {closeReason}

		}

	elseif closeReason then

		template = 'REQUEST_WITH_ERROR'

	else

		template = 'OPEN_REQUEST'

	end



	-- Return the template with parameters substituted.

	return expand(template, data, frame)

end



function p.main(frame)

	local args = require('Module:Arguments').getArgs(frame, {

		wrappers = 'Template:Request redirect'

	})

	return p._main(args, frame)

end



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook