Module:Shortcut

From Sarkarverse
Revision as of 15:39, 2 February 2015 by T12 (talk | contribs) (1 revision)
(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 Error: no shortcuts were specified and the |msg= parameter was not set..

-- Set constants local CONFIG_MODULE = 'Module:Shortcut/config'

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

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) checkType('_main', 1, shortcuts, 'table') checkType('_main', 2, options, 'table', true) options = options or {} frame = frame or mw.getCurrentFrame() cfg = cfg or mw.loadData(CONFIG_MODULE) local isCategorized = yesno(options.category) ~= false

-- Validate shortcuts for i, shortcut in ipairs(shortcuts) do if type(shortcut) ~= 'string' or #shortcut < 1 then error(message(cfg['invalid-shortcut-error'], i), 2) end end

-- Make the list items. These are the shortcuts plus any extra lines such -- as options.msg. local listItems = {} for i, shortcut in ipairs(shortcuts) do listItems[i] = string.format('%s', shortcut) end table.insert(listItems, options.msg)

-- Return an error if we have nothing to display if #listItems < 1 then local msg = cfg['no-content-error'] msg = string.format('%s', msg) if isCategorized and cfg['no-content-error-category'] then msg = msg .. makeCategoryLink(cfg['no-content-error-category']) end return msg end

local root = mw.html.create()

-- Anchors local anchorDiv = root :tag('div') :css('position', 'relative') :css('top', '-3em') for i, shortcut in ipairs(shortcuts) do local anchor = mw.uri.anchorEncode(shortcut) anchorDiv:tag('span'):attr('id', anchor) end

root:newline() -- To match the old Template:Shortcut

-- Shortcut heading local shortcutHeading do local nShortcuts = #shortcuts if nShortcuts > 0 then shortcutHeading = message(cfg['shortcut-heading'], nShortcuts) shortcutHeading = frame:preprocess(shortcutHeading) shortcutHeading = shortcutHeading .. '\n' end end

-- Shortcut box local shortcutList = root :tag('table') :addClass('shortcutbox noprint') :css('float', 'right') :css('border', '1px solid #aaa') :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) :tag('ul') for i, item in ipairs(listItems) do shortcutList:tag('li'):wikitext(item) end

-- Output an error category if the first shortcut doesn't exist if isCategorized and shortcuts[1] and cfg['first-parameter-error-category'] then local title = mw.title.new(shortcuts[1]) if not title or not title.exists then root:wikitext(makeCategoryLink(cfg['first-parameter-error-category'])) end end

return tostring(root) end

function p.main(frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Shortcut' })

-- Separate shortcuts from options local shortcuts, options = {}, {} for k, v in pairs(args) do if type(k) == 'number' then shortcuts[k] = v else options[k] = v end end

-- Compress the shortcut array, which may contain nils. local function compressArray(t) local nums, ret = {}, {} for k in pairs(t) do nums[#nums + 1] = k end table.sort(nums) for i, num in ipairs(nums) do ret[i] = t[num] end return ret end shortcuts = compressArray(shortcuts)

return p._main(shortcuts, options, frame) end

return p