Module:Shortcut: Difference between revisions

move messages to the config module and make categories optional
(output an error message if there is nothing to display)
(move messages to the config module and make categories optional)
Line 5: Line 5:


-- Load required modules
-- Load required modules
local checkType = require('libraryUtil').checkType
local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType


local p = {}
local p = {}
local function message(msg, ...)
return mw.message.newRawMessage(msg, ...):plain()
end
local function makeCategoryLink(cat)
return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end


function p._main(shortcuts, options, frame, cfg)
function p._main(shortcuts, options, frame, cfg)
Line 16: Line 24:
frame = frame or mw.getCurrentFrame()
frame = frame or mw.getCurrentFrame()
cfg = cfg or mw.loadData(CONFIG_MODULE)
cfg = cfg or mw.loadData(CONFIG_MODULE)
local isCategorized = yesno(options.category) ~= false


-- 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(string.format(
error(message(cfg['invalid-shortcut-error'], i), 2)
'shortcut #%d was invalid (shortcuts must be strings of ' ..
'at least one character in length)'
), 2)
end
end
end
end
Line 37: Line 43:
-- Return an error if we have nothing to display
-- Return an error if we have nothing to display
if #listItems < 1 then
if #listItems < 1 then
return '<strong class="error">Error: no shortcuts were specified ' ..
local msg = cfg['no-content-error']
'and the ' .. mw.text.nowiki('|msg=') .. ' parameter was not ' ..
msg = string.format('<strong class="error">%s</strong>', msg)
'set.</strong>'
if isCategorized and cfg['no-content-error-category'] then
msg = msg .. makeCategoryLink(cfg['no-content-error-category'])
end
return msg
end
end


Line 61: Line 70:
local nShortcuts = #shortcuts
local nShortcuts = #shortcuts
if nShortcuts > 0 then
if nShortcuts > 0 then
shortcutHeading = mw.message.newRawMessage(
shortcutHeading = message(cfg['shortcut-heading'], nShortcuts)
cfg['shortcut-heading'],
nShortcuts
):plain()
shortcutHeading = frame:preprocess(shortcutHeading)
shortcutHeading = frame:preprocess(shortcutHeading)
shortcutHeading = shortcutHeading .. '\n'
shortcutHeading = shortcutHeading .. '\n'
Line 92: Line 98:
end
end


-- Error category
-- Output an error category if the first shortcut doesn't exist
if shortcuts[1] and not yesno(options.nocat) then
if isCategorized
and shortcuts[1]
and cfg['first-parameter-error-category']
then
local title = mw.title.new(shortcuts[1])
local title = mw.title.new(shortcuts[1])
if not title or not title.exists then
if not title or not title.exists then
root:wikitext(string.format(
root:wikitext(makeCategoryLink(cfg['first-parameter-error-category']))
'[[%s:%s]]',
mw.site.namespaces[14].name,
cfg['first-parameter-error-category']
))
end
end
end
end