Module:Asbox: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
meta>Codehydro No edit summary |
meta>Codehydro mNo edit summary |
||
Line 2: | Line 2: | ||
local WRAPPER_TEMPLATE = 'Template:Asbox' | local WRAPPER_TEMPLATE = 'Template:Asbox' | ||
local args, msgBox | local args, msgBox | ||
local | local stubCats | ||
Line 26: | Line 26: | ||
end | end | ||
function | function catStub(page, tempsort) | ||
local wikitext, missingCats, hasDoc = '', 0 | local wikitext, missingCats, hasDoc = '', 0 | ||
stubCats = {} | |||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
if type(k) == 'string' then | if type(k) == 'string' then | ||
table.insert( | table.insert(stubCats, string.match(k, '^category(%d*)$')) | ||
end | end | ||
end | end | ||
table.sort(stubCats) | |||
table.sort( | |||
local key | local key | ||
for k, v in ipairs( | for k, v in ipairs(stubCats) do | ||
key = { | key = { | ||
cat = 'category' .. v, | cat = 'category' .. v, | ||
Line 45: | Line 44: | ||
'' | '' | ||
or category{args[key.cat] | or category{args[key.cat] | ||
.. (page and--True if | .. (page and--True if catStub called by p.templatepage | ||
('|' .. ( | ('|' .. ( | ||
args[key.ts] | args[key.ts] | ||
Line 63: | Line 62: | ||
hasDoc = mw.getCurrentFrame():callParserFunction{ | hasDoc = mw.getCurrentFrame():callParserFunction{ | ||
name = '#ifexist', | name = '#ifexist', | ||
args = {page. | args = {page.fullText .. '/doc', true, false} | ||
} | } | ||
wikitext = wikitext .. (hasDoc and '[[Category:Stub message templates with documentation subpages]]' or '') | wikitext = wikitext .. (hasDoc and '[[Category:Stub message templates with documentation subpages]]' or '') | ||
Line 70: | Line 69: | ||
wikitext = wikitext .. category('S', page.text) | wikitext = wikitext .. category('S', page.text) | ||
end | end | ||
stubCats[k] = {args[key.cat], key.cat} -- replace with values to be used in population() | |||
end | end | ||
end | end | ||
if missingCats > 0 then | if missingCats > 0 then | ||
Line 84: | Line 83: | ||
function population() | function population() | ||
local wikitext, base = '', '* [[:Category:%s]] (population: (%s)\n' | local wikitext, base = '', '* [[:Category:%s]] (population: (%s)\n' | ||
for k, v in | for k, v in ipairs(stubCats) do | ||
wikitext = wikitext .. string.format(base, v[1], mw.site.stats.pagesInCategory(v[1], 'all')) | wikitext = wikitext .. string.format(base, v[1], mw.site.stats.pagesInCategory(v[1], 'all')) | ||
end | end | ||
Line 102: | Line 101: | ||
'Exclude in print' | 'Exclude in print' | ||
} | } | ||
.. | .. catStub(page, args.tempsort) | ||
.. ((args.icon and | .. ((args.icon and | ||
'[[Category:Stub message templates using icon parameter]]') | '[[Category:Stub message templates using icon parameter]]') | ||
Line 137: | Line 136: | ||
) | ) | ||
) | ) | ||
-- Note: Original Asbox/templatepage checks categories for valid names and whether they exist here. | --Note: Original Asbox/templatepage checks categories for valid names and whether they exist here. | ||
-- Module has already done so | --Module has already done so when it called of catStub, avoiding a repeat checking if category# args are set. | ||
.. require('Module:Documentation').main{ | .. require('Module:Documentation').main{ | ||
content = ( | content = ( | ||
Line 152: | Line 151: | ||
or page.text | or page.text | ||
) | ) | ||
.. '}}</code> produces the message shown at the beginning, and adds the article to the following categor' .. (# | .. '}}</code> produces the message shown at the beginning, and adds the article to the following categor' .. (#stubCats > 1 and 'ies' or 'y') .. ':\n' | ||
.. population() | .. population() | ||
.. '<!--\n\n*** Transclusion of /doc if it exists ***\n-->\n' | .. '<!--\n\n*** Transclusion of /doc if it exists ***\n-->\n' | ||
.. (mw.title.new(page. | .. (mw.title.new(page.fullText .. '/doc').exists and | ||
frame:expandTemplate{title = page. | frame:expandTemplate{title = page.text .. '/doc'} | ||
or '' | or '' | ||
) | ) | ||
Line 162: | Line 161: | ||
.. frame:expandTemplate{title = 'Stub documentation'} .. '\n\n' | .. frame:expandTemplate{title = 'Stub documentation'} .. '\n\n' | ||
), | ), | ||
['link box'] = frame:preprocess'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%;">([{{fullurl:Template:Stub documentation|action=edit}} edit] | [{{fullurl:Template:Stub documentation|action=history}} history])</span>{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop\n |{{sp}}<br/>This template is | ['link box'] = frame:preprocess'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%;">([{{fullurl:Template:Stub documentation|action=edit}} edit] | [{{fullurl:Template:Stub documentation|action=history}} history])</span>{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop\n |{{sp}}<br/>This template is [WP:PROTECT|fully protected]] and any [[WP:CAT|categories]] should be added to the template\'s [{{fullurl:{{FULLPAGENAME}}/doc|action=edit&preload=Template:Category_interwiki/preload}} /doc] subpage, which is not protected.\n}}\n\n}}' | ||
} | } | ||
end | end | ||
Line 209: | Line 208: | ||
output | output | ||
:wikitext'[[Category:All stub articles]]' | :wikitext'[[Category:All stub articles]]' | ||
:wikitext( | :wikitext(catStub()) | ||
elseif args.demo then | elseif args.demo then | ||
--not in original Template:Asbox, but shouldn't hurt | --not in original Template:Asbox, but shouldn't hurt | ||
output:wikitext('<small>Demo categories: ' .. string.gsub( | output:wikitext('<small>Demo categories: ' .. string.gsub(catStub(), '%[%[', ' | %[%[:') .. '</small>') | ||
elseif page. | elseif page.fullText ~= WRAPPER_TEMPLATE then | ||
--mw.title.new('') is always nil. This is intentional and matches the results of original {{FULLPAGENAME:{{{name|}}}}} | --mw.title.new('') is always nil. This is intentional and matches the results of original {{FULLPAGENAME:{{{name|}}}}} | ||
if mw.title.new(args.name or '') == page then | if mw.title.new(args.name or '') == page then |
Revision as of 21:32, 4 January 2015
Documentation for this module may be created at Module:Asbox/doc
local p = {}
local WRAPPER_TEMPLATE = 'Template:Asbox'
local args, msgBox
local stubCats
function category(cat, name)
local result = ''
if type(cat) == type'' then
cat = {cat}
end
for _, v in ipairs(cat) do
v = (#v > 1 and '' or 'Stub message templates needing attention|') .. v
result = result .. ('[[Category:' .. v .. (name or '') .. ']]')
end
return result
end
function ombox(catSort, text, name)
msgBox = msgBox or require('Module:Message box')
return msgBox.ombox{
type = 'content',
text = mw.getCurrentFrame():preprocess(text)
}
.. category(catSort, name)
end
function catStub(page, tempsort)
local wikitext, missingCats, hasDoc = '', 0
stubCats = {}
for k, v in pairs(args) do
if type(k) == 'string' then
table.insert(stubCats, string.match(k, '^category(%d*)$'))
end
end
table.sort(stubCats)
local key
for k, v in ipairs(stubCats) do
key = {
cat = 'category' .. v,
ts = 'tempsort' .. v
}
wikitext = wikitext .. (v == '' and args[key.ts] == 'no' and
''
or category{args[key.cat]
.. (page and--True if catStub called by p.templatepage
('|' .. (
args[key.ts]
or ('*' .. page.text)
))
or ''
)
}
)
if page then
missingCats = missingCats + mw.getCurrentFrame():callParserFunction{
name = '#ifexist',
args = {'Category:' .. args[key.cat], 0, 1}
}
hasDoc = false
if v == '' then
hasDoc = mw.getCurrentFrame():callParserFunction{
name = '#ifexist',
args = {page.fullText .. '/doc', true, false}
}
wikitext = wikitext .. (hasDoc and '[[Category:Stub message templates with documentation subpages]]' or '')
end
if not hasDoc and not string.match(args[key.cat], ' stubs$') then
wikitext = wikitext .. category('S', page.text)
end
stubCats[k] = {args[key.cat], key.cat} -- replace with values to be used in population()
end
end
if missingCats > 0 then
wikitext = wikitext .. ombox(
'N',
'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}}.'
)
end
return wikitext
end
function population()
local wikitext, base = '', '* [[:Category:%s]] (population: (%s)\n'
for k, v in ipairs(stubCats) do
wikitext = wikitext .. string.format(base, v[1], mw.site.stats.pagesInCategory(v[1], 'all'))
end
if wikitext == '' then
wikitext = string.format(base, '{{{category}}}', 0)
end
return wikitext
end
function p.templatepage(frame, page)
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'
}
.. catStub(page, args.tempsort)
.. ((args.icon and
'[[Category:Stub message templates using icon parameter]]')
or (args.image and
frame:callParserFunction{
name = '#ifexist',
args = {
'Media:' .. mw.text.split(args.image, '|')[1],
'',
category('B', page.text)
}
}
or '[[Category:Stub message templates without images]]'
)
)
.. (args.imagealt and
category('I', page.text)
or ''
)
.. (args.category and
''
or ombox(
'C',
'The {{para|category}} parameter is not set. Please add an appropriate stub category.',
page.text
)
)
.. ((args.subject or args.article or args.qualifier) and
''
or ombox(
'D',
'This stub template contains no description! At least one of the parameters {{para|subject}}, {{para|article}} or {{para|qualifier}} must be defined.',
page.text
)
)
--Note: Original Asbox/templatepage checks categories for valid names and whether they exist here.
--Module has already done so when it called of catStub, avoiding a repeat checking if category# args are set.
.. require('Module:Documentation').main{
content = (
'\n' .. (page.text ~= 'Stub' and
require('Module:Asbox stubtree').subtree{args = {pagename = page.text}}
or ''
)
.. '\n\n== About this template ==\n\nThis template is used to identify a '
.. string.format('%sstub%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\n=== Usage ===\n\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()
.. '<!--\n\n*** Transclusion of /doc if it exists ***\n-->\n'
.. (mw.title.new(page.fullText .. '/doc').exists and
frame:expandTemplate{title = page.text .. '/doc'}
or ''
)
.. '<!--\n\n*** Generic documentation ***\n-->\n== General information ==\n\n'
.. frame:expandTemplate{title = 'Stub documentation'} .. '\n\n'
),
['link box'] = frame:preprocess'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%;">([{{fullurl:Template:Stub documentation|action=edit}} edit] | [{{fullurl:Template:Stub documentation|action=history}} history])</span>{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop\n |{{sp}}<br/>This template is [WP:PROTECT|fully protected]] and any [[WP:CAT|categories]] should be added to the template\'s [{{fullurl:{{FULLPAGENAME}}/doc|action=edit&preload=Template:Category_interwiki/preload}} /doc] subpage, which is not protected.\n}}\n\n}}'
}
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
output
:wikitext'[[Category:All stub articles]]'
:wikitext(catStub())
elseif args.demo then
--not in original Template:Asbox, but shouldn't hurt
output:wikitext('<small>Demo categories: ' .. string.gsub(catStub(), '%[%[', ' | %[%[:') .. '</small>')
elseif page.fullText ~= WRAPPER_TEMPLATE then
--mw.title.new('') is always nil. This is intentional and matches the results of original {{FULLPAGENAME:{{{name|}}}}}
if mw.title.new(args.name or '') == page then
output:wikitext(p.templatepage(frame, page))
elseif not page.isSubpage and page.namespace == 10 then -- Template namespace and not a subpage
output:wikitext(string.format(
'[[Category:Stub message templates needing attention|%s]]',
(args.name and 'E' or 'W') .. page.text
))
end
end
return output
end
return p