Module:Asbox
Revision as of 00:40, 6 January 2015 by blackwiki>Codehydro (irrelevant class name from template:param)
| 40px | This Lua module is used on approximately 2,350,000 pages, or roughly 585% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. Transclusion count updated automatically (see documentation). |
| 40x40px | This module is rated as ready for general use. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
| 40x40px | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Usage
This module implements the {{Asbox}} template. Please see the template page for usage instructions.
Acknowledgements
In addition to the contributors listed in the contribution histories of Template:Asbox and Module:Asbox, this module also implements ideas from the deleted Template:Asbox/templatepage, which primary author is User:MSGJ and included code contributions from User:WOSlinker, and User:Od_Mishehu.
Tracking category
local p = {
cats = {inv = {}}
}
local WRAPPER_TEMPLATE = 'Template:Asbox'
local args, stubCats
function demo(text, alt)
return args.demo and text or alt
end
local attention = 'Stub message templates needing attention'
function category(cat)--{{'cat', 'sort'}, 'cat2'} or 'cat'
for _, v in ipairs(type(cat) == type'' and {cat} or cat) do
p.key = string.format(
'[[%sCategory:%s]]',
demo(':', ''),
#v > 2 and v or string.format(
demo('%s|Category:%s|%s', '%s|%s%s'),
#v[1] < 2 and attention or v[1],
#v[1] < 2 and attention or v[1],
#v[1] < 2 and table.concat(v) or v[2]
)
)
if not p.cats.inv[p.key] then
table.insert(p.cats, p.key)
p.cats.inv[p.key] = #p.cats
end
end
return cat.done and table.concat(p.cats, demo(' | ', '')) or ''
end
function ombox(v)--{text, {subcat, page}}
if v.ifNot then
return ''
end
p.ombox = p.ombox or require('Module:Message box').ombox
category{v[2]}
return p.ombox{
type = 'content',
text = v[1]
}
end
function catStub(page, pageDoc)--p.templatepage passes page; p.main does not
stubCats = {
missing = {},
S = {},
v = {}
}
for k, _ in pairs(args) do
table.insert(stubCats, string.match(k, '^category(%d*)$'))
end
table.sort(stubCats)
local cat, tsort
for k, v in ipairs(stubCats) do
cat = args['category' .. v]
tsort = args['tempsort' .. v]
if v ~= '' or tsort ~= 'no' then
table.insert(stubCats.v, {cat, page and (tsort or ('*' .. page.text))})
end
if page then
if not mw.title.new('Category:' .. cat).exists then
table.insert(stubCats.missing, 'category' .. v)
end
table.insert(stubCats.v,
v == '' and pageDoc.exists and
'Stub message templates with documentation subpages'
or not string.match(cat, ' stubs$') and {'S', page.text}
or nil
)
end
end
if #stubCats.missing > 0 then
stubCats.missed = {}
for k, meowFeedMe in ipairs(stubCats.missing) do
table.insert(stubCats.missed, '<code>|' .. meowFeedMe .. '</code>')
end
end
category(stubCats.v)
return stubCats.missed and ombox{
--Changed, original msg: One or more of the stub categories defined in this template do not seem to exist! Please double-check the parameters {{para|category}}, {{para|category1}} and {{para|category2}}.
'The following parameter' .. (#stubCats.missing == 1 and ' defines a stub category that does' or 's define stub categories that do') .. ' not exist: ' .. mw.text.listToText(stubCats.missed),
{'N', page.text}
} or ''
end
function population()
local wikitext, base = '', '* [[:Category:%s]] (population: (%s)\n'
if #stubCats == 0 then
return string.format(base, '{{{category}}}', 0)
end
for k, v in ipairs(stubCats) do
wikitext = wikitext .. string.format(base, args['category' .. v], mw.site.stats.pagesInCategory(args['category' .. v], 'all'))
end
return wikitext
end
function p.templatepage(frame, page)--flags bad stub templates and creates standard doc page
local tStubDoc = mw.title.new('Template:Stub documentation')
local pageDoc = mw.title.new(page.fullText .. '/doc')
page = page or mw.title.getCurrentTitle()
args = args or require('Module:Arguments').getArgs(frame, {
wrappers = WRAPPER_TEMPLATE
})
return category{
'Stub message templates',
'Exclude in print',
--Changed. Original Asbox does its first of 3 checks on params |category#= here.
--Rather than checking multiple times, all operations involving those params have been rolled into catStub()
(args.icon and
'Stub message templates using icon parameter'
or (args.image and
(mw.title.new('Media:' .. mw.text.split(args.image, '|')[1]).exists and
nil
or {'B', page.text}
)
or 'Stub message templates without images'
)
),
args.imagealt and {'I', page.text} or nil
}
.. ombox{
ifNot = args.category,
'The <code>|category</code> parameter is not set. Please add an appropriate stub category.',
{'C', page.text}
}
.. ombox{
ifNot = args.subject or args.article or args.qualifier,
'This stub template contains no description! At least one of the parameters <code>|subject</code>, <code>|article</code> or <code>|qualifier</code> must be defined.',
{'D', page.text}
}
.. catStub(page, pageDoc)
.. ((args.demo and args.demo ~= 'doc' and '') or (require('Module:Documentation').main{
content =
(page.text ~= 'Stub' and --This comparison performed in {{Asbox/stubtree}} before it invokes Module:Asbox stubtree
require('Module:Asbox stubtree').subtree{args = {pagename = page.text}}
or ''
)
.. '\n== About this template ==\nThis template is used to identify a '
.. string.format('%s stub%s.', args.subject or '', args.qualifier and (' ' .. args.qualifier) or '')
.. ' It uses {{[[Template:Asbox|asbox]]}}, which is a meta-template designed to ease the process of creating and maintaining stub templates.\n=== Usage ===\nTyping <code>{{'
.. (page.text == 'Stub' and
'stub'
or page.text
)
.. '}}</code> produces the message shown at the beginning, and adds the article to the following categor' .. (#stubCats > 1 and 'ies' or 'y') .. ':\n'
.. population()
.. (pageDoc.exists and --transclusion of /doc if it exists
frame:expandTemplate{title = pageDoc.text}
or ''
)
.. '\n== General information ==\n'--Generic documentation
.. frame:expandTemplate{title = tStubDoc.text} .. '\n\n'
,
['link box'] =
string.format(
'This documentation is automatically generated by [[Template:Asbox/templatepage]].<br>The general information is transcluded from [[Template:Stub documentation]]. <span style="font-size:smaller;font-style:normal;line-height:130%%">([%s edit] | [%s history])</span>',
tStubDoc:fullUrl('action=edit', 'relative'),
tStubDoc:fullUrl('action=history', 'relative')
)
.. (page.protectionLevels.edit[1] == 'sysop' and
" <br/>This template is [[WP:PROTECT|fully protected]] and any [[WP:CAT|categories]] should be added to the template's ["
.. pageDoc:fullURL('action=edit&preload=Template:Category_interwiki/preload', 'relative')
.. '| /doc] subpage, which is not protected.'
or ''
)
}
.. (args.demo ~= 'doc' and category{done = true} or '')))
end
function p.main(frame, page)
page = page or mw.title.getCurrentTitle()
args = args or require('Module:Arguments').getArgs(frame, {
wrappers = WRAPPER_TEMPLATE
})
local output = mw.html.create()
local asbox = output:tag'table'
:addClass('metadata plainlinks stub')
:css('background', 'transparent')
:attr('role', 'presentation')
if args.icon or args.image then
asbox:tag('td'):wikitext(args.icon or string.format(
'[[File:%s|%spx|alt=%s]]',
args.image,
args.pix or '40x30',
args.imagealt or 'Stub icon'
))
end
local buffer = asbox:tag('td')
buffer:tag('i'):wikitext(string.format(
'This %s %s %s is a [[Wikipedia:stub|stub]]. You can help Wikipedia by [%s expanding it].',
args.subject or '',
args.article or 'article',
args.qualifier or '',
page:fullUrl('action=edit', 'relative')
))
if args.name then
buffer:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 'yes',
style = 'position: absolute; right: 15px; display: none;'
})
end
if args.note then
buffer:tag('br')
buffer:tag('span')
:css('font-style', 'normal')
:css('font-size', 'smaller')
:wikitext(args.note)
end
if page.namespace == 0 then -- Main namespace
category'All stub articles'
catStub()
elseif args.demo then
--Preview categories; not in original template, but shouldn't hurt
p.templatepage(frame, page)
table.sort(p.cats)
output:wikitext(string.format('<small>Demo categories: %s</small>', category{done = true}))
else
local normalizedName = mw.title.new(args.name or '')
if normalizedName and normalizedName.fullText == page.fullText then
output:wikitext(p.templatepage(frame, page))
elseif not page.isSubpage and page.namespace == 10 then -- Template namespace and not a subpage
category{{args.name and 'E' or 'W', page.text}}
end
end
return output
:wikitext(
category{done = not args.demo},
args.demo == 'doc' and p.templatepage(frame, page) or nil
)
end
return p