Module:Asbox: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
meta>Codehydro (linkbox is not part of output) |
meta>Codehydro (finished translation of documentation|contents= into Lua... now to work on |link box=) |
||
Line 2: | Line 2: | ||
local WRAPPER_TEMPLATE = 'Template:Asbox' | local WRAPPER_TEMPLATE = 'Template:Asbox' | ||
local args, msgBox | local args, msgBox | ||
local stubCatNum = {} | |||
Line 29: | Line 30: | ||
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(stubCatNum, string.match(k, '^category(%d*)$')) | |||
--[[if stubCatNum[matchNum] then | |||
wikitext = wikitext .. ( | wikitext = wikitext .. ( | ||
tempsort == 'no' and p.catNum == '' and '' | tempsort == 'no' and p.catNum == '' and '' | ||
or (p.catNum and | or (p.catNum and | ||
category{v .. (page and -- | category{v .. (page and -- | ||
('|' .. (args['tempsort' .. p.catNum] | ('|' .. (args['tempsort' .. p.catNum] | ||
or ('*' .. page.text) | or ('*' .. page.text) | ||
Line 41: | Line 43: | ||
) | ) | ||
or '' | or '' | ||
) | --]] | ||
end | |||
end | |||
--if page then | |||
table.sort(stubCatNum) | |||
local key | |||
for k, v in ipairs(stubCatNum) 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 stubCats 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', | name = '#ifexist', | ||
args = {' | args = {page.prefixedText .. '/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 | end | ||
end | end | ||
stubCatNum[k] = {args[key.cat], key.cat} -- replace with values used in population() | |||
end | end | ||
if missingCats > 0 then | if missingCats > 0 then | ||
Line 66: | Line 91: | ||
'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}}.' | '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 stubCatNum 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 | end | ||
return wikitext | return wikitext | ||
Line 114: | Line 150: | ||
) | ) | ||
) | ) | ||
-- Note: Original Asbox/templatepage checks for valid | -- Note: Original Asbox/templatepage checks categories for valid names and whether they exist here. | ||
-- Module has already done | -- Module has already done so at the first call of stubCats, avoiding a repeat checking if category# args are set. | ||
.. require('Module:Documentation').main{ | .. require('Module:Documentation').main{ | ||
content = | content = ( | ||
'\n' .. require('Module:Asbox stubtree').subtree{ | |||
pagename = page.text | |||
} | |||
.. '\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' .. (#stubCatNum > 1 and 'ies' or 'y') .. ':\n' | |||
.. population() | |||
.. '<!--\n\n*** Transclusion of /doc if it exists ***\n-->\n' | |||
.. (mw.title.new(page.basePageTitle .. '/doc').exists and | |||
frame:expandTemplate{title = page.basePageTitle .. '/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}}' | ['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}}' | ||
} | } | ||
Line 166: | Line 222: | ||
:wikitext'[[Category:All stub articles]]' | :wikitext'[[Category:All stub articles]]' | ||
:wikitext(stubCats()) | :wikitext(stubCats()) | ||
elseif | elseif args.demo then | ||
--not in original Template:Asbox, but shouldn't hurt | |||
output:wikitext('<small>Demo categories: ' .. string.gsub(stubCats(), '%[%[', ' | %[%[:') .. '</small>') | |||
elseif page.basePageTitle ~= 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 20:15, 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 stubCatNum = {} 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 stubCats(page, tempsort) local wikitext, missingCats, hasDoc = '', 0 for k, v in pairs(args) do if type(k) == 'string' then table.insert(stubCatNum, string.match(k, '^category(%d*)$')) --[[if stubCatNum[matchNum] then wikitext = wikitext .. ( tempsort == 'no' and p.catNum == '' and '' or (p.catNum and category{v .. (page and -- ('|' .. (args['tempsort' .. p.catNum] or ('*' .. page.text) )) or '' )} ) or '' --]] end end --if page then table.sort(stubCatNum) local key for k, v in ipairs(stubCatNum) 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 stubCats 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.prefixedText .. '/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 end stubCatNum[k] = {args[key.cat], key.cat} -- replace with values used in population() 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 stubCatNum 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' } .. stubCats(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 at the first call of stubCats, avoiding a repeat checking if category# args are set. .. require('Module:Documentation').main{ content = ( '\n' .. require('Module:Asbox stubtree').subtree{ pagename = page.text } .. '\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' .. (#stubCatNum > 1 and 'ies' or 'y') .. ':\n' .. population() .. '<!--\n\n*** Transclusion of /doc if it exists ***\n-->\n' .. (mw.title.new(page.basePageTitle .. '/doc').exists and frame:expandTemplate{title = page.basePageTitle .. '/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(stubCats()) elseif args.demo then --not in original Template:Asbox, but shouldn't hurt output:wikitext('<small>Demo categories: ' .. string.gsub(stubCats(), '%[%[', ' | %[%[:') .. '</small>') elseif page.basePageTitle ~= 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