Editing Module:Shortcut
From MINR.ORG WIKI
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save 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 | + | local makeShortcutLink = p.makeShortcutLink |
− | + | 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 | + | 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 | |
− | + | 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 |
− | :css | + | :tag('table') |
− | + | :addClass('shortcutbox noprint') | |
− | + | :css{ | |
− | + | float = 'right', | |
− | + | border = '1px solid #aaa', | |
− | : | + | background = '#fff', |
− | + | margin = '.3em .3em .3em 1em', | |
− | + | 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 |