Module:Headnote
Appearance
Documentation for this module may be created at Module:Headnote/doc
--require "mw.text"
local z = {
mw = require "Module:mw",
wikitext = require "Module:Wikitext"
}
-- This function makes an ordinary array copy of a "special" arguments array taken from a frame.
function clonenumberedargs(args)
local newargs = {}
local index = 1
while args[index] ~= nil do
local arg = args[index]
newargs[index] = arg
index = index + 1
end
return newargs
end
-- This encloses the text in the necessary CSS for a headnote link.
function rellink(text,classes)
local params = { class = table.concat(classes, " ") }
return z.mw.text.tag({name="div",contents=text,params=params})
end
function simple_unlinked(frame,phrase,classes)
local pframe = frame:getParent()
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local newargs = clonenumberedargs(args)
local text = z.wikitext.oxfordlist(newargs)
local Phrase = args.altphrase or phrase
return rellink(Phrase .. ": " .. text,classes)
end
function simple_labelled_linked(frame,phrase,classes)
local pframe = frame:getParent()
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local newargs = {}
-- This would be shorter using ipairs(), but that doesn't work on an arguments table supplied to a template.
local index = 1
while args[index] ~= nil do
local arg = args[index]
local pipe = args["label" .. index] or args["l" .. index]
if ( pipe ~= nil ) then pipe = "|" .. pipe else pipe = "" end
newargs[index] = "[[:" .. arg .. pipe .. "]]"
index = index + 1
end
local text = z.wikitext.oxfordlist(newargs)
local Phrase = args.altphrase or phrase
return rellink(Phrase .. ": " .. text,classes)
end
-- This is used by template {{see also}}.
function z.seealso(frame)
return simple_labelled_linked(frame,"See also",{"rellink","boilerplate","seealso"})
end
-- This is used by template {{see also2}}.
function z.seealso2(frame)
return simple_unlinked(frame,"See also",{"rellink","boilerplate","seealso"})
end
-- This is used by template {{main}}.
function z.main(frame)
return simple_labelled_linked(frame,"Main article",{"rellink","relarticle","mainarticle"})
end
-- This is used by template {{main2}}.
function z.main2(frame)
return simple_unlinked(frame,"Main article",{"rellink","relarticle","mainarticle"})
end
-- This is used by template {{further}}.
function z.further(frame)
return simple_labelled_linked(frame,"Further information",{"rellink","relarticle","further"})
end
-- This is used by template {{further2}}.
function z.further2(frame)
return simple_unlinked(frame,"Further information",{"rellink","relarticle","further"})
end
-- This is used by templates {{about}}, {{for}}, {{other uses}} and brethren, {{redirect}} and brethren, {{other people}} and brethren, {{other ships}}, {{other hurricanes}}, and {{other places}}
function z.about(frame)
local pframe = frame:getParent()
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local classes = { "dablink" }
local thistype = config["this-type"] or config.thistype or "about"
local others = config.others or "other uses"
local this1 = config.this1 or config.pagename or ""
local of = config.of
local thiscount = tonumber(config["this-count"] or config.thiscount) or 0
local result = {}
-- Construct the list of referents as the "these" arguments.
local theseargs = {}
local tempargs = clonenumberedargs(args)
if ( thiscount > 0 ) then
for i=1,thiscount do
local arg = table.remove(tempargs,1)
table.insert(theseargs,arg)
end
if ( "" == theseargs[1] ) then theseargs[1] = this1 end
-- Put quotation marks around "these" arguments if necessary.
if ( "redirect" == thistype ) then
for i,arg in ipairs(theseargs) do theseargs[i] = "\"" .. arg .. "\"" end
end
local these = z.wikitext.oxfordlist(theseargs)
if ( "redirect" == thistype ) then
local singular = ""
if ( #theseargs == 1 ) then singular = "s" end
these = these .. " redirect" .. singular .. " here."
else
these = "This article is about " .. these .. "."
end
table.insert(result, these)
end
-- In the case that there are no remaining arguments, construct a load of "other uses","THIS (disambiguation)" pairs.
if ( #tempargs < 1 ) then
if ( #theseargs > 0 ) then
for i,arg in ipairs(theseargs) do
table.insert(tempargs,"other uses")
table.insert(tempargs,arg .. " (disambiguation)")
end
else
table.insert(tempargs,"other uses")
table.insert(tempargs,this1 .. " (disambiguation)")
end
end
-- Process remaining arguments in tempargs as LABEL,ARTICLE pairs.
if #tempargs % 2 == 1 then
table.insert(tempargs,this1 .. " (disambiguation)")
end
local argscount = #tempargs
for i=1,argscount,2 do
local referent = theseargs[(i + 1) / 2] or this1
local label = table.remove(tempargs,1)
local article = table.remove(tempargs,1)
if ( nil ~= of ) then
table.insert(result, "For " .. label .. " of " .. referent .. ", see [[" .. article .. "]].")
else
table.insert(result, "For " .. label .. ", see [[" .. article .. "]].")
end
end
return rellink(table.concat(result, " "),classes)
end
return z