<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.shroudforge.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AMainpage</id>
	<title>Module:Mainpage - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.shroudforge.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AMainpage"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Module:Mainpage&amp;action=history"/>
	<updated>2026-11-05T02:41:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.shroudforge.net/index.php?title=Module:Mainpage&amp;diff=6&amp;oldid=prev</id>
		<title>Bonsaibauer: 1 revision imported: Import of Star-Citizen-Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Module:Mainpage&amp;diff=6&amp;oldid=prev"/>
		<updated>2026-11-04T21:58:39Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported: Import of Star-Citizen-Modules&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&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 21:58, 4 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&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>Bonsaibauer</name></author>
	</entry>
	<entry>
		<id>https://wiki.shroudforge.net/index.php?title=Module:Mainpage&amp;diff=5&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistar Bot: Correct the stylesheet note: the patch card no longer uses CardLua, so only the event card does (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Module:Mainpage&amp;diff=5&amp;oldid=prev"/>
		<updated>2026-08-27T21:28:01Z</updated>

		<summary type="html">&lt;p&gt;Correct the stylesheet note: the patch card no longer uses CardLua, so only the event card does (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--- @module Mainpage&lt;br /&gt;
--- Renders the main page.&lt;br /&gt;
---&lt;br /&gt;
--- Everything editors change — the featured article, the running event, the&lt;br /&gt;
--- build chips, the hero, and both link lists — lives in&lt;br /&gt;
--- [[Module:Mainpage/settings.json]]. Nothing on this page needs a module edit&lt;br /&gt;
--- to keep it current, and the foot links straight to it.&lt;br /&gt;
---&lt;br /&gt;
--- LAYOUT CONTRACT. Every band is `.home-band` for its full-bleed ground and&lt;br /&gt;
--- `.home-band__inner` for the measured column inside it, and every band of&lt;br /&gt;
--- cards puts `.home-grid` on that inner element. One twelve-column grid is&lt;br /&gt;
--- shared by all of them, so a card edge in one band lands on the same line as&lt;br /&gt;
--- a card edge in the next. A band that sets its own column ratios breaks that&lt;br /&gt;
--- alignment for every band on the page.&lt;br /&gt;
---&lt;br /&gt;
--- Card spans go on the card itself (`.home-card--read`, `--aside`, `--tall`)&lt;br /&gt;
--- because `grid-column` is a placement property and cannot collide with&lt;br /&gt;
--- Module:CardLua&amp;#039;s own `display` on `.t-card`. A class that sets `display`&lt;br /&gt;
--- must never share an element with `t-card`.&lt;br /&gt;
---&lt;br /&gt;
--- Structure:&lt;br /&gt;
---&lt;br /&gt;
---   hero          full bleed, gadget-loaded artwork&lt;br /&gt;
---   highlights    [ event 8 ][ patch 4 ]&lt;br /&gt;
---   band 1        [ featured 8 ][ on this day 4 ]&lt;br /&gt;
---   band 2        [ editing 8, two rows ][ support 4 ]&lt;br /&gt;
---                                        [ discussion 4 ]&lt;br /&gt;
---   directory     six groups, no card&lt;br /&gt;
---   foot          where to edit what the page says&lt;br /&gt;
&lt;br /&gt;
local community = require(&amp;#039;Module:Mainpage/Community&amp;#039;)&lt;br /&gt;
local directory = require(&amp;#039;Module:Mainpage/Directory&amp;#039;)&lt;br /&gt;
local editing = require(&amp;#039;Module:Mainpage/Editing&amp;#039;)&lt;br /&gt;
local featured = require(&amp;#039;Module:Mainpage/Featured&amp;#039;)&lt;br /&gt;
local hero = require(&amp;#039;Module:Mainpage/Hero&amp;#039;)&lt;br /&gt;
local highlights = require(&amp;#039;Module:Mainpage/Highlights&amp;#039;)&lt;br /&gt;
local onThisDay = require(&amp;#039;Module:Mainpage/OnThisDay&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--- Loaded in this order: the card primitive first, then the grid and hero, then&lt;br /&gt;
--- the components that sit on the grid, then the ground behind both.&lt;br /&gt;
---&lt;br /&gt;
--- CardLua&amp;#039;s sheet is listed EXPLICITLY rather than left to arrive with a&lt;br /&gt;
--- CardLua call. Six of the seven cards are built here with `.t-card` on a&lt;br /&gt;
--- plain div, so the card surface, border and radius would otherwise depend on&lt;br /&gt;
--- the event card happening to render — and it does not when the settings&lt;br /&gt;
--- carry no event.&lt;br /&gt;
local STYLESHEETS = {&lt;br /&gt;
	&amp;#039;Module:CardLua/styles.css&amp;#039;,&lt;br /&gt;
	&amp;#039;Module:Mainpage/styles.css&amp;#039;,&lt;br /&gt;
	&amp;#039;Module:Mainpage/cards.css&amp;#039;,&lt;br /&gt;
	&amp;#039;Module:Mainpage/ground.css&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- Where to go to change what the page says, linked at the foot.&lt;br /&gt;
---&lt;br /&gt;
--- NOT &amp;quot;edit this page&amp;quot;. The page is a single transclusion, so an edit link on&lt;br /&gt;
--- it lands an editor in a file with nothing in it to change. This is the one&lt;br /&gt;
--- surface that holds content, and it covers everything an editor can change&lt;br /&gt;
--- without touching Lua.&lt;br /&gt;
local EDIT_TARGETS = {&lt;br /&gt;
	{ page = &amp;#039;Module:Mainpage/settings.json&amp;#039;, label = &amp;#039;Settings&amp;#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- What loads [[MediaWiki:Gadget-mainpage.js]]. Emitted by the module so the&lt;br /&gt;
--- invocation is self-sufficient: a page that renders this and does not carry&lt;br /&gt;
--- the category gets no lazy artwork, no rolling digits and a clock that never&lt;br /&gt;
--- starts, with nothing on the page to say why.&lt;br /&gt;
local GADGET_CATEGORY = &amp;#039;Pages using main page gadget&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--- @param frame mw.frame&lt;br /&gt;
--- @return string&lt;br /&gt;
local function stylesheets(frame)&lt;br /&gt;
	local tags = {}&lt;br /&gt;
	for _, src in ipairs(STYLESHEETS) do&lt;br /&gt;
		tags[#tags + 1] = frame:extensionTag({&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = src },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(tags)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- One band of cards on the shared grid.&lt;br /&gt;
---&lt;br /&gt;
--- Varargs and not a table: a table would be walked with ipairs, which stops at&lt;br /&gt;
--- the first nil, so a card that declined to render would silently take every&lt;br /&gt;
--- card after it with it. select(&amp;#039;#&amp;#039;) counts the nils.&lt;br /&gt;
---&lt;br /&gt;
--- @param ... string|nil&lt;br /&gt;
--- @return string&lt;br /&gt;
local function band(...)&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-band&amp;#039;):addClass(&amp;#039;home-wiki&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local inner = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-band__inner&amp;#039;):addClass(&amp;#039;home-grid&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, select(&amp;#039;#&amp;#039;, ...) do&lt;br /&gt;
		inner:wikitext((select(i, ...)))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- The maintenance affordance at the foot of the page.&lt;br /&gt;
---&lt;br /&gt;
--- External-link syntax because an internal link cannot carry a query string,&lt;br /&gt;
--- and `plainlinks` because the destinations are on this wiki and the arrow&lt;br /&gt;
--- icon would say otherwise.&lt;br /&gt;
---&lt;br /&gt;
--- mw.uri.fullUrl and NOT callParserFunction: `fullurl` is a colon magic word,&lt;br /&gt;
--- registered under the name `fullurl:`, and callParserFunction resolves it as&lt;br /&gt;
--- `fullurl`, which does not exist. mw.uri is the addressable API for this.&lt;br /&gt;
---&lt;br /&gt;
--- @return string&lt;br /&gt;
local function footer()&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-band&amp;#039;):addClass(&amp;#039;home-wiki&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local inner = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-band__inner&amp;#039;):addClass(&amp;#039;home-foot&amp;#039;):addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	for _, target in ipairs(EDIT_TARGETS) do&lt;br /&gt;
		inner&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&amp;#039;[%s %s]&amp;#039;, tostring(mw.uri.fullUrl(target.page, &amp;#039;action=edit&amp;#039;)), target.label))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- @return string&lt;br /&gt;
function p.render()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-page&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Both are empty and painted entirely in CSS: the dot lattice outside the&lt;br /&gt;
	-- tapes, and the tapes themselves. The tape is `position: fixed` and the&lt;br /&gt;
	-- dots are not, so the instrument holds still while the page scrolls past.&lt;br /&gt;
	root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-sky&amp;#039;)&lt;br /&gt;
	root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;home-tape&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	root:wikitext(hero.render({}))&lt;br /&gt;
	root:wikitext(highlights.render())&lt;br /&gt;
	root:wikitext(band(featured.render(), onThisDay.render()))&lt;br /&gt;
	root:wikitext(band(editing.render(), community.renderSupport(), community.renderDiscussion()))&lt;br /&gt;
	root:wikitext(directory.render())&lt;br /&gt;
	root:wikitext(footer())&lt;br /&gt;
&lt;br /&gt;
	return stylesheets(frame) .. tostring(root) .. string.format(&amp;#039;[[Category:%s]]&amp;#039;, GADGET_CATEGORY)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Wikitext entry point. Reached through [[Template:Mainpage]] rather than&lt;br /&gt;
--- invoked directly, so the page that carries it stays one transclusion.&lt;br /&gt;
---&lt;br /&gt;
--- @param frame mw.frame&lt;br /&gt;
--- @return string&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return p.render()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- The hero on its own, for previewing it outside the page. `noscript=yes`&lt;br /&gt;
--- renders it without the gadget&amp;#039;s artwork hook, which is what a reader with&lt;br /&gt;
--- scripts off or Save-Data on receives.&lt;br /&gt;
---&lt;br /&gt;
--- @param frame mw.frame&lt;br /&gt;
--- @return string&lt;br /&gt;
function p.hero(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame)&lt;br /&gt;
	local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	return stylesheets(frame)&lt;br /&gt;
		.. tostring(&lt;br /&gt;
			mw.html&lt;br /&gt;
				.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;home-page&amp;#039;)&lt;br /&gt;
				:wikitext(hero.render({ lazyArt = yesno(args.noscript, false) ~= true }))&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>starcitizen&gt;Alistar Bot</name></author>
	</entry>
</feed>