|
|
| (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 |
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