Module:Shortcut

From Sarkarverse
Revision as of 04:03, 4 February 2015 by T12 (talk | contribs) (test)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

-- This module implements .

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 = 'Shortcut:' cfg.shortcutHeaderPlural = '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 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('', 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