Module:Redirect hatnote: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
meta>Mr. Stradivarius (initial version of a Template:Redirect replacement; needs debugging) |
meta>Mr. Stradivarius on tour (still wrong, but slightly less wrong?) |
||
Line 43: | Line 43: | ||
iArg = iArg + 1 | iArg = iArg + 1 | ||
local useTable = data[iData] or {} | local useTable = data[iData] or {} | ||
local use, page | local use, page, isLastUse | ||
if iArg % 2 == 0 then | if iArg % 2 == 0 then | ||
use = args[iArg] | use = args[iArg] | ||
if use ~= 'and' then | if use ~= 'and' then | ||
useTable.use = use | useTable.use = use | ||
isLastUse = true | |||
end | end | ||
else | else | ||
page = args[iArg] | page = args[iArg] | ||
useTable[#useTable + 1] = page | useTable[#useTable + 1] = page | ||
end | |||
data[iData] = useTable | |||
if isLastUse then | |||
iData = iData + 1 | |||
end | end | ||
end | end |
Revision as of 15:26, 6 May 2014
Documentation for this module may be created at Module:Redirect hatnote/doc
--[[ -- This module produces a "redirect" hatnote. It looks like this: -- '"X" redirects here. For other uses, see Y.' -- It implements the {{redirect}} template. --]] local mHatnote = require('Module:Hatnote') local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local p = {} function p.redirect(frame) -- Get the args table and work out the maximum arg key. local origArgs = frame:getParent().args local args = {} local maxArg = 0 for k, v in pairs(origArgs) do if type(k) == 'number' and k > maxArg then maxArg = k end v = v:match('^%s*(.-)%s*$') -- Trim whitespace if v ~= '' then args[k] = v end end -- Return an error if no redirect was specified. local redirect = args[1] if not redirect then return mHatnote.makeWikitextError( 'no redirect specified', 'Template:Redirect#Errors', args.category ) end -- Create the data table. local data = {} local iArg = 1 local iData = 1 while iArg < maxArg do iArg = iArg + 1 local useTable = data[iData] or {} local use, page, isLastUse if iArg % 2 == 0 then use = args[iArg] if use ~= 'and' then useTable.use = use isLastUse = true end else page = args[iArg] useTable[#useTable + 1] = page end data[iData] = useTable if isLastUse then iData = iData + 1 end end -- Create the options table. local options = {} options.selfref = args.selfref return p._redirect(redirect, data, options) end function p._redirect(redirect, data, options) checkType('_redirect', 1, redirect, 'string') checkType('_redirect', 2, data, 'table', true) checkType('_redirect', 3, options, 'table', true) -- Generate the text. local text = {} -- Redirect text. text[#text + 1] = '"' .. redirect .. '" redirects here.' -- The first table, a special case. local useTable1 = data[1] or {} local use1 = useTable1.use or 'other uses' useTable1[1] = useTable1[1] or redirect .. ' (disambiguation)' local pages1 = mHatnote.formatPages(unpack(useTable1)) pages1 = mw.text.listToText(pages1) text[#text + 1] = string.format( 'For %s, see %s.', use1, pages1 ) -- The other tables. if use1 ~= 'other uses' then for i = 2, #data do local useTable = data[i] or {} local origUse = useTable.use if not origUse then break end local use if tonumber(origUse) == 1 then use = 'other uses' else use = origUse end useTable[1] = useTable[1] or origUse .. ' (disambiguation)' local pages = mHatnote.formatPages(unpack(useTable)) pages = mw.text.listToText(pages) text[#text + 1] = string.format( 'For %s, see %s.', use, pages ) if use == 'other uses' then -- "Other uses" text must come last, or it doesn't make sense -- grammatically. break end end end text = table.concat(text, ' ') -- Generate the options to pass to [[Module:Hatnote]]. options = options or {} local mhOptions = {} mhOptions.selfref = options.selfref -- Find whether to add the tracking category. -- We add the category if: -- a) redirect isn't any of the keywords 'REDIRECT', 'REDIRECT1', -- 'REDIRECT2', ..., or 'TERM'. -- b) we are in the main namespace. -- c) the redirect title does not exist. local category if not redirect:find('^REDIRECT%d*$') and redirect ~= 'TERM' then local currentTitle = mw.title.getCurrentTitle() if currentTitle.namespace == 0 then local success, redirectTitle = pcall(mw.title.new, redirect) if success and not redirectTitle.exists then category = '[[Category:Missing redirects]]' end end end category = category or '' return mHatnote._hatnote(text, mhOptions) .. category end return p