Jump to content

Module:Anchor: Difference between revisions

From ARC Technical Repository
source>ShakespeareFan00
m Most of the page namespace is now cleaned up, far quicker than expected and this is adding a LOT of noise
m 1 revision imported
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
--[=[
-- This module implements {{anchor}}.
Implements anchor templates
]=]
require('strict')


local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local Error = require('Module:Error')
local tableTools = require('Module:TableTools')
 
local function error_message(message)
return Error['error']({['message'] = message})
end


local p = {}
local p = {}


-- [[Template:Anchor]]
function p.main(frame)
 
-- Get the positional arguments from #invoke, remove any nil values,
local function _anchor(args)
-- and pass them to p._main.
local anchorList = {}
local args = getArgs(frame)
for k, v in pairs(args) do
local argArray = tableTools.compressSparseArray(args)
table.insert(anchorList, tostring(mw.html.create('span'):addClass('anchor'):attr('id', mw.uri.anchorEncode(v))))
return p._main(unpack(argArray))
end
return table.concat(anchorList)
end
 
function p.anchor(frame)
return _anchor(getArgs(frame))
end
end


-- [[Template:Anchor link]]
function p._main(...)
 
-- Generate the list of anchors.
local function _anchor_link(args)
local anchors = {...}
local anchor = args.anchor or args[1]
local ret = {}
if not anchor then
for _, anchor in ipairs(anchors) do
return error_message('No anchor specified')
ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>'
end
end
return table.concat(ret)
anchor = mw.uri.anchorEncode(anchor)
local pageno = args.pageno or args[2]
local subpage = args.subpage or args[3]
local page = (args.page and mw.title.new(args.page)) or mw.title.getCurrentTitle()
if page.nsText == 'Page' and not pageno then
return error_message('No page number specified')
end
local title = page.text
if page.nsText == 'Page' then
title = page.rootText .. '/' .. pageno
elseif subpage then
local rootSubpageTitle = mw.title.makeTitle(page.nsText, page.rootText .. '/' .. subpage)
local baseSubpageTitle = mw.title.makeTitle(page.nsText, page.baseText .. '/' .. subpage)
if rootSubpageTitle.exists then
title = rootSubpageTitle.text
elseif baseSubpageTitle.exists then
title = baseSubpageTitle.text
end
end
return '[[' .. mw.title.makeTitle(page.nsText, title, anchor).fullText .. '|' .. anchor:gsub("_", " ") .. ']]'
end
 
function p.anchor_link(frame)
return _anchor_link(getArgs(frame))
end
 
-- [[Template:Anchor link 2]]
 
local function _anchor_link_2(args)
local anchor = args.anchor or args[3]
if not anchor then
return error_message('No anchor specified')
end
local subpage = args.subpage or args[1]
local pageno = args.pageno or args[2]
anchor = mw.uri.anchorEncode(anchor)
local text = args.text or args[4] or anchor
local page = (args.page and mw.title.new(args.page)) or mw.title.getCurrentTitle()
if page.nsText == 'Page' and not pageno then
return error_message('No page number specified')
end
local title = page.text
if page.nsText == 'Page' then
title = page.rootText .. '/' .. pageno
elseif subpage then
local rootSubpageTitle = mw.title.makeTitle(page.nsText, page.rootText .. '/' .. subpage)
local baseSubpageTitle = mw.title.makeTitle(page.nsText, page.baseText .. '/' .. subpage)
if not rootSubpageTitle or not baseSubpageTitle then
return error_message('Error creating subpage: ' .. subpage)
end
local baseSubpageBaseTitle = mw.title.makeTitle(page.nsText, baseSubpageTitle.baseText .. '/' .. subpage)
if not baseSubpageBaseTitle then
return error_message('Error creating subpage: ' .. subpage)
end
local subpageTitle = mw.title.makeTitle(page.nsText, subpage)
if not subpageTitle then
return error_message('Error creating page: ' .. subpage)
end
if rootSubpageTitle.exists then
title = rootSubpageTitle.text
elseif baseSubpageTitle.exists then
title = baseSubpageTitle.text
elseif baseSubpageBaseTitle.exists then
title = baseSubpageBaseTitle.text
elseif subpageTitle.exists then
title = subpage
end
end
return '[[' .. mw.title.makeTitle(page.nsText, title, anchor).fullText .. '|' .. text .. ']]'
end
 
function p.anchor_link_2(frame)
return _anchor_link_2(getArgs(frame))
end
end


return p
return p

Latest revision as of 00:12, 8 September 2026

Documentation for this module may be created at Module:Anchor/doc

-- This module implements {{anchor}}.

local getArgs = require('Module:Arguments').getArgs
local tableTools = require('Module:TableTools')

local p = {}

function p.main(frame)
	-- Get the positional arguments from #invoke, remove any nil values,
	-- and pass them to p._main.
	local args = getArgs(frame)
	local argArray = tableTools.compressSparseArray(args)
	return p._main(unpack(argArray))
end

function p._main(...)
	-- Generate the list of anchors.
	local anchors = {...}
	local ret = {}
	for _, anchor in ipairs(anchors) do
		ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>'
	end
	return table.concat(ret)
end

return p