Module:Anchor: Difference between revisions
Appearance
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: | ||
-- | --[=[ | ||
Implements anchor templates | |||
]=] | |||
require('strict') | |||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local | local Error = require('Module:Error') | ||
local function error_message(message) | |||
return Error['error']({['message'] = message}) | |||
end | |||
local p = {} | local p = {} | ||
function | -- [[Template:Anchor]] | ||
local function _anchor(args) | |||
local anchorList = {} | |||
for k, v in pairs(args) do | |||
return | 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 | -- [[Template:Anchor link]] | ||
local | local function _anchor_link(args) | ||
local anchor = args.anchor or args[1] | |||
if not anchor then | |||
return error_message('No anchor specified') | |||
end | end | ||
return | |||
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