Module:Article stub box: Difference between revisions

Content deleted Content added
repatch with patched patch; amazing how a single misplaced line can break everything :\
Escape `{{` in output to avoid a Parsoid bug. See Wikipedia:AutoWikiBrowser/Tasks#c-Anomie-20250302162200-Anomie-20250302155000 for details.
 
(16 intermediate revisions by 11 users not shown)
Line 11:
Both templates had significant contributions from numerous others listed in the revision history tab of their respective pages.
--]]
local WRAPPER_TEMPLATE, args = 'Template:AsboxArticle stub box'
-- TODO: update this instance of Asbox to Article stub box eventually
local args, stubCats
local templatestyles = 'Module:Article stub box/styles.css'
local p = {}
local p, Buffer, stubCats = require('Module:Buffer'){
--Prevents dupli-cats... get it? Maybe not?
--initializes variables required by both p.main and p.templatepage
p. cats = setmetatable({}, {__newindex = function(t, i, v)
function p:init(frame, page)
if not rawget(t, i) then
args = args or require('Module:Arguments').getArgs(frame, {
rawset(t, i, v)
wrappers = WRAPPER_TEMPLATE
table.insert(t, i)
})
end
page = page or mw.title.getCurrentTitle()
end}),
--Ensures demo parameter will never affect category() output for articles
--initializes variables required by both p.main and p.templatepage
self.demo = self.demo or page.namespace ~= 0 and args.demo or nil
returninit args= function(self, frame, page)
args, page = args or require('Module:Arguments').getArgs(frame, {
end
wrappers = WRAPPER_TEMPLATE
page = }), page or mw.title.getCurrentTitle()
--Ensures demo parameter will never affect category() output for articles
self.demo = self.demo or page.namespace ~= 0 and args.demo or nil
return args, page
end
}, require('Module:NavbarBuffer'._navbar{)
 
--Prevents dupli-cats... get it? Maybe not?
p.cats = setmetatable({}, {__newindex = function(t, i, v)
if not rawget(t, i) then
rawset(t, i, v)
table.insert(t, i)
end
end})
--[[
Formats category links. Stores them until called with cat.done=true
Line 38:
or a table of strings and/or tables containing parts. (See below)
]]
local attention, linkcatTag, catKey = Buffer'Stub message templates needing attention', '[[Category:%s]]', '%s|%s%s'
local function category(cat)
for _, v in ipairs((typetostring(cat) == type''cat or cat.t) and {cat} or cat) do
local attention, link = 'Stub message templates needing attention'
for _, v in ipairs((type(cat) == type'' or cat.t) and {cat} or cat) do
--[[
If v is a table:
Line 49:
]]
if v and v ~= true then--reject v = nil, false, or true
link = ('p.cats[[%sCategory:%s]]')catTag:format(tostring(v) == v and
)v
p.demo and ':' or '',
p.demoor (v[1] and Buffer(v[1]) or attention) or :_in(v.k):_(v.t):_str(2, ornil, nil, '|',)
type(v) == type'' and
v)] = true
or (p.demo and '%s|Category:%s|%s' or '%s|%s%s'):format(
v[1] or attention,
p.demo and (v[1] or attention) or v.k or '',
p.demo and ((v.k or '') .. v.t) or v.t
)
)
p.cats[link] = true
end
end
Line 86 ⟶ 79:
local function catStub(page, pageDoc)
stubCats = {missing = {}, v = {}}
-- zwj and zwnj have semantical use in other other wikis, don't remove them
local zwj = '\226\128\141' -- U+200D, E2 80 8D
local zwnj = '\226\128\140' -- U+200C, E2 80 8C
local disallowedUnicodeChars = '[^%w%p%s' .. zwj .. zwnj .. ']' -- for i18n we make this a separate string
local code
for k, _ in pairs(args) do
Line 94 ⟶ 91:
for k, v in ipairs(stubCats) do
--Get category names and, if called by p.templatepage, the optional sort key
local tsort, cat = args['tempsort' .. v], mw.ustring.gsub(args['category' .. v], '[^%w%p%s]'disallowedUnicodeChars, '')--remove all hidden unicode chars
--Do not place template in main category if |tempsort = 'no';. For exampleHowever, ifDO stubplace articles of that template merelyin the main category.
table.insert(stubCats.v, page and
--adds |qualifier= to a meta stub and |category#= to a sub-category of meta's main category
page and (--p.templatepage passes page; p.main does not, i.e. articles are categorized without sort keys.
if tonumber(v) or tsort ~= 'no' then
v=='' and tsort == 'no'--if true, inserts 'true' in table, which category() will reject
--p.templatepage passes page; p.main does not, i.e. articles are categorized without sort keys.
or tsort and {cat, k = ' ', t = tsort}
table.insert(stubCats.v, page and
(tsort and {cat, k = ' ', t = tsort} or {cat, k = ' *', t = page.text})--note space in front of sort key
or cat
)
end or cat
)
--Check category existance only if on the template page (i.e. stub documentation)
if page then
Line 172 ⟶ 169:
done = p.demo ~= 'doc',--Outputs categories if not doc demo
'Stub message templates',
'Exclude in print',
args.icon and
'Stub message templates using icon parameter'
Line 185 ⟶ 181:
require('Module:Documentation').main{
content = Buffer(page.text ~= 'Stub' and--This comparison performed in {{Asbox/stubtree}} before it invokes Module:Asbox stubtree
-- TODO: update this instance of Asbox to Article stub box eventually
require('Module:Asbox stubtree').subtree{args = {pagename = page.text}}
)
:_in'\n== About this template ==\nThis template is used to identify a':_(args.subject):_'stub':_(args.qualifier):_out' '--space
:_'. It uses {{[[Template:AsboxArticle stub box|asboxarticle stub box]]}}, which is a meta-template designed to ease the process of creating and maintaining stub templates.\n=== Usage ===\nTyping '
:_(mw.html.create'code'
:wikitext( mw.text.nowiki( '{{' ), page.text == 'Stub' and 'stub' or page.text, '}}')
)
:_' produces the message shown at the beginning, and adds the article to the following categor'
Line 202 ⟶ 199:
:_(frame:expandTemplate{title = tStubDoc.text})
:_'\n\n'(),
['link box'] = Buffer'This documentation is automatically generated by [[Module:AsboxArticle stub box]].'
:_in'The general information is transcluded from [[Template:Stub documentation]]. '
:_(mw.html.create'span'
Line 212 ⟶ 209:
)
:_out()
:_(page.protectionLevels.edit and page.protectionLevels.edit[1] == 'sysop' and
"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')
Line 223 ⟶ 220:
function p.main(frame, page)
args, page = p:init(frame, page)
local output = mw.html.create()'div'
:attr{role = 'note'}
:addClass'metadata plainlinks asbox stub'
:tag'table'
:addClass'metadata plainlinks stub'
:css{background = 'transparent'}
:attr{role = 'presentation'}
:tag'tr'
:addClass'noresize'
:node((args.icon or args.image) and
mw.html.create'td'
Line 238 ⟶ 236:
)
:tag'td'
:tag'ip'
:addClass'asbox-body'
:wikitext(
Buffer'This':_(args.subject):_(args.article or 'article'):_(args.qualifier)' ',--space
Line 246 ⟶ 245:
)
:done()
:node(args.namenote and
mw.html.create'span'()
require'Module:Navbar'._navbar{
args.name,:tag'p'
mini = :addClass'yesasbox-note',
:wikitext(args.note)
style = 'position: absolute; right: 15px; display: none;'
} :done()
)
:node(args.note and
mw.html.create'span'
:css{['font-style'] = 'normal', ['font-size'] = 'smaller'}
:tag'br':done()
:wikitext(args.note)
)
:allDone()
:node(args.notename and
require'Module:Navbar'._navbar{
args.name,
mini = 'yes',
}
)
--[[
Stub categories for templates include a sort key; (Otherwisethis ensures that all willstub betags indexedappear underat the letterbeginning 'T'of fortheir 'Template:[]respective stubs')categories.
Articles using the template do not need a sort key since they have unique names.
When p.demo equals 'doc', the demo stub categories will appear as those for a stub template.
Line 274 ⟶ 273:
--the template but not in the article. The elseif after namespace == 0 means demo cats will never show in article space.
p.demodoc = p.demo ~= 'art' and p.templatepage(frame, page)
output:wikitext = mw.html.create()
:node(output)
string.format('<small>Demo categories: %s</small>', category{done = true}),
:tag'small':wikitext(
p.demo == 'doc' and p.demodoc or nil
'Demo categories: ',
)
(category{done = true}:gsub('(%[%[)(Category:)([^|%]]-)(%|)', '%1%2%3|%2%3%4'):gsub('(%[%[)(Category:)', '%1:%2'))
:tag'br'):done()
:wikitext(p.demo == 'doc' and p.demodoc or nil)
else
--Checks for valid name; emulates original template's check using {{FULLPAGENAME:{{{name|}}}}}
local normalizedName = mw.title.new(args.name or '')
if normalizedName and normalizedName.fullText == page.fullText then
output = mw.html.create():node(output):wikitext(p.templatepage(frame, page))
elseif not page.isSubpage and page.namespace == 10 then-- Template namespace and not a subpage
category{{k = args.name and 'E' or 'W', t = page.text}}
end
end
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(output:wikitext(not p.demo and category{done = true} or nil))
return output:wikitext(category{done = not p.demo})
end