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 5: | Line 5: | ||
-- Load required modules | -- Load required modules | ||
local yesno = require('Module:Yesno') | |||
local checkType = require('libraryUtil').checkType | local checkType = require('libraryUtil').checkType | ||
local p = {} | local p = {} | ||
function p._main(shortcuts, options, frame, cfg) | function p._main(shortcuts, options, frame, cfg) | ||
Line 24: | Line 16: | ||
frame = frame or mw.getCurrentFrame() | frame = frame or mw.getCurrentFrame() | ||
cfg = cfg or mw.loadData(CONFIG_MODULE) | cfg = cfg or mw.loadData(CONFIG_MODULE) | ||
-- Validate shortcuts | -- Validate shortcuts | ||
for i, shortcut in ipairs(shortcuts) do | for i, shortcut in ipairs(shortcuts) do | ||
if type(shortcut) ~= 'string' or #shortcut < 1 then | if type(shortcut) ~= 'string' or #shortcut < 1 then | ||
error( | error(string.format( | ||
'shortcut #%d was invalid (shortcuts must be strings of ' .. | |||
'at least one character in length)' | |||
), 2) | |||
end | end | ||
end | end | ||
Line 39: | Line 31: | ||
local listItems = {} | local listItems = {} | ||
for i, shortcut in ipairs(shortcuts) do | for i, shortcut in ipairs(shortcuts) do | ||
listItems[i] = string.format('[[%s]]', shortcut) | |||
end | end | ||
table.insert(listItems, options.msg) | table.insert(listItems, options.msg) | ||
local nListItems = #listItems | |||
-- | -- Exit if we have nothing to display | ||
if | if nListItems < 1 then | ||
return nil | |||
return | |||
end | end | ||
local root = mw.html.create() | local root = mw.html.create() | ||
-- Anchors | -- Anchors | ||
local anchorDiv = root | local anchorDiv = root | ||
:tag('div') | :tag('div') | ||
: | :css('position', 'relative') | ||
:css('top', '-3em') | |||
for i, shortcut in ipairs(shortcuts) do | for i, shortcut in ipairs(shortcuts) do | ||
local anchor = mw.uri.anchorEncode(shortcut) | local anchor = mw.uri.anchorEncode(shortcut) | ||
anchorDiv:tag('span'):attr('id', anchor) | anchorDiv:tag('span'):attr('id', anchor) | ||
end | end | ||
root:newline() -- To match the old [[Template:Shortcut]] | |||
-- Shortcut heading | -- Shortcut heading | ||
local shortcutHeading | local shortcutHeading = mw.message.newRawMessage( | ||
cfg['shortcut-heading'], | |||
nListItems | |||
):plain() | |||
shortcutHeading = frame:preprocess(shortcutHeading) | |||
-- Shortcut box | -- Shortcut box | ||
local shortcutList = root | local shortcutList = root | ||
:tag(' | :tag('table') | ||
:addClass(' | :addClass('shortcutbox noprint') | ||
: | :css('float', 'right') | ||
:css('border', '1px solid #aaa') | |||
shortcutList: | :css('background', '#fff') | ||
:css('margin', '.3em .3em .3em 1em') | |||
:css('padding', '3px') | |||
:css('text-align', 'center') | |||
:tag('tr') | |||
:tag('th') | |||
:addClass('plainlist') | |||
:css('border', 'none') | |||
:css('background', 'transparent') | |||
:tag('small') | |||
:wikitext(shortcutHeading) | |||
:newline() | |||
:tag('ul') | |||
for i, item in ipairs(listItems) do | |||
shortcutList:tag('li'):wikitext(item) | |||
end | end | ||
if | |||
-- Error category | |||
if shortcuts[1] and not yesno(options.nocat) then | |||
local title = mw.title.new(shortcuts[1]) | |||
if not title or not title.exists then | |||
root:wikitext(string.format( | |||
'[[%s:%s]]', | |||
mw.site.namespaces[14].name, | |||
cfg['first-parameter-error-category'] | |||
)) | |||
end | |||
end | end | ||
return tostring(root) | return tostring(root) | ||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local args = require('Module:Arguments').getArgs(frame) | local args = require('Module:Arguments').getArgs(frame, { | ||
wrappers = 'Template:Shortcut' | |||
}) | |||
-- Separate shortcuts from options | -- Separate shortcuts from options |