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.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 6: Line 6:
-- Load required modules
-- Load required modules
local checkType = require('libraryUtil').checkType
local checkType = require('libraryUtil').checkType
local yesno = require('Module:Yesno')


local p = {}
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)
function p._main(shortcuts, options, frame, cfg)
Line 24: Line 15:
frame = frame or mw.getCurrentFrame()
frame = frame or mw.getCurrentFrame()
cfg = cfg or mw.loadData(CONFIG_MODULE)
cfg = cfg or mw.loadData(CONFIG_MODULE)
local templateMode = options.template and yesno(options.template)
local nShortcuts = #shortcuts
local redirectMode = options.redirect and yesno(options.redirect)
local isCategorized = not options.category or yesno(options.category) ~= false


-- Validate shortcuts
-- Validate shortcuts
for i, shortcut in ipairs(shortcuts) do
if nShortcuts < 1 then
if type(shortcut) ~= 'string' or #shortcut < 1 then
return nil
error(message(cfg['invalid-shortcut-error'], i), 2)
else
end
for i, shortcut in ipairs(shortcuts) do
end
if type(shortcut) ~= 'string' or #shortcut < 1 then
 
error(string.format(
-- Make the list items. These are the shortcuts plus any extra lines such
'shortcut #%d was invalid (shortcuts must be strings of ' ..
-- as options.msg.
'at least one character in length)'
local listItems = {}
), 2)
for i, shortcut in ipairs(shortcuts) do
local templatePath, prefix
if templateMode then
-- Namespace detection
local titleObj = mw.title.new(shortcut, 10)
if titleObj.namespace == 10 then
templatePath = titleObj.fullText
else
templatePath = shortcut
end
prefix = options['pre' .. i] or options.pre or ''
end
if options.target and yesno(options.target) then
listItems[i] = templateMode
and string.format("&#123;&#123;%s[[%s|%s]]&#125;&#125;", prefix, templatePath, shortcut)
or string.format("[[%s]]", shortcut)
else
listItems[i] = frame:expandTemplate{
title = 'No redirect',
args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}
}
if templateMode then
listItems[i] = string.format("&#123;&#123;%s%s&#125;&#125;", prefix, listItems[i])
end
end
end
end
end
end
table.insert(listItems, options.msg)


-- Return an error if we have nothing to display
local root = mw.html.create()
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()
root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Shortcut/styles.css'} })
-- Anchors
-- Anchors
local anchorDiv = root
local anchorDiv = root
:tag('div')
:tag('div')
:addClass('module-shortcutanchordiv')
:css('position', 'relative')
:css('top', '-3em')
for i, shortcut in ipairs(shortcuts) do
for i, shortcut in ipairs(shortcuts) do
local anchor = mw.uri.anchorEncode(shortcut)
local anchor = mw.uri.anchorEncode(shortcut)
anchorDiv:tag('span'):attr('id', anchor)
anchorDiv:tag('span'):attr('id', anchor)
end
end
root:newline() -- To match the old [[Template:Shortcut]]


-- Shortcut heading
-- Shortcut heading
local shortcutHeading
local shortcutHeading = mw.message.newRawMessage(
do
cfg['shortcut-heading'],
local nShortcuts = #shortcuts
nShortcuts
if nShortcuts > 0 then
):plain()
local headingMsg = options['shortcut-heading'] or
shortcutHeading = frame:preprocess(shortcutHeading)
redirectMode and cfg['redirect-heading'] or
cfg['shortcut-heading']
shortcutHeading = message(headingMsg, nShortcuts)
shortcutHeading = frame:preprocess(shortcutHeading)
end
end


-- Shortcut box
-- Shortcut box
local shortcutList = root
local shortcutList = root
:tag('div')
:tag('table')
:addClass('module-shortcutboxplain noprint')
:addClass('shortcutbox noprint')
:attr('role', 'note')
:css('float', 'right')
if options.float and options.float:lower() == 'left' then
:css('border', '1px solid #aaa')
shortcutList:addClass('module-shortcutboxleft')
: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)
:newline()
:tag('ul')
for i, shortcut in ipairs(shortcuts) do
local url = mw.uri.fullUrl(shortcut, {redirect = 'no'})
url = tostring(url)
local link = string.format('[%s %s]', url, shortcut)
shortcutList:tag('li'):wikitext(link)
end
end
if options.clear and options.clear ~= '' then
if options.msg then
shortcutList:css('clear', options.clear)
shortcutList:tag('li'):wikitext(options.msg)
end
end
if shortcutHeading then
 
shortcutList
-- Error category
:tag('div')
do
:addClass('module-shortcutlist')
local title = mw.title.new(shortcuts[1])
:wikitext(shortcutHeading)
if not title or not title.exists then
root:wikitext(string.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
cfg['first-parameter-error-category']
))
end
end
end
 
local ubl = require('Module:List').unbulleted(listItems)
shortcutList:wikitext(ubl)
return tostring(root)
return tostring(root)
end
end


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


-- Separate shortcuts from options
-- Separate shortcuts from options
Cancel Editing help (opens in new window)

  [] · [[]] · [[|]] · {{}} · · “” ‘’ «» ‹› „“ ‚‘ · ~ | ° &nbsp; · ± × ÷ ² ³ ½ · §
     [[Category:]] · [[:File:]] · [[Special:MyLanguage/]] · Special:MyLanguage/ · <code></code> · <nowiki></nowiki> <code><nowiki></nowiki></code> · <syntaxhighlight lang="php"></syntaxhighlight> · <includeonly></includeonly> · <noinclude></noinclude> · #REDIRECT[[]] · <translate></translate> · <languages/> · {{#translation:}} · <tvar name=1></tvar> · {{DEFAULTSORT:}} · <s></s>

Template used on this page: