Module:Article history/config

This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 01:18, 20 October 2014 (add default status icon sizes, add comments for statuses table fields, and add the FFA status data). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

-------------------------------------------------------------------------------
--              Configuration data for [[Module:Article history]]
-------------------------------------------------------------------------------

return {

-------------------------------------------------------------------------------
-- Actions
-------------------------------------------------------------------------------

actions = {
	FAC = {
		id = 'FAC',
		name = 'Featured article candidate',
		results = {
			promoted = {
				text = 'Promoted',
				aliases = {'pass', 'passed'}
			},
			['not promoted'] = {
				text = 'Not promoted',
				aliases = {'fail', 'failed'}
			}
		},
		validStatuses = {
			FFAC = true,
			FA = true,
			FFA = true
		}
	},
	FAR = {
		id = 'FAR',
		name = 'Featured article review',
		aliases = {'FARC'},
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			demoted = {
				id = 'demoted',
				text = 'Demoted',
				aliases = {'fail', 'failed', 'remove', 'removed'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			}
		},
		validStatuses = {
			FA = true,
			FFA = true
		},
		categories = {
			function (actionObj, articleHistoryObj)
				local result = actionObj:getResult()
				if result == 'demoted' or result == 'merged' then
					local status = articleHistoryObj:getStatusId()
					local sortKey = articleHistoryObj.currentTitle.subjectPageTitle.prefixedText
					if status == 'FA' or status == 'FL' then
						sortKey = '#' .. sortKey
					end
					return 'Wikipedia former featured articles', sortKey
				end
			end
		}
	},
	BP = {
		id = 'BP',
		name = 'Brilliant prose',
		results = {
			nominated = {
				id = 'nominated',
				text = 'Nominated',
				aliases = {'pass', 'promoted', 'nom'}
			}
		},
		validStatuses = {
		}
	},
	RBP = {
		id = 'RBP',
		name = 'Refreshing brilliant prose',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			['not kept'] = {
				id = 'not kept',
				text = 'Not kept',
				aliases = {'fail', 'failed', 'remove', 'removed', 'demoted'}
			}
		},
		validStatuses = {
			FA = true,
			FFAC = true
		},
		categories = {
			function (actionObj, articleHistoryObj)
				if actionObj:getResult() == 'not kept' then
					return 'Wikipedia former brilliant prose', articleHistoryObj.currentTitle.text
				end
			end
		}
	},
	FLC = {
		id = 'FLC',
		name = 'Featured list candidate',
		results = {
			promoted = {
				text = 'Promoted',
				aliases = {'pass', 'passed'}
			},
			['not promoted'] = {
				text = 'Not promoted',
				aliases = {'fail', 'failed'}
			}
		},
		validStatuses = {
			FFLC = true,
			FL = true,
			FFL = true
		}
	},
	FLR = {
		id = 'FLR',
		name = 'Featured list removal candidate',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			demoted = {
				id = 'demoted',
				text = 'Demoted',
				aliases = {'fail', 'failed', 'remove', 'removed'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			}
		},
		validStatuses = {
			FL = true,
			FFL = true
		},
		categories = {
			function (actionObj, articleHistoryObj)
				local result = actionObj:getResult()
				if result == 'demoted' or result == 'merged' then
					local sortKey
					if articleHistoryObj:getStatusId() == 'FL' then
						sortKey = '#' .. articleHistoryObj.currentTitle.subjectPageTitle.prefixedText
					else
						sortKey = articleHistoryObj.currentTitle.text
					end
					return 'Wikipedia former featured lists', sortKey
				end
			end
		}
	},
	FTC = {
		id = 'FTC',
		name = 'Featured topic candidate',
		results = {
			promoted = {
				id = 'promoted',
				text = 'Promoted',
				aliases = {'pass', 'passed'}
			},
			['not promoted'] = {
				id = 'not promoted',
				text = 'Not promoted',
				aliases = {'fail', 'failed'}
			}
		},
		validStatuses = false, -- Any status
	},
	FTR = {
		id = 'FTR',
		name = 'Featured topic removal candidate',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			demoted = {
				id = 'demoted',
				text = 'Demoted',
				aliases = {'fail', 'failed', 'remove', 'removed'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			}
		},
		validStatuses = false, -- Any status
	},
	FPOC = {
		id = 'FPOC',
		name = 'Featured portal candidate',
		results = {
			promoted = {
				id = 'promoted',
				text = 'Promoted',
				aliases = {'pass', 'passed'}
			},
			['not promoted'] = {
				id = 'not promoted',
				text = 'Not promoted',
				aliases = {'fail', 'failed'}
			}
		},
		validStatuses = {
			FFPOC = true,
			FPO = true,
			FFPO = true
		}
	},
	FPOR = {
		id = 'FPOR',
		name = 'Featured portal review',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			demoted = {
				id = 'demoted',
				text = 'Demoted',
				aliases = {'fail', 'failed', 'remove', 'removed'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			}
		},
		validStatuses = {
			FPO = true,
			FFPO = true
		}
	},
	GAN = {
		id = 'GAN',
		name = 'Good article nominee',
		aliases = {'GAC'},
		results = {
			listed = {
				id = 'listed',
				text = 'Listed',
				aliases = {'pass', 'passed', 'promoted'}
			},
			['not listed'] = {
				id = 'not listed',
				text = 'Not listed',
				aliases = {'fail', 'failed', 'not promoted'}
			}
		},
		validStatuses = {
			FGAN = true,
			GA = true,
			DGA = true,
			FFAC = true,
			FA = true,
			FFA = true
		},
		categories = {
			function (actionObj, articleHistoryObj)
				if actionObj:getResult() == 'not listed' then
					local status = articleHistoryObj:getStatusId()
					if status ~= 'FA'
						and status ~= 'GA'
						and status ~= 'FFA'
					then
						return 'Former good article nominees', articleHistoryObj.currentTitle.text
					end
				end
			end
		}
	},
	GAR = {
		id = 'GAR',
		name = 'Good article reassessment',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			delisted = {
				id = 'delisted',
				text = 'Delisted',
				aliases = {'fail', 'failed'}
			},
			listed = {
				id = 'listed',
				text = 'Listed'
			},
			['not listed'] = {
				id = 'not listed',
				text = 'Not listed'
			}
		},
		validStatuses = {
			GA = true,
			DGA = true,
			FFAC = true,
			FA = true,
			FFA = true
		},
		categories = {
			function (actionObj, articleHistoryObj)
				if actionObj:getResult() == 'delisted' then
					local status = articleHistoryObj:getStatusId()
					if status ~= 'FA'
						and status ~= 'GA'
					then
						return 'Delisted good articles', articleHistoryObj.currentTitle.text
					end
				end
			end
		}
	},
	GTC = {
		id = 'GTC',
		name = 'Good topic candidate',
		results = {
			promoted = {
				id = 'promoted',
				text = 'Promoted',
				aliases = {'pass', 'passed'}
			},
			['not promoted'] = {
				id = 'not promoted',
				text = 'Not promoted',
				aliases = {'fail', 'failed'}
			}
		},
		validStatuses = false
	},
	GTR = {
		id = 'GTR',
		name = 'Good topic removal candidate',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'pass', 'passed', 'keep'}
			},
			demoted = {
				id = 'demoted',
				text = 'Demoted',
				aliases = {'fail', 'failed', 'remove', 'removed'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			}
		},
		validStatuses = false
	},
	PR = {
		id = 'PR',
		name = 'Peer review',
		results = {
			reviewed = {
				id = 'reviewed',
				text = 'Reviewed',
			},
			['not reviewed'] = {
				id = 'not reviewed',
				text = 'Not reviewed',
			}
		},
		validStatuses = false,
		categories = {'Old requests for peer review'}
	},
	WPR = {
		id = 'WPR',
		name = function (actionObj, articleHistoryObj)
			local names = {
				approved = 'WikiProject approved revision',
				copyedited = 'Guild of Copy Editors',
				collaboration = 'WikiProject collaboration',
				maindate = "Today's featured article"
			}
			local result = actionObj:getResult()
			return result and names[result] or 'WikiProject peer review'
		end,
		results = {
			approved = {
				id = 'approved',
				text = function(actionObj, articleHistoryObj)
					if actionObj.oldid then
						local url = mw.uri.fullUrl(
							articleHistoryObj.currentTitle.prefixedText,
							{diff = 'cur', oldid = actionObj.oldid}
						)
						return string.format(
							'[%s %s]',
							tostring(url),
							'Diff to current version'
						)
					else
						error(string.format(
							"No oldid detected for the approved version; " ..
								"please set the 'action%doldid' parameter " ..
								"or give the 'action%dresult' parameter a " ..
								"different value.",
							actionObj.paramNum,
							actionObj.paramNum
						))
					end
				end,
				aliases = {'approved version'}
			},
			copyedited = {
				id = 'copyedited',
				text = 'Copyedited',
				aliases = {'copyedit', 'proofread'}
			},
			maindate = {
				id = 'maindate',
				text = 'Main Page'
			},
			collaborated = {
				id = 'collaborated',
				text = 'Collaborated',
				aliases = {'cotw', 'collaboration'}
			},
			reviewed = {
				id = 'reviewed',
				text = 'Reviewed',
				aliases = {''} -- This is "Reviewed" if the reason is blank, but not absent.
			}
		},
		validStatuses = false
	},
	WAR = {
		id = 'WAR',
		name = 'WikiProject A-class review',
		results = {
			approved = {
				id = 'approved',
				text = 'Approved',
				aliases = {'pass', 'passed'}
			},
			['not approved'] = {
				id = 'not approved',
				text = 'Not approved',
				aliases = {'fail', 'failed', 'not reviewed'}
			},
			reviewed = {
				id = 'reviewed',
				text = 'Reviewed',
				aliases = {''}
			},
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'keep'}
			},
			demoted = {
				id = 'demoted',
				text = 'Demoted',
				aliases = {'demote'}
			},
		},
		validStatuses = false
	},
	AFD = {
		id = 'AFD',
		name = 'Articles for deletion',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'withdrawn', 'keep'}
			},
			deleted = {
				id = 'deleted',
				text = 'Deleted',
				aliases = {'delete'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			},
			['no consensus'] = {
				id = 'no consensus',
				text = 'No consensus'
			},
			['speedily kept'] = {
				id = 'speedily kept',
				text = 'Speedily kept',
				aliases = {'speedy keep'}
			},
			['speedily deleted'] ={
				id = 'speedily deleted',
				text = 'Speedily deleted',
				aliases = {'speedy delete'}
			},
			redirected = {
				id = 'redirected',
				text = 'Redirected',
				aliases = {'redirect'}
			},
			renamed = {
				id = 'renamed',
				text = 'Renamed',
				aliases = {'rename', 'move', 'moved'}
			}
		},
		validStatuses = false
	},
	MFD = {
		id = 'MFD',
		name = 'Miscellanea for deletion',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'withdrawn', 'keep'}
			},
			deleted = {
				id = 'deleted',
				text = 'Deleted',
				aliases = {'delete'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			},
			['no consensus'] = {
				id = 'no consensus',
				text = 'No consensus'
			},
			['speedily kept'] = {
				id = 'speedily kept',
				text = 'Speedily kept',
				aliases = {'speedy keep'}
			},
			['speedily deleted'] = {
				id = 'speedily deleted',
				text = 'Speedily deleted',
				aliases = {'speedy delete'}
			},
			redirected = {
				id = 'redirected',
				text = 'Redirected',
				aliases = {'redirect'}
			},
			renamed = {
				id = 'renamed',
				text = 'Renamed',
				aliases = {'rename', 'move', 'moved'}
			}
		},
		validStatuses = false
	},
	TFD = {
		id = 'TFD',
		name = 'Templates for discussion',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'withdrawn', 'keep'}
			},
			deleted = {
				id = 'deleted',
				text = 'Deleted',
				aliases = {'delete'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			},
			['no consensus'] = {
				id = 'no consensus',
				text = 'No consensus'
			},
			['speedily kept'] = {
				id = 'speedily kept',
				text = 'Speedily kept',
				aliases = {'speedy keep'}
			},
			['speedily deleted'] = {
				id = 'speedily deleted',
				text = 'Speedily deleted',
				aliases = {'speedy delete'}
			},
			redirected = {
				text = 'Redirected',
				aliases = {'redirect'}
			},
			renamed = {
				text = 'Renamed',
				aliases = {'rename', 'move', 'moved'}
			}
		},
		validStatuses = false
	},
	CSD = {
		id = 'CSD',
		name = 'Candidate for speedy deletion',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'withdrawn', 'keep'}
			},
			deleted = {
				id = 'deleted',
				text = 'Deleted',
				aliases = {'delete'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			},
			['no consensus'] = {
				id = 'no consensus',
				text = 'No consensus'
			},
			['speedily kept'] = {
				id = 'speedily kept',
				text = 'Speedily kept',
				aliases = {'speedy keep'}
			},
			['speedily deleted'] = {
				id = 'speedily deleted',
				text = 'Speedily deleted',
				aliases = {'speedy delete'}
			},
			redirected = {
				id = 'redirected',
				text = 'Redirected',
				aliases = {'redirect'}
			},
			renamed = {
				id = 'renamed',
				text = 'Renamed',
				aliases = {'rename', 'move', 'moved'}
			}
		},
		validStatuses = false
	},
	PROD = {
		id = 'PROD',
		name = 'Proposed deletion',
		results = {
			kept = {
				id = 'kept',
				text = 'Kept',
				aliases = {'withdrawn', 'keep'}
			},
			deleted = {
				id = 'deleted',
				text = 'Deleted',
				aliases = {'delete'}
			},
			merged = {
				id = 'merged',
				text = 'Merged',
				aliases = {'merge'}
			},
			['no consensus'] = {
				id = 'no consensus',
				text = 'No consensus'
			},
			['speedily kept'] = {
				id = 'no consensus',
				text = 'Speedily kept',
				aliases = {'speedy keep'}
			},
			['speedily deleted'] = {
				id = 'speedily deleted',
				text = 'Speedily deleted',
				aliases = {'speedy delete'}
			},
			redirected = {
				id = 'redirected',
				text = 'Redirected',
				aliases = {'redirect'}
			},
			renamed = {
				id = 'renamed',
				text = 'Renamed',
				aliases = {'rename', 'move', 'moved'}
			}
		},
		validStatuses = false
	},
	DRV = {
		id = 'DRV',
		name = 'Deletion review',
		results = {
			endorsed = {
				id = 'endorsed',
				text = 'Endorsed',
				aliases = {'endorse'}
			},
			relisted = {
				id = 'relisted',
				text = 'Relisted',
				aliases = {'relist'}
			},
			overturned = {
				id = 'overturned',
				text = 'Overturned',
				aliases = {'overturn'}
			},
			['no consensus'] = {
				id = 'no consensus',
				text = 'No consensus'
			}
		},
		validStatuses = false
	}
},

-------------------------------------------------------------------------------
-- Statuses
-- Configuration for possible current statuses of the article.
-------------------------------------------------------------------------------

-- The statuses table contains valid statuses.
-- Each status can have the following fields:
--
-- id: the main ID for the status.
-- aliases: a table of ID aliases that can be used to access the config table.
-- image: The status image.
-- imageSize: The image size, including "px" suffix. The default is defined in
--    defaultStatusIconSize.
-- imageSmallSize: The image size if we are outputting a small template. The
--    default is defined in defaultSmallStatusIconSize.
-- text: The status text.
--    $1 - The full page name of the article or subject page
-- categories: An array of categories used by the status.

statuses = {
	FA = {
		id = 'FA',
		image = 'Featured article star.svg'
	},
	FFA = {
		id = 'FFA',
		image = 'Featured article star - cross.svg',
		text = "'''$1''' is a [[Wikipedia:Former featured articles|former featured article]]. " ..
			"Please see the links under Article milestones below for its original nomination page " ..
			"(for older articles, check [[Wikipedia:Featured article candidates/Archived nominations/Index|the nomination archive]]) " ..
			"and why it was removed.",
		categories = {'Wikipedia former featured articles'}
	},
	FFAC = {
		id = 'FFAC',
		aliases = {'FACFAILED'},
		image = 'Cscr-former.svg'
	},
	FL = {
		id = 'FL',
		image = 'Featured article star.svg'
	},
	FFL = {
		id = 'FFL',
		image = 'Cscr-featured-strike.svg'
	},
	FFLC = {
		id = 'FFLC',
		image = 'Cscr-former.svg'
	},
	['FFA/GA'] = {
		id = 'FFA/GA',
		isDouble = true,
		statuses = {'FFA', 'GA'}
	},
	GA = {
		id = 'GA',
		image = 'Symbol support vote.svg'
	},
	FGAN = {
		id = 'FGAN',
		aliases = {'FAILEDGA'},
		image = 'Symbol unsupport vote.svg'
	},
	DGA = {
		id = 'DGA',
		aliases = {'DELISTEDGA'},
		image = 'Symbol unsupport vote.svg'
	},
	FFT = {
		id = 'FFT',
		image = 'Cscr-featured-strike.svg'
	},
	FFTC = {
		id = 'FFTC',
		image = 'Cscr-former.svg'
	},
	FPO = {
		id = 'FPO',
		image = 'Cscr-former.svg'
	},
	FFPO = {
		id = 'FFPO',
		image = 'Featured article star - cross.svg'
	},
	FFPOC = {
		id = 'FFPOC',
		image = 'Cscr-former.svg'
	},
},

invalidStatuses = {
	FAC = {
		id = 'FAC'
	},
	FAR = {
		id = 'FAR'
	},
	STUB = {
		id = 'STUB',
		aliases = {'START', 'B', 'A'}
	},
	NA = {
		id = 'NA',
		aliases = {'PR', ''}
	},
},

getStatusIdFunction = function (articleHistoryObj)
	-- Get the status ID. The status code is the code passed in from the
	-- arguments, and the ID is the value contained in the config.
	local statuses = articleHistoryObj.cfg.statuses
	local statusCode = articleHistoryObj.args.currentstatus
	local statusId = articleHistoryObj:getStatusIdForCode(statusCode)

	-- Check for former featured articles.
	if statusId ~= 'FA'
		and statusId ~= 'FL'
		and statusId ~= 'FFA'
		and statusId ~= 'FFL'
		and statusId ~= 'FFA/GA'
	then
		local ffaObj
		for i = #articleHistoryObj.actions, 1, -1 do
			local actionObj = articleHistoryObj.actions[i]
			if actionObj.id == 'FAR' and actionObj:getResult() == 'demoted' then
				ffaObj = actionObj
				break
			end
		end
		if ffaObj then
			if not statusId then
				-- @TODO: Error
			elseif statusId == 'GA' then
				statusId = 'FFA/GA'
			elseif statusId ~= 'FFA' then
				-- @TODO: Error - 
			end
		end
	end

	return statusId
end,

-------------------------------------------------------------------------------
-- Notices
-------------------------------------------------------------------------------

notices = {
	{
		param = 'ftname'
	}
},

-------------------------------------------------------------------------------
-- Collapsible notices
-------------------------------------------------------------------------------

collapsibleNotices = {
},

-------------------------------------------------------------------------------
-- Parameters
-------------------------------------------------------------------------------

-- The parameter values used to generate the page actions. These are used as
-- Lua patterns, so any of the magic characters *+-.^$%[] should be escaped
-- with a preceding % symbol.
actionParamPrefix = 'action',
actionParamSuffixes = {
	[''] = 'code',
	date = 'date',
	link = 'link',
	result = 'result',
	oldid = 'oldid'
},

-------------------------------------------------------------------------------
-- Other settings
-------------------------------------------------------------------------------

-- If this number or fewer of collapsible rows are present (including actions
-- and collapsible notices) they will not be collapsed. If this is set to the
-- string "all", all rows will always be visible. Otherwise, the input must be
-- a number. The default is three rows.
uncollapsedRows = 3,

-- The default size for icons. The default is 30px.
defaultIconSize = '30px',

-- The default size for icons for small templates. The default is 15px.
defaultSmallIconSize = '15px',

-- The default size for status icons. The default is 50px.
defaultStatusIconSize = '50px',

-- The default size for status icons for small templates. The default is 30px.
defaultSmallStatusIconSize = '30px',

-- The default size for notice bar icons. The default is 15px.
defaultNoticeBarIconSize = '15px',

-------------------------------------------------------------------------------
-- Messages
-------------------------------------------------------------------------------

msg = {

-- The heading for the collapsible table of actions if we are in the main
-- namespace or the talk namespace.
['milestones-header'] = 'Article milestones',

-- The heading for the collapsible table of actions if we are in a different
-- namespace.
-- $1 - the subject namespace name.
['milestones-header-other-ns'] = '$1 milestones',

-- The milestones date header.
['milestones-date-header'] = 'Date',

-- The milestones process header.
['milestones-process-header'] = 'Process',

-- The milestones result header.
['milestones-result-header'] = 'Result'

}

-------------------------------------------------------------------------------
-- End config
-------------------------------------------------------------------------------

}