Þessi síða var afrituð frá ensku Wikiheimild. Reynt hefur verið að aðlaga hana að íslensku Wikiheimildum með sem fæstum mögulegum breytingum. Það er gert til að forðast fjölverknað og spara tíma en einnig svo hægt sé að taka við uppfærslum og nýjum eiginleikum með sem minnstri fyrirhöfn. Leiðbeiningar um notkun hennar má finna á enska verkefninu. Einungis það sem lesandinn sér skal íslenskað. Ef frekari breytingar eru nauðsynlegar til að aðlaga hana að íslenska verkefninu skulu þær útskýrðar hér fyrir neðan.


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

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

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

local p = {}

-- [[Template:Anchor]]

function p._anchor(args)
	local anchorList = {}
	for k, v in pairs(args) do
		-- number restriction isn't a technical requirement and could be removed
		if v and #anchorList < 20 then
			anchorList[#anchorList + 1] = '<span id="' .. v .. '"></span>'
		elseif v and #anchorList == 20 then
			anchorList[#anchorList + 1] = error_message('[[Module:Anchor]]: more than 20 anchors')
		end
	end
	return table.concat(anchorList)
end

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

-- [[Template:Anchor link]]

function p._anchor_link(args)
	local anchor = mw.uri.anchorEncode(args.anchor or args[1])
	local pageno = args.pageno or args[2]
	local subpage = args.subpage or args[3]
	
	local page = mw.title.getCurrentTitle()
	
	if not anchor then
		return error_message('No anchor specified')
	end
	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 .. ']]'
end

function p.anchor_link(frame)
	return p._anchor_link(getArgs(frame))
end

-- [[Template:Anchor link 2]]

function p._anchor_link_2(args)
	local subpage = args.subpage or args[1]
	local pageno = args.pageno or args[2]
	local anchor = mw.uri.anchorEncode(args.anchor or args[3])
	local text = args.text or args[4] or anchor
	
	local page = mw.title.getCurrentTitle()
	
	if not anchor then
		return error_message('No anchor specified')
	end
	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)
		local baseSubpageBaseTitle = mw.title.makeTitle(page.nsText, baseSubpageTitle.baseText .. '/' .. subpage)
		local subpageTitle = mw.title.makeTitle(page.nsText, subpage)
		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 p._anchor_link_2(getArgs(frame))
end

return p