Module:Other uses

From blackwiki
Revision as of 17:20, 5 May 2016 by blackwiki>Nihiltres (Applied new mHatnote.disambiguate() helper instead of manual string concatenation)
Jump to navigation Jump to search

This module produces an "other uses" hatnote for linking to disambiguation pages. It implements the {{other uses}} template.

Usage from wikitext

otheruses()

The otheruses() function directly implements {{other uses}} and probably shouldn't be used anywhere else.

otherX()

The otherX() function allows direct implementation of templates that differ from {{other uses}} in only phrasing. For example, where {{other uses}} is phrased with "other uses", {{other places}} is phrased with "other places with the same name" and can be implemented using otherX(), which takes the custom phrasing as its parameter at the module invocation. {{other places}} in particular could be implemented with this wikitext:

{{#invoke:other uses|otherX|places with the same name}}

Note that the leading "other" is automatically supplied; if a template would not use this phrasing, it should not use otherX().

Usage from Lua

To use this module from Lua, first load the module:

local mOtheruses = require('Module:Other uses')

The module functions can then be used through the _otheruses() function:

mOtheruses._otheruses(args, options)

Parameters of _otheruses()

args
A table containing strings of link text, without brackets. For example, {"PAGE1", "PAGE2#SECTION", "PAGE3|LABEL"}. Make sure that there are no gaps or nil values, as that can confuse the mw.text.listToText() function the module uses. If in doubt, use compressSparseArray() from Module:TableTools. This may be empty or nil.
options
A table containing a number of optional named values; you must supply at least one of options.defaultPage or options.title; in most cases setting the latter to mw.title.getCurrentTitle().prefixedText is advisable. The following options are supported:
  • defaultPage: String; completely overrides the linked page when no arguments are supplied
  • title: String; sets the title used before the "(disambiguation)" suffix.
  • disambiguator: String; replaces "disambiguation" in the suffix
  • otherText: String; replaces "uses" in "other uses"

local mHatnote = require('Module:Hatnote')
local mArguments --initialize lazily
local mTableTools --initialize lazily
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}

-- Produces standard {{other uses}} implementation
function p.otheruses(frame)
	mArguments = require('Module:Arguments')
	mTableTools = require('Module:TableTools')
	local args = mTableTools.compressSparseArray(mArguments.getArgs(frame))
	local title = mw.title.getCurrentTitle().text
	return p._otheruses(args, {title=title})
end

-- Main generator
function p._otheruses(args, options)
	--Type-checks and defaults
	checkType('_otheruses', 1, args, 'table', true)
	args = args or {}
	checkType('_otheruses', 2, options, 'table')
	if not (options.defaultPage or options.title) then
		error('No default title data provided in "_otheruses" options table', 2)
	end
	if #args == 0 then
		args = {
			options.defaultPage or
			mHatnote.disambiguate(options.title)
		}
	end
	--should switch to using _forSee from [[Module:Hatnote list]] once that's out of alpha
	local text = string.format(
		'For other %s, see %s.',
		(options.otherText or 'uses'),
		--should switch to using andList from [[Module:Hatnote list]] once that's out of alpha
		mw.text.listToText(mHatnote.formatPages(unpack(args)))
	)
	return mHatnote._hatnote(text)
end

return p