Editing
Module:Shortcut
Jump to navigation
Jump to search
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.
Anti-spam check. Do
not
fill this in!
-- This module implements {{shortcut}}. -- 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('<strong class="error">%s</strong>', 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
Summary:
Please note that all contributions to TechInfoDepot may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
TechInfoDepot:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Shortcut/doc
(
edit
)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Log in
Namespaces
Module
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Main page
Menu
Recent changes
Random page
Help
data/misc
Add data
Browse wiki
Semantic search
Search
Short-term conf. list
Contact admin
Tools
What links here
Related changes
Special pages
Page information
query forms
Embedded system
MGPC (non-PC)
Wireless adapter
OUI