Module:Other uses: Difference between revisions
en>Nihiltres (Removed categorization system as redundant) |
m (1 revision imported) |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
{{ | local mHatnote = require('Module:Hatnote') | ||
local mHatlist = require('Module:Hatnote list') | |||
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().prefixedText | |||
return p._otheruses(args, {title=title}) | |||
end | |||
--Implements "other [x]" templates with otherText supplied at invocation | |||
function p.otherX(frame) | |||
mArguments = require('Module:Arguments') | |||
mTableTools = require('Module:TableTools') | |||
local x = frame.args[1] | |||
local args = mTableTools.compressSparseArray( | |||
mArguments.getArgs(frame, {parentOnly = true}) | |||
) | |||
local options = { | |||
title = mw.title.getCurrentTitle().prefixedText, | |||
otherText = x | |||
} | |||
return p._otheruses(args, options) | |||
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 | |||
local emptyArgs = true | |||
for k, v in pairs(args) do | |||
if type(k) == 'number' then emptyArgs = false break end | |||
end | |||
if emptyArgs then | |||
args = { | |||
options.defaultPage or | |||
mHatnote.disambiguate(options.title, options.disambiguator) | |||
} | |||
end | |||
--Generate and return hatnote | |||
local text = mHatlist.forSeeTableToString({{ | |||
use = options.otherText and "other " .. options.otherText or nil, | |||
pages = args | |||
}}) | |||
return mHatnote._hatnote(text) | |||
end | |||
return p |
Latest revision as of 02:17, 18 January 2023
Script error: No such module "High-use". Template:Module rating 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:
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:
<syntaxhighlight lang="lua"> local mOtheruses = require('Module:Other uses') </syntaxhighlight>
The module functions can then be used through the _otheruses()
function:
<syntaxhighlight lang="lua"> mOtheruses._otheruses(args, options) </syntaxhighlight>
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 themw.text.listToText()
function the module uses. If in doubt, usecompressSparseArray()
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
oroptions.title
; in most cases setting the latter tomw.title.getCurrentTitle().prefixedText
is advisable. The following options are supported:defaultPage
: String; completely overrides the linked page when no arguments are suppliedtitle
: String; sets the title used before the "(disambiguation)" suffix.disambiguator
: String; replaces "disambiguation" in the suffixotherText
: String; replaces "uses" in "other uses"
local mHatnote = require('Module:Hatnote') local mHatlist = require('Module:Hatnote list') 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().prefixedText return p._otheruses(args, {title=title}) end --Implements "other [x]" templates with otherText supplied at invocation function p.otherX(frame) mArguments = require('Module:Arguments') mTableTools = require('Module:TableTools') local x = frame.args[1] local args = mTableTools.compressSparseArray( mArguments.getArgs(frame, {parentOnly = true}) ) local options = { title = mw.title.getCurrentTitle().prefixedText, otherText = x } return p._otheruses(args, options) 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 local emptyArgs = true for k, v in pairs(args) do if type(k) == 'number' then emptyArgs = false break end end if emptyArgs then args = { options.defaultPage or mHatnote.disambiguate(options.title, options.disambiguator) } end --Generate and return hatnote local text = mHatlist.forSeeTableToString({{ use = options.otherText and "other " .. options.otherText or nil, pages = args }}) return mHatnote._hatnote(text) end return p