Jump to content

Module:Anchor: Difference between revisions

From ARC Technical Repository
Add class per edit request
 
source>ShakespeareFan00
m Most of the page namespace is now cleaned up, far quicker than expected and this is adding a LOT of noise
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 tableTools = require('Module:TableTools')
local Error = require('Module:Error')
 
local function error_message(message)
return Error['error']({['message'] = message})
end


local p = {}
local p = {}


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


function p._main(...)
-- [[Template:Anchor link]]
-- Generate the list of anchors.
 
local anchors = {...}
local function _anchor_link(args)
local ret = {}
local anchor = args.anchor or args[1]
for _, anchor in ipairs(anchors) do
if not anchor then
ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>'
return error_message('No anchor specified')
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

Revision as of 03:57, 20 April 2025

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

--[=[
Implements anchor templates
]=]
require('strict')

local getArgs = require('Module:Arguments').getArgs
local Error = require('Module:Error')

local function error_message(message)
	return Error['error']({['message'] = message})
end

local p = {}

-- [[Template:Anchor]]

local function _anchor(args)
	local anchorList = {}
	for k, v in pairs(args) do
		table.insert(anchorList, tostring(mw.html.create('span'):addClass('anchor'):attr('id', mw.uri.anchorEncode(v))))
	end
	return table.concat(anchorList)
end

function p.anchor(frame)
	return _anchor(getArgs(frame))
end

-- [[Template:Anchor link]]

local function _anchor_link(args)
	local anchor = args.anchor or args[1]
	if not anchor then
		return error_message('No anchor specified')
	end
	
	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

return p