<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikimd.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ABanner_shell</id>
	<title>Module:Banner shell - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wikimd.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ABanner_shell"/>
	<link rel="alternate" type="text/html" href="https://wikimd.org/index.php?title=Module:Banner_shell&amp;action=history"/>
	<updated>2026-05-08T09:08:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wikimd.org/index.php?title=Module:Banner_shell&amp;diff=5910693&amp;oldid=prev</id>
		<title>Prab: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wikimd.org/index.php?title=Module:Banner_shell&amp;diff=5910693&amp;oldid=prev"/>
		<updated>2024-07-08T13:15:44Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:15, 8 July 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Prab</name></author>
	</entry>
	<entry>
		<id>https://wikimd.org/index.php?title=Module:Banner_shell&amp;diff=5910692&amp;oldid=prev</id>
		<title>en&gt;MSGJ: update location of level 3 articles</title>
		<link rel="alternate" type="text/html" href="https://wikimd.org/index.php?title=Module:Banner_shell&amp;diff=5910692&amp;oldid=prev"/>
		<updated>2024-06-19T08:25:06Z</updated>

		<summary type="html">&lt;p&gt;update location of level 3 articles&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local shell = function(frame, header, content, collapsed, class)&lt;br /&gt;
	local styles = frame:extensionTag(&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = &amp;#039;Module:Message box/tmbox.css&amp;#039;})&lt;br /&gt;
		.. frame:extensionTag(&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = &amp;#039;Module:Banner shell/styles.css&amp;#039;})&lt;br /&gt;
	local content_row&lt;br /&gt;
	if content then&lt;br /&gt;
		content_row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;banner-shell-inner&amp;#039;):addClass(&amp;#039;outercollapse&amp;#039;)&lt;br /&gt;
			:wikitext(content)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
	local holder = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;role&amp;#039;, &amp;#039;presentation&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;tmbox&amp;#039;):addClass(&amp;#039;tmbox-notice&amp;#039;):addClass(&amp;#039;banner-shell&amp;#039;)&lt;br /&gt;
		:addClass(class) -- allow additional class to be specified&lt;br /&gt;
		:addClass(content and &amp;#039;mw-collapsible&amp;#039; or nil)&lt;br /&gt;
		:addClass(collapsed and &amp;#039;mw-collapsed&amp;#039; or nil)&lt;br /&gt;
		:node(header)&lt;br /&gt;
		:node(content_row)&lt;br /&gt;
	return styles .. tostring(holder)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.banner_holder = function(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {wrappers = {&amp;#039;Template:Banner holder&amp;#039;}})&lt;br /&gt;
	local image = &amp;#039;[[File:&amp;#039; .. (args.image or &amp;#039;NewFavicon icon.svg&amp;#039;)&lt;br /&gt;
		.. &amp;#039;|&amp;#039; .. (args.size or &amp;#039;24&amp;#039;) .. &amp;#039;px&amp;#039;&lt;br /&gt;
		.. &amp;#039;|link=&amp;#039; .. (args.image_link or &amp;#039;&amp;#039;)&lt;br /&gt;
		.. &amp;#039;|alt=&amp;#039; .. (args.alt or &amp;#039;&amp;#039;) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	local image_cell = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		:wikitext(image)&lt;br /&gt;
	local text_cell = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;mbox-text&amp;#039;):addClass(&amp;#039;banner-shell-header&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;collapseButton&amp;#039;):addClass(&amp;#039;nowrap&amp;#039;):css(&amp;#039;float&amp;#039;, &amp;#039;left&amp;#039;):wikitext(string.rep(&amp;#039;&amp;amp;nbsp;&amp;#039;, 10)):done()&lt;br /&gt;
		:wikitext(args.text or &amp;#039;Other talk page banners&amp;#039;)&lt;br /&gt;
	local header = mw.html.create(&amp;#039;tr&amp;#039;):node(image_cell):node(text_cell)&lt;br /&gt;
	return shell(frame, header, args[1], yesno(args.collapsed))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local DuplicateBanners = function(text)&lt;br /&gt;
	local capture = &amp;#039;&amp;lt;span class=&amp;quot;wpb%-project&amp;quot;&amp;gt;([%w%s]*)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	local banners = {}&lt;br /&gt;
	for project in text:gmatch(capture) do&lt;br /&gt;
		if banners[project] == true then&lt;br /&gt;
			return project&lt;br /&gt;
		end&lt;br /&gt;
		banners[project] = true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.banner_shell = function(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {wrappers = {&amp;#039;Template:WikiProject banner shell&amp;#039;}})&lt;br /&gt;
	local title = args.demo_page and mw.title.new(args.demo_page) or mw.title.getCurrentTitle()&lt;br /&gt;
	local pagetype = require(&amp;#039;Module:Pagetype&amp;#039;)._main{&lt;br /&gt;
		page = title.prefixedText,&lt;br /&gt;
		[1] = args.class,&lt;br /&gt;
		dab = &amp;#039;disambiguation page&amp;#039;,&lt;br /&gt;
		soft_redirect = &amp;#039;soft redirect&amp;#039;,&lt;br /&gt;
		nonexistent = &amp;#039;non-existent page&amp;#039;,&lt;br /&gt;
		defaultns = &amp;#039;extended&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	local classmask = require(&amp;#039;Module:WikiProject banner&amp;#039;).class_mask&lt;br /&gt;
	local class = pagetype==&amp;#039;article&amp;#039; and args.class or &amp;#039;&amp;#039;&lt;br /&gt;
	class = classmask(class, title.talkPageTitle, false, pagetype)&lt;br /&gt;
	local demo = not yesno(args.category or true, true) or args.demo_page&lt;br /&gt;
	local out = {}&lt;br /&gt;
	local addCategory = function(category, sort_key)&lt;br /&gt;
		if not demo and title.isTalkPage then&lt;br /&gt;
			local category_title = mw.title.new(&amp;#039;Category:&amp;#039; .. category)&lt;br /&gt;
			table.insert(out, &amp;#039;[[&amp;#039; .. category_title.prefixedText .. (sort_key and (&amp;#039;|&amp;#039; .. sort_key) or &amp;#039;&amp;#039;) .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if demo and not args.demo_page then&lt;br /&gt;
		pagetype = &amp;#039;article&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.blp) or yesno(args.living) then&lt;br /&gt;
		table.insert(out, frame:expandTemplate{title = &amp;#039;BLP&amp;#039;})&lt;br /&gt;
	elseif yesno(args.blpo) then&lt;br /&gt;
		table.insert(out, frame:expandTemplate{title = &amp;#039;BLP others&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.activepol) then&lt;br /&gt;
		table.insert(out, frame:expandTemplate{title = &amp;#039;Active politician&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
	if class==&amp;#039;&amp;#039; and args[1] then -- check if class parameters are defined by any project banner&lt;br /&gt;
		local articleclass = require(&amp;#039;Module:WikiProject banner&amp;#039;).readarticleclass(&lt;br /&gt;
			{ignore_blank = true, only_subtemplates = true},&lt;br /&gt;
			title.talkPageTitle.prefixedText&lt;br /&gt;
		)&lt;br /&gt;
		if articleclass~=&amp;#039;&amp;#039; then -- class parameters are defined by one or more project banners&lt;br /&gt;
			class = nil -- no global assessment&lt;br /&gt;
			local raw_args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
				wrappers = {&amp;#039;Template:WikiProject banner shell&amp;#039;},&lt;br /&gt;
				removeBlanks = false&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local class2 = class and class~=&amp;#039;&amp;#039; and (class .. &amp;#039;-Class&amp;#039;) or &amp;#039;Unassessed&amp;#039;&lt;br /&gt;
	local vital&lt;br /&gt;
	local icon_class = &amp;#039;council&amp;#039;&lt;br /&gt;
	if yesno(args.vital) then&lt;br /&gt;
		local page = mw.ustring.upper(mw.ustring.sub(title.subjectPageTitle.text, 1, 1)) -- get first letter of article name&lt;br /&gt;
		local codepoint = mw.ustring.codepoint(page, 1, 1)&lt;br /&gt;
		if codepoint&amp;lt;65 or codepoint&amp;gt;90 then --first letter is not between A-Z&lt;br /&gt;
			page = &amp;#039;others&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		local data_page = mw.title.new(&amp;#039;Wikipedia:Vital articles/data/&amp;#039; .. page .. &amp;#039;.json&amp;#039;)&lt;br /&gt;
		if data_page.exists then&lt;br /&gt;
			local index = title.subjectPageTitle.text&lt;br /&gt;
			index = tostring(tonumber(index))==index and tonumber(index) or index --convert to number if page is numerical, otherwise loadJsonData does not work&lt;br /&gt;
			local data = mw.loadJsonData(data_page.fullText)[index]&lt;br /&gt;
			if data then&lt;br /&gt;
				local level = data.level and tostring(data.level)&lt;br /&gt;
				if level and data.topic then&lt;br /&gt;
					local link = &amp;#039;Wikipedia:Vital articles/Level/&amp;#039; .. level&lt;br /&gt;
					if (level==&amp;#039;4&amp;#039; or level==&amp;#039;5&amp;#039;) then&lt;br /&gt;
						link = link .. &amp;#039;/&amp;#039; .. data.topic&lt;br /&gt;
					end&lt;br /&gt;
					if data.sublist then&lt;br /&gt;
						link = link .. &amp;#039;/&amp;#039; .. data.sublist&lt;br /&gt;
					end&lt;br /&gt;
					if data.section then&lt;br /&gt;
						link = link .. &amp;#039;#&amp;#039; .. data.section&lt;br /&gt;
					end&lt;br /&gt;
					if not mw.title.new(link).exists then -- add tracking category if link does not exist&lt;br /&gt;
						addCategory(&amp;#039;Wikipedia vital articles needing attention&amp;#039;, &amp;#039;L&amp;#039;)&lt;br /&gt;
					end&lt;br /&gt;
					vital = &amp;#039;This [[File:Círculos Concéntricos.svg|16px|link=|alt=]]&amp;amp;nbsp;&amp;lt;b&amp;gt;[[&amp;#039; .. link .. &amp;#039;|level-&amp;#039; .. level .. &amp;#039; vital article]]&amp;lt;/b&amp;gt; &amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					vital = &amp;#039;This vital article &amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				local vitalCat = function(cat, valid) -- valid is table of 3 booleans for class/level/topic, if true then category will not be populated unless valid&lt;br /&gt;
					local show_cat = true&lt;br /&gt;
					if (valid.class and (class==&amp;#039;NA&amp;#039; or class==nil or class==&amp;#039;&amp;#039;))&lt;br /&gt;
						or (valid.level and level==nil)&lt;br /&gt;
						or (valid.topic and data.topic==nil) then&lt;br /&gt;
						show_cat = false&lt;br /&gt;
					end&lt;br /&gt;
					if show_cat then&lt;br /&gt;
						local category = cat:gsub(&amp;#039;_CLASS&amp;#039;, class2)&lt;br /&gt;
							:gsub(&amp;#039;_LEVEL&amp;#039;, level or &amp;#039;unknown&amp;#039;)&lt;br /&gt;
							:gsub(&amp;#039;_TOPIC&amp;#039;, data.topic or &amp;#039;an unknown topic&amp;#039;)&lt;br /&gt;
						addCategory(category)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				vitalCat(&amp;#039;_CLASS vital articles&amp;#039;, {})&lt;br /&gt;
				vitalCat(&amp;#039;Wikipedia level-_LEVEL vital articles&amp;#039;, {})&lt;br /&gt;
				vitalCat(&amp;#039;Wikipedia vital articles in _TOPIC&amp;#039;, {})&lt;br /&gt;
				vitalCat(&amp;#039;_CLASS level-_LEVEL vital articles&amp;#039;, {class=true, level=true})&lt;br /&gt;
				vitalCat(&amp;#039;Wikipedia level-_LEVEL vital articles in _TOPIC&amp;#039;, {level=true, topic=true})&lt;br /&gt;
				vitalCat(&amp;#039;_CLASS vital articles in _TOPIC&amp;#039;, {class=true, topic=true})&lt;br /&gt;
			else&lt;br /&gt;
				addCategory(&amp;#039;Articles not listed in the vital article list&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local pagetype_display = pagetype==&amp;#039;article&amp;#039; and &amp;#039;article&amp;#039;&lt;br /&gt;
		or pagetype==&amp;#039;page&amp;#039; and &amp;#039;page&amp;#039;&lt;br /&gt;
		or pagetype==&amp;#039;non-existent page&amp;#039; and &amp;#039;page&amp;#039;&lt;br /&gt;
		or (&amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. pagetype .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039;)-- use bold if page type is not article&lt;br /&gt;
	local text = vital or &amp;#039;This &amp;#039; .. pagetype_display .. &amp;#039; &amp;#039;&lt;br /&gt;
	if class or not args[1] then&lt;br /&gt;
		local icons = { -- map output of pagetype function to input of class icon function&lt;br /&gt;
			[&amp;#039;project page&amp;#039;] = &amp;#039;project&amp;#039;,&lt;br /&gt;
			[&amp;#039;user page&amp;#039;] = &amp;#039;user&amp;#039;,&lt;br /&gt;
			[&amp;#039;interface page&amp;#039;] = &amp;#039;interface&amp;#039;,&lt;br /&gt;
			[&amp;#039;help page&amp;#039;] = &amp;#039;help&amp;#039;,&lt;br /&gt;
			[&amp;#039;module&amp;#039;] = &amp;#039;module&amp;#039;,&lt;br /&gt;
			[&amp;#039;disambiguation page&amp;#039;] = &amp;#039;disambig&amp;#039;,&lt;br /&gt;
			[&amp;#039;soft redirect&amp;#039;] = &amp;#039;redirect&amp;#039;,&lt;br /&gt;
			[&amp;#039;non-existent page&amp;#039;] = &amp;#039;vacant&amp;#039;,&lt;br /&gt;
			[&amp;#039;page&amp;#039;] = &amp;#039;na&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
		icon_class = class==&amp;#039;NA&amp;#039; and (icons[pagetype] or pagetype) or class&lt;br /&gt;
		if class==&amp;#039;&amp;#039; then&lt;br /&gt;
			text = text .. &amp;#039;has not yet been rated&amp;#039;&lt;br /&gt;
		elseif class==&amp;#039;NA&amp;#039; then&lt;br /&gt;
			text = text .. &amp;#039;does not require a rating&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			text = text .. &amp;#039;is rated &amp;lt;span style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;&amp;#039; .. class .. &amp;#039;-class&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		text = text .. &amp;#039; on Wikipedia\&amp;#039;s [[Wikipedia:Content assessment|content assessment]] scale.&amp;#039;&lt;br /&gt;
		if args[1] then&lt;br /&gt;
			text = text .. &amp;#039;&amp;lt;br&amp;gt;It&amp;#039;&lt;br /&gt;
		elseif not yesno(args.vital) then&lt;br /&gt;
			addCategory(class2 .. &amp;#039; articles&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		text = text .. &amp;#039; is of interest to &amp;#039; .. (yesno(args.collapsed)&lt;br /&gt;
			and &amp;#039;multiple [[Wikipedia:WikiProject|WikiProjects]].&amp;#039;&lt;br /&gt;
			or (&amp;#039;the following [[Wikipedia:WikiProject|WikiProjects]]:&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	local icon = require(&amp;#039;Module:Class&amp;#039;)._icon{icon_class, size=&amp;#039;35px&amp;#039;}&lt;br /&gt;
	local header = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;assess&amp;#039;):wikitext(icon):done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;banner-shell-header&amp;#039;):css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;):css(&amp;#039;font-weight&amp;#039;, &amp;#039;normal&amp;#039;):wikitext(text):done()&lt;br /&gt;
	table.insert(&lt;br /&gt;
		out,&lt;br /&gt;
		shell(frame, header, args[1], yesno(args.collapsed), &amp;#039;wpbs&amp;#039;)&lt;br /&gt;
	)&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		local duplicate_cat = DuplicateBanners(args[1])&lt;br /&gt;
		if duplicate_cat and title.isTalkPage then&lt;br /&gt;
			addCategory(&amp;#039;Pages using WikiProject banner shell with duplicate banner templates&amp;#039;, duplicate_cat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args.listas then&lt;br /&gt;
		table.insert(out, frame:preprocess(&amp;#039;{{DEFAULTSORT:&amp;#039; .. args.listas .. &amp;#039;}}&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	if not demo then&lt;br /&gt;
		local tracking = require(&amp;#039;Module:Check for unknown parameters&amp;#039;)._check({&lt;br /&gt;
			[&amp;#039;unknown&amp;#039;]=&amp;#039;[[Category:Pages using WikiProject banner shell with unknown parameters|_VALUE_ ]]&amp;#039;,&lt;br /&gt;
			[&amp;#039;preview&amp;#039;]=&amp;#039;Page using [[Template:WikiProject banner shell]] with unknown parameter &amp;quot;_VALUE_&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;1&amp;#039;, &amp;#039;activepol&amp;#039;, &amp;#039;blp&amp;#039;, &amp;#039;blpo&amp;#039;, &amp;#039;category&amp;#039;, &amp;#039;class&amp;#039;, &amp;#039;collapsed&amp;#039;, &amp;#039;demo_page&amp;#039;, &amp;#039;listas&amp;#039;, &amp;#039;living&amp;#039;, &amp;#039;vital&amp;#039;&lt;br /&gt;
		}, frame:getParent().args)&lt;br /&gt;
		table.insert(out, tracking)&lt;br /&gt;
		for _, param in ipairs{&amp;#039;activepol&amp;#039;, &amp;#039;blp&amp;#039;, &amp;#039;blpo&amp;#039;, &amp;#039;category&amp;#039;, &amp;#039;collapsed&amp;#039;, &amp;#039;living&amp;#039;} do&lt;br /&gt;
			if yesno(args[param], &amp;#039;invalid&amp;#039;)==&amp;#039;invalid&amp;#039; then&lt;br /&gt;
				addCategory(&amp;#039;Pages using WikiProject banner shell with invalid parameters&amp;#039;, param)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if pagetype==&amp;#039;article&amp;#039; and args.class and class==&amp;#039;&amp;#039; then -- find pages with invalid class parameter&lt;br /&gt;
			addCategory(&amp;#039;Pages using WikiProject banner shell with invalid parameters&amp;#039;, &amp;#039;Zclass&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;MSGJ</name></author>
	</entry>
</feed>