Difference between revisions of "Module:Shortcut"
From Sarkarverse
Tito Dutta (talk | contribs) (Add module) |
Tito Dutta (talk | contribs) (test) |
||
Line 1: | Line 1: | ||
-- This module implements {{shortcut}}. | -- This module implements {{shortcut}}. | ||
− | + | local cfg = {} | |
− | local | ||
− | -- | + | -------------------------------------------------------------------------------- |
− | + | -- Configuration | |
− | + | -------------------------------------------------------------------------------- | |
− | + | -- 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 = {} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | function p.main(frame) | |
+ | local args = mArguments.getArgs(frame) | ||
+ | return p._main(args) | ||
+ | end | ||
− | + | function p._main(args) | |
− | local | + | 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 | ||
− | + | function p.getShortcuts(args) | |
− | local | + | 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 | |
− | + | 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 | end | ||
− | function p. | + | function p.makeShortcutList(shortcuts) |
− | local | + | local makeShortcutLink = p.makeShortcutLink |
− | + | local listArgs = {} | |
− | + | for i, shortcut in ipairs(shortcuts) do | |
+ | local link = makeShortcutLink(shortcut) | ||
+ | listArgs[#listArgs + 1] = link | ||
+ | end | ||
+ | listArgs.class = 'plainlinks' | ||
+ | return mList.makeList('bulleted', listArgs) | ||
+ | end | ||
− | + | function p.makeShortcutLink(s) | |
− | local | + | 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) | |
− | + | 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 | |
− | |||
− | |||
− | return | ||
end | end | ||
− | + | end | |
− | + | function p.export(anchors, nShortcuts, shortcutList, errorCategories) | |
+ | local root = mw.html.create('') | ||
+ | root | ||
+ | :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', | ||
+ | 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) | ||
end | end | ||
return p | return p |
Latest revision as of 04:03, 4 February 2015
Documentation for this module may be created at Module:Shortcut/doc
-- This module implements {{shortcut}}.
local cfg = {}
--------------------------------------------------------------------------------
-- Configuration
--------------------------------------------------------------------------------
-- 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 = {}
function p.main(frame)
local args = mArguments.getArgs(frame)
return p._main(args)
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
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
anchors[#anchors + 1] = makeAnchor(shortcut)
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 listArgs = {}
for i, shortcut in ipairs(shortcuts) do
local link = makeShortcutLink(shortcut)
listArgs[#listArgs + 1] = link
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)
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
function p.export(anchors, nShortcuts, shortcutList, errorCategories)
local root = mw.html.create('')
root
: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',
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)
end
return p