Editing Module:Shortcut
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
-- This module implements {{shortcut}}. | -- This module implements {{shortcut}}. | ||
local cfg = {} | |||
local | |||
-- Load | -------------------------------------------------------------------------------- | ||
local | -- Configuration | ||
local | -------------------------------------------------------------------------------- | ||
-- Name for the error category produced if the first shortcut is not an existing | |||
-- page on the wiki. | |||
cfg.errorCategory = 'Wikipedia shortcut box first parameter needs fixing' | |||
-- The header text for the list of shortcuts. | |||
-- cfg.shortcutHeaderSingular will be displayed if there is one shortcut, and | |||
-- cfg.shortcutHeaderPlural will be displayed if there are multiple shortcuts. | |||
cfg.shortcutHeaderSingular = '[[Wikipedia:Shortcut|Shortcut]]:' | |||
cfg.shortcutHeaderPlural = '[[Wikipedia:Shortcut|Shortcuts]]:' | |||
-------------------------------------------------------------------------------- | |||
-- Load external modules and define often-used functions | |||
-------------------------------------------------------------------------------- | |||
-- Load external modules | |||
local mArguments = require('Module:Arguments') | |||
local mTableTools = require('Module:TableTools') | |||
local mList = require('Module:List') | |||
-- Define often-used functions | |||
local anchorEncode = mw.uri.anchorEncode | |||
local format = string.format | |||
local fullUrl = mw.uri.fullUrl | |||
-------------------------------------------------------------------------------- | |||
-- Main functions | |||
-------------------------------------------------------------------------------- | |||
local p = {} | local p = {} | ||
function p.main(frame) | |||
return | local args = mArguments.getArgs(frame) | ||
return p._main(args) | |||
end | end | ||
function p._main(args) | |||
local shortcuts = p.getShortcuts(args) | |||
local nShortcuts = #shortcuts | |||
if nShortcuts < 1 then | |||
-- Don't output anything if {{shortcut}} was called with no arguments. | |||
return '' | |||
end | |||
local anchors = p.makeAnchorList(shortcuts) | |||
local shortcutList = p.makeShortcutList(shortcuts) | |||
local errorCategories = p.getErrorCategories(shortcuts) | |||
return p.export(anchors, nShortcuts, shortcutList, errorCategories) | |||
end | end | ||
function p. | function p.getShortcuts(args) | ||
local shortcuts = mTableTools.compressSparseArray(args) | |||
return shortcuts | |||
end | |||
function p.makeAnchorList(shortcuts) | |||
local makeAnchor = p.makeAnchor | |||
local anchors = {} | |||
for i, shortcut in ipairs(shortcuts) do | for i, shortcut in ipairs(shortcuts) do | ||
anchors[#anchors + 1] = makeAnchor(shortcut) | |||
end | end | ||
return table.concat(anchors) | |||
end | |||
function p.makeAnchor(s) | |||
s = anchorEncode(s) | |||
local anchor = format('<span id="%s"></span>', s) | |||
return anchor | |||
end | |||
function p.makeShortcutList(shortcuts) | |||
local makeShortcutLink = p.makeShortcutLink | |||
local | local listArgs = {} | ||
for i, shortcut in ipairs(shortcuts) do | for i, shortcut in ipairs(shortcuts) do | ||
local | local link = makeShortcutLink(shortcut) | ||
listArgs[#listArgs + 1] = link | |||
end | end | ||
listArgs.class = 'plainlinks' | |||
return mList.makeList('bulleted', listArgs) | |||
end | |||
function p.makeShortcutLink(s) | |||
local uriObj = fullUrl(s, {redirect = 'no'}) | |||
local url = tostring(uriObj) | |||
return format('[%s %s]', url, s) | |||
end | |||
function p.getErrorCategories(shortcuts) | |||
local shortcut1 = shortcuts[1] | |||
local title = mw.title.new(shortcut1) | |||
local | if not title or not title.exists then | ||
local categoryNsName = mw.site.namespaces[14].name | |||
return format('[[%s:%s]]', categoryNsName, cfg.errorCategory) | |||
else | |||
local | return nil | ||
end | end | ||
end | |||
function p.export(anchors, nShortcuts, shortcutList, errorCategories) | |||
local | local root = mw.html.create('') | ||
root | |||
:tag('div') | :tag('div') | ||
: | :css{position = 'relative', top = '-3em'} | ||
: | :wikitext(anchors) | ||
root | |||
:tag('table') | |||
:addClass('shortcutbox noprint') | |||
:css{ | |||
float = 'right', | |||
border = '1px solid #aaa', | |||
background = '#fff', | |||
margin = '.3em .3em .3em 1em', | |||
:tag(' | padding = '3px', | ||
: | ['text-align'] = 'center' | ||
} | |||
:tag('tr') | |||
:tag('th') | |||
:addClass('plainlist') | |||
:css{border = 'none', background = 'transparent'} | |||
:tag('small') | |||
:wikitext( | |||
nShortcuts <= 1 | |||
and cfg.shortcutHeaderSingular | |||
or cfg.shortcutHeaderPlural | |||
) | |||
:newline() | |||
:wikitext(shortcutList) | |||
root:wikitext(errorCategories) | |||
return tostring(root) | return tostring(root) | ||
end | end | ||
return p | return p |