Module:Asbox: Difference between revisions

From Zoophilia Wiki
Jump to navigationJump to search
meta>Codehydro
m fix preview categories
meta>Codehydro
m streamlining code
Line 4: Line 4:
}
}
local WRAPPER_TEMPLATE = 'Template:Asbox'
local WRAPPER_TEMPLATE = 'Template:Asbox'
local attention = 'Stub message templates needing attention'
local args, msgBox, stubCats
local args, msgBox, stubCats


Line 11: Line 12:


function category(cat)--{{'cat', 'sort'}, 'cat2'} or 'cat'
function category(cat)--{{'cat', 'sort'}, 'cat2'} or 'cat'
local attention = 'Stub message templates needing attention'
for _, v in ipairs(type(cat) == type'' and {cat} or cat) do
for _, v in ipairs(type(cat) == type'' and {cat} or cat) do
table.insert(p.cats, '[[' .. demo(':', '') .. 'Category:' .. (#v > 2 and
table.insert(p.cats, string.format(
v
'[[%sCategory:%s]]',
or (not v[2] and v[1])
demo(':', ''),
or ((#v[1] > 1 and v[1] or attention) .. '|' .. demo('Category:' .. (#v[1] > 1 and v[1] or attention) .. mw.text.nowiki('|'), '') .. (#v[1] == 1 and v[1] or '') .. v[2])
#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]
)
))
end
end
return cat.done and (demo('Demo categories: ', '') .. table.concat(p.cats, demo(' | ', ''))) or ''
return cat.done and table.concat(p.cats, demo(' | ', '')) or ''
end
end


Line 37: Line 41:
function catStub(page, pageDoc)--p.templatepage passes page; p.main does not
function catStub(page, pageDoc)--p.templatepage passes page; p.main does not
stubCats = {
stubCats = {
hasDoc = nil,
missing = {},
missing = {},
text = '',
text = '',
Line 57: Line 60:
table.insert(stubCats.missing, 'category' .. v)
table.insert(stubCats.missing, 'category' .. v)
end
end
hasDoc = v == '' and pageDoc.exists or false
stubCats.text = stubCats.text
stubCats.text = stubCats.text
.. (hasDoc and
.. (v == '' and pageDoc.exists and
category'Stub message templates with documentation subpages'
category'Stub message templates with documentation subpages'
or (not string.match(cat, ' stubs$') and table.insert(stubCats.v, {'S', page.text}))
or (not string.match(cat, ' stubs$') and table.insert(stubCats.v, {'S', page.text}))
Line 67: Line 69:
end
end
if #stubCats.missing > 0 then
if #stubCats.missing > 0 then
stubCats.mtext = ''
stubCats.missed = {}
for k, meowFeedMe in ipairs(stubCats.missing) do
for k, meowFeedMe in ipairs(stubCats.missing) do
stubCats.mtext = stubCats.mtext
table.insert(stubCats.missed, '<code class="nowrap">|' .. meowFeedMe .. '</code>')
.. (k == #stubCats.missing and #stubCats.missing > 1 and 'and ' or '')
.. '<code class="nowrap">|' .. meowFeedMe .. '</code>'
.. (k == #stubCats.missing and '.' or (#stubCats.missing < 3 and ' ' or ', '))
end
end
stubCats.text = stubCats.text .. ombox{
stubCats.text = stubCats.text .. ombox{
--Changed from original: 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}}.
--Changed, original: 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: ' .. stubCats.mtext,
'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}
{'N', page.text}
}
}
Line 106: Line 105:
'Exclude in print'
'Exclude in print'
}
}
--Changed from original: Original Asbox/templatepage checks categories for valid names and whether they exist here.
--Changed. Original Asbox does its first of 3 checks on params |category#= here.
--This has been moved to the end of this function
--Rather than checking multiple times, all operations involving those params have been rolled into catStub()
.. (args.icon and
.. (args.icon and
category'Stub message templates using icon parameter'
category'Stub message templates using icon parameter'
Line 134: Line 133:
.. catStub(page, pageDoc)
.. catStub(page, pageDoc)
.. ((args.demo and args.demo ~= 'doc' and '') or (require('Module:Documentation').main{
.. ((args.demo and args.demo ~= 'doc' and '') or (require('Module:Documentation').main{
content = (
content =
(page.text ~= 'Stub' and --This comparison performed in {{Asbox/stubtree}} before it invokes Module:Asbox stubtree
(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}}
require('Module:Asbox stubtree').subtree{args = {pagename = page.text}}
Line 154: Line 153:
.. '\n== General information ==\n'--Generic documentation
.. '\n== General information ==\n'--Generic documentation
.. frame:expandTemplate{title = tStubDoc.text} .. '\n\n'
.. frame:expandTemplate{title = tStubDoc.text} .. '\n\n'
),
,
['link box'] = (
['link box'] =  
'This documentation is automatically generated by [[Template:Asbox/templatepage]]. <br/>The general information is transcluded from [[Template:Stub documentation]]. '
string.format(
.. tostring(mw.html.create'span'
'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>',
:cssText('font-size:smaller;font-style:normal;line-height:130%')
tStubDoc:fullUrl('action=edit', 'relative'),
:wikitext(string.format(
tStubDoc:fullUrl('action=history', 'relative')
'([%s edit] | [%s history])',
tStubDoc:fullUrl('action=edit', 'relative'),
tStubDoc:fullUrl('action=history', 'relative')
))
)
)
.. ((page.protectionLevels.edit[1] == 'sysop' and
.. (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 ["
" <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')
.. pageDoc:fullURL('action=edit&preload=Template:Category_interwiki/preload', 'relative')
.. '| /doc] subpage, which is not protected.'
.. '| /doc] subpage, which is not protected.'
)
or ''
or ''
)
)
)
}
}
.. (args.demo ~= 'doc' and category{done = true} or '')))
.. (args.demo ~= 'doc' and category{done = true} or '')))
Line 224: Line 217:
p.templatepage(frame, page)
p.templatepage(frame, page)
table.sort(p.cats)
table.sort(p.cats)
output:wikitext(string.format('<small>Demo categories: %s</small>', category{done = true}))
else
else
local normalizedName = mw.title.new(args.name or '')
local normalizedName = mw.title.new(args.name or '')
Line 231: Line 225:
category{{args.name and 'E' or 'W', page.text}}
category{{args.name and 'E' or 'W', page.text}}
end
end
end
output:wikitext(string.format(args.demo and '<small>%s</small>' or '%s', category{done = true}))
if args.demo == 'doc' then
output:wikitext(p.templatepage(frame, page))
end
end
return output
return output
:wikitext(
category{done = not args.demo},
args.demo == 'doc' and p.templatepage(frame, page) or nil
)
end
end


return p
return p

Revision as of 22:05, 5 January 2015

Documentation for this module may be created at Module:Asbox/doc

local p = {
	flags = {},
	cats = {}
}
local WRAPPER_TEMPLATE = 'Template:Asbox'
local attention = 'Stub message templates needing attention'
local args, msgBox, stubCats

function demo(text, alt)
	return args.demo and text or alt
end

function category(cat)--{{'cat', 'sort'}, 'cat2'} or 'cat'
	for _, v in ipairs(type(cat) == type'' and {cat} or cat) do
		table.insert(p.cats, 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]
			)
		))
	end
	return cat.done and table.concat(p.cats, demo(' | ', '')) or ''
end

function ombox(v)--{text, {subcat, page}}
	if v.ifNot then
		return ''
	end
	msgBox = msgBox or require('Module:Message box')
	return msgBox.ombox{
		type = 'content',
		text = v[1]
	}
	.. category{v[2]}
end

function catStub(page, pageDoc)--p.templatepage passes page; p.main does not
	stubCats = {
		missing = {},
		text = '',
		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
			stubCats.text = stubCats.text
				.. (v == '' and pageDoc.exists and
					category'Stub message templates with documentation subpages'
					or (not string.match(cat, ' stubs$') and table.insert(stubCats.v, {'S', page.text}))
					or ''
				)
		end
	end
	if #stubCats.missing > 0 then
		stubCats.missed = {}
		for k, meowFeedMe in ipairs(stubCats.missing) do
			table.insert(stubCats.missed, '<code class="nowrap">|' .. meowFeedMe .. '</code>')
		end
		stubCats.text = stubCats.text .. ombox{
			--Changed, original: 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}
		}
	end
	category(stubCats.v)
	return stubCats.text 
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
		category'Stub message templates using icon parameter'
		or (args.image and 
			(mw.title.new('Media:' .. mw.text.split(args.image, '|')[1]).exists and
				''
				or category{{'B', page.text}}
			)
			or category'Stub message templates without images'
		)
	)
	.. (args.imagealt and 
		category{{'I', page.text}}
		or ''
	)
	.. ombox{
		ifNot = args.category,
		'The <code class="nowrap">|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 class="nowrap">|subject</code>, <code class="nowrap">|article</code> or <code class="nowrap">|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