<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>P1NK AN1MAL C00K13 G1RAFF3 PLUSH13  - Recent changes [en]</title>
		<link>https://animalcookie.trumpetz.com/index.php/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.45.3</generator>
		<lastBuildDate>Fri, 10 Apr 2026 03:22:35 GMT</lastBuildDate>
		<item>
			<title>MediaWiki:Common.js</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=380&amp;oldid=378</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=380&amp;oldid=378</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;amp;diff=380&amp;amp;oldid=378&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Fri, 10 Apr 2026 00:19:02 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/MediaWiki_talk:Common.js</comments>
		</item>
		<item>
			<title>MediaWiki:Common.js</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=378&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=378&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;// Adds a search box that filters category members in real time if (document.querySelector(&amp;#039;.mw-category&amp;#039;)) {   const input = document.createElement(&amp;#039;input&amp;#039;);   input.placeholder = &amp;#039;Filter pages...&amp;#039;;   input.style.cssText = `     display: block; margin: 12px 0; padding: 8px 16px;     border: 2px solid #b3e5fc; border-radius: 20px;     font-family: Nunito, sans-serif; font-size: 1em; width: 300px;   `;   document.querySelector(&amp;#039;.mw-category&amp;#039;).before(input);   input.addEve...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// Adds a search box that filters category members in real time&lt;br /&gt;
if (document.querySelector(&amp;#039;.mw-category&amp;#039;)) {&lt;br /&gt;
  const input = document.createElement(&amp;#039;input&amp;#039;);&lt;br /&gt;
  input.placeholder = &amp;#039;Filter pages...&amp;#039;;&lt;br /&gt;
  input.style.cssText = `&lt;br /&gt;
    display: block; margin: 12px 0; padding: 8px 16px;&lt;br /&gt;
    border: 2px solid #b3e5fc; border-radius: 20px;&lt;br /&gt;
    font-family: Nunito, sans-serif; font-size: 1em; width: 300px;&lt;br /&gt;
  `;&lt;br /&gt;
  document.querySelector(&amp;#039;.mw-category&amp;#039;).before(input);&lt;br /&gt;
  input.addEventListener(&amp;#039;input&amp;#039;, () =&amp;gt; {&lt;br /&gt;
    document.querySelectorAll(&amp;#039;.mw-category li&amp;#039;).forEach(li =&amp;gt; {&lt;br /&gt;
      li.style.display = li.textContent.toLowerCase()&lt;br /&gt;
        .includes(input.value.toLowerCase()) ? &amp;#039;&amp;#039; : &amp;#039;none&amp;#039;;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const btn = document.createElement(&amp;#039;button&amp;#039;);&lt;br /&gt;
btn.textContent = &amp;#039;🎨 Switch Theme&amp;#039;;&lt;br /&gt;
btn.style.cssText = `&lt;br /&gt;
  position: fixed; bottom: 24px; right: 24px;&lt;br /&gt;
  padding: 10px 18px; border-radius: 20px;&lt;br /&gt;
  border: 2px solid #b3e5fc; background: #f0f8ff;&lt;br /&gt;
  font-family: Nunito, sans-serif; font-weight: 700;&lt;br /&gt;
  cursor: pointer; z-index: 9999;&lt;br /&gt;
`;&lt;br /&gt;
document.body.appendChild(btn);&lt;br /&gt;
&lt;br /&gt;
btn.addEventListener(&amp;#039;click&amp;#039;, () =&amp;gt; {&lt;br /&gt;
  const current = localStorage.getItem(&amp;#039;wikiTheme&amp;#039;) || &amp;#039;blue&amp;#039;;&lt;br /&gt;
  const next = current === &amp;#039;blue&amp;#039; ? &amp;#039;pink&amp;#039; : &amp;#039;blue&amp;#039;;&lt;br /&gt;
  localStorage.setItem(&amp;#039;wikiTheme&amp;#039;, next);&lt;br /&gt;
  document.getElementById(&amp;#039;wiki-theme-css&amp;#039;).href =&lt;br /&gt;
    next === &amp;#039;pink&amp;#039; ? &amp;#039;https://animalcookie.trumpetz.com/index.php/MediaWiki:Pink_Theme.css&amp;#039; : &amp;#039;https://animalcookie.trumpetz.com/index.php/MediaWiki:Common.css&amp;#039;;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;#039;mousemove&amp;#039;, e =&amp;gt; {&lt;br /&gt;
  const spark = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
  spark.style.cssText = `&lt;br /&gt;
    position: fixed; pointer-events: none;&lt;br /&gt;
    left: ${e.clientX}px; top: ${e.clientY}px;&lt;br /&gt;
    width: 8px; height: 8px; border-radius: 50%;&lt;br /&gt;
    background: ${[&amp;#039;#29b6f6&amp;#039;,&amp;#039;#f06292&amp;#039;,&amp;#039;#f9c74f&amp;#039;][Math.floor(Math.random()*3)]};&lt;br /&gt;
    z-index: 9999; transform: translate(-50%,-50%);&lt;br /&gt;
    animation: fade 0.6s forwards;&lt;br /&gt;
  `;&lt;br /&gt;
  document.body.appendChild(spark);&lt;br /&gt;
  setTimeout(() =&amp;gt; spark.remove(), 600);&lt;br /&gt;
});&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 00:07:04 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/MediaWiki_talk:Common.js</comments>
		</item>
		<item>
			<title>MediaWiki:Pink Theme.css</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Pink_Theme.css&amp;diff=377&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Pink_Theme.css&amp;diff=377&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&lt;span class=&quot;autocomment&quot;&gt;============================================================    CIRCUS WIKI — MediaWiki:Common.css    Paste this entire file into Special:EditPage/MediaWiki:Common.css    ============================================================: &lt;/span&gt;  &lt;span class=&quot;autocomment&quot;&gt;--- Google Font Import ---: &lt;/span&gt; @import url(&amp;#039;https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&amp;amp;display=swap&amp;#039;);  &lt;span class=&quot;autocomment&quot;&gt;--- Global Reset ---: &lt;/span&gt; body, #content, #mw-content-text #mw-page-container {   background-color: #fdf5...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* ============================================================&lt;br /&gt;
   CIRCUS WIKI — MediaWiki:Common.css&lt;br /&gt;
   Paste this entire file into Special:EditPage/MediaWiki:Common.css&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* --- Google Font Import --- */&lt;br /&gt;
@import url(&amp;#039;https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&amp;amp;display=swap&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Global Reset --- */&lt;br /&gt;
body,&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-text #mw-page-container {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
  color: #5a3a4a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide default MediaWiki chrome for a cleaner look */&lt;br /&gt;
#mw-page-base,&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   CIRCUS STRIPE BANNER&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
.circus-banner {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 80px;&lt;br /&gt;
  background-image: repeating-linear-gradient(&lt;br /&gt;
    90deg,&lt;br /&gt;
    #f06292 0px,&lt;br /&gt;
    #f06292 44px,&lt;br /&gt;
    #ffffff 44px,&lt;br /&gt;
    #ffffff 88px&lt;br /&gt;
  );&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   HERO SECTION&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
.circus-hero {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 40px 20px 20px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Decorative floating dots */&lt;br /&gt;
.circus-hero::before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 60px;&lt;br /&gt;
  left: 60px;&lt;br /&gt;
  width: 14px;&lt;br /&gt;
  height: 14px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #f9c74f;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-hero::after {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 120px;&lt;br /&gt;
  left: 100px;&lt;br /&gt;
  width: 12px;&lt;br /&gt;
  height: 12px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #90dbf4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Book icon circle */&lt;br /&gt;
.circus-logo {&lt;br /&gt;
  display: inline-flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  width: 130px;&lt;br /&gt;
  height: 130px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: linear-gradient(145deg, #f48fb1, #e91e8c);&lt;br /&gt;
  box-shadow: 0 6px 24px rgba(233, 30, 140, 0.25);&lt;br /&gt;
  margin-bottom: 24px;&lt;br /&gt;
  font-size: 58px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner ring on logo */&lt;br /&gt;
.circus-logo-ring {&lt;br /&gt;
  display: inline-flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  width: 130px;&lt;br /&gt;
  height: 130px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #f8bbd0;&lt;br /&gt;
  padding: 8px;&lt;br /&gt;
  margin-bottom: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-logo-inner {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: linear-gradient(145deg, #f48fb1, #e91e8c);&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main title */&lt;br /&gt;
.circus-title {&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
  font-size: 3.6em !important;&lt;br /&gt;
  font-weight: 900 !important;&lt;br /&gt;
  color: #e91e8c !important;&lt;br /&gt;
  margin: 0 0 8px !important;&lt;br /&gt;
  line-height: 1.1 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtitle */&lt;br /&gt;
.circus-subtitle {&lt;br /&gt;
  font-size: 1.35em;&lt;br /&gt;
  color: #9e6b7a;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  margin: 0 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   FEATURE CARDS&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
.circus-cards {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 20px;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  padding: 10px 20px 50px;&lt;br /&gt;
  max-width: 900px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-card {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  min-width: 200px;&lt;br /&gt;
  max-width: 260px;&lt;br /&gt;
  border: 2px solid #f8bbd0;&lt;br /&gt;
  border-radius: 20px;&lt;br /&gt;
  background: #fff8fb;&lt;br /&gt;
  padding: 32px 20px 28px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  transition: transform 0.2s, box-shadow 0.2s;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-card:hover {&lt;br /&gt;
  transform: translateY(-4px);&lt;br /&gt;
  box-shadow: 0 8px 24px rgba(233, 30, 140, 0.12);&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-card-icon {&lt;br /&gt;
  font-size: 38px;&lt;br /&gt;
  margin-bottom: 14px;&lt;br /&gt;
  color: #e91e8c;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* SVG-style icon using CSS (pen icon) */&lt;br /&gt;
.circus-card-icon-edit::before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 36px;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  background-color: #e91e8c;&lt;br /&gt;
  -webkit-mask-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&amp;#039;http://www.w3.org/2000/svg&amp;#039; viewBox=&amp;#039;0 0 24 24&amp;#039;%3E%3Cpath d=&amp;#039;M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7&amp;#039;/%3E%3Cpath d=&amp;#039;M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z&amp;#039;/%3E%3C/svg%3E&amp;quot;);&lt;br /&gt;
  mask-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&amp;#039;http://www.w3.org/2000/svg&amp;#039; viewBox=&amp;#039;0 0 24 24&amp;#039;%3E%3Cpath d=&amp;#039;M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7&amp;#039;/%3E%3Cpath d=&amp;#039;M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z&amp;#039;/%3E%3C/svg%3E&amp;quot;);&lt;br /&gt;
  -webkit-mask-size: contain;&lt;br /&gt;
  mask-size: contain;&lt;br /&gt;
  -webkit-mask-repeat: no-repeat;&lt;br /&gt;
  mask-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-card-title {&lt;br /&gt;
  font-size: 1.15em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #5a3a4a;&lt;br /&gt;
  margin: 0 0 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.circus-card-desc {&lt;br /&gt;
  font-size: 0.95em;&lt;br /&gt;
  color: #9e7a88;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   EXTRA DECORATIVE DOTS (add via spans in wikitext)&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
.dot-green {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  width: 12px;&lt;br /&gt;
  height: 12px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #90dbf4;&lt;br /&gt;
  right: 120px;&lt;br /&gt;
  top: 180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.dot-red {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  width: 10px;&lt;br /&gt;
  height: 10px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #f4845f;&lt;br /&gt;
  right: 200px;&lt;br /&gt;
  top: 300px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   ARTICLE CONTENT STYLES (for inner wiki pages)&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
#mw-content-text h1,&lt;br /&gt;
#mw-content-text h2,&lt;br /&gt;
#mw-content-text h3 {&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
  color: #e91e8c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text h2 {&lt;br /&gt;
  border-bottom: 2px solid #f8bbd0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox styles */&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 2px solid #f8bbd0 !important;&lt;br /&gt;
  border-radius: 12px !important;&lt;br /&gt;
  background: #fff8fb !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox th {&lt;br /&gt;
  background: #f8bbd0 !important;&lt;br /&gt;
  color: #9e3a6a !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Category links */&lt;br /&gt;
#catlinks {&lt;br /&gt;
  border: 2px solid #f8bbd0 !important;&lt;br /&gt;
  border-radius: 10px !important;&lt;br /&gt;
  background: #fff8fb !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Vector 2022 sidebar */&lt;br /&gt;
.vector-menu-portal,&lt;br /&gt;
.mw-sidebar,&lt;br /&gt;
#vector-toc-collapsed-button {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.vector-menu-portal .vector-menu-heading {&lt;br /&gt;
  color: #e91e8c !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
  font-weight: 900 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.vector-menu-portal .vector-menu-content a {&lt;br /&gt;
  color: #9e6b7a !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.vector-menu-portal .vector-menu-content a:hover {&lt;br /&gt;
  color: #e91e8c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   FULL PAGE BACKGROUND — Circus Wiki theme&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* The very outermost page background */&lt;br /&gt;
html, body {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The content area wrapper */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-container,&lt;br /&gt;
.mw-body,&lt;br /&gt;
.mw-body-content {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Vector 2022 specific wrappers */&lt;br /&gt;
.mw-page-container,&lt;br /&gt;
.mw-page-container-inner,&lt;br /&gt;
#mw-content-block {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The header/top bar */&lt;br /&gt;
#mw-head,&lt;br /&gt;
.mw-header,&lt;br /&gt;
#vector-page-toolbar {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
  border-bottom: 2px solid #f8bbd0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search bar to match */&lt;br /&gt;
#searchInput,&lt;br /&gt;
.vector-search-box input {&lt;br /&gt;
  background-color: #fff8fb !important;&lt;br /&gt;
  border: 2px solid #f8bbd0 !important;&lt;br /&gt;
  border-radius: 20px !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
  color: #5a3a4a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
  background-color: #fdf5f0 !important;&lt;br /&gt;
  border-top: 2px solid #f8bbd0 !important;&lt;br /&gt;
  color: #9e6b7a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a,&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
  color: #e91e8c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background-image: repeating-linear-gradient(&lt;br /&gt;
    90deg,&lt;br /&gt;
    #f06292 0px,&lt;br /&gt;
    #f06292 44px,&lt;br /&gt;
    #ffffff 44px,&lt;br /&gt;
    #ffffff 88px&lt;br /&gt;
  ) !important;&lt;br /&gt;
  padding: 16px 20px !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  color: #e91e8c !important;&lt;br /&gt;
  font-family: &amp;#039;Nunito&amp;#039;, sans-serif !important;&lt;br /&gt;
  font-weight: 900 !important;&lt;br /&gt;
  text-shadow: 0 0 8px #fff, 0 0 8px #fff !important; /* white glow so text is readable */&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 00:05:54 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/MediaWiki_talk:Pink_Theme.css</comments>
		</item>
		<item>
			<title>Colors:Page Creator</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:Page_Creator&amp;diff=375&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:Page_Creator&amp;diff=375&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:Page_Creator&quot; title=&quot;Colors:Page Creator&quot;&gt;Colors:Page Creator&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|new}}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:09 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:Page_Creator</comments>
		</item>
		<item>
			<title>Colors:CreateArticleToyColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleToyColor&amp;diff=373&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleToyColor&amp;diff=373&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleToyColor&quot; title=&quot;Colors:CreateArticleToyColor&quot;&gt;Colors:CreateArticleToyColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Toy Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Toy Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleToyColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:09 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleToyColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleScienceColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleScienceColor&amp;diff=371&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleScienceColor&amp;diff=371&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleScienceColor&quot; title=&quot;Colors:CreateArticleScienceColor&quot;&gt;Colors:CreateArticleScienceColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Science Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Science Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleScienceColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleScienceColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticlePlantColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticlePlantColor&amp;diff=369&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticlePlantColor&amp;diff=369&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticlePlantColor&quot; title=&quot;Colors:CreateArticlePlantColor&quot;&gt;Colors:CreateArticlePlantColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Plant Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Plant Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticlePlantColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticlePlantColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleOtherColors</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleOtherColors&amp;diff=367&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleOtherColors&amp;diff=367&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleOtherColors&quot; title=&quot;Colors:CreateArticleOtherColors&quot;&gt;Colors:CreateArticleOtherColors&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Other Colors|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Color in a non-listed subspecies?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleOtherColors&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleOtherColors</comments>
		</item>
		<item>
			<title>Colors:CreateArticleMedicalColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleMedicalColor&amp;diff=365&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleMedicalColor&amp;diff=365&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleMedicalColor&quot; title=&quot;Colors:CreateArticleMedicalColor&quot;&gt;Colors:CreateArticleMedicalColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Medical Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Medical Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleMedicalColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleMedicalColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleFoodColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleFoodColor&amp;diff=363&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleFoodColor&amp;diff=363&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleFoodColor&quot; title=&quot;Colors:CreateArticleFoodColor&quot;&gt;Colors:CreateArticleFoodColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Food Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Food Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleFoodColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleFoodColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleCosmicColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCosmicColor&amp;diff=361&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCosmicColor&amp;diff=361&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleCosmicColor&quot; title=&quot;Colors:CreateArticleCosmicColor&quot;&gt;Colors:CreateArticleCosmicColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Character Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Cosmic Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleCosmicColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleCosmicColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleCharacterColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCharacterColor&amp;diff=359&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCharacterColor&amp;diff=359&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleCharacterColor&quot; title=&quot;Colors:CreateArticleCharacterColor&quot;&gt;Colors:CreateArticleCharacterColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Character Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Character Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleCharacterColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleCharacterColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleBasicColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleBasicColor&amp;diff=357&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleBasicColor&amp;diff=357&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleBasicColor&quot; title=&quot;Colors:CreateArticleBasicColor&quot;&gt;Colors:CreateArticleBasicColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Basic Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Basic Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleBasicColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleBasicColor</comments>
		</item>
		<item>
			<title>Colors:CreateArticleAnimalColor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleAnimalColor&amp;diff=355&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleAnimalColor&amp;diff=355&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Colors:CreateArticleAnimalColor&quot; title=&quot;Colors:CreateArticleAnimalColor&quot;&gt;Colors:CreateArticleAnimalColor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Create Header|Animal Color|commonnames=yes}}&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center&amp;quot;&amp;gt;What is the name of the Animal Color?&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create &lt;br /&gt;
 break=no&lt;br /&gt;
 preload=Template:CreateArticleAnimalColor&lt;br /&gt;
 useve=false&lt;br /&gt;
 summary=Created with Article Creator&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:41:08 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Colors_talk:CreateArticleAnimalColor</comments>
		</item>
		<item>
			<title>Category:Pages with script errors</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Category:Pages_with_script_errors&amp;diff=353&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Category:Pages_with_script_errors&amp;diff=353&amp;oldid=0</guid>
			<description>&lt;p&gt;Created automatically by the AutoCreateCategoryPages extension.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This is a category page.&lt;br /&gt;
It lists all of the pages in category &amp;quot;Pages with script errors&amp;quot; as well as all subcategories of category &amp;quot;Pages with script errors&amp;quot; if any exist.&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:47 GMT</pubDate>
			<dc:creator>Automatic category creator</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Category_talk:Pages_with_script_errors</comments>
		</item>
		<item>
			<title>Module:Navbar/styles.css</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/styles.css&amp;diff=352&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/styles.css&amp;diff=352&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbar/styles.css&quot; title=&quot;Module:Navbar/styles.css&quot;&gt;Module:Navbar/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-collapse {&lt;br /&gt;
	float: left;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-boxtext {&lt;br /&gt;
	word-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::before {&lt;br /&gt;
	margin-right: -0.125em;&lt;br /&gt;
	content: &amp;#039;[ &amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::after {&lt;br /&gt;
	margin-left: -0.125em;&lt;br /&gt;
	content: &amp;#039; ]&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar a &amp;gt; span,&lt;br /&gt;
.navbar a &amp;gt; abbr {&lt;br /&gt;
	text-decoration: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-mini abbr {&lt;br /&gt;
	font-variant: small-caps;&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	cursor: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-full {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 7em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-mini {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* not the usual @media screen, we simply remove navbar in @media print */&lt;br /&gt;
html.skin-theme-clientpref-night .navbar li a abbr {&lt;br /&gt;
	color: var(--color-base) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .navbar li a abbr {&lt;br /&gt;
		color: var(--color-base) !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	.navbar {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navbar/styles.css</comments>
		</item>
		<item>
			<title>Module:NavboxBuilder</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:NavboxBuilder&amp;diff=350&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:NavboxBuilder&amp;diff=350&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:NavboxBuilder&quot; title=&quot;Module:NavboxBuilder&quot;&gt;Module:NavboxBuilder&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return require(&amp;#039;Dev:NavboxBuilder&amp;#039;)&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:NavboxBuilder</comments>
		</item>
		<item>
			<title>Module:Namespace detect/config</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/config&amp;diff=348&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/config&amp;diff=348&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Namespace_detect/config&quot; title=&quot;Module:Namespace detect/config&quot;&gt;Module:Namespace detect/config&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                    Namespace detect configuration data                     --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module stores configuration data for Module:Namespace detect. Here    --&lt;br /&gt;
-- you can localise the module to your wiki&amp;#039;s language.                       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To activate a configuration item, you need to uncomment it. This means     --&lt;br /&gt;
-- that you need to remove the text &amp;quot;-- &amp;quot; at the start of the line.           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&amp;#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter names                               --&lt;br /&gt;
-- These configuration items specify custom parameter names. Values added     --&lt;br /&gt;
-- here will work in addition to the default English parameter names.         --&lt;br /&gt;
-- To add one extra name, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = &amp;#039;parameter name&amp;#039;                                                 --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = {&amp;#039;parameter name 1&amp;#039;, &amp;#039;parameter name 2&amp;#039;, &amp;#039;parameter name 3&amp;#039;}     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for the main namespace:&lt;br /&gt;
-- cfg.main = &amp;#039;main&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays in talk namespaces:&lt;br /&gt;
-- cfg.talk = &amp;#039;talk&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for &amp;quot;other&amp;quot; namespaces (namespaces for which&lt;br /&gt;
---- parameters have not been specified):&lt;br /&gt;
-- cfg.other = &amp;#039;other&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter makes talk pages behave as though they are the corresponding&lt;br /&gt;
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].&lt;br /&gt;
---- Edit that module to change the default values of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&lt;br /&gt;
-- cfg.subjectns = &amp;#039;subjectns&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a demonstration namespace:&lt;br /&gt;
-- cfg.demospace = &amp;#039;demospace&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.demopage = &amp;#039;page&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Table configuration                              --&lt;br /&gt;
-- These configuration items allow customisation of the &amp;quot;table&amp;quot; function,     --&lt;br /&gt;
-- used to generate a table of possible parameters in the module              --&lt;br /&gt;
-- documentation.                                                             --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- The header for the namespace column in the wikitable containing the list of&lt;br /&gt;
---- possible subject-space parameters.&lt;br /&gt;
-- cfg.wikitableNamespaceHeader = &amp;#039;Namespace&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- The header for the wikitable containing the list of possible subject-space&lt;br /&gt;
---- parameters.&lt;br /&gt;
-- cfg.wikitableAliasesHeader = &amp;#039;Aliases&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        End of configuration data                           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&amp;#039;t edit this line.&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Namespace_detect/config</comments>
		</item>
		<item>
			<title>Module:Namespace detect/data</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/data&amp;diff=346&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/data&amp;diff=346&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Namespace_detect/data&quot; title=&quot;Module:Namespace detect/data&quot;&gt;Module:Namespace detect/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                          Namespace detect data                             --&lt;br /&gt;
-- This module holds data for [[Module:Namespace detect]] to be loaded per    --&lt;br /&gt;
-- page, rather than per #invoke, for performance reasons.                    --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = require(&amp;#039;Module:Namespace detect/config&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function addKey(t, key, defaultKey)&lt;br /&gt;
	if key ~= defaultKey then&lt;br /&gt;
		t[#t + 1] = key&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get a table of parameters to query for each default parameter name.&lt;br /&gt;
-- This allows wikis to customise parameter names in the cfg table while&lt;br /&gt;
-- ensuring that default parameter names will always work. The cfg table&lt;br /&gt;
-- values can be added as a string, or as an array of strings.&lt;br /&gt;
&lt;br /&gt;
local defaultKeys = {&lt;br /&gt;
	&amp;#039;main&amp;#039;,&lt;br /&gt;
	&amp;#039;talk&amp;#039;,&lt;br /&gt;
	&amp;#039;other&amp;#039;,&lt;br /&gt;
	&amp;#039;subjectns&amp;#039;,&lt;br /&gt;
	&amp;#039;demospace&amp;#039;,&lt;br /&gt;
	&amp;#039;demopage&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local argKeys = {}&lt;br /&gt;
for i, defaultKey in ipairs(defaultKeys) do&lt;br /&gt;
	argKeys[defaultKey] = {defaultKey}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for defaultKey, t in pairs(argKeys) do&lt;br /&gt;
	local cfgValue = cfg[defaultKey]&lt;br /&gt;
	local cfgValueType = type(cfgValue)&lt;br /&gt;
	if cfgValueType == &amp;#039;string&amp;#039; then&lt;br /&gt;
		addKey(t, cfgValue, defaultKey)&lt;br /&gt;
	elseif cfgValueType == &amp;#039;table&amp;#039; then&lt;br /&gt;
		for i, key in ipairs(cfgValue) do&lt;br /&gt;
			addKey(t, key, defaultKey)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	cfg[defaultKey] = nil -- Free the cfg value as we don&amp;#039;t need it any more.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getParamMappings()&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table of how parameter names map to namespace names. The keys&lt;br /&gt;
	-- are the actual namespace names, in lower case, and the values are the&lt;br /&gt;
	-- possible parameter names for that namespace, also in lower case. The&lt;br /&gt;
	-- table entries are structured like this:&lt;br /&gt;
	-- {&lt;br /&gt;
	--   [&amp;#039;&amp;#039;] = {&amp;#039;main&amp;#039;},&lt;br /&gt;
	--   [&amp;#039;wikipedia&amp;#039;] = {&amp;#039;wikipedia&amp;#039;, &amp;#039;project&amp;#039;, &amp;#039;wp&amp;#039;},&lt;br /&gt;
	--   ...&lt;br /&gt;
	-- }&lt;br /&gt;
	--]]&lt;br /&gt;
	local mappings = {}&lt;br /&gt;
	local mainNsName = mw.site.subjectNamespaces[0].name&lt;br /&gt;
	mainNsName = mw.ustring.lower(mainNsName)&lt;br /&gt;
	mappings[mainNsName] = mw.clone(argKeys.main)&lt;br /&gt;
	mappings[&amp;#039;talk&amp;#039;] = mw.clone(argKeys.talk)&lt;br /&gt;
	for nsid, ns in pairs(mw.site.subjectNamespaces) do&lt;br /&gt;
		if nsid ~= 0 then -- Exclude main namespace.&lt;br /&gt;
			local nsname = mw.ustring.lower(ns.name)&lt;br /&gt;
			local canonicalName = mw.ustring.lower(ns.canonicalName)&lt;br /&gt;
			mappings[nsname] = {nsname}&lt;br /&gt;
			if canonicalName ~= nsname then&lt;br /&gt;
				table.insert(mappings[nsname], canonicalName)&lt;br /&gt;
			end&lt;br /&gt;
			for _, alias in ipairs(ns.aliases) do&lt;br /&gt;
				table.insert(mappings[nsname], mw.ustring.lower(alias))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	argKeys = argKeys,&lt;br /&gt;
	cfg = cfg,&lt;br /&gt;
	mappings = getParamMappings()&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Namespace_detect/data</comments>
		</item>
		<item>
			<title>Module:Namespace detect</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect&amp;diff=344&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect&amp;diff=344&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Namespace_detect&quot; title=&quot;Module:Namespace detect&quot;&gt;Module:Namespace detect&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--                            NAMESPACE DETECT                                --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module implements the {{namespace detect}} template in Lua, with a    --&lt;br /&gt;
-- few improvements: all namespaces and all namespace aliases are supported,  --&lt;br /&gt;
-- and namespace names are detected automatically for the local wiki. The     --&lt;br /&gt;
-- module can also use the corresponding subject namespace value if it is     --&lt;br /&gt;
-- used on a talk page. Parameter names can be configured for different wikis --&lt;br /&gt;
-- by altering the values in the &amp;quot;cfg&amp;quot; table in                               --&lt;br /&gt;
-- Module:Namespace detect/config.                                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local data = mw.loadData(&amp;#039;Module:Namespace detect/data&amp;#039;)&lt;br /&gt;
local argKeys = data.argKeys&lt;br /&gt;
local cfg = data.cfg&lt;br /&gt;
local mappings = data.mappings&lt;br /&gt;
&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local mArguments -- Lazily initialise Module:Arguments&lt;br /&gt;
local mTableTools -- Lazily initilalise Module:TableTools&lt;br /&gt;
local ustringLower = mw.ustring.lower&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function fetchValue(t1, t2)&lt;br /&gt;
	-- Fetches a value from the table t1 for the first key in array t2 where&lt;br /&gt;
	-- a non-nil value of t1 exists.&lt;br /&gt;
	for i, key in ipairs(t2) do&lt;br /&gt;
		local value = t1[key]&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function equalsArrayValue(t, value)&lt;br /&gt;
	-- Returns true if value equals a value in the array t. Otherwise&lt;br /&gt;
	-- returns false.&lt;br /&gt;
	for i, arrayValue in ipairs(t) do&lt;br /&gt;
		if value == arrayValue then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPageObject(page)&lt;br /&gt;
	-- Get the page object, passing the function through pcall in case of&lt;br /&gt;
	-- errors, e.g. being over the expensive function count limit.&lt;br /&gt;
	if page then&lt;br /&gt;
		local success, pageObject = pcall(mw.title.new, page)&lt;br /&gt;
		if success then&lt;br /&gt;
			return pageObject&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provided for backward compatibility with other modules&lt;br /&gt;
function p.getParamMappings()&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getNamespace(args)&lt;br /&gt;
	-- This function gets the namespace name from the page object.&lt;br /&gt;
	local page = fetchValue(args, argKeys.demopage)&lt;br /&gt;
	if page == &amp;#039;&amp;#039; then&lt;br /&gt;
		page = nil&lt;br /&gt;
	end&lt;br /&gt;
	local demospace = fetchValue(args, argKeys.demospace)&lt;br /&gt;
	if demospace == &amp;#039;&amp;#039; then&lt;br /&gt;
		demospace = nil&lt;br /&gt;
	end&lt;br /&gt;
	local subjectns = fetchValue(args, argKeys.subjectns)&lt;br /&gt;
	local ret&lt;br /&gt;
	if demospace then&lt;br /&gt;
		-- Handle &amp;quot;demospace = main&amp;quot; properly.&lt;br /&gt;
		if equalsArrayValue(argKeys.main, ustringLower(demospace)) then&lt;br /&gt;
			ret = mw.site.namespaces[0].name&lt;br /&gt;
		else&lt;br /&gt;
			ret = demospace&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local pageObject = p.getPageObject(page)&lt;br /&gt;
		if pageObject then&lt;br /&gt;
			if pageObject.isTalkPage then&lt;br /&gt;
				-- Get the subject namespace if the option is set,&lt;br /&gt;
				-- otherwise use &amp;quot;talk&amp;quot;.&lt;br /&gt;
				if yesno(subjectns) then&lt;br /&gt;
					ret = mw.site.namespaces[pageObject.namespace].subject.name&lt;br /&gt;
				else&lt;br /&gt;
					ret = &amp;#039;talk&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				ret = pageObject.nsText&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return nil -- return nil if the page object doesn&amp;#039;t exist.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret:gsub(&amp;#039;_&amp;#039;, &amp;#039; &amp;#039;)&lt;br /&gt;
	return ustringLower(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Check the parameters stored in the mappings table for any matches.&lt;br /&gt;
	local namespace = getNamespace(args) or &amp;#039;other&amp;#039; -- &amp;quot;other&amp;quot; avoids nil table keys&lt;br /&gt;
	local params = mappings[namespace] or {}&lt;br /&gt;
	local ret = fetchValue(args, params)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- If there were no matches, return parameters for other namespaces.&lt;br /&gt;
	-- This happens if there was no text specified for the namespace that&lt;br /&gt;
	-- was detected or if the demospace parameter is not a valid&lt;br /&gt;
	-- namespace. Note that the parameter for the detected namespace must be&lt;br /&gt;
	-- completely absent for this to happen, not merely blank.&lt;br /&gt;
	--]]&lt;br /&gt;
	if ret == nil then&lt;br /&gt;
		ret = fetchValue(args, argKeys.other)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	mArguments = require(&amp;#039;Module:Arguments&amp;#039;)&lt;br /&gt;
	local args = mArguments.getArgs(frame, {removeBlanks = false})&lt;br /&gt;
	local ret = p._main(args)&lt;br /&gt;
	return ret or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Create a wikitable of all subject namespace parameters, for&lt;br /&gt;
	-- documentation purposes. The talk parameter is optional, in case it&lt;br /&gt;
	-- needs to be excluded in the documentation.&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	-- Load modules and initialise variables.&lt;br /&gt;
	mTableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
	local namespaces = mw.site.namespaces&lt;br /&gt;
	local cfg = data.cfg&lt;br /&gt;
	local useTalk = type(frame) == &amp;#039;table&amp;#039; &lt;br /&gt;
		and type(frame.args) == &amp;#039;table&amp;#039; &lt;br /&gt;
		and yesno(frame.args.talk) -- Whether to use the talk parameter.&lt;br /&gt;
	&lt;br /&gt;
	-- Get the header names.&lt;br /&gt;
	local function checkValue(value, default)&lt;br /&gt;
		if type(value) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			return value&lt;br /&gt;
		else&lt;br /&gt;
			return default&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local nsHeader = checkValue(cfg.wikitableNamespaceHeader, &amp;#039;Namespace&amp;#039;)&lt;br /&gt;
	local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, &amp;#039;Aliases&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Put the namespaces in order.&lt;br /&gt;
	local mappingsOrdered = {}&lt;br /&gt;
	for nsname, params in pairs(mappings) do&lt;br /&gt;
		if useTalk or nsname ~= &amp;#039;talk&amp;#039; then&lt;br /&gt;
			local nsid = namespaces[nsname].id&lt;br /&gt;
			-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.&lt;br /&gt;
			nsid = nsid + 1 &lt;br /&gt;
			mappingsOrdered[nsid] = params&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)&lt;br /&gt;
&lt;br /&gt;
	-- Build the table.&lt;br /&gt;
	local ret = &amp;#039;{| class=&amp;quot;wikitable&amp;quot;&amp;#039;&lt;br /&gt;
		.. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
		.. &amp;#039;\n! &amp;#039; .. nsHeader&lt;br /&gt;
		.. &amp;#039;\n! &amp;#039; .. aliasesHeader&lt;br /&gt;
	for i, params in ipairs(mappingsOrdered) do&lt;br /&gt;
		for j, param in ipairs(params) do&lt;br /&gt;
			if j == 1 then&lt;br /&gt;
				ret = ret .. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
					.. &amp;#039;\n| &amp;lt;code&amp;gt;&amp;#039; .. param .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
					.. &amp;#039;\n| &amp;#039;&lt;br /&gt;
			elseif j == 2 then&lt;br /&gt;
				ret = ret .. &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. param .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				ret = ret .. &amp;#039;, &amp;lt;code&amp;gt;&amp;#039; .. param .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret .. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
		.. &amp;#039;\n|}&amp;#039;&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Namespace_detect</comments>
		</item>
		<item>
			<title>Module:Navbar/configuration</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/configuration&amp;diff=342&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/configuration&amp;diff=342&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbar/configuration&quot; title=&quot;Module:Navbar/configuration&quot;&gt;Module:Navbar/configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return {&lt;br /&gt;
	[&amp;#039;templatestyles&amp;#039;] = &amp;#039;Module:Navbar/styles.css&amp;#039;,&lt;br /&gt;
	[&amp;#039;hlist_templatestyles&amp;#039;] = &amp;#039;Hlist/styles.css&amp;#039;,&lt;br /&gt;
	[&amp;#039;box_text&amp;#039;] = &amp;#039;This box: &amp;#039;,			-- default text box when not plain or mini&lt;br /&gt;
	[&amp;#039;title_namespace&amp;#039;] = &amp;#039;Template&amp;#039;,		-- namespace to default to for title&lt;br /&gt;
	[&amp;#039;invalid_title&amp;#039;] = &amp;#039;Invalid title &amp;#039;,&lt;br /&gt;
	[&amp;#039;classes&amp;#039;] = { -- set a line to nil if you don&amp;#039;t want it&lt;br /&gt;
		[&amp;#039;navbar&amp;#039;] = &amp;#039;navbar&amp;#039;,&lt;br /&gt;
		[&amp;#039;plainlinks&amp;#039;] = &amp;#039;plainlinks&amp;#039;, -- plainlinks&lt;br /&gt;
		[&amp;#039;horizontal_list&amp;#039;] = &amp;#039;hlist&amp;#039;, -- horizontal list class&lt;br /&gt;
		[&amp;#039;mini&amp;#039;] = &amp;#039;navbar-mini&amp;#039;, -- class indicating small links in the navbar&lt;br /&gt;
		[&amp;#039;this_box&amp;#039;] = &amp;#039;navbar-boxtext&amp;#039;,&lt;br /&gt;
		[&amp;#039;brackets&amp;#039;] = &amp;#039;navbar-brackets&amp;#039;,&lt;br /&gt;
		-- &amp;#039;collapsible&amp;#039; is the key for a class to indicate the navbar is&lt;br /&gt;
		-- setting up the collapsible element in addition to the normal&lt;br /&gt;
		-- navbar.&lt;br /&gt;
		[&amp;#039;collapsible&amp;#039;] = &amp;#039;navbar-collapse&amp;#039;,&lt;br /&gt;
		[&amp;#039;collapsible_title_mini&amp;#039;] = &amp;#039;navbar-ct-mini&amp;#039;,&lt;br /&gt;
		[&amp;#039;collapsible_title_full&amp;#039;] = &amp;#039;navbar-ct-full&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navbar/configuration</comments>
		</item>
		<item>
			<title>Module:Formatted appearance</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Formatted_appearance&amp;diff=340&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Formatted_appearance&amp;diff=340&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Formatted_appearance&quot; title=&quot;Module:Formatted appearance&quot;&gt;Module:Formatted appearance&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module requires the use of Module:List.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Local function which is used to get a correctly formatted entry.&lt;br /&gt;
-- Function checks if the array had a value added by checking the counter,&lt;br /&gt;
-- and returns the relevant result.&lt;br /&gt;
local function getFormattedEntry(args, counter)&lt;br /&gt;
	if (counter == 1) then																				-- Check if the counter stayed the same.&lt;br /&gt;
		return &amp;quot;&amp;quot;																						-- Nothing was added to array; Return empty string.&lt;br /&gt;
	elseif (counter == 2) then																			-- Check if only one value was added to the array.&lt;br /&gt;
		return args[1]																					-- Only one value was added to array; Return that value.&lt;br /&gt;
	else																								-- The array had more than one value added.&lt;br /&gt;
		return table.concat(args, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;)														-- Retrieve the formatted plainlist.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Local function which is used to format an appearance for a comic book,&lt;br /&gt;
in the style of:&lt;br /&gt;
	Line 1: &amp;lt;comic book title&amp;gt; #&amp;lt;issue number&amp;gt; (with comic book title in italics)&lt;br /&gt;
	Line 2: &amp;lt;release date&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For other usages, see createGenericEntry().&lt;br /&gt;
&lt;br /&gt;
The function works with the following combinations:&lt;br /&gt;
	-- Only comic book title (example: &amp;quot;The Incredible Hulk&amp;quot;).&lt;br /&gt;
	-- Title and issue number (example: &amp;quot;The Incredible Hulk&amp;quot; and &amp;quot;181&amp;quot;).&lt;br /&gt;
	-- Title and release date (example: &amp;quot;The Incredible Hulk and &amp;quot;November 1974&amp;quot;).&lt;br /&gt;
	-- Title, issue number and release date (example: &amp;quot;The Incredible Hulk&amp;quot;, &amp;quot;181&amp;quot; and &amp;quot;November 1974&amp;quot;).&lt;br /&gt;
	&lt;br /&gt;
	-- Only release date (example: &amp;quot;November 1974&amp;quot;).&lt;br /&gt;
--]]&lt;br /&gt;
local function createComicEntry(appearanceMajor, appearanceMinor, appearanceDate)&lt;br /&gt;
	local fullString = {}																				-- Variable to save the array.&lt;br /&gt;
	local counter = 1																					-- Variable to save the array counter.&lt;br /&gt;
	&lt;br /&gt;
	if (appearanceMajor ~= nil) then																	-- Check if a comic book title was entered.&lt;br /&gt;
&lt;br /&gt;
		if (appearanceMinor == nil) then																-- A comic book title was entered; Check if a issue number was entered.&lt;br /&gt;
			fullString[counter] = appearanceMajor 														-- A issue was not entered; Add only the comic book title to the array.&lt;br /&gt;
			counter = counter + 1																		-- Increment counter by one.&lt;br /&gt;
		else &lt;br /&gt;
			fullString[counter] = appearanceMajor .. &amp;quot; &amp;quot; .. appearanceMinor								-- A issue was entered; Add both to the array.&lt;br /&gt;
			counter = counter + 1																		-- Increment counter by one.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (appearanceDate ~= nil) then																		-- Check if a release date was entered.&lt;br /&gt;
		fullString[counter] = appearanceDate															-- A release date was entered; Add it to the array.&lt;br /&gt;
		counter = counter + 1																			-- Increment counter by one.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return getFormattedEntry(fullString, counter)														-- Call getFormattedEntry() to get a correctly formatted entry.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Local function which is used to format an appearance for most usages,&lt;br /&gt;
including television, film, books, songs and games, in the style of:&lt;br /&gt;
	Line 1: &amp;lt;minor work title&amp;gt; (in quotes) (Minor works include: TV episodes, chapters, songs and game missions)&lt;br /&gt;
	Line 2: &amp;lt;major work title&amp;gt; (in italics) (Major works include: TV series, films, books, albums and games)&lt;br /&gt;
	Line 3: &amp;lt;release date&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For comic book usages, see createComicEntry().&lt;br /&gt;
&lt;br /&gt;
The function works with the following combinations:&lt;br /&gt;
	-- Only minor work title (example: &amp;quot;Live Together, Die Alone&amp;quot;).&lt;br /&gt;
	-- Minor work title and major work title (example: &amp;quot;Live Together, Die Alone&amp;quot; and &amp;quot;Lost&amp;quot;).&lt;br /&gt;
	-- Minor work title and release date (example: &amp;quot;Live Together, Die Alone&amp;quot; and &amp;quot;May 24, 2006&amp;quot;).&lt;br /&gt;
	-- Minor work title, major work title and release date (example: &amp;quot;Live Together, Die Alone&amp;quot;, &amp;quot;Lost&amp;quot; and &amp;quot;May 24, 2006&amp;quot;).&lt;br /&gt;
	&lt;br /&gt;
	-- Only major work title (example: &amp;quot;Lost&amp;quot;).&lt;br /&gt;
	-- major work title and release date (example: &amp;quot;Lost&amp;quot; and &amp;quot;May 24, 2006&amp;quot;).&lt;br /&gt;
	&lt;br /&gt;
	-- Only release date (example: &amp;quot;May 24, 2006&amp;quot;).&lt;br /&gt;
--]]&lt;br /&gt;
local function createGenericEntry(appearanceMajor, appearanceMinor, appearanceDate)&lt;br /&gt;
	local fullString = {}																				-- Variable to save the array.&lt;br /&gt;
	local counter = 1																					-- Variable to save the array counter.&lt;br /&gt;
	&lt;br /&gt;
	if (appearanceMinor ~= nil) then																	-- Check if a minor appearance was entered.&lt;br /&gt;
		fullString[counter] = appearanceMinor															-- A minor appearance was entered; Add it to the array.&lt;br /&gt;
		counter = counter + 1																			-- Increment counter by one.&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (appearanceMajor ~= nil) then																	-- Check if a major appearance was entered.&lt;br /&gt;
		fullString[counter] = appearanceMajor															-- A major appearance was entered; Add it to the array.&lt;br /&gt;
		counter = counter + 1																			-- Increment counter by one.&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (appearanceDate ~= nil) then																		-- Check if a release date was entered.&lt;br /&gt;
		fullString[counter] = appearanceDate															-- A release date was entered; Add it to the array.&lt;br /&gt;
		counter = counter + 1																			-- Increment counter by one.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return getFormattedEntry(fullString, counter)														-- Call getFormattedEntry() to get a correctly formatted entry.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Local function which is used to format with a hash symbol comic book issues.&lt;br /&gt;
-- For other minor works, see getFormattedGenericMinorWork().&lt;br /&gt;
local function getFormattedComicMinorWorkTitle(issue)&lt;br /&gt;
	if (issue ~= nil) then																				-- Check if the issue is not nil.&lt;br /&gt;
		if (string.find(issue, &amp;quot;#&amp;quot;)) then																-- Check if the issue already has a hash symbol.&lt;br /&gt;
			return issue																				-- Hash symbol already present; Return issue.&lt;br /&gt;
		else&lt;br /&gt;
			local formattedString = string.gsub(issue, &amp;quot;%d+&amp;quot;, &amp;quot;#%1&amp;quot;)									-- Hash symbol not found; Add the symbol before the issue number.&lt;br /&gt;
			return formattedString																		-- Return issue.&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil																						-- issue is nil; Return nil.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Local function which is used to format with quotes a minor work title of most types.&lt;br /&gt;
-- For comic book issues, see getFormattedComicMinorWork() (see [MOS:MINORWORK]).&lt;br /&gt;
local function getFormattedGenericMinorWorkTitle(title)&lt;br /&gt;
	if (title ~= nil) then																				-- Check if the title is not nil.&lt;br /&gt;
		return &amp;quot;\&amp;quot;&amp;quot; .. title .. &amp;quot;\&amp;quot;&amp;quot;																	-- Title is not nil; Add quotes to the title.&lt;br /&gt;
	else&lt;br /&gt;
		return nil																						-- Title is nil; Return nil.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Local function which is used to format with italics a major work title (see [MOS:MAJORWORK]).&lt;br /&gt;
local function getFormattedMajorWorkTitle(title)&lt;br /&gt;
	if (title ~= nil) then																				-- Check if the title is not nil.&lt;br /&gt;
		return &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. title .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;																	-- Title is not nil; Add italics to the title.&lt;br /&gt;
	else&lt;br /&gt;
		return nil																						-- Title is nil; Return nil.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Local function which does the actual main process.&lt;br /&gt;
local function _getFormattedAppearance(args)&lt;br /&gt;
	local appearanceMajor = args[&amp;#039;major_work&amp;#039;]															-- Get the title of the major work.&lt;br /&gt;
	local appearanceMinor = args[&amp;#039;minor_work&amp;#039;]															-- Get the title of the minor work.&lt;br /&gt;
	&lt;br /&gt;
	local isComic = false																				-- Variable to save the status of wether the appearence is from a comic book.&lt;br /&gt;
	if (args[&amp;#039;issue&amp;#039;] ~= nil) then																		-- Check if the comic specific issue is not nil.					&lt;br /&gt;
		appearanceMinor = args[&amp;#039;issue&amp;#039;]																	-- Issue is not nil; Get the issue number.&lt;br /&gt;
		isComic = true																					-- Set isComic to true.&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local appearanceDate = args[&amp;#039;date&amp;#039;]																	-- Get the release date of the minor work.&lt;br /&gt;
	&lt;br /&gt;
	local formattedAppearanceMajor = getFormattedMajorWorkTitle(appearanceMajor)						-- Call getFormattedMajorWorkTitle() to get a formatted major work title.&lt;br /&gt;
&lt;br /&gt;
	if (isComic == false) then																			-- Check if the appearance is a comic book appearance.&lt;br /&gt;
																										-- The appearance is not a comic book appearance; &lt;br /&gt;
		local formattedAppearanceMinor = getFormattedGenericMinorWorkTitle(appearanceMinor)				-- Call getFormattedGenericMinorWorkTitle() to get a formatted minor work title.&lt;br /&gt;
		return createGenericEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate)	-- Call createGenericEntry() to create an appearance entry.&lt;br /&gt;
	else&lt;br /&gt;
																										-- The appearance is a comic book appearance. &lt;br /&gt;
		local formattedAppearanceMinor = getFormattedComicMinorWorkTitle(appearanceMinor)				-- Call getFormattedComicMinorWorkTitle() to get a formatted minor work title.&lt;br /&gt;
		return createComicEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate)		-- Call createComicEntry() to create a comic book appearance entry.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Public function which is used to format the |first_appeared= and |last_appeared= fields.&lt;br /&gt;
The usage of this module allows for correct title formatting (see [MOS:MAJORWORK] and [MOS:MINORWORK]),&lt;br /&gt;
and correct line breaks based on guidelines (see [WP:UBLIST]).&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
	-- |major_work=		— optional; The title of the major work the fictional element appeared in.&lt;br /&gt;
										Major works include TV series, films, books, albums and games.&lt;br /&gt;
	-- |minor_work=		— optional; The title of the minor work the fictional element appeared in.&lt;br /&gt;
										Minor works include TV episodes, chapters, songs and game missions.&lt;br /&gt;
	-- |issue=			— optional; The number of the comic book issue the fictional element appeared in.&lt;br /&gt;
	-- |date=			— optional; The date of the publication/release of the minor work where the fictional element appeared in.&lt;br /&gt;
--]]&lt;br /&gt;
function p.getFormattedAppearance(frame)&lt;br /&gt;
	local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs													-- Use Module:Arguments to access module arguments.&lt;br /&gt;
	local args = getArgs(frame)																			-- Get the arguments sent via the template.&lt;br /&gt;
&lt;br /&gt;
	return _getFormattedAppearance(args)																-- Call _getFormattedAppearance() to perform the actual process.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Formatted_appearance</comments>
		</item>
		<item>
			<title>Module:List</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:List&amp;diff=338&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:List&amp;diff=338&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:List&quot; title=&quot;Module:List&quot;&gt;Module:List&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local libUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	[&amp;#039;bulleted&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;unbulleted&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;horizontal&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ordered&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;horizontal_ordered&amp;#039;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.makeListData(listType, args)&lt;br /&gt;
	-- Constructs a data table to be passed to p.renderList.&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Classes and TemplateStyles&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	data.templatestyles = &amp;#039;&amp;#039;&lt;br /&gt;
	if listType == &amp;#039;horizontal&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		table.insert(data.classes, &amp;#039;hlist&amp;#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Hlist/styles.css&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	elseif listType == &amp;#039;unbulleted&amp;#039; then&lt;br /&gt;
		table.insert(data.classes, &amp;#039;plainlist&amp;#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Plainlist/styles.css&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(data.classes, args.class)&lt;br /&gt;
&lt;br /&gt;
	-- Main div style&lt;br /&gt;
	data.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Indent for horizontal lists&lt;br /&gt;
	if listType == &amp;#039;horizontal&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		local indent = tonumber(args.indent)&lt;br /&gt;
		indent = indent and indent * 1.6 or 0&lt;br /&gt;
		if indent &amp;gt; 0 then&lt;br /&gt;
			data.marginLeft = indent .. &amp;#039;em&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List style types for ordered lists&lt;br /&gt;
	-- This could be &amp;quot;1, 2, 3&amp;quot;, &amp;quot;a, b, c&amp;quot;, or a number of others. The list style&lt;br /&gt;
	-- type is either set by the &amp;quot;type&amp;quot; attribute or the &amp;quot;list-style-type&amp;quot; CSS&lt;br /&gt;
	-- property.&lt;br /&gt;
	if listType == &amp;#039;ordered&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args[&amp;#039;list-style-type&amp;#039;]&lt;br /&gt;
		data.type = args[&amp;#039;type&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
		-- Detect invalid type attributes and attempt to convert them to&lt;br /&gt;
		-- list-style-type CSS properties.&lt;br /&gt;
		if data.type &lt;br /&gt;
			and not data.listStyleType&lt;br /&gt;
			and not tostring(data.type):find(&amp;#039;^%s*[1AaIi]%s*$&amp;#039;)&lt;br /&gt;
		then&lt;br /&gt;
			data.listStyleType = data.type&lt;br /&gt;
			data.type = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List tag type&lt;br /&gt;
	if listType == &amp;#039;ordered&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		data.listTag = &amp;#039;ol&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = &amp;#039;ul&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start number for ordered lists&lt;br /&gt;
	data.start = args.start&lt;br /&gt;
	if listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		-- Apply fix to get start numbers working with horizontal ordered lists.&lt;br /&gt;
		local startNum = tonumber(data.start)&lt;br /&gt;
		if startNum then&lt;br /&gt;
			data.counterReset = &amp;#039;listitem &amp;#039; .. tostring(startNum - 1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- List style&lt;br /&gt;
	 -- ul_style and ol_style are included for backwards compatibility. No&lt;br /&gt;
	 -- distinction is made for ordered or unordered lists.&lt;br /&gt;
	data.listStyle = args.list_style&lt;br /&gt;
&lt;br /&gt;
	-- List items&lt;br /&gt;
	-- li_style is included for backwards compatibility. item_style was included&lt;br /&gt;
	-- to be easier to understand for non-coders.&lt;br /&gt;
	data.itemStyle = args.item_style or args.li_style&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	for _, num in ipairs(mTableTools.numKeys(args)) do&lt;br /&gt;
		local item = {}&lt;br /&gt;
		item.content = args[num]&lt;br /&gt;
		item.style = args[&amp;#039;item&amp;#039; .. tostring(num) .. &amp;#039;_style&amp;#039;]&lt;br /&gt;
			or args[&amp;#039;item_style&amp;#039; .. tostring(num)]&lt;br /&gt;
		item.value = args[&amp;#039;item&amp;#039; .. tostring(num) .. &amp;#039;_value&amp;#039;]&lt;br /&gt;
			or args[&amp;#039;item_value&amp;#039; .. tostring(num)]&lt;br /&gt;
		table.insert(data.items, item)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderList(data)&lt;br /&gt;
	-- Renders the list HTML.&lt;br /&gt;
	&lt;br /&gt;
	-- Return the blank string if there are no list items.&lt;br /&gt;
	if type(data.items) ~= &amp;#039;table&amp;#039; or #data.items &amp;lt; 1 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	for _, class in ipairs(data.classes or {}) do&lt;br /&gt;
		root:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	root:css{[&amp;#039;margin-left&amp;#039;] = data.marginLeft}&lt;br /&gt;
	if data.style then&lt;br /&gt;
		root:cssText(data.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list tag.&lt;br /&gt;
	local list = root:tag(data.listTag or &amp;#039;ul&amp;#039;)&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			[&amp;#039;counter-reset&amp;#039;] = data.counterReset,&lt;br /&gt;
			[&amp;#039;list-style-type&amp;#039;] = data.listStyleType&lt;br /&gt;
		}&lt;br /&gt;
	if data.listStyle then&lt;br /&gt;
		list:cssText(data.listStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list items&lt;br /&gt;
	for _, t in ipairs(data.items or {}) do&lt;br /&gt;
		local item = list:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		if data.itemStyle then&lt;br /&gt;
			item:cssText(data.itemStyle)&lt;br /&gt;
		end&lt;br /&gt;
		if t.style then&lt;br /&gt;
			item:cssText(t.style)&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
			:attr{value = t.value}&lt;br /&gt;
			:wikitext(t.content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return data.templatestyles .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args)&lt;br /&gt;
	local isDeprecated = false -- Tracks deprecated parameters.&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		if k:find(&amp;#039;^item_style%d+$&amp;#039;) or k:find(&amp;#039;^item_value%d+$&amp;#039;) then&lt;br /&gt;
			isDeprecated = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
	if isDeprecated then&lt;br /&gt;
		ret = ret .. &amp;#039;[[Category:List templates with deprecated parameters]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeList(listType, args)&lt;br /&gt;
	if not listType or not listTypes[listType] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &amp;#039;makeList&amp;#039; (&amp;#039;%s&amp;#039; is not a valid list type)&amp;quot;,&lt;br /&gt;
			tostring(listType)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	checkType(&amp;#039;makeList&amp;#039;, 2, args, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local data = p.makeListData(listType, args)&lt;br /&gt;
	local list = p.renderList(data)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args)&lt;br /&gt;
	return list .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for listType in pairs(listTypes) do&lt;br /&gt;
	p[listType] = function (frame)&lt;br /&gt;
		local mArguments = require(&amp;#039;Module:Arguments&amp;#039;)&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame, {&lt;br /&gt;
			frameOnly = ((frame and frame.args and frame.args.frameonly or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039;),&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
			if not value or not mw.ustring.find(value, &amp;#039;%S&amp;#039;) then return nil end&lt;br /&gt;
			if mw.ustring.find(value, &amp;#039;^%s*[%*#;:]&amp;#039;) then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return value:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		})&lt;br /&gt;
		-- Copy all the arguments to a new table, for faster indexing.&lt;br /&gt;
		local args = {}&lt;br /&gt;
		for k, v in pairs(origArgs) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		return p.makeList(listType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:List</comments>
		</item>
		<item>
			<title>Module:Navpills</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navpills&amp;diff=336&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navpills&amp;diff=336&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navpills&quot; title=&quot;Module:Navpills&quot;&gt;Module:Navpills&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local mArguments --initialize lazily&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
-- for the specified prefix. For example, if the prefix was &amp;#039;data&amp;#039;, and&lt;br /&gt;
-- &amp;#039;data1&amp;#039;, &amp;#039;data2&amp;#039;, and &amp;#039;data5&amp;#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
local function getArgNums(prefix, args)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match(&amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Implements {{Navpills}} from the frame&lt;br /&gt;
function p.navpills( frame )&lt;br /&gt;
	mArguments = require( &amp;#039;Module:Arguments&amp;#039; )&lt;br /&gt;
	return p._navpills( mArguments.getArgs( frame ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navpills( args )&lt;br /&gt;
	if not args then&lt;br /&gt;
		return &amp;#039;Missing arguments&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = mw.html.create( &amp;#039;div&amp;#039; ):addClass( &amp;#039;template-navpills&amp;#039; ):attr( &amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	for i, _ in ipairs( getArgNums( &amp;#039;page&amp;#039;, args ) ) do&lt;br /&gt;
		if not args[ &amp;#039;page&amp;#039; .. i ] then return end&lt;br /&gt;
		local num = tostring( i )&lt;br /&gt;
		local navpill = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;template-navpill&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[ &amp;#039;image&amp;#039; .. i ] then&lt;br /&gt;
			navpill:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;template-navpill-background&amp;#039;)&lt;br /&gt;
				:wikitext( string.format( &amp;#039;[[File:%s|x48px|link=]]&amp;#039;, args[ &amp;#039;image&amp;#039; .. num ] ) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		navpill:wikitext( string.format( &amp;#039;[[%s|%s]]&amp;#039;, args[ &amp;#039;page&amp;#039; .. num ], args[ &amp;#039;text&amp;#039; .. num ] or args[ &amp;#039;page&amp;#039; .. num ] ) )&lt;br /&gt;
		html:node(navpill)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Module:Navpills/styles.css&amp;#039; }&lt;br /&gt;
	} .. tostring( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navpills</comments>
		</item>
		<item>
			<title>Module:Navbox/styles.css</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/styles.css&amp;diff=334&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/styles.css&amp;diff=334&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbox/styles.css&quot; title=&quot;Module:Navbox/styles.css&quot;&gt;Module:Navbox/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.navbox {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 1px;&lt;br /&gt;
	margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
	margin-top: 0; /* No top margin for nested navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */&lt;br /&gt;
.navbox + .navbox-styles + .navbox {&lt;br /&gt;
	margin-top: -1px; /* Single pixel border between adjacent navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
	padding: 0.25em 1em;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	background-color: #fdfdfd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-color: #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list-with-group {&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	border-left-width: 2px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* cell spacing for navbox cells */&lt;br /&gt;
/* Borders above 2nd, 3rd, etc. rows */&lt;br /&gt;
/* TODO: figure out how to replace tr as structure;&lt;br /&gt;
 * with div structure it should be just a matter of first-child */&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,&lt;br /&gt;
tr + tr &amp;gt; .navbox-group,&lt;br /&gt;
tr + tr &amp;gt; .navbox-image,&lt;br /&gt;
tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
	border-top: 2px solid #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
	background-color: #ccf; /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
	background-color: #ddf; /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
	background-color: #e6e6ff; /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
	background-color: #f7f7f7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: figure out how to remove reliance on td as structure */&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
	padding: 0.125em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** T367463 */&lt;br /&gt;
body.skin--responsive .navbox-image img {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .navbox {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navbox/styles.css</comments>
		</item>
		<item>
			<title>Module:Navbox/configuration</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/configuration&amp;diff=332&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/configuration&amp;diff=332&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbox/configuration&quot; title=&quot;Module:Navbox/configuration&quot;&gt;Module:Navbox/configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return {&lt;br /&gt;
	aria_label = &amp;#039;Navbox&amp;#039;,&lt;br /&gt;
	nowrap_item = &amp;#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Module:Navbox/styles.css&amp;#039; }&lt;br /&gt;
	},&lt;br /&gt;
	hlist_templatestyles = &amp;#039;Hlist/styles.css&amp;#039;,&lt;br /&gt;
	plainlist_templatestyles = &amp;#039;Plainlist/styles.css&amp;#039;,&lt;br /&gt;
	-- do not localize marker table&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &amp;#039;\127_ODDEVEN_\127&amp;#039;,&lt;br /&gt;
		restart = &amp;#039;\127_ODDEVEN0_\127&amp;#039;,&lt;br /&gt;
		regex = &amp;#039;\127_ODDEVEN(%d?)_\127&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		orphan = &amp;#039;[[Category:Navbox orphans]]&amp;#039;,&lt;br /&gt;
		horizontal_lists = &amp;#039;Navigational boxes without horizontal lists&amp;#039;,&lt;br /&gt;
		background_colors = &amp;#039;Navboxes using background colours&amp;#039;,&lt;br /&gt;
		illegible = &amp;#039;Potentially illegible navboxes&amp;#039;,&lt;br /&gt;
		borders = &amp;#039;Navboxes using borders&amp;#039;,&lt;br /&gt;
		without_first_col = &amp;#039;[[Category:Pages using navbox columns without the first column]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	keyword = {&lt;br /&gt;
		border_subgroup = &amp;#039;subgroup&amp;#039;,&lt;br /&gt;
		border_child = &amp;#039;child&amp;#039;,&lt;br /&gt;
		border_none = &amp;#039;none&amp;#039;,&lt;br /&gt;
		evenodd_swap = &amp;#039;swap&amp;#039;,&lt;br /&gt;
		navbar_off = &amp;#039;off&amp;#039;,&lt;br /&gt;
		navbar_plain = &amp;#039;plain&amp;#039;,&lt;br /&gt;
		nocat_false = &amp;#039;false&amp;#039;,&lt;br /&gt;
		nowrapitems_yes = &amp;#039;yes&amp;#039;,&lt;br /&gt;
		orphan_yes = &amp;#039;yes&amp;#039;,&lt;br /&gt;
		state_collapsed = &amp;#039;collapsed&amp;#039;,&lt;br /&gt;
		state_off = &amp;#039;off&amp;#039;,&lt;br /&gt;
		state_plain = &amp;#039;plain&amp;#039;,&lt;br /&gt;
		state_uncollapsed = &amp;#039;uncollapsed&amp;#039;,&lt;br /&gt;
		subgroups = {&amp;#039;subgroup&amp;#039;, &amp;#039;child&amp;#039;, &amp;#039;&amp;#039;},&lt;br /&gt;
		subpage_doc = &amp;#039;doc&amp;#039;,&lt;br /&gt;
		subpage_sandbox = &amp;#039;sandbox&amp;#039;,&lt;br /&gt;
		subpage_testcases = &amp;#039;testcases&amp;#039;,&lt;br /&gt;
		tracking_no = &amp;#039;no&amp;#039;,&lt;br /&gt;
		with_collapsible_groups = &amp;#039;with collapsible groups&amp;#039;,&lt;br /&gt;
		with_columns = &amp;#039;with columns&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	class = {&lt;br /&gt;
		autocollapse = &amp;#039;autocollapse&amp;#039;,&lt;br /&gt;
		collapsible = &amp;#039;mw-collapsible&amp;#039;,&lt;br /&gt;
		collapsed = &amp;#039;mw-collapsed&amp;#039;,&lt;br /&gt;
		-- Warning&lt;br /&gt;
		navbox = &amp;#039;navbox&amp;#039;, -- WMF currently hides &amp;#039;navbox&amp;#039; from mobile,&lt;br /&gt;
		-- so you probably shouldn&amp;#039;t change the navbox class.&lt;br /&gt;
		navbox_abovebelow = &amp;#039;navbox-abovebelow&amp;#039;,&lt;br /&gt;
		navbox_group = &amp;#039;navbox-group&amp;#039;,&lt;br /&gt;
		navbox_image = &amp;#039;navbox-image&amp;#039;,&lt;br /&gt;
		navbox_inner = &amp;#039;navbox-inner&amp;#039;,&lt;br /&gt;
		navbox_list = &amp;#039;navbox-list&amp;#039;,&lt;br /&gt;
		navbox_list_with_group = &amp;#039;navbox-list-with-group&amp;#039;,&lt;br /&gt;
		navbox_part = &amp;#039;navbox-&amp;#039;, -- do not l10n&lt;br /&gt;
		navbox_styles = &amp;#039;navbox-styles&amp;#039;,&lt;br /&gt;
		navbox_subgroup = &amp;#039;navbox-subgroup&amp;#039;,&lt;br /&gt;
		navbox_title = &amp;#039;navbox-title&amp;#039;, -- l10n only if you change pattern.navbox_title below&lt;br /&gt;
		navbox_odd_part = &amp;#039;odd&amp;#039;, -- do not l10n&lt;br /&gt;
		navbox_even_part = &amp;#039;even&amp;#039;, -- do not l10n&lt;br /&gt;
		nomobile = &amp;#039;nomobile&amp;#039;,&lt;br /&gt;
		nowraplinks = &amp;#039;nowraplinks&amp;#039;,&lt;br /&gt;
		noviewer = &amp;#039;noviewer&amp;#039;, -- used to remove images from MediaViewer&lt;br /&gt;
		notheme = &amp;#039;notheme&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		class = &amp;#039;class&amp;#039;,&lt;br /&gt;
		colnum = &amp;#039;^col(%d+)$&amp;#039;,&lt;br /&gt;
		colheadernum = &amp;#039;^col(%d+)header$&amp;#039;,&lt;br /&gt;
		colfooternum = &amp;#039;^col(%d+)footer$&amp;#039;,&lt;br /&gt;
		contentnum = &amp;#039;^content(%d+)$&amp;#039;,&lt;br /&gt;
		groupnum = &amp;#039;^group(%d+)$&amp;#039;,&lt;br /&gt;
		hlist = &amp;#039;hlist&amp;#039;,&lt;br /&gt;
		listnum = &amp;#039;^list(%d+)$&amp;#039;,&lt;br /&gt;
		navbox = &amp;#039;Template:Navbox&amp;#039;,&lt;br /&gt;
		navbox_title = &amp;#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&amp;#039;,&lt;br /&gt;
		nowrap = &amp;#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
		num = &amp;#039;^%a+(%d+)$&amp;#039;,&lt;br /&gt;
		plainlist = &amp;#039;plainlist&amp;#039;,&lt;br /&gt;
		sandbox = &amp;#039;/sandbox$&amp;#039;,&lt;br /&gt;
		sectionnum = &amp;#039;^section(%d+)$&amp;#039;,&lt;br /&gt;
		sectnum = &amp;#039;^sect(%d+)$&amp;#039;,&lt;br /&gt;
		style = &amp;#039;style$&amp;#039;,&lt;br /&gt;
		with_collapsible_groups = &amp;#039;Template:Navbox with collapsible groups&amp;#039;,&lt;br /&gt;
		with_columns = &amp;#039;Template:Navbox with columns&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		abbr_and_num = &amp;#039;abbr%d&amp;#039;,&lt;br /&gt;
		above = &amp;#039;above&amp;#039;,&lt;br /&gt;
		aboveclass = &amp;#039;aboveclass&amp;#039;,&lt;br /&gt;
		abovestyle = &amp;#039;abovestyle&amp;#039;,&lt;br /&gt;
		basestyle = &amp;#039;basestyle&amp;#039;,&lt;br /&gt;
		below = &amp;#039;below&amp;#039;,&lt;br /&gt;
		belowclass = &amp;#039;belowclass&amp;#039;,&lt;br /&gt;
		belowstyle = &amp;#039;belowstyle&amp;#039;,&lt;br /&gt;
		bodyclass = &amp;#039;bodyclass&amp;#039;,&lt;br /&gt;
		bodystyle = &amp;#039;bodystyle&amp;#039;,&lt;br /&gt;
		border = &amp;#039;border&amp;#039;,&lt;br /&gt;
		content_and_num = &amp;#039;content%d&amp;#039;,&lt;br /&gt;
		contentstyle = &amp;#039;contentstyle&amp;#039;,&lt;br /&gt;
		contentstyle_and_num = &amp;#039;content%dstyle&amp;#039;,&lt;br /&gt;
		colheaderstyle = &amp;#039;colheaderstyle&amp;#039;,&lt;br /&gt;
		colheader_and_num = &amp;#039;col%dheader&amp;#039;,&lt;br /&gt;
		colheaderstyle_and_num = &amp;#039;col%dheaderstyle&amp;#039;,&lt;br /&gt;
		colheadercolspan_and_num = &amp;#039;col%dheadercolspan&amp;#039;,&lt;br /&gt;
		colstyle = &amp;#039;colstyle&amp;#039;,&lt;br /&gt;
		col_and_num = &amp;#039;col%d&amp;#039;,&lt;br /&gt;
		colstyle_and_num = &amp;#039;col%dstyle&amp;#039;,&lt;br /&gt;
		colwidth = &amp;#039;colwidth&amp;#039;,&lt;br /&gt;
		colwidth_and_num = &amp;#039;col%dwidth&amp;#039;,&lt;br /&gt;
		colfooterstyle = &amp;#039;colfooterstyle&amp;#039;,&lt;br /&gt;
		colfooter_and_num = &amp;#039;col%dfooter&amp;#039;,&lt;br /&gt;
		colfooterstyle_and_num = &amp;#039;col%dfooterstyle&amp;#039;,&lt;br /&gt;
		colfootercolspan_and_num = &amp;#039;col%dfootercolspan&amp;#039;,&lt;br /&gt;
		coltablestyle = &amp;#039;coltablestyle&amp;#039;,&lt;br /&gt;
		evencolstyle = &amp;#039;evencolstyle&amp;#039;,&lt;br /&gt;
		evenodd = &amp;#039;evenodd&amp;#039;,&lt;br /&gt;
		evenstyle = &amp;#039;evenstyle&amp;#039;,&lt;br /&gt;
		fullwidth = &amp;#039;fullwidth&amp;#039;,&lt;br /&gt;
		group1 = &amp;#039;group1&amp;#039;,&lt;br /&gt;
		group2 = &amp;#039;group2&amp;#039;,&lt;br /&gt;
		group_and_num = &amp;#039;group%d&amp;#039;,&lt;br /&gt;
		groupclass = &amp;#039;groupclass&amp;#039;,&lt;br /&gt;
		groupstyle = &amp;#039;groupstyle&amp;#039;,&lt;br /&gt;
		groupstyle_and_num = &amp;#039;group%dstyle&amp;#039;,&lt;br /&gt;
		groupwidth = &amp;#039;groupwidth&amp;#039;,&lt;br /&gt;
		image = &amp;#039;image&amp;#039;,&lt;br /&gt;
		image_and_num = &amp;#039;image%d&amp;#039;,&lt;br /&gt;
		imageclass = &amp;#039;imageclass&amp;#039;,&lt;br /&gt;
		imageleft = &amp;#039;imageleft&amp;#039;,&lt;br /&gt;
		imageleft_and_num = &amp;#039;imageleft%d&amp;#039;,&lt;br /&gt;
		imageleftstyle = &amp;#039;imageleftstyle&amp;#039;,&lt;br /&gt;
		imagestyle = &amp;#039;imagestyle&amp;#039;,&lt;br /&gt;
		innerstyle = &amp;#039;innerstyle&amp;#039;,&lt;br /&gt;
		list1padding = &amp;#039;list1padding&amp;#039;,&lt;br /&gt;
		list_and_num = &amp;#039;list%d&amp;#039;,&lt;br /&gt;
		listclass = &amp;#039;listclass&amp;#039;,&lt;br /&gt;
		listclass_and_num = &amp;#039;list%dclass&amp;#039;,&lt;br /&gt;
		listpadding = &amp;#039;listpadding&amp;#039;,&lt;br /&gt;
		liststyle = &amp;#039;liststyle&amp;#039;,&lt;br /&gt;
		liststyle_and_num = &amp;#039;list%dstyle&amp;#039;,&lt;br /&gt;
		name = &amp;#039;name&amp;#039;,&lt;br /&gt;
		navbar = &amp;#039;navbar&amp;#039;,&lt;br /&gt;
		navboxclass = &amp;#039;navboxclass&amp;#039;,&lt;br /&gt;
		nocat = &amp;#039;nocat&amp;#039;,&lt;br /&gt;
		nowrapitems = &amp;#039;nowrapitems&amp;#039;,&lt;br /&gt;
		oddcolstyle = &amp;#039;oddcolstyle&amp;#039;,&lt;br /&gt;
		oddstyle = &amp;#039;oddstyle&amp;#039;,&lt;br /&gt;
		orphan = &amp;#039;orphan&amp;#039;,&lt;br /&gt;
		padding = &amp;#039;padding&amp;#039;,&lt;br /&gt;
		sect_and_num = &amp;#039;sect%d&amp;#039;,&lt;br /&gt;
		section_and_num = &amp;#039;section%d&amp;#039;,&lt;br /&gt;
		sectiontitlestyle_and_num = &amp;#039;section%dtitlestyle&amp;#039;,&lt;br /&gt;
		secttitlestyle = &amp;#039;secttitlestyle&amp;#039;,&lt;br /&gt;
		selected = &amp;#039;selected&amp;#039;,&lt;br /&gt;
		state = &amp;#039;state&amp;#039;,&lt;br /&gt;
		state_and_num = &amp;#039;state%d&amp;#039;,&lt;br /&gt;
		style = &amp;#039;style&amp;#039;,&lt;br /&gt;
		subgroups_and_num = {&amp;#039;subgroup%d&amp;#039;, &amp;#039;child%d&amp;#039;, &amp;#039;%d&amp;#039;},&lt;br /&gt;
		templatestyles = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		child_templatestyles = &amp;#039;child templatestyles&amp;#039;,&lt;br /&gt;
		title = &amp;#039;title&amp;#039;,&lt;br /&gt;
		titleclass = &amp;#039;titleclass&amp;#039;,&lt;br /&gt;
		titlestyle = &amp;#039;titlestyle&amp;#039;,&lt;br /&gt;
		tracking = &amp;#039;tracking&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	-- names of navbar arguments&lt;br /&gt;
	navbar = {&lt;br /&gt;
		name = 1,&lt;br /&gt;
		fontstyle = &amp;#039;fontstyle&amp;#039;,&lt;br /&gt;
		mini = &amp;#039;mini&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navbox/configuration</comments>
		</item>
		<item>
			<title>Module:Navbox</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navbox&amp;diff=330&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navbox&amp;diff=330&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbox&quot; title=&quot;Module:Navbox&quot;&gt;Module:Navbox&lt;/a&gt; by file upload (1 revision)&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;
local p = {}&lt;br /&gt;
local cfg = mw.loadData(&amp;#039;Module:Navbox/configuration&amp;#039;)&lt;br /&gt;
local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local hiding_templatestyles = {} &lt;br /&gt;
&lt;br /&gt;
-- global passthrough variables&lt;br /&gt;
local passthrough = {&lt;br /&gt;
	[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true,&lt;br /&gt;
	[cfg.arg.basestyle]=true,&lt;br /&gt;
	[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true,&lt;br /&gt;
	[cfg.arg.bodyclass]=true,&lt;br /&gt;
	[cfg.arg.groupclass]=true,&lt;br /&gt;
	[cfg.arg.image]=true,[cfg.arg.imageclass]=true,[cfg.arg.imagestyle]=true,&lt;br /&gt;
	[cfg.arg.imageleft]=true,[cfg.arg.imageleftstyle]=true,&lt;br /&gt;
	[cfg.arg.listclass]=true,&lt;br /&gt;
	[cfg.arg.name]=true,&lt;br /&gt;
	[cfg.arg.navbar]=true,&lt;br /&gt;
	[cfg.arg.state]=true,&lt;br /&gt;
	[cfg.arg.title]=true,[cfg.arg.titleclass]=true,[cfg.arg.titlestyle]=true,&lt;br /&gt;
	argHash=true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local andnum = function(s, n) return string.format(cfg.arg[s .. &amp;#039;_and_num&amp;#039;], n) end&lt;br /&gt;
local isblank = function(v) return (v or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &amp;#039;&amp;#039;)&lt;br /&gt;
	if r:match(&amp;#039;^%s*$&amp;#039;) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, v in ipairs(s) do&lt;br /&gt;
		v = mw.text.trim(v, &amp;quot;%s;&amp;quot;)&lt;br /&gt;
		if not isblank(v) then r = r .. v .. &amp;#039;;&amp;#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if isblank(r) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSubgroup(args, listnum, listText, prefix)&lt;br /&gt;
	local subArgs = {&lt;br /&gt;
		[cfg.arg.border] = cfg.keyword.border_subgroup,&lt;br /&gt;
		[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
		argHash = 0&lt;br /&gt;
	}&lt;br /&gt;
	local hasSubArgs = false&lt;br /&gt;
	local subgroups_and_num = prefix and {prefix} or cfg.arg.subgroups_and_num&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		for _, w in ipairs(subgroups_and_num) do&lt;br /&gt;
			w = string.format(w, listnum) .. &amp;quot;_&amp;quot;&lt;br /&gt;
			if (#k &amp;gt; #w) and (k:sub(1, #w) == w) then&lt;br /&gt;
				subArgs[k:sub(#w + 1)] = v&lt;br /&gt;
				hasSubArgs = true&lt;br /&gt;
				subArgs.argHash = subArgs.argHash + (v and #v or 0)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hasSubArgs and p._navbox(subArgs) or listText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main functions&lt;br /&gt;
function p._navbox(args)&lt;br /&gt;
	if args.type == cfg.keyword.with_collapsible_groups then&lt;br /&gt;
		return p._withCollapsibleGroups(args)&lt;br /&gt;
	elseif args.type == cfg.keyword.with_columns then&lt;br /&gt;
		return p._withColumns(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function striped(wikitext, border)&lt;br /&gt;
		-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
		-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
		-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
		-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
		local orphanCat = cfg.category.orphan&lt;br /&gt;
		if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then&lt;br /&gt;
			-- No change; striping occurs in outermost navbox.&lt;br /&gt;
			return wikitext .. orphanCat&lt;br /&gt;
		end&lt;br /&gt;
		local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part&lt;br /&gt;
		if args[cfg.arg.evenodd] then&lt;br /&gt;
			if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			else&lt;br /&gt;
				first = args[cfg.arg.evenodd]&lt;br /&gt;
				second = first&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local changer&lt;br /&gt;
		if first == second then&lt;br /&gt;
			changer = first&lt;br /&gt;
		else&lt;br /&gt;
			local index = 0&lt;br /&gt;
			changer = function (code)&lt;br /&gt;
				if code == &amp;#039;0&amp;#039; then&lt;br /&gt;
					-- Current occurrence is for a group before a nested table.&lt;br /&gt;
					-- Set it to first as a valid although pointless class.&lt;br /&gt;
					-- The next occurrence will be the first row after a title&lt;br /&gt;
					-- in a subgroup and will also be first.&lt;br /&gt;
					index = 0&lt;br /&gt;
					return first&lt;br /&gt;
				end&lt;br /&gt;
				index = index + 1&lt;br /&gt;
				return index % 2 == 1 and first or second&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local regex = orphanCat:gsub(&amp;#039;([%[%]])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
		return (wikitext:gsub(regex, &amp;#039;&amp;#039;):gsub(cfg.marker.regex, changer)) -- () omits gsub count&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function processItem(item, nowrapitems)&lt;br /&gt;
		if item:sub(1, 2) == &amp;#039;{|&amp;#039; then&lt;br /&gt;
			-- Applying nowrap to lines in a table does not make sense.&lt;br /&gt;
			-- Add newlines to compensate for trim of x in |parm=x in a template.&lt;br /&gt;
			return &amp;#039;\n&amp;#039; .. item .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if nowrapitems == cfg.keyword.nowrapitems_yes then&lt;br /&gt;
			local lines = {}&lt;br /&gt;
			for line in (item .. &amp;#039;\n&amp;#039;):gmatch(&amp;#039;([^\n]*)\n&amp;#039;) do&lt;br /&gt;
				local prefix, content = line:match(&amp;#039;^([*:;#]+)%s*(.*)&amp;#039;)&lt;br /&gt;
				if prefix and not content:match(cfg.pattern.nowrap) then&lt;br /&gt;
					line = string.format(cfg.nowrap_item, prefix, content)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(lines, line)&lt;br /&gt;
			end&lt;br /&gt;
			item = table.concat(lines, &amp;#039;\n&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&amp;#039;^[*:;#]&amp;#039;) then&lt;br /&gt;
			return &amp;#039;\n&amp;#039; .. item .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		return item&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_navbar()&lt;br /&gt;
		return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off&lt;br /&gt;
			and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain&lt;br /&gt;
			and (&lt;br /&gt;
				args[cfg.arg.name]&lt;br /&gt;
				or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, &amp;#039;&amp;#039;)&lt;br /&gt;
					~= cfg.pattern.navbox&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- extract text color from css, which is the only permitted inline CSS for the navbar&lt;br /&gt;
	local function extract_color(css_str)&lt;br /&gt;
		-- return nil because navbar takes its argument into mw.html which handles&lt;br /&gt;
		-- nil gracefully, removing the associated style attribute&lt;br /&gt;
		return mw.ustring.match(&amp;#039;;&amp;#039; .. css_str .. &amp;#039;;&amp;#039;, &amp;#039;.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;&amp;#039;) or nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderNavBar(titleCell)&lt;br /&gt;
		if has_navbar() then&lt;br /&gt;
			local navbar = require(&amp;#039;Module:Navbar&amp;#039;)._navbar&lt;br /&gt;
			titleCell:wikitext(navbar{&lt;br /&gt;
				[cfg.navbar.name] = args[cfg.arg.name],&lt;br /&gt;
				[cfg.navbar.mini] = 1,&lt;br /&gt;
				[cfg.navbar.fontstyle] = extract_color(&lt;br /&gt;
					(args[cfg.arg.basestyle] or &amp;#039;&amp;#039;) .. &amp;#039;;&amp;#039; .. (args[cfg.arg.titlestyle] or &amp;#039;&amp;#039;)&lt;br /&gt;
				)&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTitleRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.title] then return end&lt;br /&gt;
&lt;br /&gt;
		local titleRow = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleCell = titleRow:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleColspan = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then titleColspan = titleColspan + 1 end&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			:cssText(args[cfg.arg.titlestyle])&lt;br /&gt;
			:addClass(cfg.class.navbox_title)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
		renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute&lt;br /&gt;
				:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args[cfg.arg.title]) .. args.argHash)&lt;br /&gt;
				:addClass(args[cfg.arg.titleclass])&lt;br /&gt;
				:css(&amp;#039;font-size&amp;#039;, &amp;#039;114%&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;margin&amp;#039;, &amp;#039;0 4em&amp;#039;)&lt;br /&gt;
				:wikitext(processItem(args[cfg.arg.title]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getAboveBelowColspan()&lt;br /&gt;
		local ret = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then ret = ret + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then ret = ret + 1 end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderAboveRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.above] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.aboveclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.abovestyle])&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					-- id for aria-labelledby attribute, if no title&lt;br /&gt;
					:attr(&amp;#039;id&amp;#039;, (not args[cfg.arg.title]) and &lt;br /&gt;
						(mw.uri.anchorEncode(args[cfg.arg.above]) .. args.argHash)&lt;br /&gt;
						or nil)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderBelowRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.below] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.belowclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.belowstyle])&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderListRow(tbl, index, listnum, listnums_size)&lt;br /&gt;
		local row = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.imageleft] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;1px&amp;#039;)               -- Minimize width&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0 2px 0 0&amp;#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imageleftstyle])&lt;br /&gt;
					:attr(&amp;#039;rowspan&amp;#039;, listnums_size)&lt;br /&gt;
					:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.imageleft]))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local group_and_num = andnum(&amp;#039;group&amp;#039;, listnum)&lt;br /&gt;
		local groupstyle_and_num = andnum(&amp;#039;groupstyle&amp;#039;, listnum)&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			local groupCell = row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
			-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
			if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then&lt;br /&gt;
				groupCell&lt;br /&gt;
					:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args[cfg.arg.group1]) .. args.argHash)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_group)&lt;br /&gt;
				:addClass(args[cfg.arg.groupclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				-- If groupwidth not specified, minimize width&lt;br /&gt;
				:css(&amp;#039;width&amp;#039;, args[cfg.arg.groupwidth] or &amp;#039;1%&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:cssText(args[cfg.arg.groupstyle])&lt;br /&gt;
				:cssText(args[groupstyle_and_num])&lt;br /&gt;
				:wikitext(args[group_and_num])&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listCell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			listCell&lt;br /&gt;
				:addClass(cfg.class.navbox_list_with_group)&lt;br /&gt;
		else&lt;br /&gt;
			listCell:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[cfg.arg.groupwidth] then&lt;br /&gt;
			listCell:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
		if index % 2 == 1 then&lt;br /&gt;
			rowstyle = args[cfg.arg.oddstyle]&lt;br /&gt;
		else&lt;br /&gt;
			rowstyle = args[cfg.arg.evenstyle]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local list_and_num = andnum(&amp;#039;list&amp;#039;, listnum)&lt;br /&gt;
		local listText = inArray(cfg.keyword.subgroups, args[list_and_num])&lt;br /&gt;
			and getSubgroup(args, listnum, args[list_and_num]) or args[list_and_num]&lt;br /&gt;
&lt;br /&gt;
		local oddEven = cfg.marker.oddeven&lt;br /&gt;
		if listText:sub(1, 12) == &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;table&amp;#039; then&lt;br /&gt;
			-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
			oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local liststyle_and_num = andnum(&amp;#039;liststyle&amp;#039;, listnum)&lt;br /&gt;
		local listclass_and_num = andnum(&amp;#039;listclass&amp;#039;, listnum)&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
			:cssText(args[cfg.arg.liststyle])&lt;br /&gt;
			:cssText(rowstyle)&lt;br /&gt;
			:cssText(args[liststyle_and_num])&lt;br /&gt;
			:addClass(cfg.class.navbox_list)&lt;br /&gt;
			:addClass(cfg.class.navbox_part .. oddEven)&lt;br /&gt;
			:addClass(args[cfg.arg.listclass])&lt;br /&gt;
			:addClass(args[listclass_and_num])&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;padding&amp;#039;,&lt;br /&gt;
					(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or &amp;#039;0 0.25em&amp;#039;&lt;br /&gt;
				)&lt;br /&gt;
				:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.image] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;1px&amp;#039;)               -- Minimize width&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0 0 0 2px&amp;#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imagestyle])&lt;br /&gt;
					:attr(&amp;#039;rowspan&amp;#039;, listnums_size)&lt;br /&gt;
					:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.image]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_list_class(htmlclass)&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for arg, _ in pairs(args) do&lt;br /&gt;
			if type(arg) == &amp;#039;string&amp;#039; and mw.ustring.find(arg, cfg.pattern.class) then&lt;br /&gt;
				for _, pattern in ipairs(patterns) do&lt;br /&gt;
					if mw.ustring.find(args[arg] or &amp;#039;&amp;#039;, pattern) then&lt;br /&gt;
						return true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- there are a lot of list classes in the wild, so we add their TemplateStyles&lt;br /&gt;
	local function add_list_styles()&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		local function add_list_templatestyles(htmlclass, templatestyles)&lt;br /&gt;
			if has_list_class(htmlclass) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &amp;#039;templatestyles&amp;#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local hlist_styles = add_list_templatestyles(&amp;#039;hlist&amp;#039;, cfg.hlist_templatestyles)&lt;br /&gt;
		local plainlist_styles = add_list_templatestyles(&amp;#039;plainlist&amp;#039;, cfg.plainlist_templatestyles)&lt;br /&gt;
&lt;br /&gt;
		-- a second workaround for [[phab:T303378]]&lt;br /&gt;
		-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
		-- tag here if we want&lt;br /&gt;
		if has_navbar() and hlist_styles == &amp;#039;&amp;#039; then&lt;br /&gt;
			hlist_styles = frame:extensionTag{&lt;br /&gt;
				name = &amp;#039;templatestyles&amp;#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- hlist -&amp;gt; plainlist is best-effort to preserve old Common.css ordering.&lt;br /&gt;
		-- this ordering is not a guarantee because most navboxes will emit only&lt;br /&gt;
		-- one of these classes [hlist_note]&lt;br /&gt;
		return hlist_styles .. plainlist_styles&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function needsHorizontalLists(border)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function hasBackgroundColors()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,&lt;br /&gt;
			cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&amp;#039;background&amp;#039;, 1, true) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function hasBorders()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,&lt;br /&gt;
			cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&amp;#039;border&amp;#039;, 1, true) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function isIllegible()&lt;br /&gt;
		local styleratio = require(&amp;#039;Module:Color contrast&amp;#039;)._styleratio&lt;br /&gt;
		for key, style in pairs(args) do&lt;br /&gt;
			if tostring(key):match(cfg.pattern.style) then&lt;br /&gt;
				if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getTrackingCategories(border)&lt;br /&gt;
		local cats = {}&lt;br /&gt;
		if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end&lt;br /&gt;
		if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end&lt;br /&gt;
		if isIllegible() then table.insert(cats, cfg.category.illegible) end&lt;br /&gt;
		if hasBorders() then table.insert(cats, cfg.category.borders) end&lt;br /&gt;
		return cats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTrackingCategories(builder, border)&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		if title.namespace ~= 10 then return end -- not in template space&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox&lt;br /&gt;
			or subpage == cfg.keyword.subpage_testcases then return end&lt;br /&gt;
&lt;br /&gt;
		for _, cat in ipairs(getTrackingCategories(border)) do&lt;br /&gt;
			builder:wikitext(&amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderMainTable(border, listnums)&lt;br /&gt;
		local tbl = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
			:addClass(cfg.class.nowraplinks)&lt;br /&gt;
			:addClass(args[cfg.arg.bodyclass])&lt;br /&gt;
&lt;br /&gt;
		local state = args[cfg.arg.state]&lt;br /&gt;
		if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then&lt;br /&gt;
			if state == cfg.keyword.state_collapsed then&lt;br /&gt;
				state = cfg.class.collapsed&lt;br /&gt;
			end&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.collapsible)&lt;br /&gt;
				:addClass(state or cfg.class.autocollapse)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		tbl:css(&amp;#039;border-spacing&amp;#039;, 0)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_subgroup)&lt;br /&gt;
				:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
				:cssText(args[cfg.arg.style])&lt;br /&gt;
		else  -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_inner)&lt;br /&gt;
				:css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;color&amp;#039;, &amp;#039;inherit&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		tbl:cssText(args[cfg.arg.innerstyle])&lt;br /&gt;
&lt;br /&gt;
		renderTitleRow(tbl)&lt;br /&gt;
		renderAboveRow(tbl)&lt;br /&gt;
		local listnums_size = #listnums&lt;br /&gt;
		for i, listnum in ipairs(listnums) do&lt;br /&gt;
			renderListRow(tbl, i, listnum, listnums_size)&lt;br /&gt;
		end&lt;br /&gt;
		renderBelowRow(tbl)&lt;br /&gt;
&lt;br /&gt;
		return tbl&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function add_navbox_styles(hiding_templatestyles)&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		-- This is a lambda so that it doesn&amp;#039;t need the frame as a parameter&lt;br /&gt;
		local function add_user_styles(templatestyles)&lt;br /&gt;
			if not isblank(templatestyles) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &amp;#039;templatestyles&amp;#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- get templatestyles. load base from config so that Lua only needs to do&lt;br /&gt;
		-- the work once of parser tag expansion&lt;br /&gt;
		local base_templatestyles = cfg.templatestyles&lt;br /&gt;
		local templatestyles = add_user_styles(args[cfg.arg.templatestyles])&lt;br /&gt;
		local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])&lt;br /&gt;
&lt;br /&gt;
		-- The &amp;#039;navbox-styles&amp;#039; div exists to wrap the styles to work around T200206&lt;br /&gt;
		-- more elegantly. Instead of combinatorial rules, this ends up being linear&lt;br /&gt;
		-- number of CSS rules.&lt;br /&gt;
		return mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_styles)&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				add_list_styles() .. -- see [hlist_note] applied to &amp;#039;before base_templatestyles&amp;#039;&lt;br /&gt;
				base_templatestyles ..&lt;br /&gt;
				templatestyles ..&lt;br /&gt;
				child_templatestyles ..&lt;br /&gt;
				table.concat(hiding_templatestyles)&lt;br /&gt;
			)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- work around [[phab:T303378]]&lt;br /&gt;
	-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
	-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
	local strip_marker_pattern = &amp;#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&amp;#039;&lt;br /&gt;
	local argHash = 0&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		if type(arg) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			for marker in string.gfind(arg, strip_marker_pattern) do&lt;br /&gt;
				table.insert(hiding_templatestyles, marker)&lt;br /&gt;
			end&lt;br /&gt;
			argHash = argHash + #arg&lt;br /&gt;
			args[k] = string.gsub(arg, strip_marker_pattern, &amp;#039;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args.argHash then args.argHash = argHash end&lt;br /&gt;
&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			local listnum = k:match(cfg.pattern.listnum)&lt;br /&gt;
			if listnum and args[andnum(&amp;#039;list&amp;#039;, tonumber(listnum))] then&lt;br /&gt;
				table.insert(listnums, tonumber(listnum))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	local border = mw.text.trim(args[cfg.arg.border] or args[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
	if border == cfg.keyword.border_child then&lt;br /&gt;
		border = cfg.keyword.border_subgroup&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(border, listnums)&lt;br /&gt;
&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- render the appropriate wrapper for the navbox, based on the border param&lt;br /&gt;
&lt;br /&gt;
	if border == cfg.keyword.border_none then&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]&lt;br /&gt;
			and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&amp;#039;aria-labelledby&amp;#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&amp;#039;aria-label&amp;#039;, cfg.aria_label)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == cfg.keyword.border_subgroup then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a&lt;br /&gt;
		-- parent navbox, and is therefore inside a div with padding:0em 0.25em.&lt;br /&gt;
		-- We start with a &amp;lt;/div&amp;gt; to avoid the padding being applied, and at the&lt;br /&gt;
		-- end add a &amp;lt;div&amp;gt; to balance out the parent&amp;#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox)&lt;br /&gt;
			:addClass(args[cfg.arg.navboxclass])&lt;br /&gt;
			:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
			:cssText(args[cfg.arg.style])&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above]&lt;br /&gt;
			or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&amp;#039;aria-labelledby&amp;#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&amp;#039;aria-label&amp;#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then&lt;br /&gt;
		renderTrackingCategories(res, border)&lt;br /&gt;
	end&lt;br /&gt;
	return striped(tostring(res), border)&lt;br /&gt;
end --p._navbox&lt;br /&gt;
&lt;br /&gt;
function p._withCollapsibleGroups(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.bodystyle] = true,&lt;br /&gt;
		[cfg.arg.border] = true,&lt;br /&gt;
		[cfg.arg.style] = true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if k and type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
				targs[k] = v&lt;br /&gt;
			elseif (k:match(cfg.pattern.num)) then&lt;br /&gt;
				local n = k:match(cfg.pattern.num)&lt;br /&gt;
				local list_and_num = andnum(&amp;#039;list&amp;#039;, n)&lt;br /&gt;
				if ((k:match(cfg.pattern.listnum) or k:match(cfg.pattern.contentnum))&lt;br /&gt;
						and targs[list_and_num] == nil&lt;br /&gt;
						and pargs[andnum(&amp;#039;group&amp;#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&amp;#039;sect&amp;#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&amp;#039;section&amp;#039;, n)] == nil) then&lt;br /&gt;
					targs[list_and_num] = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[andnum(&amp;#039;content&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					if (targs[list_and_num] and inArray(cfg.keyword.subgroups, targs[list_and_num])) then&lt;br /&gt;
						targs[list_and_num] = getSubgroup(pargs, n, targs[list_and_num])&lt;br /&gt;
					end&lt;br /&gt;
				elseif ((k:match(cfg.pattern.groupnum) or k:match(cfg.pattern.sectnum) or k:match(cfg.pattern.sectionnum))&lt;br /&gt;
						and targs[list_and_num] == nil) then&lt;br /&gt;
					local titlestyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.groupstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[cfg.arg.secttitlestyle] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;groupstyle&amp;#039;, n)] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;sectiontitlestyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					local liststyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.liststyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[cfg.arg.contentstyle] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;liststyle&amp;#039;, n)] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;contentstyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					local title = concatstrings({&lt;br /&gt;
						pargs[andnum(&amp;#039;group&amp;#039;, n)] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[andnum(&amp;#039;sect&amp;#039;, n)] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[andnum(&amp;#039;section&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					local list = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;content&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					if list and inArray(cfg.keyword.subgroups, list) then&lt;br /&gt;
						list = getSubgroup(pargs, n, list)&lt;br /&gt;
					end&lt;br /&gt;
					local abbr_and_num = andnum(&amp;#039;abbr&amp;#039;, n)&lt;br /&gt;
					local state = (pargs[abbr_and_num] and pargs[abbr_and_num] == pargs[cfg.arg.selected]) &lt;br /&gt;
						and cfg.keyword.state_uncollapsed&lt;br /&gt;
						or (pargs[andnum(&amp;#039;state&amp;#039;, n)] or cfg.keyword.state_collapsed)&lt;br /&gt;
					&lt;br /&gt;
					targs[list_and_num] =p._navbox({&lt;br /&gt;
						cfg.keyword.border_child,&lt;br /&gt;
						[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
						[cfg.arg.state] = state,&lt;br /&gt;
						[cfg.arg.basestyle] = pargs[cfg.arg.basestyle],&lt;br /&gt;
						[cfg.arg.title] = title,&lt;br /&gt;
						[cfg.arg.titlestyle] = titlestyle,&lt;br /&gt;
						[andnum(&amp;#039;list&amp;#039;, 1)] = list,&lt;br /&gt;
						[cfg.arg.liststyle] = liststyle,&lt;br /&gt;
						[cfg.arg.listclass] = pargs[andnum(&amp;#039;listclass&amp;#039;, n)],&lt;br /&gt;
						[cfg.arg.image] = pargs[andnum(&amp;#039;image&amp;#039;, n)],&lt;br /&gt;
						[cfg.arg.imageleft] = pargs[andnum(&amp;#039;imageleft&amp;#039;, n)],&lt;br /&gt;
						[cfg.arg.listpadding] = pargs[cfg.arg.listpadding],&lt;br /&gt;
						argHash = pargs.argHash&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ordering of style and bodystyle&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({targs[cfg.arg.style] or &amp;#039;&amp;#039;, targs[cfg.arg.bodystyle] or &amp;#039;&amp;#039;})&lt;br /&gt;
	targs[cfg.arg.bodystyle] = nil&lt;br /&gt;
&lt;br /&gt;
	-- child or subgroup&lt;br /&gt;
	if targs[cfg.arg.border] == nil then targs[cfg.arg.border] = pargs[1] end&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withCollapsibleGroups&lt;br /&gt;
&lt;br /&gt;
function p._withColumns(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- tables of column numbers&lt;br /&gt;
	local colheadernums = {}&lt;br /&gt;
	local colnums = {}&lt;br /&gt;
	local colfooternums = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.evenstyle]=true,&lt;br /&gt;
		[cfg.arg.groupstyle]=true,&lt;br /&gt;
		[cfg.arg.liststyle]=true,&lt;br /&gt;
		[cfg.arg.oddstyle]=true,&lt;br /&gt;
		[cfg.arg.state]=true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
			targs[k] = v&lt;br /&gt;
		elseif type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			if k:match(cfg.pattern.listnum) then&lt;br /&gt;
				local n = k:match(cfg.pattern.listnum)&lt;br /&gt;
				targs[andnum(&amp;#039;liststyle&amp;#039;, n + 2)] = pargs[andnum(&amp;#039;liststyle&amp;#039;, n)]&lt;br /&gt;
				targs[andnum(&amp;#039;group&amp;#039;, n + 2)] = pargs[andnum(&amp;#039;group&amp;#039;, n)]&lt;br /&gt;
				targs[andnum(&amp;#039;groupstyle&amp;#039;, n + 2)] = pargs[andnum(&amp;#039;groupstyle&amp;#039;, n)]&lt;br /&gt;
				if v and inArray(cfg.keyword.subgroups, v) then&lt;br /&gt;
					targs[andnum(&amp;#039;list&amp;#039;, n + 2)] = getSubgroup(pargs, n, v)&lt;br /&gt;
				else&lt;br /&gt;
					targs[andnum(&amp;#039;list&amp;#039;, n + 2)] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(cfg.pattern.colheadernum) and v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
				table.insert(colheadernums, tonumber(k:match(cfg.pattern.colheadernum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colnum) and v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
				table.insert(colnums, tonumber(k:match(cfg.pattern.colnum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colfooternum) and v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
				table.insert(colfooternums, tonumber(k:match(cfg.pattern.colfooternum)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(colheadernums)&lt;br /&gt;
	table.sort(colnums)&lt;br /&gt;
	table.sort(colfooternums)&lt;br /&gt;
&lt;br /&gt;
	-- HTML table for list1&lt;br /&gt;
	local coltable = mw.html.create( &amp;#039;table&amp;#039; ):addClass(&amp;#039;navbox-columns-table&amp;#039;)&lt;br /&gt;
	local row, col&lt;br /&gt;
&lt;br /&gt;
	local tablestyle = ( (#colheadernums &amp;gt; 0) or (not isblank(pargs[cfg.arg.fullwidth])) )&lt;br /&gt;
		and &amp;#039;width:100%&amp;#039;&lt;br /&gt;
		or &amp;#039;width:auto; margin-left:auto; margin-right:auto&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	coltable:cssText(concatstyles({&lt;br /&gt;
		&amp;#039;border-spacing: 0px; text-align:left&amp;#039;,&lt;br /&gt;
		tablestyle,&lt;br /&gt;
		pargs[cfg.arg.coltablestyle] or &amp;#039;&amp;#039;&lt;br /&gt;
	}))&lt;br /&gt;
&lt;br /&gt;
	--- Header row ---&lt;br /&gt;
	if (#colheadernums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		for k, n in ipairs(colheadernums) do&lt;br /&gt;
			col = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &amp;#039;border-left:2px solid #fdfdfd&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
				&amp;#039;font-weight:bold&amp;#039;,&lt;br /&gt;
				pargs[cfg.arg.colheaderstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
				pargs[andnum(&amp;#039;colheaderstyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&amp;#039;colspan&amp;#039;, tonumber(pargs[andnum(&amp;#039;colheadercolspan&amp;#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&amp;#039;colheader&amp;#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Main columns ---&lt;br /&gt;
	row = coltable:tag(&amp;#039;tr&amp;#039;):css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
	for k, n in ipairs(colnums) do&lt;br /&gt;
		if k == 1 and isblank(pargs[andnum(&amp;#039;colheader&amp;#039;, 1)])&lt;br /&gt;
				and isblank(pargs[andnum(&amp;#039;colfooter&amp;#039;, 1)])&lt;br /&gt;
				and isblank(pargs[cfg.arg.fullwidth]) then&lt;br /&gt;
			local nopad = inArray(&lt;br /&gt;
				{&amp;#039;off&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;0em&amp;#039;, &amp;#039;0px&amp;#039;},&lt;br /&gt;
				mw.ustring.gsub(pargs[cfg.arg.padding] or &amp;#039;&amp;#039;, &amp;#039;[;%%]&amp;#039;, &amp;#039;&amp;#039;))&lt;br /&gt;
			if not nopad then&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, (pargs[cfg.arg.padding] or &amp;#039;5em&amp;#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-list&amp;#039;)&lt;br /&gt;
		col:cssText(concatstyles({&lt;br /&gt;
			(k &amp;gt; 1) and &amp;#039;border-left:2px solid #fdfdfd&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;padding:0px&amp;#039;,&lt;br /&gt;
			pargs[cfg.arg.colstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
			((n%2 == 0) and pargs[cfg.arg.evencolstyle] or pargs[cfg.arg.oddcolstyle]) or &amp;#039;&amp;#039;,&lt;br /&gt;
			pargs[andnum(&amp;#039;colstyle&amp;#039;, n)] or &amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;width:&amp;#039; .. (pargs[andnum(&amp;#039;colwidth&amp;#039;, n)] or pargs[cfg.arg.colwidth] or &amp;#039;10em&amp;#039;)&lt;br /&gt;
		}))&lt;br /&gt;
		local wt = pargs[andnum(&amp;#039;col&amp;#039;, n)]&lt;br /&gt;
		if wt and inArray(cfg.keyword.subgroups, wt) then&lt;br /&gt;
			wt = getSubgroup(pargs, n, wt, cfg.arg.col_and_num)&lt;br /&gt;
		end&lt;br /&gt;
		col:tag(&amp;#039;div&amp;#039;):newline():wikitext(wt):newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Footer row ---&lt;br /&gt;
	if (#colfooternums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		for k, n in ipairs(colfooternums) do&lt;br /&gt;
			col = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &amp;#039;border-left:2px solid #fdfdfd&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
				&amp;#039;font-weight:bold&amp;#039;,&lt;br /&gt;
				pargs[cfg.arg.colfooterstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
				pargs[andnum(&amp;#039;colfooterstyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&amp;#039;colspan&amp;#039;, tonumber(pargs[andnum(&amp;#039;colfootercolspan&amp;#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&amp;#039;colfooter&amp;#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- assign table to list1&lt;br /&gt;
	targs[andnum(&amp;#039;list&amp;#039;, 1)] = tostring(coltable)&lt;br /&gt;
	if isblank(pargs[andnum(&amp;#039;colheader&amp;#039;, 1)]) &lt;br /&gt;
			and isblank(pargs[andnum(&amp;#039;col&amp;#039;, 1)])&lt;br /&gt;
			and isblank(pargs[andnum(&amp;#039;colfooter&amp;#039;, 1)]) then&lt;br /&gt;
		targs[andnum(&amp;#039;list&amp;#039;, 1)] = targs[andnum(&amp;#039;list&amp;#039;, 1)] ..&lt;br /&gt;
			cfg.category.without_first_col&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Other parameters&lt;br /&gt;
	targs[cfg.arg.border] = pargs[cfg.arg.border] or pargs[1]&lt;br /&gt;
	targs[cfg.arg.evenodd] = (not isblank(pargs[cfg.arg.evenodd])) and pargs[cfg.arg.evenodd] or nil&lt;br /&gt;
	targs[cfg.arg.list1padding] = &amp;#039;0px&amp;#039;&lt;br /&gt;
	targs[andnum(&amp;#039;liststyle&amp;#039;, 1)] = &amp;#039;background:transparent;color:inherit;&amp;#039;&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({pargs[cfg.arg.style], pargs[cfg.arg.bodystyle]})&lt;br /&gt;
	targs[cfg.arg.tracking] = &amp;#039;no&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withColumns&lt;br /&gt;
&lt;br /&gt;
-- Template entry points&lt;br /&gt;
function p.navbox (frame, boxtype)&lt;br /&gt;
	local function readArgs(args, prefix)&lt;br /&gt;
		-- Read the arguments in the order they&amp;#039;ll be output in, to make references&lt;br /&gt;
		-- number in the right order.&lt;br /&gt;
		local _ = 0&lt;br /&gt;
		_ = _ + (args[prefix .. cfg.arg.title] and #args[prefix .. cfg.arg.title] or 0)&lt;br /&gt;
		_ = _ + (args[prefix .. cfg.arg.above] and #args[prefix .. cfg.arg.above] or 0)&lt;br /&gt;
		-- Limit this to 20 as covering &amp;#039;most&amp;#039; cases (that&amp;#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&amp;#039;t work here&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = _ + (args[prefix .. andnum(&amp;#039;group&amp;#039;, i)] and #args[prefix .. andnum(&amp;#039;group&amp;#039;, i)] or 0)&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(&amp;#039;list&amp;#039;, i)]) then&lt;br /&gt;
				for _, v in ipairs(cfg.arg.subgroups_and_num) do&lt;br /&gt;
					readArgs(args, prefix .. string.format(v, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				readArgs(args, prefix .. andnum(&amp;#039;col&amp;#039;, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_ = _ + (args[prefix .. cfg.arg.below] and #args[prefix .. cfg.arg.below] or 0)&lt;br /&gt;
		return _&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &amp;#039;navbox&amp;#039;]}})&lt;br /&gt;
	args.argHash = readArgs(args, &amp;quot;&amp;quot;)&lt;br /&gt;
	args.type = args.type or cfg.keyword[boxtype]&lt;br /&gt;
	return p[&amp;#039;_navbox&amp;#039;](args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_collapsible_groups] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &amp;#039;with_collapsible_groups&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_columns] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &amp;#039;with_columns&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navbox</comments>
		</item>
		<item>
			<title>Module:Navbar</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Navbar&amp;diff=328&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Navbar&amp;diff=328&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbar&quot; title=&quot;Module:Navbar&quot;&gt;Module:Navbar&lt;/a&gt; by file upload (1 revision)&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 cfg = mw.loadData(&amp;#039;Module:Navbar/configuration&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_arg = 1&lt;br /&gt;
	if is_collapsible then title_arg = 2 end&lt;br /&gt;
	if template then title_arg = &amp;#039;template&amp;#039; end&lt;br /&gt;
	return title_arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function choose_links(template, args)&lt;br /&gt;
	-- The show table indicates the default displayed items.&lt;br /&gt;
	-- view, talk, edit, hist, move, watch&lt;br /&gt;
	-- TODO: Move to configuration.&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	if template then&lt;br /&gt;
		show[2] = false&lt;br /&gt;
		show[3] = false&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,&lt;br /&gt;
			talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		-- TODO: Consider removing TableTools dependency.&lt;br /&gt;
		for _, v in ipairs(require (&amp;#039;Module:TableTools&amp;#039;).compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local remove_edit_link = args.noedit&lt;br /&gt;
	if remove_edit_link then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	return show&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_link(link_description, ul, is_mini, font_style)&lt;br /&gt;
	local l&lt;br /&gt;
	if link_description.url then&lt;br /&gt;
		l = {&amp;#039;[&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;]&amp;#039;}&lt;br /&gt;
	else&lt;br /&gt;
		l = {&amp;#039;[[&amp;#039;, &amp;#039;|&amp;#039;, &amp;#039;]]&amp;#039;}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;nv-&amp;#039; .. link_description.full)&lt;br /&gt;
		:wikitext(l[1] .. link_description.link .. l[2])&lt;br /&gt;
		:tag(is_mini and &amp;#039;abbr&amp;#039; or &amp;#039;span&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;title&amp;#039;, link_description.html_title)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
			:wikitext(is_mini and link_description.mini or link_description.full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)&lt;br /&gt;
	&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)&lt;br /&gt;
	if not title then&lt;br /&gt;
		error(cfg.invalid_title .. title_text)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: Get link_descriptions and show into the configuration module.&lt;br /&gt;
	-- link_descriptions should be easier...&lt;br /&gt;
	local link_descriptions = {&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;v&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;view&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;View this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;t&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;talk&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Discuss this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = talkpage, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;e&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;edit&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Edit this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = &amp;#039;Special:EditPage/&amp;#039; .. title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;h&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;hist&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;History of this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = &amp;#039;Special:PageHistory/&amp;#039; .. title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;m&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;move&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Move this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = mw.title.new(&amp;#039;Special:Movepage&amp;#039;):fullUrl(&amp;#039;target=&amp;#039;..title.fullText), [&amp;#039;url&amp;#039;] = true },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;w&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;watch&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Watch this template&amp;#039;, &lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title:fullUrl(&amp;#039;action=watch&amp;#039;), [&amp;#039;url&amp;#039;] = true }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local ul = mw.html.create(&amp;#039;ul&amp;#039;)&lt;br /&gt;
	if has_brackets then&lt;br /&gt;
		ul:addClass(cfg.classes.brackets)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i, _ in ipairs(displayed_links) do&lt;br /&gt;
		if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end&lt;br /&gt;
	end&lt;br /&gt;
	return ul:done()&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: We probably don&amp;#039;t need both fontstyle and fontcolor...&lt;br /&gt;
	local font_style = args.fontstyle&lt;br /&gt;
	local font_color = args.fontcolor&lt;br /&gt;
	local is_collapsible = args.collapsible&lt;br /&gt;
	local is_mini = args.mini&lt;br /&gt;
	local is_plain = args.plain&lt;br /&gt;
	&lt;br /&gt;
	local collapsible_class = nil&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		collapsible_class = cfg.classes.collapsible&lt;br /&gt;
		if not is_plain then is_mini = 1 end&lt;br /&gt;
		if font_color then&lt;br /&gt;
			font_style = (font_style or &amp;#039;&amp;#039;) .. &amp;#039;; color: &amp;#039; .. font_color .. &amp;#039;;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local navbar_style = args.style&lt;br /&gt;
	local div = mw.html.create():tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
	div&lt;br /&gt;
		:addClass(cfg.classes.navbar)&lt;br /&gt;
		:addClass(cfg.classes.plainlinks)&lt;br /&gt;
		:addClass(cfg.classes.horizontal_list)&lt;br /&gt;
		:addClass(collapsible_class) -- we made the determination earlier&lt;br /&gt;
		:cssText(navbar_style)&lt;br /&gt;
&lt;br /&gt;
	if is_mini then div:addClass(cfg.classes.mini) end&lt;br /&gt;
&lt;br /&gt;
	local box_text = (args.text or cfg.box_text) .. &amp;#039; &amp;#039;&lt;br /&gt;
	 -- the concatenated space guarantees the box text is separated&lt;br /&gt;
	if not (is_mini or is_plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(cfg.classes.box_text)&lt;br /&gt;
				:cssText(font_style)&lt;br /&gt;
				:wikitext(box_text)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local template = args.template&lt;br /&gt;
	local displayed_links = choose_links(template, args)&lt;br /&gt;
	local has_brackets = args.brackets&lt;br /&gt;
	local title_arg = get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_text = args[title_arg] or (&amp;#039;:&amp;#039; .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)&lt;br /&gt;
	div:node(list)&lt;br /&gt;
&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		local title_text_class&lt;br /&gt;
		if is_mini then&lt;br /&gt;
			title_text_class = cfg.classes.collapsible_title_mini&lt;br /&gt;
		else&lt;br /&gt;
			title_text_class = cfg.classes.collapsible_title_full&lt;br /&gt;
		end&lt;br /&gt;
		div:done()&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(title_text_class)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- hlist -&amp;gt; navbar is best-effort to preserve old Common.css ordering.&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = cfg.templatestyles }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	return p._navbar(require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Navbar</comments>
		</item>
		<item>
			<title>Module:Lua banner</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Lua_banner&amp;diff=326&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Lua_banner&amp;diff=326&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Lua_banner&quot; title=&quot;Module:Lua banner&quot;&gt;Module:Lua banner&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements the {{lua}} template.&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local mList = require(&amp;#039;Module:List&amp;#039;)&lt;br /&gt;
local mTableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
local mMessageBox = require(&amp;#039;Module:Message box&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		v = v:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local modules = mTableTools.compressSparseArray(args)&lt;br /&gt;
	local box = p.renderBox(modules)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args, modules)&lt;br /&gt;
	return box .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderBox(modules)&lt;br /&gt;
	local boxArgs = {}&lt;br /&gt;
	if #modules &amp;lt; 1 then&lt;br /&gt;
		boxArgs.text = &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error: no modules specified&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		local moduleLinks = {}&lt;br /&gt;
		for i, module in ipairs(modules) do&lt;br /&gt;
			moduleLinks[i] = string.format(&amp;#039;[[:%s]]&amp;#039;, module)&lt;br /&gt;
			local maybeSandbox = mw.title.new(module .. &amp;#039;/sandbox&amp;#039;)&lt;br /&gt;
			if maybeSandbox and maybeSandbox.exists then&lt;br /&gt;
				moduleLinks[i] = moduleLinks[i] .. string.format(&amp;#039; ([[:%s|sandbox]])&amp;#039;, maybeSandbox.fullText)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local moduleList = mList.makeList(&amp;#039;bulleted&amp;#039;, moduleLinks)&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		if title.subpageText == &amp;quot;doc&amp;quot; then&lt;br /&gt;
			title = title.basePageTitle&lt;br /&gt;
		end&lt;br /&gt;
		if title.contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			boxArgs.text = &amp;#039;This module depends on the following other modules:&amp;#039; .. moduleList&lt;br /&gt;
		else&lt;br /&gt;
			boxArgs.text = &amp;#039;This template  uses [[Wikipedia:Lua|Lua]]:\n&amp;#039; .. moduleList&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	boxArgs.type = &amp;#039;notice&amp;#039;&lt;br /&gt;
	boxArgs.small = true&lt;br /&gt;
	boxArgs.image = &amp;#039;[[File:Lua-Logo.svg|30px|alt=|link=]]&amp;#039;&lt;br /&gt;
	return mMessageBox.main(&amp;#039;mbox&amp;#039;, boxArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args, modules, titleObj)&lt;br /&gt;
	if yesno(args.nocat) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local cats = {}&lt;br /&gt;
&lt;br /&gt;
	-- Error category&lt;br /&gt;
	if #modules &amp;lt; 1 then&lt;br /&gt;
		cats[#cats + 1] = &amp;#039;Lua templates with errors&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Lua templates category&lt;br /&gt;
	titleObj = titleObj or mw.title.getCurrentTitle()&lt;br /&gt;
	local subpageBlacklist = {&lt;br /&gt;
		doc = true,&lt;br /&gt;
		sandbox = true,&lt;br /&gt;
		sandbox2 = true,&lt;br /&gt;
		testcases = true&lt;br /&gt;
	}&lt;br /&gt;
	if not subpageBlacklist[titleObj.subpageText] then&lt;br /&gt;
		local protCatName&lt;br /&gt;
		if titleObj.namespace == 10 then&lt;br /&gt;
			local category = args.category&lt;br /&gt;
			if not category then&lt;br /&gt;
				local categories = {&lt;br /&gt;
					[&amp;#039;Module:String&amp;#039;] = &amp;#039;Templates based on the String Lua module&amp;#039;,&lt;br /&gt;
					[&amp;#039;Module:Math&amp;#039;] = &amp;#039;Templates based on the Math Lua module&amp;#039;,&lt;br /&gt;
					[&amp;#039;Module:BaseConvert&amp;#039;] = &amp;#039;Templates based on the BaseConvert Lua module&amp;#039;,&lt;br /&gt;
					[&amp;#039;Module:Citation/CS1&amp;#039;] = &amp;#039;Templates based on the Citation/CS1 Lua module&amp;#039;&lt;br /&gt;
				}&lt;br /&gt;
				category = modules[1] and categories[modules[1]]&lt;br /&gt;
				category = category or &amp;#039;Lua-based templates&amp;#039;&lt;br /&gt;
			end	&lt;br /&gt;
			cats[#cats + 1] = category&lt;br /&gt;
			protCatName = &amp;quot;Templates using under-protected Lua modules&amp;quot;&lt;br /&gt;
		elseif titleObj.namespace == 828 then&lt;br /&gt;
			protCatName = &amp;quot;Modules depending on under-protected modules&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if not args.noprotcat and protCatName then&lt;br /&gt;
			local protLevels = {&lt;br /&gt;
				autoconfirmed = 1,&lt;br /&gt;
				extendedconfirmed = 2,&lt;br /&gt;
				templateeditor = 3,&lt;br /&gt;
				sysop = 4&lt;br /&gt;
			}&lt;br /&gt;
			local currentProt&lt;br /&gt;
			if titleObj.id ~= 0 then&lt;br /&gt;
				-- id is 0 (page does not exist) if am previewing before creating a template.&lt;br /&gt;
				currentProt = titleObj.protectionLevels[&amp;quot;edit&amp;quot;][1]&lt;br /&gt;
			end&lt;br /&gt;
			if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end&lt;br /&gt;
			for i, module in ipairs(modules) do&lt;br /&gt;
				if module ~= &amp;quot;WP:libraryUtil&amp;quot; then&lt;br /&gt;
					local moduleTitle = mw.title.new(module)&lt;br /&gt;
					local moduleProt = moduleTitle and moduleTitle.protectionLevels[&amp;quot;edit&amp;quot;][1]&lt;br /&gt;
					if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end&lt;br /&gt;
					if moduleProt &amp;lt; currentProt then&lt;br /&gt;
						cats[#cats + 1] = protCatName&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, cat in ipairs(cats) do&lt;br /&gt;
		cats[i] = string.format(&amp;#039;[[Category:%s]]&amp;#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(cats)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Lua_banner</comments>
		</item>
		<item>
			<title>Module:Infobox</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Infobox&amp;diff=324&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Infobox&amp;diff=324&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Infobox&quot; title=&quot;Module:Infobox&quot;&gt;Module:Infobox&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs = {}&lt;br /&gt;
local root&lt;br /&gt;
&lt;br /&gt;
local function notempty( s ) return s and s:match( &amp;#039;%S&amp;#039; ) end&lt;br /&gt;
&lt;br /&gt;
local function fixChildBoxes(sval, tt)&lt;br /&gt;
	if notempty(sval) then&lt;br /&gt;
		local marker = &amp;#039;&amp;lt;span class=special_infobox_marker&amp;gt;&amp;#039;&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;(&amp;lt;%s*[Tt][Rr])&amp;#039;, marker .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;(&amp;lt;/[Tt][Rr]%s*&amp;gt;)&amp;#039;, &amp;#039;%1&amp;#039; .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &amp;#039;%s*&amp;#039; .. marker, &amp;#039;&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &amp;#039;([\r\n]|-[^\r\n]*[\r\n])%s*&amp;#039; .. marker, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &amp;#039;%s*([\r\n]|-)&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &amp;#039;(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)&amp;#039; .. marker, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &amp;#039;(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)&amp;#039; .. marker, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &amp;#039;^(%{|[^\r\n]*[\r\n]%s*)&amp;#039; .. marker, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &amp;#039;([\r\n]%{|[^\r\n]*[\r\n]%s*)&amp;#039; .. marker, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &amp;#039;(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &amp;#039;(%s*\n|%})&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			local subcells = mw.text.split(s, marker)&lt;br /&gt;
			s = &amp;#039;&amp;#039;&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. &amp;#039;&amp;lt;/&amp;#039; .. tt .. &amp;#039;&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = &amp;#039; style=&amp;quot;display:none&amp;quot;&amp;#039;&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = &amp;#039;&amp;#039;	end&lt;br /&gt;
					s = s .. &amp;#039;&amp;lt;tr&amp;#039; .. rowstyle ..&amp;#039;&amp;gt;&amp;lt;&amp;#039; .. tt .. &amp;#039; colspan=2&amp;gt;\n&amp;#039; .. subcells[k]&lt;br /&gt;
				elseif notempty(subcells[k]) then&lt;br /&gt;
					if (k % 2) == 0 then&lt;br /&gt;
						s = s .. subcells[k]&lt;br /&gt;
					else&lt;br /&gt;
						s = s .. &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;&amp;#039; .. tt .. &amp;#039; colspan=2&amp;gt;\n&amp;#039; .. subcells[k] .. &amp;#039;&amp;lt;/&amp;#039; .. tt .. &amp;#039;&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- the next two lines add a newline at the end of lists for the PHP parser&lt;br /&gt;
		-- https://en.wikipedia.org/w/index.php?title=Template_talk:Infobox_musical_artist&amp;amp;oldid=849054481&lt;br /&gt;
		-- remove when [[:phab:T191516]] is fixed or OBE&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;([\r\n][%*#;:][^\r\n]*)$&amp;#039;, &amp;#039;%1\n&amp;#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;^([%*#;:][^\r\n]*)$&amp;#039;, &amp;#039;%1\n&amp;#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;^([%*#;:])&amp;#039;, &amp;#039;\n%1&amp;#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;^(%{%|)&amp;#039;, &amp;#039;\n%1&amp;#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return sval&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of the values of two tables, as a sequence.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for k, v in pairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix)&lt;br /&gt;
	-- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
	-- for the specified prefix. For example, if the prefix was &amp;#039;data&amp;#039;, and&lt;br /&gt;
	-- &amp;#039;data1&amp;#039;, &amp;#039;data2&amp;#039;, and &amp;#039;data5&amp;#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match(&amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addRow(rowArgs)&lt;br /&gt;
	-- Adds a row to the infobox, with either a header cell&lt;br /&gt;
	-- or a label/data cell combination.&lt;br /&gt;
	if rowArgs.header and rowArgs.header ~= &amp;#039;_BLANK_&amp;#039; then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
				:addClass(rowArgs.rowclass)&lt;br /&gt;
				:cssText(rowArgs.rowstyle)&lt;br /&gt;
				:attr(&amp;#039;id&amp;#039;, rowArgs.rowid)&lt;br /&gt;
				:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
					:attr(&amp;#039;id&amp;#039;, rowArgs.headerid)&lt;br /&gt;
					:addClass(rowArgs.class)&lt;br /&gt;
					:addClass(args.headerclass)&lt;br /&gt;
					:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
					:cssText(args.headerstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(fixChildBoxes(rowArgs.header, &amp;#039;th&amp;#039;))&lt;br /&gt;
	elseif rowArgs.data then&lt;br /&gt;
		if not rowArgs.data:gsub(&amp;#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&amp;#039;, &amp;#039;&amp;#039;):match(&amp;#039;^%S&amp;#039;) then&lt;br /&gt;
			rowArgs.rowstyle = &amp;#039;display:none&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		local row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		row:addClass(rowArgs.rowclass)&lt;br /&gt;
		row:cssText(rowArgs.rowstyle)&lt;br /&gt;
		row:attr(&amp;#039;id&amp;#039;, rowArgs.rowid)&lt;br /&gt;
		if rowArgs.label then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;id&amp;#039;, rowArgs.labelid)&lt;br /&gt;
					:cssText(args.labelstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(rowArgs.label)&lt;br /&gt;
					:done()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local dataCell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
		if not rowArgs.label then&lt;br /&gt;
			dataCell&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
				:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr(&amp;#039;id&amp;#039;, rowArgs.dataid)&lt;br /&gt;
			:addClass(rowArgs.class)&lt;br /&gt;
			:cssText(rowArgs.datastyle)&lt;br /&gt;
			:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
			:wikitext(fixChildBoxes(rowArgs.data, &amp;#039;td&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&amp;#039;caption&amp;#039;)&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:cssText(args.titlestyle)&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
	if not args.above then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
				:addClass(args.aboveclass)&lt;br /&gt;
				:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;font-size&amp;#039;, &amp;#039;125%&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
				:cssText(args.abovestyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.above,&amp;#039;th&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&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(args.belowclass)&lt;br /&gt;
				:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
				:cssText(args.belowstyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.below,&amp;#039;td&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
	if args.subheader then&lt;br /&gt;
		args.subheader1 = args.subheader&lt;br /&gt;
	end&lt;br /&gt;
	if args.subheaderrowclass then&lt;br /&gt;
		args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
	end&lt;br /&gt;
	local subheadernums = getArgNums(&amp;#039;subheader&amp;#039;)&lt;br /&gt;
	for k, num in ipairs(subheadernums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = args[&amp;#039;subheader&amp;#039; .. tostring(num)],&lt;br /&gt;
			datastyle = args.subheaderstyle,&lt;br /&gt;
			rowcellstyle = args[&amp;#039;subheaderstyle&amp;#039; .. tostring(num)],&lt;br /&gt;
			class = args.subheaderclass,&lt;br /&gt;
			rowclass = args[&amp;#039;subheaderrowclass&amp;#039; .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
	if args.image then&lt;br /&gt;
		args.image1 = args.image&lt;br /&gt;
	end&lt;br /&gt;
	if args.caption then&lt;br /&gt;
		args.caption1 = args.caption&lt;br /&gt;
	end&lt;br /&gt;
	local imagenums = getArgNums(&amp;#039;image&amp;#039;)&lt;br /&gt;
	for k, num in ipairs(imagenums) do&lt;br /&gt;
		local caption = args[&amp;#039;caption&amp;#039; .. tostring(num)]&lt;br /&gt;
		local data = mw.html.create():wikitext(args[&amp;#039;image&amp;#039; .. tostring(num)])&lt;br /&gt;
		if caption then&lt;br /&gt;
			data&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(caption)&lt;br /&gt;
		end&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = tostring(data),&lt;br /&gt;
			datastyle = args.imagestyle,&lt;br /&gt;
			class = args.imageclass,&lt;br /&gt;
			rowclass = args[&amp;#039;imagerowclass&amp;#039; .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessRows()&lt;br /&gt;
	-- Gets the union of the header and data argument numbers,&lt;br /&gt;
	-- and renders them all in order using addRow.&lt;br /&gt;
	local rownums = union(getArgNums(&amp;#039;header&amp;#039;), getArgNums(&amp;#039;data&amp;#039;))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	local lastheader&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		if args[&amp;#039;header&amp;#039; .. tostring(num)] then&lt;br /&gt;
			if lastheader then&lt;br /&gt;
				args[&amp;#039;header&amp;#039; .. tostring(lastheader)] = nil&lt;br /&gt;
			end&lt;br /&gt;
			lastheader = num&lt;br /&gt;
		elseif args[&amp;#039;data&amp;#039; .. tostring(num)] and args[&amp;#039;data&amp;#039; .. tostring(num)]:gsub(&amp;#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&amp;#039;, &amp;#039;&amp;#039;):match(&amp;#039;^%S&amp;#039;) then&lt;br /&gt;
			local data = args[&amp;#039;data&amp;#039; .. tostring(num)]&lt;br /&gt;
			if data:gsub(&amp;#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&amp;#039;, &amp;#039;&amp;#039;):match(&amp;#039;%S&amp;#039;) then&lt;br /&gt;
				lastheader = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lastheader then&lt;br /&gt;
		args[&amp;#039;header&amp;#039; .. tostring(lastheader)] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
	-- Gets the union of the header and data argument numbers,&lt;br /&gt;
	-- and renders them all in order using addRow.&lt;br /&gt;
	local rownums = union(getArgNums(&amp;#039;header&amp;#039;), getArgNums(&amp;#039;data&amp;#039;))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			header = args[&amp;#039;header&amp;#039; .. tostring(num)],&lt;br /&gt;
			label = args[&amp;#039;label&amp;#039; .. tostring(num)],&lt;br /&gt;
			data = args[&amp;#039;data&amp;#039; .. tostring(num)],&lt;br /&gt;
			datastyle = args.datastyle,&lt;br /&gt;
			class = args[&amp;#039;class&amp;#039; .. tostring(num)],&lt;br /&gt;
			rowclass = args[&amp;#039;rowclass&amp;#039; .. tostring(num)],&lt;br /&gt;
			rowstyle = args[&amp;#039;rowstyle&amp;#039; .. tostring(num)],&lt;br /&gt;
			rowcellstyle = args[&amp;#039;rowcellstyle&amp;#039; .. tostring(num)],&lt;br /&gt;
			dataid = args[&amp;#039;dataid&amp;#039; .. tostring(num)],&lt;br /&gt;
			labelid = args[&amp;#039;labelid&amp;#039; .. tostring(num)],&lt;br /&gt;
			headerid = args[&amp;#039;headerid&amp;#039; .. tostring(num)],&lt;br /&gt;
			rowid = args[&amp;#039;rowid&amp;#039; .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
	-- Specify the overall layout of the infobox, with special settings&lt;br /&gt;
	-- if the infobox is used as a &amp;#039;child&amp;#039; inside another infobox.&lt;br /&gt;
	if args.child ~= &amp;#039;yes&amp;#039; then&lt;br /&gt;
		root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:addClass((args.subbox ~= &amp;#039;yes&amp;#039;) and &amp;#039;infobox&amp;#039; or nil)&lt;br /&gt;
			:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
			if args.subbox == &amp;#039;yes&amp;#039; then&lt;br /&gt;
				root&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;margin&amp;#039;, &amp;#039;-3px&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;auto&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;min-width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;font-size&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;clear&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;float&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;background-color&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				root&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;22em&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		root&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
&lt;br /&gt;
		renderTitle()&lt;br /&gt;
		renderAboveRow()&lt;br /&gt;
	else&lt;br /&gt;
		root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderSubheaders()&lt;br /&gt;
	renderImages()&lt;br /&gt;
	if args.autoheaders then&lt;br /&gt;
		preprocessRows()&lt;br /&gt;
	end&lt;br /&gt;
	renderRows()&lt;br /&gt;
	renderBelowRow()&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
	-- If the argument exists and isn&amp;#039;t blank, add it to the argument table.&lt;br /&gt;
	-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
	if origArgs[argName] and origArgs[argName] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		args[argName] = origArgs[argName]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
	-- Assign the parameters with the given prefixes to the args table, in order, in batches&lt;br /&gt;
	-- of the step size specified. This is to prevent references etc. from appearing in the&lt;br /&gt;
	-- wrong order. The prefixTable should be an array containing tables, each of which has&lt;br /&gt;
	-- two possible fields, a &amp;quot;prefix&amp;quot; string and a &amp;quot;depend&amp;quot; table. The function always parses&lt;br /&gt;
	-- parameters containing the &amp;quot;prefix&amp;quot; string, but only parses parameters in the &amp;quot;depend&amp;quot;&lt;br /&gt;
	-- table if the prefix parameter is present and non-blank.&lt;br /&gt;
	if type(prefixTable) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(step) ~= &amp;#039;number&amp;#039; then&lt;br /&gt;
		error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
	for i,v in ipairs(prefixTable) do&lt;br /&gt;
		if type(v) ~= &amp;#039;table&amp;#039; or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= &amp;#039;table&amp;#039;) then&lt;br /&gt;
			error(&amp;#039;Invalid input detected to preprocessArgs prefix table&amp;#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
		preprocessSingleArg(v.prefix)&lt;br /&gt;
		-- Only parse the depend parameter if the prefix parameter is present and not blank.&lt;br /&gt;
		if args[v.prefix] and v.depend then&lt;br /&gt;
			for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
				if type(dependValue) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
					error(&amp;#039;Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
				preprocessSingleArg(dependValue)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments with number suffixes.&lt;br /&gt;
	local a = 1 -- Counter variable.&lt;br /&gt;
	local moreArgumentsExist = true&lt;br /&gt;
	while moreArgumentsExist == true do&lt;br /&gt;
		moreArgumentsExist = false&lt;br /&gt;
		for i = a, a + step - 1 do&lt;br /&gt;
			for j,v in ipairs(prefixTable) do&lt;br /&gt;
				local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
				if origArgs[prefixArgName] then&lt;br /&gt;
					moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
					preprocessSingleArg(prefixArgName)&lt;br /&gt;
				end&lt;br /&gt;
				-- Process the depend table if the prefix argument is present and not blank, or&lt;br /&gt;
				-- we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is present and not blank, and&lt;br /&gt;
				-- if the depend table is present.&lt;br /&gt;
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
					for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
						local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
						preprocessSingleArg(dependArgName)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		a = a + step&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseDataParameters()&lt;br /&gt;
	-- Parse the data parameters in the same order that the old {{infobox}} did, so that&lt;br /&gt;
	-- references etc. will display in the expected places. Parameters that depend on&lt;br /&gt;
	-- another parameter are only processed if that parameter is present, to avoid&lt;br /&gt;
	-- phantom references appearing in article reference lists.&lt;br /&gt;
	preprocessSingleArg(&amp;#039;autoheaders&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;child&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;bodyclass&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;subbox&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;bodystyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;title&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;titleclass&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;titlestyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;above&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;aboveclass&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;abovestyle&amp;#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &amp;#039;subheader&amp;#039;, depend = {&amp;#039;subheaderstyle&amp;#039;, &amp;#039;subheaderrowclass&amp;#039;}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;subheaderstyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;subheaderclass&amp;#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &amp;#039;image&amp;#039;, depend = {&amp;#039;caption&amp;#039;, &amp;#039;imagerowclass&amp;#039;}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;captionstyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;imagestyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;imageclass&amp;#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &amp;#039;header&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;data&amp;#039;, depend = {&amp;#039;label&amp;#039;}},&lt;br /&gt;
		{prefix = &amp;#039;rowclass&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;rowstyle&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;rowcellstyle&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;class&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;dataid&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;labelid&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;headerid&amp;#039;},&lt;br /&gt;
		{prefix = &amp;#039;rowid&amp;#039;}&lt;br /&gt;
	}, 50)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;headerclass&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;headerstyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;labelstyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;datastyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;below&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;belowclass&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;belowstyle&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;name&amp;#039;)&lt;br /&gt;
	preprocessSingleArg(&amp;#039;decat&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
	-- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
	-- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infoboxTemplate(frame)&lt;br /&gt;
	-- For calling via #invoke within a template&lt;br /&gt;
	origArgs = {}&lt;br /&gt;
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:46 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Infobox</comments>
		</item>
		<item>
			<title>Module:High-use</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:High-use&amp;diff=322&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:High-use&amp;diff=322&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:High-use&quot; title=&quot;Module:High-use&quot;&gt;Module:High-use&lt;/a&gt; by file upload (1 revision)&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;
local p = {}&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local _fetch = require(&amp;#039;Module:Transclusion_count&amp;#039;)._fetch -- _fetch looks at the &amp;#039;demo&amp;#039; argument&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local lang_obj = mw.getContentLanguage() -- this here because the language object is used multiple places in the module&lt;br /&gt;
local large_count_cutoff = 100000&lt;br /&gt;
local approx_num_total_pages = 63000000&lt;br /&gt;
&lt;br /&gt;
local user_subpage_info_page = &amp;#039;Wikipedia:User pages#SUB&amp;#039;&lt;br /&gt;
local sandbox_module_page = &amp;#039;Module:Sandbox&amp;#039;&lt;br /&gt;
local system_messages_cat = &amp;#039;Pages used in system messages needing protection&amp;#039;&lt;br /&gt;
local sandbox_word = &amp;#039;sandbox&amp;#039;&lt;br /&gt;
local testcases_word = &amp;#039;testcases&amp;#039;&lt;br /&gt;
local doc_word = &amp;#039;doc&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local function count_from_args(args)&lt;br /&gt;
	if tonumber(args.count) then -- check if function has already been used&lt;br /&gt;
		return tonumber(args.count) -- early exit if so&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local count&lt;br /&gt;
	&lt;br /&gt;
	if yesno(args[&amp;#039;fetch&amp;#039;]) ~= false then&lt;br /&gt;
		count = _fetch(args) -- fetch transclusion count&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- use explicitly-provided count when fetch fails&lt;br /&gt;
	if count == nil and args[1] ~= nil and args[1] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		-- convert local language number string to a number understandable by Lua&lt;br /&gt;
		count = mw.ustring.gsub(args[1], &amp;#039;+$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
		count = lang_obj:parseFormattedNumber(args[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- in case someone writes a non-positive number&lt;br /&gt;
	if count and count &amp;gt; 0 then&lt;br /&gt;
		return count&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Actions if there is a large (greater than or equal to 100,000) transclusion count&lt;br /&gt;
local function risk_boolean(args)&lt;br /&gt;
	if args.risk == true or args.risk == false then&lt;br /&gt;
		return args.risk&lt;br /&gt;
	elseif args[1]  == &amp;#039;risk&amp;#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		local count = count_from_args(args)&lt;br /&gt;
		if count and count &amp;gt;= large_count_cutoff then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- function retained for backwards compatibility&lt;br /&gt;
function p._risk(args)&lt;br /&gt;
	return risk_boolean(args) and &amp;#039;risk&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- function retained for backwards compatibility&lt;br /&gt;
function p.risk(frame)&lt;br /&gt;
	return p._risk(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- count and no_percent arguments retained for backwards compatibility&lt;br /&gt;
function p._num(args, count, no_percent)&lt;br /&gt;
	if count == nil then&lt;br /&gt;
		count = count_from_args(args)&lt;br /&gt;
	end&lt;br /&gt;
	args.count = count&lt;br /&gt;
	args.risk = risk_boolean(args)&lt;br /&gt;
	&lt;br /&gt;
	-- Build output string&lt;br /&gt;
	local return_value = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.count == nil and args.risk then&lt;br /&gt;
		return &amp;#039;a very large number of&amp;#039;&lt;br /&gt;
	elseif args.count == nil then&lt;br /&gt;
		return &amp;#039;many&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		-- Use 2 significant figures for smaller numbers and 3 for larger ones&lt;br /&gt;
		local sigfig = 2&lt;br /&gt;
		if args.count &amp;gt;= large_count_cutoff then&lt;br /&gt;
			sigfig = 3&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Prepare to round to appropriate number of sigfigs&lt;br /&gt;
		local f = math.floor(math.log10(args.count)) - sigfig + 1&lt;br /&gt;
		&lt;br /&gt;
		-- Round and insert &amp;#039;approximately&amp;#039; or &amp;#039;+&amp;#039; when appropriate&lt;br /&gt;
		if yesno(args[2]) == true or (type(args[1]) == &amp;#039;string&amp;#039; and (mw.ustring.sub(args[1], -1) == &amp;#039;+&amp;#039;)) then&lt;br /&gt;
			-- Round down&lt;br /&gt;
			return_value = string.format(&amp;#039;%s+&amp;#039;, lang_obj:formatNum(math.floor( (args.count / 10^(f)) ) * (10^(f))) )&lt;br /&gt;
		else&lt;br /&gt;
			-- Round to nearest&lt;br /&gt;
			return_value = string.format(&amp;#039;approximately&amp;amp;#x20;%s&amp;#039;, lang_obj:formatNum(math.floor( (args.count / 10^(f)) + 0.5) * (10^(f))) )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Insert percentage of pages if that is likely to be &amp;gt;= 1% and when |no-percent= not set to yes&lt;br /&gt;
		no_percent = yesno(no_percent or args[&amp;#039;no-percent&amp;#039;])&lt;br /&gt;
		if args.count and args.count &amp;gt;= approx_num_total_pages/100 and not no_percent then&lt;br /&gt;
			local num_total_pages = mw.getCurrentFrame():callParserFunction(&amp;#039;NUMBEROFPAGES&amp;#039;, &amp;#039;R&amp;#039;)&lt;br /&gt;
			local total_percent = math.floor( ( ( args.count/num_total_pages ) * 100) + 0.5)&lt;br /&gt;
			&lt;br /&gt;
			if total_percent &amp;gt;= 1 then&lt;br /&gt;
				return_value = string.format(&amp;#039;%s&amp;amp;#x20;pages, or roughly %s%% of all&amp;#039;, return_value, total_percent)&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return return_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- used by [[Template:Stub documentation]] and other pages&lt;br /&gt;
-- count argument retained for backwards compatibility&lt;br /&gt;
function p.num(frame, count)&lt;br /&gt;
	return p._num(getArgs(frame), count)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- count argument retained for backwards compatibility&lt;br /&gt;
function p._text(args, count)&lt;br /&gt;
	--[=[&lt;br /&gt;
		Only show the information about how this template gets updated&lt;br /&gt;
		if someone is actually editing the page and maybe trying to update the count.&lt;br /&gt;
	]=]&lt;br /&gt;
	local bot_text = (mw.getCurrentFrame():preprocess(&amp;#039;{{REVISIONID}}&amp;#039;) == &amp;#039;&amp;#039;) and (&amp;quot;\n\n----\n&amp;#039;&amp;#039;&amp;#039;Preview message&amp;#039;&amp;#039;&amp;#039;:&amp;quot; .. &amp;#039; Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]]).&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if count == nil then&lt;br /&gt;
		count = count_from_args(args)&lt;br /&gt;
	end&lt;br /&gt;
	args.count = count&lt;br /&gt;
	args.risk = risk_boolean(args)&lt;br /&gt;
	&lt;br /&gt;
	-- trim /doc, /sandbox and /testcases&lt;br /&gt;
	local title = args.title or (args.demo and args.demo ~= &amp;#039;&amp;#039; and mw.title.new(args.demo, &amp;#039;Template&amp;#039;)) or mw.title.getCurrentTitle()&lt;br /&gt;
	if title.subpageText == doc_word or title.subpageText == sandbox_word or title.subpageText == testcases_word then&lt;br /&gt;
		title = title.basePageTitle&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- use /testcases of base template&lt;br /&gt;
	local testcases_page = mw.title.new(title.prefixedText .. &amp;#039;/&amp;#039; .. testcases_word)&lt;br /&gt;
	-- exists is expensive&lt;br /&gt;
	while testcases_page.basePageTitle.isSubpage and not testcases_page.exists do&lt;br /&gt;
		testcases_page = mw.title.new(testcases_page.basePageTitle.basePageTitle.prefixedText .. &amp;#039;/&amp;#039; .. testcases_word)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local systemMessages = (args[&amp;#039;system&amp;#039;] or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- This retrieves the project URL automatically to simplify localization.&lt;br /&gt;
	local templateCount = (&amp;#039;on [https://linkcount.toolforge.org/?project=%s&amp;amp;page=%s#transclusions %s pages]&amp;#039;):format(&lt;br /&gt;
		title:fullUrl():gsub(&amp;#039;//(.-)/.*&amp;#039;, &amp;#039;%1&amp;#039;),&lt;br /&gt;
		mw.uri.encode(title.fullText), p._num(args))&lt;br /&gt;
	local used_on_text = &amp;quot;&amp;#039;&amp;#039;&amp;#039;This &amp;quot; .. (title:inNamespace(&amp;#039;Module&amp;#039;) and &amp;#039;Lua module&amp;#039; or &amp;#039;template&amp;#039;) .. &amp;#039; is used &amp;#039;&lt;br /&gt;
	if systemMessages then&lt;br /&gt;
		used_on_text = used_on_text .. args[&amp;#039;system&amp;#039;] ..&lt;br /&gt;
			((args.count and args.count &amp;gt; 2000) and (&amp;quot;&amp;#039;&amp;#039;&amp;#039;, and &amp;quot; .. templateCount) or (&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;))&lt;br /&gt;
	else&lt;br /&gt;
		used_on_text = used_on_text .. templateCount .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sandbox_text = (&amp;#039;%s\&amp;#039;s [[%s/sandbox|/sandbox]] or [[%s|/testcases]] subpages, or in your own [[%s]]. &amp;#039;):format(&lt;br /&gt;
		title:inNamespace(&amp;#039;Module&amp;#039;) and &amp;#039;module&amp;#039; or &amp;#039;template&amp;#039;,&lt;br /&gt;
		title.fullText,&lt;br /&gt;
		testcases_page.fullText,&lt;br /&gt;
		title:inNamespace(&amp;#039;Module&amp;#039;) and (sandbox_module_page .. &amp;#039;|module sandbox&amp;#039;) or (user_subpage_info_page .. &amp;#039;|user subpage&amp;#039;)&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	local infoArg = args[&amp;#039;info&amp;#039;] ~= &amp;#039;&amp;#039; and args[&amp;#039;info&amp;#039;]&lt;br /&gt;
	if (systemMessages or args.risk) then&lt;br /&gt;
		local info = &amp;#039;.&amp;#039;&lt;br /&gt;
		if systemMessages then&lt;br /&gt;
			info = info .. &amp;#039;&amp;lt;br /&amp;gt;Changes to it can cause immediate changes to the &amp;#039; .. mw.site.namespaces.Project.name .. &amp;#039; user interface.&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if infoArg then&lt;br /&gt;
			info = info .. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039; .. infoArg&lt;br /&gt;
		end&lt;br /&gt;
		sandbox_text = info .. &amp;#039;&amp;lt;br /&amp;gt; To avoid major disruption&amp;#039; ..&lt;br /&gt;
			(args.count and args.count &amp;gt;= large_count_cutoff and &amp;#039; and server load&amp;#039; or &amp;#039;&amp;#039;) .. -- should this use args.risk?&lt;br /&gt;
			&amp;#039;, any changes should be tested in the &amp;#039; .. sandbox_text ..&lt;br /&gt;
			&amp;#039;The tested changes can be added to this page in a single edit. &amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		sandbox_text = (infoArg and (&amp;#039;.&amp;lt;br /&amp;gt;&amp;#039; .. infoArg .. &amp;#039; C&amp;#039;) or &amp;#039; and c&amp;#039;) ..&lt;br /&gt;
			&amp;#039;hanges may be widely noticed. Test changes in the &amp;#039; .. sandbox_text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local discussion_text = systemMessages and &amp;#039;Please discuss changes &amp;#039; or &amp;#039;Consider discussing changes &amp;#039;&lt;br /&gt;
	if args[2] ~= nil and args[2] ~= &amp;#039;&amp;#039; and yesno(args[2]) == nil then&lt;br /&gt;
		discussion_text = string.format(&amp;#039;%sat [[%s]]&amp;#039;, discussion_text, args[2])&lt;br /&gt;
	else&lt;br /&gt;
		discussion_text = string.format(&amp;#039;%son the [[%s|talk page]]&amp;#039;, discussion_text, title.talkPageTitle.fullText)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return used_on_text .. sandbox_text .. discussion_text .. &amp;#039; before implementing them.&amp;#039; .. bot_text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- used by [[Template:R from high-use template]]&lt;br /&gt;
-- count argument retained for backwards compatibility&lt;br /&gt;
function p.text(frame, count)&lt;br /&gt;
	return p._text(getArgs(frame), count)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nocat argument retained for backwards compatibility&lt;br /&gt;
function p._main(args, nocat)&lt;br /&gt;
	args.count = count_from_args(args)&lt;br /&gt;
	args.risk = risk_boolean(args)&lt;br /&gt;
	args.title = (args.demo and args.demo ~= &amp;#039;&amp;#039; and mw.title.new(args.demo, &amp;#039;Template&amp;#039;)) or mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	local image = &amp;#039;Ambox warning yellow.svg&amp;#039;&lt;br /&gt;
	local type_param = &amp;#039;style&amp;#039;&lt;br /&gt;
	local epilogue = &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;system&amp;#039;] and args[&amp;#039;system&amp;#039;] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
		type_param = &amp;#039;content&amp;#039;&lt;br /&gt;
		if yesno(nocat or args[&amp;#039;nocat&amp;#039;]) ~= true and not args.title.isRedirect then&lt;br /&gt;
			local protection_action = (args.title:inNamespace(&amp;#039;File&amp;#039;) and &amp;#039;upload&amp;#039;) or &amp;#039;edit&amp;#039;&lt;br /&gt;
			local protection_level = require(&amp;#039;Module:Effective protection level&amp;#039;)._main(protection_action, args.title.fullText)&lt;br /&gt;
			&lt;br /&gt;
			if protection_level ~= &amp;#039;sysop&amp;#039; and protection_level ~= &amp;#039;templateeditor&amp;#039; and protection_level ~= &amp;#039;interfaceadmin&amp;#039; then&lt;br /&gt;
				epilogue = mw.getCurrentFrame():expandTemplate {&lt;br /&gt;
					title = &amp;#039;sandbox other&amp;#039;,&lt;br /&gt;
					args = {&lt;br /&gt;
						[2] = &amp;#039;[[Category:&amp;#039; .. system_messages_cat .. &amp;#039;]]&amp;#039;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif args.risk then&lt;br /&gt;
		image = &amp;#039;Ambox warning orange.svg&amp;#039;&lt;br /&gt;
		type_param = &amp;#039;content&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	image = &amp;#039;[[File:&amp;#039; .. image .. &amp;#039;|40px|alt=Warning|link=]]&amp;#039;&lt;br /&gt;
	if args[&amp;#039;form&amp;#039;] == &amp;#039;editnotice&amp;#039; then&lt;br /&gt;
		return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
				title = &amp;#039;editnotice&amp;#039;,&lt;br /&gt;
				args = {&lt;br /&gt;
						[&amp;#039;image&amp;#039;] = image,&lt;br /&gt;
						[&amp;#039;text&amp;#039;] = p._text(args),&lt;br /&gt;
						[&amp;#039;expiry&amp;#039;] = (args[&amp;#039;expiry&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
				}&lt;br /&gt;
		} .. epilogue&lt;br /&gt;
	else&lt;br /&gt;
		return require(&amp;#039;Module:Message box&amp;#039;).main(&amp;#039;ombox&amp;#039;, {&lt;br /&gt;
			type = type_param,&lt;br /&gt;
			image = image,&lt;br /&gt;
			text = p._text(args),&lt;br /&gt;
			expiry = (args[&amp;#039;expiry&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		}) .. epilogue&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return p._main(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:High-use</comments>
		</item>
		<item>
			<title>Module:Check for unknown parameters</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Check_for_unknown_parameters&amp;diff=320&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Check_for_unknown_parameters&amp;diff=320&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Check_for_unknown_parameters&quot; title=&quot;Module:Check for unknown parameters&quot;&gt;Module:Check for unknown parameters&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module may be used to compare the arguments passed to the parent&lt;br /&gt;
-- with a list of arguments, returning a specified result if an argument is&lt;br /&gt;
-- not on the list&lt;br /&gt;
&lt;br /&gt;
require (&amp;#039;strict&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local mapframe_params = {&lt;br /&gt;
	&amp;#039;coord&amp;#039;,&lt;br /&gt;
	&amp;#039;coordinates&amp;#039;,&lt;br /&gt;
	&amp;#039;id&amp;#039;,&lt;br /&gt;
	&amp;#039;qid&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-area_km2&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-area_mi2&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-caption&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-coord&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-coordinates&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-custom&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-frame-coord&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-frame-coordinates&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-frame-height&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-frame-width&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-geomask&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-geomask-fill&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-geomask-fill-opacity&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-geomask-stroke-color&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-geomask-stroke-colour&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-geomask-stroke-width&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-height&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-id&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-length_km&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-length_mi&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-line&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-line-stroke-color&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-line-stroke-colour&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-marker&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-marker-color&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-marker-colour&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-point&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-population&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-shape&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-shape-fill&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-shape-fill-opacity&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-shape-stroke-color&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-shape-stroke-colour&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-stroke-color&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-stroke-colour&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-stroke-width&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-switcher&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-type&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-width&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-wikidata&amp;#039;,&lt;br /&gt;
	&amp;#039;mapframe-zoom&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	return s:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match(&amp;#039;%S&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function clean(text)&lt;br /&gt;
	-- Return text cleaned for display and truncated if too long.&lt;br /&gt;
	-- Strip markers are replaced with dummy text representing the original wikitext.&lt;br /&gt;
	local pos, truncated&lt;br /&gt;
	local function truncate(text)&lt;br /&gt;
		if truncated then&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if mw.ustring.len(text) &amp;gt; 25 then&lt;br /&gt;
			truncated = true&lt;br /&gt;
			text = mw.ustring.sub(text, 1, 25) .. &amp;#039;...&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		return mw.text.nowiki(text)&lt;br /&gt;
	end&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	for before, tag, remainder in text:gmatch(&amp;#039;([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()&amp;#039;) do&lt;br /&gt;
		pos = remainder&lt;br /&gt;
		table.insert(parts, truncate(before) .. &amp;#039;&amp;amp;lt;&amp;#039; .. tag .. &amp;#039;&amp;amp;gt;...&amp;amp;lt;/&amp;#039; .. tag .. &amp;#039;&amp;amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(parts, truncate(text:sub(pos or 1)))&lt;br /&gt;
	return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._check(args, pargs)&lt;br /&gt;
	if type(args) ~= &amp;quot;table&amp;quot; or type(pargs) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		-- TODO: error handling&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the list of known args, regular expressions, and the return string&lt;br /&gt;
	local knownargs = {}&lt;br /&gt;
	&lt;br /&gt;
	if isnotempty(args[&amp;#039;mapframe_args&amp;#039;]) then&lt;br /&gt;
		for _, v in ipairs(mapframe_params) do&lt;br /&gt;
    		knownargs[v] = 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local regexps = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			v = trim(v)&lt;br /&gt;
			knownargs[v] = 1&lt;br /&gt;
		elseif k:find(&amp;#039;^regexp[1-9][0-9]*$&amp;#039;) then&lt;br /&gt;
			table.insert(regexps, &amp;#039;^&amp;#039; .. v .. &amp;#039;$&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- loop over the parent args, and make sure they are on the list&lt;br /&gt;
	local ignoreblank = isnotempty(args[&amp;#039;ignoreblank&amp;#039;])&lt;br /&gt;
	local showblankpos = isnotempty(args[&amp;#039;showblankpositional&amp;#039;])&lt;br /&gt;
	local values = {}&lt;br /&gt;
	for k, v in pairs(pargs) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; and knownargs[k] == nil then&lt;br /&gt;
			local knownflag = false&lt;br /&gt;
			for _, regexp in ipairs(regexps) do&lt;br /&gt;
				if mw.ustring.match(k, regexp) then&lt;br /&gt;
					knownflag = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not knownflag and ( not ignoreblank or isnotempty(v) )  then&lt;br /&gt;
				table.insert(values, clean(k))&lt;br /&gt;
			end&lt;br /&gt;
		elseif type(k) == &amp;#039;number&amp;#039; and knownargs[tostring(k)] == nil then&lt;br /&gt;
			local knownflag = false&lt;br /&gt;
			for _, regexp in ipairs(regexps) do&lt;br /&gt;
				if mw.ustring.match(tostring(k), regexp) then&lt;br /&gt;
					knownflag = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not knownflag and ( showblankpos or isnotempty(v) ) then&lt;br /&gt;
				table.insert(values, k .. &amp;#039; = &amp;#039; .. clean(v))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add results to the output tables&lt;br /&gt;
	local res = {}&lt;br /&gt;
	if #values &amp;gt; 0 then&lt;br /&gt;
		local unknown_text = args[&amp;#039;unknown&amp;#039;] or &amp;#039;Found _VALUE_, &amp;#039;&lt;br /&gt;
&lt;br /&gt;
		if mw.getCurrentFrame():preprocess( &amp;quot;{{REVISIONID}}&amp;quot; ) == &amp;quot;&amp;quot; then&lt;br /&gt;
			local preview_text = args[&amp;#039;preview&amp;#039;]&lt;br /&gt;
			if isnotempty(preview_text) then&lt;br /&gt;
				preview_text = require(&amp;#039;Module:If preview&amp;#039;)._warning({preview_text})&lt;br /&gt;
			elseif preview_text == nil then&lt;br /&gt;
				preview_text = unknown_text&lt;br /&gt;
			end&lt;br /&gt;
			unknown_text = preview_text&lt;br /&gt;
		end&lt;br /&gt;
		for _, v in pairs(values) do&lt;br /&gt;
			-- Fix odd bug for | = which gets stripped to the empty string and&lt;br /&gt;
			-- breaks category links&lt;br /&gt;
			if v == &amp;#039;&amp;#039; then v = &amp;#039; &amp;#039; end&lt;br /&gt;
&lt;br /&gt;
			-- avoid error with v = &amp;#039;example%2&amp;#039; (&amp;quot;invalid capture index&amp;quot;)&lt;br /&gt;
			local r = unknown_text:gsub(&amp;#039;_VALUE_&amp;#039;, {_VALUE_ = v})&lt;br /&gt;
			table.insert(res, r)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(res)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.check(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args&lt;br /&gt;
	return p._check(args, pargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Check_for_unknown_parameters</comments>
		</item>
		<item>
			<title>Module:Documentation/config</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Documentation/config&amp;diff=318&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Documentation/config&amp;diff=318&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Documentation/config&quot; title=&quot;Module:Documentation/config&quot;&gt;Module:Documentation/config&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;----------------------------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                               Configuration for Module:Documentation&lt;br /&gt;
--&lt;br /&gt;
-- Here you can set the values of the parameters and messages used in Module:Documentation to&lt;br /&gt;
-- localise it to your wiki and your language. Unless specified otherwise, values given here&lt;br /&gt;
-- should be string values.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local _format = require(&amp;#039;Module:TNT&amp;#039;).format&lt;br /&gt;
local function format(id)&lt;br /&gt;
	return _format(&amp;#039;I18n/Documentation&amp;#039;, id)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Do not edit this line.&lt;br /&gt;
&lt;br /&gt;
cfg[&amp;#039;templatestyles-scr&amp;#039;] = &amp;#039;Module:Documentation/styles.css&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Protection template configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;protection-template&amp;#039;]&lt;br /&gt;
-- The name of the template that displays the protection icon (a padlock on enwiki).&lt;br /&gt;
cfg[&amp;#039;protection-template&amp;#039;] = &amp;#039;PP-template&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;protection-reason-edit&amp;#039;]&lt;br /&gt;
-- The protection reason for edit-protected templates to pass to&lt;br /&gt;
-- [[Module:Protection banner]].&lt;br /&gt;
cfg[&amp;#039;protection-reason-edit&amp;#039;] = &amp;#039;template&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;protection-template-args&amp;#039;]&lt;br /&gt;
-- Any arguments to send to the protection template. This should be a Lua table.&lt;br /&gt;
-- For example, if the protection template is &amp;quot;pp-template&amp;quot;, and the wikitext template invocation&lt;br /&gt;
-- looks like &amp;quot;{{pp-template|docusage=yes}}&amp;quot;, then this table should look like &amp;quot;{docusage = &amp;#039;yes&amp;#039;}&amp;quot;.&lt;br /&gt;
 --]]&lt;br /&gt;
 cfg[&amp;#039;protection-template-args&amp;#039;] = {docusage = &amp;#039;yes&amp;#039;}&lt;br /&gt;
cfg[&amp;#039;main-div-classes&amp;#039;] = &amp;#039;template-documentation iezoomfix&amp;#039;&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox notice configuration&lt;br /&gt;
--&lt;br /&gt;
-- On sandbox pages the module can display a template notifying users that the current page is a&lt;br /&gt;
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a&lt;br /&gt;
-- sandbox or not based on the value of cfg[&amp;#039;sandbox-subpage&amp;#039;]. The following settings configure the&lt;br /&gt;
-- messages that the notices contains.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-image&amp;#039;]&lt;br /&gt;
-- The image displayed in the sandbox notice.&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-image&amp;#039;] = &amp;#039;[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-pagetype-template&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-pagetype-module&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-pagetype-other&amp;#039;]&lt;br /&gt;
-- The page type of the sandbox page. The message that is displayed depends on the current subject&lt;br /&gt;
-- namespace. This message is used in either cfg[&amp;#039;sandbox-notice-blurb&amp;#039;] or&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-diff-blurb&amp;#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-pagetype-template&amp;#039;] = format(&amp;#039;sandbox-notice-pagetype-template&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-pagetype-module&amp;#039;] = format(&amp;#039;sandbox-notice-pagetype-module&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-pagetype-other&amp;#039;] = format(&amp;#039;sandbox-notice-pagetype-other&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-blurb&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-diff-blurb&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-diff-display&amp;#039;]&lt;br /&gt;
-- Either cfg[&amp;#039;sandbox-notice-blurb&amp;#039;] or cfg[&amp;#039;sandbox-notice-diff-blurb&amp;#039;] is the opening sentence&lt;br /&gt;
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page&lt;br /&gt;
-- type, which is either cfg[&amp;#039;sandbox-notice-pagetype-template&amp;#039;],&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-pagetype-module&amp;#039;] or cfg[&amp;#039;sandbox-notice-pagetype-other&amp;#039;] depending what&lt;br /&gt;
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between&lt;br /&gt;
-- the sandbox and the main template. The display value of the diff link is set by &lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-compare-link-display&amp;#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-blurb&amp;#039;] = format(&amp;#039;sandbox-notice-blurb&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-diff-blurb&amp;#039;] = format(&amp;#039;sandbox-notice-diff-blurb&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-compare-link-display&amp;#039;] = format(&amp;#039;sandbox-notice-compare-link-display&amp;#039;)&lt;br /&gt;
-- cfg[&amp;#039;view-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for &amp;quot;view&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;view-link-display&amp;#039;] = &amp;#039;view&amp;#039;&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-blurb&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-link-display&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-run-blurb&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-run-link-display&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-blurb&amp;#039;] is a sentence notifying the user that there is a test cases page&lt;br /&gt;
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-link-display&amp;#039;] is the display value for that link.&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-run-blurb&amp;#039;] is a sentence notifying the user that there is a test cases page&lt;br /&gt;
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test&lt;br /&gt;
-- cases page, and $2 is a link to the page to run it.&lt;br /&gt;
-- cfg[&amp;#039;sandbox-notice-testcases-run-link-display&amp;#039;] is the display value for the link to run the test&lt;br /&gt;
-- cases.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-testcases-blurb&amp;#039;] = format(&amp;#039;sandbox-notice-testcases-blurb&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-testcases-link-display&amp;#039;] = format(&amp;#039;sandbox-notice-testcases-link-display&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-testcases-run-blurb&amp;#039;] = format(&amp;#039;sandbox-notice-testcases-run-blurb&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;sandbox-notice-testcases-run-link-display&amp;#039;] = format(&amp;#039;sandbox-notice-testcases-run-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;sandbox-category&amp;#039;]&lt;br /&gt;
-- A category to add to all template sandboxes.&lt;br /&gt;
cfg[&amp;#039;sandbox-category&amp;#039;] = &amp;#039;Template sandboxes&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Start box configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;documentation-icon-wikitext&amp;#039;]&lt;br /&gt;
-- The wikitext for the icon shown at the top of the template.&lt;br /&gt;
cfg[&amp;#039;documentation-icon-wikitext&amp;#039;] = &amp;#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Link box (end box) configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;transcluded-from-blurb&amp;#039;]&lt;br /&gt;
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.&lt;br /&gt;
cfg[&amp;#039;transcluded-from-blurb&amp;#039;] = format(&amp;#039;transcluded-from-blurb&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;create-module-doc-blurb&amp;#039;]&lt;br /&gt;
-- Notice displayed in the module namespace when the documentation subpage does not exist.&lt;br /&gt;
-- $1 is a link to create the documentation page with the preload cfg[&amp;#039;module-preload&amp;#039;] and the&lt;br /&gt;
-- display cfg[&amp;#039;create-link-display&amp;#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;create-module-doc-blurb&amp;#039;] = format(&amp;#039;create-module-doc-blurb&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Experiment blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;experiment-blurb-template&amp;#039;]&lt;br /&gt;
-- cfg[&amp;#039;experiment-blurb-module&amp;#039;]&lt;br /&gt;
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.&lt;br /&gt;
-- It is only shown in the template and module namespaces. With the default English settings, it&lt;br /&gt;
-- might look like this:&lt;br /&gt;
--&lt;br /&gt;
-- Editors can experiment in this template&amp;#039;s sandbox (edit | diff) and testcases (edit) pages.&lt;br /&gt;
--&lt;br /&gt;
-- In this example, &amp;quot;sandbox&amp;quot;, &amp;quot;edit&amp;quot;, &amp;quot;diff&amp;quot;, &amp;quot;testcases&amp;quot;, and &amp;quot;edit&amp;quot; would all be links.&lt;br /&gt;
--&lt;br /&gt;
-- There are two versions, cfg[&amp;#039;experiment-blurb-template&amp;#039;] and cfg[&amp;#039;experiment-blurb-module&amp;#039;], depending&lt;br /&gt;
-- on what namespace we are in.&lt;br /&gt;
-- &lt;br /&gt;
-- Parameters:&lt;br /&gt;
--&lt;br /&gt;
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&amp;#039;sandbox-link-display&amp;#039;] (cfg[&amp;#039;sandbox-edit-link-display&amp;#039;] | cfg[&amp;#039;compare-link-display&amp;#039;])&lt;br /&gt;
-- &lt;br /&gt;
-- If the sandbox doesn&amp;#039;t exist, it is in the format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&amp;#039;sandbox-link-display&amp;#039;] (cfg[&amp;#039;sandbox-create-link-display&amp;#039;] | cfg[&amp;#039;mirror-link-display&amp;#039;])&lt;br /&gt;
-- &lt;br /&gt;
-- The link for cfg[&amp;#039;sandbox-create-link-display&amp;#039;] link preloads the page with cfg[&amp;#039;template-sandbox-preload&amp;#039;]&lt;br /&gt;
-- or cfg[&amp;#039;module-sandbox-preload&amp;#039;], depending on the current namespace. The link for cfg[&amp;#039;mirror-link-display&amp;#039;]&lt;br /&gt;
-- loads a default edit summary of cfg[&amp;#039;mirror-edit-summary&amp;#039;].&lt;br /&gt;
--&lt;br /&gt;
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&amp;#039;testcases-link-display&amp;#039;] (cfg[&amp;#039;testcases-edit-link-display&amp;#039;])&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn&amp;#039;t exist, it is in the format:&lt;br /&gt;
-- &lt;br /&gt;
--     cfg[&amp;#039;testcases-link-display&amp;#039;] (cfg[&amp;#039;testcases-create-link-display&amp;#039;])&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn&amp;#039;t exist, the link for cfg[&amp;#039;testcases-create-link-display&amp;#039;] preloads the&lt;br /&gt;
-- page with cfg[&amp;#039;template-testcases-preload&amp;#039;] or cfg[&amp;#039;module-testcases-preload&amp;#039;], depending on the current&lt;br /&gt;
-- namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;experiment-blurb-template&amp;#039;] = format(&amp;#039;experiment-blurb-template&amp;#039;)&lt;br /&gt;
cfg[&amp;#039;experiment-blurb-module&amp;#039;] = format(&amp;#039;experiment-blurb-module&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;sandbox-subpage&amp;#039;]&lt;br /&gt;
-- The name of the template subpage typically used for sandboxes.&lt;br /&gt;
cfg[&amp;#039;sandbox-subpage&amp;#039;] = &amp;#039;sandbox&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;template-sandbox-preload&amp;#039;]&lt;br /&gt;
-- Preload file for template sandbox pages.&lt;br /&gt;
cfg[&amp;#039;template-sandbox-preload&amp;#039;] = &amp;#039;Template:Documentation/preload-sandbox&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;module-sandbox-preload&amp;#039;]&lt;br /&gt;
-- Preload file for Lua module sandbox pages.&lt;br /&gt;
cfg[&amp;#039;module-sandbox-preload&amp;#039;] = &amp;#039;Template:Documentation/preload-module-sandbox&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;sandbox-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for &amp;quot;sandbox&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;sandbox-link-display&amp;#039;] = format(&amp;#039;sandbox-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;sandbox-edit-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for sandbox &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;sandbox-edit-link-display&amp;#039;] = format(&amp;#039;sandbox-edit-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;sandbox-create-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for sandbox &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;sandbox-create-link-display&amp;#039;] = format(&amp;#039;sandbox-create-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;compare-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for &amp;quot;compare&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;compare-link-display&amp;#039;] = format(&amp;#039;compare-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;mirror-edit-summary&amp;#039;]&lt;br /&gt;
-- The default edit summary to use when a user clicks the &amp;quot;mirror&amp;quot; link. $1 is a wikilink to the&lt;br /&gt;
-- template page.&lt;br /&gt;
cfg[&amp;#039;mirror-edit-summary&amp;#039;] = &amp;#039;Create sandbox version of $1&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;mirror-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for &amp;quot;mirror&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;mirror-link-display&amp;#039;] = format(&amp;#039;mirror-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;mirror-link-preload&amp;#039;]&lt;br /&gt;
-- The page to preload when a user clicks the &amp;quot;mirror&amp;quot; link.&lt;br /&gt;
cfg[&amp;#039;mirror-link-preload&amp;#039;] = &amp;#039;Template:Documentation/mirror&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test cases link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;testcases-subpage&amp;#039;]&lt;br /&gt;
-- The name of the template subpage typically used for test cases.&lt;br /&gt;
cfg[&amp;#039;testcases-subpage&amp;#039;] = &amp;#039;testcases&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;template-testcases-preload&amp;#039;]&lt;br /&gt;
-- Preload file for template test cases pages.&lt;br /&gt;
cfg[&amp;#039;template-testcases-preload&amp;#039;] = &amp;#039;Template:Documentation/preload-testcases&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;module-testcases-preload&amp;#039;]&lt;br /&gt;
-- Preload file for Lua module test cases pages.&lt;br /&gt;
cfg[&amp;#039;module-testcases-preload&amp;#039;] = &amp;#039;Template:Documentation/preload-module-testcases&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;testcases-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for &amp;quot;testcases&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;testcases-link-display&amp;#039;] = format(&amp;#039;testcases-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;testcases-edit-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for test cases &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;testcases-edit-link-display&amp;#039;] = format(&amp;#039;testcases-edit-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;testcases-create-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for test cases &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg[&amp;#039;testcases-create-link-display&amp;#039;] = format(&amp;#039;testcases-create-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Add categories blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;add-categories-blurb&amp;#039;]&lt;br /&gt;
-- Text to direct users to add categories to the /doc subpage. Not used if the &amp;quot;content&amp;quot; or&lt;br /&gt;
-- &amp;quot;docname fed&amp;quot; arguments are set, as then it is not clear where to add the categories. $1 is a&lt;br /&gt;
-- link to the /doc subpage with a display value of cfg[&amp;#039;doc-link-display&amp;#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;add-categories-blurb&amp;#039;] = format(&amp;#039;add-categories-blurb&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;doc-link-display&amp;#039;]&lt;br /&gt;
-- The text to display when linking to the /doc subpage.&lt;br /&gt;
cfg[&amp;#039;doc-link-display&amp;#039;] = &amp;#039;/doc&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Subpages link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;subpages-blurb&amp;#039;]&lt;br /&gt;
-- The &amp;quot;Subpages of this template&amp;quot; blurb. $1 is a link to the main template&amp;#039;s subpages with a&lt;br /&gt;
-- display value of cfg[&amp;#039;subpages-link-display&amp;#039;]. In the English version this blurb is simply&lt;br /&gt;
-- the link followed by a period, and the link display provides the actual text.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;subpages-blurb&amp;#039;] = format(&amp;#039;subpages-blurb&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&amp;#039;subpages-link-display&amp;#039;]&lt;br /&gt;
-- The text to display for the &amp;quot;subpages of this page&amp;quot; link. $1 is cfg[&amp;#039;template-pagetype&amp;#039;],&lt;br /&gt;
-- cfg[&amp;#039;module-pagetype&amp;#039;] or cfg[&amp;#039;default-pagetype&amp;#039;], depending on whether the current page is in&lt;br /&gt;
-- the template namespace, the module namespace, or another namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&amp;#039;subpages-link-display&amp;#039;] = format(&amp;#039;subpages-link-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;template-pagetype&amp;#039;]&lt;br /&gt;
-- The pagetype to display for template pages.&lt;br /&gt;
cfg[&amp;#039;template-pagetype&amp;#039;] = format(&amp;#039;template-pagetype&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;module-pagetype&amp;#039;]&lt;br /&gt;
-- The pagetype to display for Lua module pages.&lt;br /&gt;
cfg[&amp;#039;module-pagetype&amp;#039;] = format(&amp;#039;module-pagetype&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;default-pagetype&amp;#039;]&lt;br /&gt;
-- The pagetype to display for pages other than templates or Lua modules.&lt;br /&gt;
cfg[&amp;#039;default-pagetype&amp;#039;] = format(&amp;#039;default-pagetype&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Doc link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;doc-subpage&amp;#039;]&lt;br /&gt;
-- The name of the subpage typically used for documentation pages.&lt;br /&gt;
cfg[&amp;#039;doc-subpage&amp;#039;] = &amp;#039;doc&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;file-docpage-preload&amp;#039;]&lt;br /&gt;
-- Preload file for documentation page in the file namespace.&lt;br /&gt;
cfg[&amp;#039;file-docpage-preload&amp;#039;] = &amp;#039;Template:Documentation/preload-filespace&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;docpage-preload&amp;#039;]&lt;br /&gt;
-- Preload file for template documentation pages in all namespaces.&lt;br /&gt;
cfg[&amp;#039;docpage-preload&amp;#039;] = &amp;#039;Template:Documentation/preload&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;module-preload&amp;#039;]&lt;br /&gt;
-- Preload file for Lua module documentation pages.&lt;br /&gt;
cfg[&amp;#039;module-preload&amp;#039;] = &amp;#039;Template:Documentation/preload-module-doc&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Print version configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;print-subpage&amp;#039;]&lt;br /&gt;
-- The name of the template subpage used for print versions.&lt;br /&gt;
cfg[&amp;#039;print-subpage&amp;#039;] = &amp;#039;Print&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;print-link-display&amp;#039;]&lt;br /&gt;
-- The text to display when linking to the /Print subpage.&lt;br /&gt;
cfg[&amp;#039;print-link-display&amp;#039;] = &amp;#039;/Print&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;print-blurb&amp;#039;]&lt;br /&gt;
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg[&amp;#039;print-link-display&amp;#039;].&lt;br /&gt;
cfg[&amp;#039;print-blurb&amp;#039;] = format(&amp;#039;print-blurb&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;display-print-category&amp;#039;]&lt;br /&gt;
-- Set to true to enable output of cfg[&amp;#039;print-category&amp;#039;] if a /Print subpage exists.&lt;br /&gt;
-- This should be a boolean value (either true or false).&lt;br /&gt;
cfg[&amp;#039;display-print-category&amp;#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;print-category&amp;#039;]&lt;br /&gt;
-- Category to output if cfg[&amp;#039;display-print-category&amp;#039;] is set to true, and a /Print subpage exists.&lt;br /&gt;
cfg[&amp;#039;print-category&amp;#039;] = &amp;#039;Templates with print versions&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- HTML and CSS configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;main-div-id&amp;#039;]&lt;br /&gt;
-- The &amp;quot;id&amp;quot; attribute of the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg[&amp;#039;main-div-id&amp;#039;] = &amp;#039;template-documentation&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;main-div-classes&amp;#039;]&lt;br /&gt;
-- The CSS classes added to the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg[&amp;#039;main-div-class&amp;#039;] = &amp;#039;ts-doc-doc&amp;#039;&lt;br /&gt;
cfg[&amp;#039;header-div-class&amp;#039;] = &amp;#039;ts-doc-header&amp;#039;&lt;br /&gt;
cfg[&amp;#039;heading-div-class&amp;#039;] = &amp;#039;ts-doc-heading&amp;#039;&lt;br /&gt;
cfg[&amp;#039;content-div-class&amp;#039;] = &amp;#039;ts-doc-content&amp;#039;&lt;br /&gt;
cfg[&amp;#039;footer-div-class&amp;#039;] = &amp;#039;ts-doc-footer plainlinks&amp;#039;&lt;br /&gt;
&lt;br /&gt;
cfg[&amp;#039;sandbox-class&amp;#039;] = &amp;#039;ts-doc-sandbox&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;start-box-linkclasses&amp;#039;]&lt;br /&gt;
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.&lt;br /&gt;
cfg[&amp;#039;start-box-linkclasses&amp;#039;] = &amp;#039;ts-tlinks-tlinks mw-editsection-like plainlinks&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;start-box-link-id&amp;#039;]&lt;br /&gt;
-- The HTML &amp;quot;id&amp;quot; attribute for the links in the start box.&lt;br /&gt;
cfg[&amp;#039;start-box-link-id&amp;#039;] = &amp;#039;doc_editlinks&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking category configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;display-strange-usage-category&amp;#039;]&lt;br /&gt;
-- Set to true to enable output of cfg[&amp;#039;strange-usage-category&amp;#039;] if the module is used on a /doc subpage&lt;br /&gt;
-- or a /testcases subpage. This should be a boolean value (either true or false).&lt;br /&gt;
cfg[&amp;#039;display-strange-usage-category&amp;#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg[&amp;#039;strange-usage-category&amp;#039;]&lt;br /&gt;
-- Category to output if cfg[&amp;#039;display-strange-usage-category&amp;#039;] is set to true and the module is used on a&lt;br /&gt;
-- /doc subpage or a /testcases subpage.&lt;br /&gt;
cfg[&amp;#039;strange-usage-category&amp;#039;] = &amp;#039;Wikipedia pages with strange ((documentation)) usage&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
--&lt;br /&gt;
-- Don&amp;#039;t edit anything below this line.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
return cfg&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Documentation/config</comments>
		</item>
		<item>
			<title>Module:Arguments</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Arguments&amp;diff=316&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Arguments&amp;diff=316&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Arguments&quot; title=&quot;Module:Arguments&quot;&gt;Module:Arguments&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don&amp;#039;t have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		val = val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
		if val == &amp;#039;&amp;#039; then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if val:find(&amp;#039;%S&amp;#039;) then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == &amp;#039;string&amp;#039; or tp == &amp;#039;number&amp;#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType(&amp;#039;getArgs&amp;#039;, 1, frame, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;getArgs&amp;#039;, 2, options, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame&amp;#039;s availability. If we weren&amp;#039;t&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == &amp;#039;table&amp;#039; and type(frame.getParent) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame&amp;#039;s title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == &amp;#039;table&amp;#039; then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn&amp;#039;t set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don&amp;#039;t have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &amp;#039;valueFunc&amp;#039;&amp;quot;&lt;br /&gt;
					.. &amp;#039;(function expected, got &amp;#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &amp;#039;)&amp;#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are &amp;#039;s&amp;#039; (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= &amp;#039;h&amp;#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &amp;#039;s&amp;#039;&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = &amp;#039;h&amp;#039;&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;#039;could not write to argument table key &amp;quot;&amp;#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &amp;#039;&amp;quot;; the table is read-only&amp;#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;#039;could not write to argument table key &amp;quot;&amp;#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &amp;#039;&amp;quot;; overwriting existing arguments is not permitted&amp;#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn&amp;#039;t looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = &amp;#039;h&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= &amp;#039;string&amp;#039; or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won&amp;#039;t cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Arguments</comments>
		</item>
		<item>
			<title>Module:Documentation</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Documentation&amp;diff=314&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Documentation&amp;diff=314&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Documentation&quot; title=&quot;Module:Documentation&quot;&gt;Module:Documentation&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements {{documentation}}.&lt;br /&gt;
&lt;br /&gt;
-- Get required modules.&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Get the config table.&lt;br /&gt;
local cfg = mw.loadData(&amp;#039;Module:Documentation/config&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Often-used functions.&lt;br /&gt;
local ugsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--&lt;br /&gt;
-- These are defined as local functions, but are made available in the p&lt;br /&gt;
-- table for testing purposes.&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function message(cfgKey, valArray, expectType)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Gets a message from the cfg table and formats it if appropriate.&lt;br /&gt;
	-- The function raises an error if the value from the cfg table is not&lt;br /&gt;
	-- of the type expectType. The default type for expectType is &amp;#039;string&amp;#039;.&lt;br /&gt;
	-- If the table valArray is present, strings such as $1, $2 etc. in the&lt;br /&gt;
	-- message are substituted with values from the table keys [1], [2] etc.&lt;br /&gt;
	-- For example, if the message &amp;quot;foo-message&amp;quot; had the value &amp;#039;Foo $2 bar $1.&amp;#039;,&lt;br /&gt;
	-- message(&amp;#039;foo-message&amp;#039;, {&amp;#039;baz&amp;#039;, &amp;#039;qux&amp;#039;}) would return &amp;quot;Foo qux bar baz.&amp;quot;&lt;br /&gt;
	--]]&lt;br /&gt;
	local msg = cfg[cfgKey]&lt;br /&gt;
	expectType = expectType or &amp;#039;string&amp;#039;&lt;br /&gt;
	if type(msg) ~= expectType then&lt;br /&gt;
		error(&amp;#039;message: type error in message cfg.&amp;#039; .. cfgKey .. &amp;#039; (&amp;#039; .. expectType .. &amp;#039; expected, got &amp;#039; .. type(msg) .. &amp;#039;)&amp;#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not valArray then&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getMessageVal(match)&lt;br /&gt;
		match = tonumber(match)&lt;br /&gt;
		return valArray[match] or error(&amp;#039;message: no value found for key $&amp;#039; .. match .. &amp;#039; in message cfg.&amp;#039; .. cfgKey, 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ugsub(msg, &amp;#039;$([1-9][0-9]*)&amp;#039;, getMessageVal)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.message = message&lt;br /&gt;
&lt;br /&gt;
local function makeWikilink(page, display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return mw.ustring.format(&amp;#039;[[%s|%s]]&amp;#039;, page, display)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.format(&amp;#039;[[%s]]&amp;#039;, page)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeWikilink = makeWikilink&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	local catns = mw.site.namespaces[14].name&lt;br /&gt;
	return makeWikilink(catns .. &amp;#039;:&amp;#039; .. cat, sort)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeCategoryLink = makeCategoryLink&lt;br /&gt;
&lt;br /&gt;
local function makeUrlLink(url, display)&lt;br /&gt;
	return mw.ustring.format(&amp;#039;[%s %s]&amp;#039;, url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeUrlLink = makeUrlLink&lt;br /&gt;
&lt;br /&gt;
local function makeToolbar(...)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local lim = select(&amp;#039;#&amp;#039;, ...)&lt;br /&gt;
	if lim &amp;lt; 1 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, lim do&lt;br /&gt;
		ret[#ret + 1] = select(i, ...)&lt;br /&gt;
	end&lt;br /&gt;
	-- &amp;#039;documentation-toolbar&amp;#039;&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;&amp;#039; .. message(&amp;#039;toolbar-class&amp;#039;) .. &amp;#039;&amp;quot;&amp;gt;(&amp;#039;&lt;br /&gt;
		.. table.concat(ret, &amp;#039; &amp;amp;#124; &amp;#039;) .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
p.makeToolbar = makeToolbar&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Argument processing&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
				if type(value) == &amp;#039;string&amp;#039; then&lt;br /&gt;
					value = value:match(&amp;#039;^%s*(.-)%s*$&amp;#039;) -- Remove whitespace.&lt;br /&gt;
					if key == &amp;#039;heading&amp;#039; or value ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						return value&lt;br /&gt;
					else&lt;br /&gt;
						return nil&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Entry points&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.nonexistent(frame)&lt;br /&gt;
	if mw.title.getCurrentTitle().subpageText == &amp;#039;testcases&amp;#039; then&lt;br /&gt;
		return frame:expandTemplate{title = &amp;#039;module test cases notice&amp;#039;}&lt;br /&gt;
	else&lt;br /&gt;
		return p.main(frame)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.main = makeInvokeFunc(&amp;#039;_main&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function defines logic flow for the module.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	--]]&lt;br /&gt;
	local env = p.getEnvironment(args)&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			-- &amp;#039;documentation-container&amp;#039;&lt;br /&gt;
			:addClass(message(&amp;#039;container&amp;#039;))&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;complementary&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;aria-labelledby&amp;#039;, args.heading ~= &amp;#039;&amp;#039; and &amp;#039;documentation-heading&amp;#039; or nil)&lt;br /&gt;
			:attr(&amp;#039;aria-label&amp;#039;, args.heading == &amp;#039;&amp;#039; and &amp;#039;Documentation&amp;#039; or nil)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				-- &amp;#039;documentation&amp;#039;&lt;br /&gt;
				:addClass(message(&amp;#039;main-div-classes&amp;#039;))&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(p._startBox(args, env))&lt;br /&gt;
				:wikitext(p._content(args, env))&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					-- &amp;#039;documentation-clear&amp;#039;&lt;br /&gt;
					:addClass(message(&amp;#039;clear&amp;#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(p._endBox(args, env))&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(p.addTrackingCategories(env))&lt;br /&gt;
	-- &amp;#039;Module:Documentation/styles.css&amp;#039;&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag (&lt;br /&gt;
		&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src=cfg[&amp;#039;templatestyles&amp;#039;]&lt;br /&gt;
	}) .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Environment settings&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.getEnvironment(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table with information about the environment, including title&lt;br /&gt;
	-- objects and other namespace- or path-related data.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	--&lt;br /&gt;
	-- Title objects include:&lt;br /&gt;
	-- env.title - the page we are making documentation for (usually the current title)&lt;br /&gt;
	-- env.templateTitle - the template (or module, file, etc.)&lt;br /&gt;
	-- env.docTitle - the /doc subpage.&lt;br /&gt;
	-- env.sandboxTitle - the /sandbox subpage.&lt;br /&gt;
	-- env.testcasesTitle - the /testcases subpage.&lt;br /&gt;
	--&lt;br /&gt;
	-- Data includes:&lt;br /&gt;
	-- env.subjectSpace - the number of the title&amp;#039;s subject namespace.&lt;br /&gt;
	-- env.docSpace - the number of the namespace the title puts its documentation in.&lt;br /&gt;
	-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.&lt;br /&gt;
	-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.&lt;br /&gt;
	-- &lt;br /&gt;
	-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value&lt;br /&gt;
	-- returned will be nil.&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local env, envFuncs = {}, {}&lt;br /&gt;
&lt;br /&gt;
	-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value&lt;br /&gt;
	-- returned by that function is memoized in the env table so that we don&amp;#039;t call any of the functions&lt;br /&gt;
	-- more than once. (Nils won&amp;#039;t be memoized.)&lt;br /&gt;
	setmetatable(env, {&lt;br /&gt;
		__index = function (t, key)&lt;br /&gt;
			local envFunc = envFuncs[key]&lt;br /&gt;
			if envFunc then&lt;br /&gt;
				local success, val = pcall(envFunc)&lt;br /&gt;
				if success then&lt;br /&gt;
					env[key] = val -- Memoise the value.&lt;br /&gt;
					return val&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	})	&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.title()&lt;br /&gt;
		-- The title object for the current page, or a test page passed with args.page.&lt;br /&gt;
		local title&lt;br /&gt;
		local titleArg = args.page&lt;br /&gt;
		if titleArg then&lt;br /&gt;
			title = mw.title.new(titleArg)&lt;br /&gt;
		else&lt;br /&gt;
			title = mw.title.getCurrentTitle()&lt;br /&gt;
		end&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.templateTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- The template (or module, etc.) title object.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &amp;#039;sandbox-subpage&amp;#039; --&amp;gt; &amp;#039;sandbox&amp;#039;&lt;br /&gt;
		-- &amp;#039;testcases-subpage&amp;#039; --&amp;gt; &amp;#039;testcases&amp;#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == message(&amp;#039;sandbox-subpage&amp;#039;) or subpage == message(&amp;#039;testcases-subpage&amp;#039;) then&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.baseText)&lt;br /&gt;
		else&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object of the /doc subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &amp;#039;doc-subpage&amp;#039; --&amp;gt; &amp;#039;doc&amp;#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local docname = args[1] -- User-specified doc page.&lt;br /&gt;
		local docpage&lt;br /&gt;
		if docname then&lt;br /&gt;
			docpage = docname&lt;br /&gt;
		else&lt;br /&gt;
			docpage = env.docpageBase .. &amp;#039;/&amp;#039; .. message(&amp;#039;doc-subpage&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		return mw.title.new(docpage)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.sandboxTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /sandbox subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &amp;#039;sandbox-subpage&amp;#039; --&amp;gt; &amp;#039;sandbox&amp;#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &amp;#039;/&amp;#039; .. message(&amp;#039;sandbox-subpage&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.testcasesTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /testcases subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &amp;#039;testcases-subpage&amp;#039; --&amp;gt; &amp;#039;testcases&amp;#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &amp;#039;/&amp;#039; .. message(&amp;#039;testcases-subpage&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.subjectSpace()&lt;br /&gt;
		-- The subject namespace number.&lt;br /&gt;
		return mw.site.namespaces[env.title.namespace].subject.id&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docSpace()&lt;br /&gt;
		-- The documentation namespace number. For most namespaces this is the&lt;br /&gt;
		-- same as the subject namespace. However, pages in the Article, File,&lt;br /&gt;
		-- MediaWiki or Category namespaces must have their /doc, /sandbox and&lt;br /&gt;
		-- /testcases pages in talk space.&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then&lt;br /&gt;
			return subjectSpace + 1&lt;br /&gt;
		else&lt;br /&gt;
			return subjectSpace&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docpageBase()&lt;br /&gt;
		-- The base page of the /doc, /sandbox, and /testcases subpages.&lt;br /&gt;
		-- For some namespaces this is the talk page, rather than the template page.&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local docSpace = env.docSpace&lt;br /&gt;
		local docSpaceText = mw.site.namespaces[docSpace].name&lt;br /&gt;
		-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.&lt;br /&gt;
		return docSpaceText .. &amp;#039;:&amp;#039; .. templateTitle.text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.compareUrl()&lt;br /&gt;
		-- Diff link between the sandbox and the main template using [[Special:ComparePages]].&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local sandboxTitle = env.sandboxTitle&lt;br /&gt;
		if templateTitle.exists and sandboxTitle.exists then&lt;br /&gt;
			local compareUrl = mw.uri.fullUrl(&lt;br /&gt;
				&amp;#039;Special:ComparePages&amp;#039;,&lt;br /&gt;
				{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}&lt;br /&gt;
			)&lt;br /&gt;
			return tostring(compareUrl)&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end		&lt;br /&gt;
&lt;br /&gt;
	return env&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Start box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.startBox = makeInvokeFunc(&amp;#039;_startBox&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._startBox(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function generates the start box.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make&lt;br /&gt;
	-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox&lt;br /&gt;
	-- which generate the box HTML.&lt;br /&gt;
	--]]&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local links&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content or args[1] then&lt;br /&gt;
		-- No need to include the links if the documentation is on the template page itself.&lt;br /&gt;
		local linksData = p.makeStartBoxLinksData(args, env)&lt;br /&gt;
		if linksData then&lt;br /&gt;
			links = p.renderStartBoxLinks(linksData)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the start box html.&lt;br /&gt;
	local data = p.makeStartBoxData(args, env, links)&lt;br /&gt;
	if data then&lt;br /&gt;
		return p.renderStartBox(data)&lt;br /&gt;
	else&lt;br /&gt;
		-- User specified no heading.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxLinksData(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Does initial processing of data to make the [view] [edit] [history] [purge] links.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;view-link-display&amp;#039; --&amp;gt; &amp;#039;view&amp;#039;&lt;br /&gt;
	-- &amp;#039;edit-link-display&amp;#039; --&amp;gt; &amp;#039;edit&amp;#039;&lt;br /&gt;
	-- &amp;#039;history-link-display&amp;#039; --&amp;gt; &amp;#039;history&amp;#039;&lt;br /&gt;
	-- &amp;#039;purge-link-display&amp;#039; --&amp;gt; &amp;#039;purge&amp;#039;&lt;br /&gt;
	-- &amp;#039;module-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-module-doc&amp;#039;&lt;br /&gt;
	-- &amp;#039;docpage-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload&amp;#039;&lt;br /&gt;
	-- &amp;#039;create-link-display&amp;#039; --&amp;gt; &amp;#039;create&amp;#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not title or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if docTitle.isRedirect then &lt;br /&gt;
		docTitle = docTitle.redirectTarget&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = {}&lt;br /&gt;
	data.title = title&lt;br /&gt;
	data.docTitle = docTitle&lt;br /&gt;
	-- View, display, edit, and purge links if /doc exists.&lt;br /&gt;
	data.viewLinkDisplay = message(&amp;#039;view-link-display&amp;#039;)&lt;br /&gt;
	data.editLinkDisplay = message(&amp;#039;edit-link-display&amp;#039;)&lt;br /&gt;
	data.historyLinkDisplay = message(&amp;#039;history-link-display&amp;#039;)&lt;br /&gt;
	data.purgeLinkDisplay = message(&amp;#039;purge-link-display&amp;#039;)&lt;br /&gt;
	-- Create link if /doc doesn&amp;#039;t exist.&lt;br /&gt;
	local preload = args.preload&lt;br /&gt;
	if not preload then&lt;br /&gt;
		if subjectSpace == 828 then -- Module namespace&lt;br /&gt;
			preload = message(&amp;#039;module-preload&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			preload = message(&amp;#039;docpage-preload&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	data.preload = preload&lt;br /&gt;
	data.createLinkDisplay = message(&amp;#039;create-link-display&amp;#039;)&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBoxLinks(data)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxLinksData&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local function escapeBrackets(s)&lt;br /&gt;
		-- Escapes square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub(&amp;#039;%[&amp;#039;, &amp;#039;&amp;amp;#91;&amp;#039;) -- Replace square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub(&amp;#039;%]&amp;#039;, &amp;#039;&amp;amp;#93;&amp;#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret&lt;br /&gt;
	local docTitle = data.docTitle&lt;br /&gt;
	local title = data.title&lt;br /&gt;
	local purgeLink = makeUrlLink(title:fullUrl{action = &amp;#039;purge&amp;#039;}, data.purgeLinkDisplay)&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)&lt;br /&gt;
		local editLink = makeUrlLink(docTitle:fullUrl{action = &amp;#039;edit&amp;#039;}, data.editLinkDisplay)&lt;br /&gt;
		local historyLink = makeUrlLink(docTitle:fullUrl{action = &amp;#039;history&amp;#039;}, data.historyLinkDisplay)&lt;br /&gt;
		ret = &amp;#039;[%s] [%s] [%s] [%s]&amp;#039;&lt;br /&gt;
		ret = escapeBrackets(ret)&lt;br /&gt;
		ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)&lt;br /&gt;
	else&lt;br /&gt;
		local createLink = makeUrlLink(docTitle:fullUrl{action = &amp;#039;edit&amp;#039;, preload = data.preload}, data.createLinkDisplay)&lt;br /&gt;
		ret = &amp;#039;[%s] [%s]&amp;#039;&lt;br /&gt;
		ret = escapeBrackets(ret)&lt;br /&gt;
		ret = mw.ustring.format(ret, createLink, purgeLink)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxData(args, env, links)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- @links - a string containing the [view][edit][history][purge] links - could be nil if there&amp;#039;s an error.&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;documentation-icon-wikitext&amp;#039; --&amp;gt; &amp;#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]&amp;#039;&lt;br /&gt;
	-- &amp;#039;template-namespace-heading&amp;#039; --&amp;gt; &amp;#039;Template documentation&amp;#039;&lt;br /&gt;
	-- &amp;#039;module-namespace-heading&amp;#039; --&amp;gt; &amp;#039;Module documentation&amp;#039;&lt;br /&gt;
	-- &amp;#039;file-namespace-heading&amp;#039; --&amp;gt; &amp;#039;Summary&amp;#039;&lt;br /&gt;
	-- &amp;#039;other-namespaces-heading&amp;#039; --&amp;gt; &amp;#039;Documentation&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-create-link-display&amp;#039; --&amp;gt; &amp;#039;create&amp;#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not subjectSpace then&lt;br /&gt;
		-- Default to an &amp;quot;other namespaces&amp;quot; namespace, so that we get at least some output&lt;br /&gt;
		-- if an error occurs.&lt;br /&gt;
		subjectSpace = 2&lt;br /&gt;
	end&lt;br /&gt;
	local data = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Heading&lt;br /&gt;
	local heading = args.heading -- Blank values are not removed.&lt;br /&gt;
	if heading == &amp;#039;&amp;#039; then&lt;br /&gt;
		-- Don&amp;#039;t display the start box if the heading arg is defined but blank.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if heading then&lt;br /&gt;
		data.heading = heading&lt;br /&gt;
	elseif subjectSpace == 10 then -- Template namespace&lt;br /&gt;
		data.heading = message(&amp;#039;documentation-icon-wikitext&amp;#039;) .. &amp;#039; &amp;#039; .. message(&amp;#039;template-namespace-heading&amp;#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
		data.heading = message(&amp;#039;documentation-icon-wikitext&amp;#039;) .. &amp;#039; &amp;#039; .. message(&amp;#039;module-namespace-heading&amp;#039;)&lt;br /&gt;
	elseif subjectSpace == 6 then -- File namespace&lt;br /&gt;
		data.heading = message(&amp;#039;file-namespace-heading&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		data.heading = message(&amp;#039;other-namespaces-heading&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Heading CSS&lt;br /&gt;
	local headingStyle = args[&amp;#039;heading-style&amp;#039;]&lt;br /&gt;
	if headingStyle then&lt;br /&gt;
		data.headingStyleText = headingStyle&lt;br /&gt;
	else&lt;br /&gt;
		-- &amp;#039;documentation-heading&amp;#039;&lt;br /&gt;
		data.headingClass = message(&amp;#039;main-div-heading-class&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Data for the [view][edit][history][purge] or [create] links.&lt;br /&gt;
	if links then&lt;br /&gt;
		-- &amp;#039;mw-editsection-like plainlinks&amp;#039;&lt;br /&gt;
		data.linksClass = message(&amp;#039;start-box-link-classes&amp;#039;)&lt;br /&gt;
		data.links = links&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBox(data)&lt;br /&gt;
	-- Renders the start box html.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxData.&lt;br /&gt;
	local sbox = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	sbox&lt;br /&gt;
		-- &amp;#039;documentation-startbox&amp;#039;&lt;br /&gt;
		:addClass(message(&amp;#039;start-box-class&amp;#039;))&lt;br /&gt;
		:newline()&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(data.headingClass)&lt;br /&gt;
			:attr(&amp;#039;id&amp;#039;, &amp;#039;documentation-heading&amp;#039;)&lt;br /&gt;
			:cssText(data.headingStyleText)&lt;br /&gt;
			:wikitext(data.heading)&lt;br /&gt;
	local links = data.links&lt;br /&gt;
	if links then&lt;br /&gt;
		sbox:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(data.linksClass)&lt;br /&gt;
			:attr(&amp;#039;id&amp;#039;, data.linksId)&lt;br /&gt;
			:wikitext(links)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(sbox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Documentation content&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.content = makeInvokeFunc(&amp;#039;_content&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._content(args, env)&lt;br /&gt;
	-- Displays the documentation contents&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content and docTitle and docTitle.exists then&lt;br /&gt;
		content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}&lt;br /&gt;
	end&lt;br /&gt;
	if mw.site.siteName == &amp;quot;Miraheze Developers Wiki&amp;quot; and args.noexportinstructions ~= &amp;quot;yes&amp;quot; then&lt;br /&gt;
		-- commoncss decides whether a message about copy-pasting MediaWiki:Common.css should be printed&lt;br /&gt;
		local export = mw.getCurrentFrame():expandTemplate{title=&amp;quot;How to export&amp;quot;, args = {commoncss=args.commoncss or &amp;quot;&amp;quot;}}&lt;br /&gt;
		content =  export .. &amp;quot;\n&amp;quot; .. (content or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	-- The line breaks below are necessary so that &amp;quot;=== Headings ===&amp;quot; at the start and end&lt;br /&gt;
	-- of docs are interpreted correctly.&lt;br /&gt;
	return &amp;#039;\n&amp;#039; .. (content or &amp;#039;&amp;#039;) .. &amp;#039;\n&amp;#039; &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.contentTitle = makeInvokeFunc(&amp;#039;_contentTitle&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._contentTitle(args, env)&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not args.content and docTitle and docTitle.exists then&lt;br /&gt;
		return docTitle.prefixedText&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- End box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.endBox = makeInvokeFunc(&amp;#039;_endBox&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._endBox(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- This function generates the end box (also known as the link box).&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	--]=]&lt;br /&gt;
	&lt;br /&gt;
	-- Get environment data.&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not subjectSpace or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- Check whether we should output the end box at all. Add the end&lt;br /&gt;
	-- box by default if the documentation exists or if we are in the&lt;br /&gt;
	-- user, module or template namespaces.&lt;br /&gt;
	local linkBox = args[&amp;#039;link box&amp;#039;]&lt;br /&gt;
	if linkBox == &amp;#039;off&amp;#039;&lt;br /&gt;
		or not (&lt;br /&gt;
			docTitle.exists&lt;br /&gt;
			or subjectSpace == 2&lt;br /&gt;
			or subjectSpace == 828&lt;br /&gt;
			or subjectSpace == 10&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Assemble the link box.&lt;br /&gt;
	local text = &amp;#039;&amp;#039;&lt;br /&gt;
	if linkBox then&lt;br /&gt;
		text = text .. linkBox&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. (p.makeDocPageBlurb(args, env) or &amp;#039;&amp;#039;) -- &amp;quot;This documentation is transcluded from [[Foo]].&amp;quot; &lt;br /&gt;
		if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then&lt;br /&gt;
			-- We are in the user, template or module namespaces.&lt;br /&gt;
			-- Add sandbox and testcases links.&lt;br /&gt;
			-- &amp;quot;Editors can experiment in this template&amp;#039;s sandbox and testcases pages.&amp;quot;&lt;br /&gt;
			text = text .. (p.makeExperimentBlurb(args, env) or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
			if not args.content and not args[1] then&lt;br /&gt;
				-- &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
				-- Don&amp;#039;t show this message with inline docs or with an explicitly specified doc page,&lt;br /&gt;
				-- as then it is unclear where to add the categories.&lt;br /&gt;
				text = text .. (p.makeCategoriesBlurb(args, env) or &amp;#039;&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			text = text .. &amp;#039; &amp;#039; .. (p.makeSubpagesBlurb(args, env) or &amp;#039;&amp;#039;) --&amp;quot;Subpages of this template&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local box = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	-- &amp;#039;documentation-metadata&amp;#039;&lt;br /&gt;
	box:attr(&amp;#039;role&amp;#039;, &amp;#039;note&amp;#039;)&lt;br /&gt;
		:addClass(message(&amp;#039;end-box-class&amp;#039;))&lt;br /&gt;
		-- &amp;#039;plainlinks&amp;#039;&lt;br /&gt;
		:addClass(message(&amp;#039;end-box-plainlinks&amp;#039;))&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	return &amp;#039;\n&amp;#039; .. tostring(box)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeDocPageBlurb(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Makes the blurb &amp;quot;This documentation is transcluded from [[Template:Foo]] (edit, history)&amp;quot;.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;edit-link-display&amp;#039; --&amp;gt; &amp;#039;edit&amp;#039;&lt;br /&gt;
	-- &amp;#039;history-link-display&amp;#039; --&amp;gt; &amp;#039;history&amp;#039;&lt;br /&gt;
	-- &amp;#039;transcluded-from-blurb&amp;#039; --&amp;gt; &lt;br /&gt;
	-- &amp;#039;The above [[Wikipedia:Template documentation|documentation]] &lt;br /&gt;
	-- is [[Help:Transclusion|transcluded]] from $1.&amp;#039;&lt;br /&gt;
	-- &amp;#039;module-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-module-doc&amp;#039;&lt;br /&gt;
	-- &amp;#039;create-link-display&amp;#039; --&amp;gt; &amp;#039;create&amp;#039;&lt;br /&gt;
	-- &amp;#039;create-module-doc-blurb&amp;#039; --&amp;gt;&lt;br /&gt;
	-- &amp;#039;You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].&amp;#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ret&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		-- /doc exists; link to it.&lt;br /&gt;
		local docLink = makeWikilink(docTitle.prefixedText)&lt;br /&gt;
		local editUrl = docTitle:fullUrl{action = &amp;#039;edit&amp;#039;}&lt;br /&gt;
		local editDisplay = message(&amp;#039;edit-link-display&amp;#039;)&lt;br /&gt;
		local editLink = makeUrlLink(editUrl, editDisplay)&lt;br /&gt;
		local historyUrl = docTitle:fullUrl{action = &amp;#039;history&amp;#039;}&lt;br /&gt;
		local historyDisplay = message(&amp;#039;history-link-display&amp;#039;)&lt;br /&gt;
		local historyLink = makeUrlLink(historyUrl, historyDisplay)&lt;br /&gt;
		ret = message(&amp;#039;transcluded-from-blurb&amp;#039;, {docLink})&lt;br /&gt;
			.. &amp;#039; &amp;#039;&lt;br /&gt;
			.. makeToolbar(editLink, historyLink)&lt;br /&gt;
			.. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
	elseif env.subjectSpace == 828 then&lt;br /&gt;
		-- /doc does not exist; ask to create it.&lt;br /&gt;
		local createUrl = docTitle:fullUrl{action = &amp;#039;edit&amp;#039;, preload = message(&amp;#039;module-preload&amp;#039;)}&lt;br /&gt;
		local createDisplay = message(&amp;#039;create-link-display&amp;#039;)&lt;br /&gt;
		local createLink = makeUrlLink(createUrl, createDisplay)&lt;br /&gt;
		ret = message(&amp;#039;create-module-doc-blurb&amp;#039;, {createLink})&lt;br /&gt;
			.. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeExperimentBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Renders the text &amp;quot;Editors can experiment in this template&amp;#039;s sandbox (edit | diff) and testcases (edit) pages.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;sandbox-link-display&amp;#039; --&amp;gt; &amp;#039;sandbox&amp;#039;&lt;br /&gt;
	-- &amp;#039;sandbox-edit-link-display&amp;#039; --&amp;gt; &amp;#039;edit&amp;#039;&lt;br /&gt;
	-- &amp;#039;compare-link-display&amp;#039; --&amp;gt; &amp;#039;diff&amp;#039;&lt;br /&gt;
	-- &amp;#039;module-sandbox-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-module-sandbox&amp;#039;&lt;br /&gt;
	-- &amp;#039;template-sandbox-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-sandbox&amp;#039;&lt;br /&gt;
	-- &amp;#039;sandbox-create-link-display&amp;#039; --&amp;gt; &amp;#039;create&amp;#039;&lt;br /&gt;
	-- &amp;#039;mirror-edit-summary&amp;#039; --&amp;gt; &amp;#039;Create sandbox version of $1&amp;#039;&lt;br /&gt;
	-- &amp;#039;mirror-link-display&amp;#039; --&amp;gt; &amp;#039;mirror&amp;#039;&lt;br /&gt;
	-- &amp;#039;mirror-link-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/mirror&amp;#039;&lt;br /&gt;
	-- &amp;#039;sandbox-link-display&amp;#039; --&amp;gt; &amp;#039;sandbox&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-link-display&amp;#039; --&amp;gt; &amp;#039;testcases&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-edit-link-display&amp;#039;--&amp;gt; &amp;#039;edit&amp;#039;&lt;br /&gt;
	-- &amp;#039;template-sandbox-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-sandbox&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-create-link-display&amp;#039; --&amp;gt; &amp;#039;create&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-link-display&amp;#039; --&amp;gt; &amp;#039;testcases&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-edit-link-display&amp;#039; --&amp;gt; &amp;#039;edit&amp;#039;&lt;br /&gt;
	-- &amp;#039;module-testcases-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-module-testcases&amp;#039;&lt;br /&gt;
	-- &amp;#039;template-testcases-preload&amp;#039; --&amp;gt; &amp;#039;Template:Documentation/preload-testcases&amp;#039;&lt;br /&gt;
	-- &amp;#039;experiment-blurb-module&amp;#039; --&amp;gt; &amp;#039;Editors can experiment in this module&amp;#039;s $1 and $2 pages.&amp;#039;&lt;br /&gt;
	-- &amp;#039;experiment-blurb-template&amp;#039; --&amp;gt; &amp;#039;Editors can experiment in this template&amp;#039;s $1 and $2 pages.&amp;#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	local sandboxTitle = env.sandboxTitle&lt;br /&gt;
	local testcasesTitle = env.testcasesTitle&lt;br /&gt;
	local templatePage = templateTitle.prefixedText&lt;br /&gt;
	if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- Make links.&lt;br /&gt;
	local sandboxLinks, testcasesLinks&lt;br /&gt;
	if sandboxTitle.exists then&lt;br /&gt;
		local sandboxPage = sandboxTitle.prefixedText&lt;br /&gt;
		local sandboxDisplay = message(&amp;#039;sandbox-link-display&amp;#039;)&lt;br /&gt;
		local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)&lt;br /&gt;
		local sandboxEditUrl = sandboxTitle:fullUrl{action = &amp;#039;edit&amp;#039;}&lt;br /&gt;
		local sandboxEditDisplay = message(&amp;#039;sandbox-edit-link-display&amp;#039;)&lt;br /&gt;
		local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)&lt;br /&gt;
		local compareUrl = env.compareUrl&lt;br /&gt;
		local compareLink&lt;br /&gt;
		if compareUrl then&lt;br /&gt;
			local compareDisplay = message(&amp;#039;compare-link-display&amp;#039;)&lt;br /&gt;
			compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		end&lt;br /&gt;
		sandboxLinks = sandboxLink .. &amp;#039; &amp;#039; .. makeToolbar(sandboxEditLink, compareLink)&lt;br /&gt;
	else&lt;br /&gt;
		local sandboxPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			sandboxPreload = message(&amp;#039;module-sandbox-preload&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			sandboxPreload = message(&amp;#039;template-sandbox-preload&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local sandboxCreateUrl = sandboxTitle:fullUrl{action = &amp;#039;edit&amp;#039;, preload = sandboxPreload}&lt;br /&gt;
		local sandboxCreateDisplay = message(&amp;#039;sandbox-create-link-display&amp;#039;)&lt;br /&gt;
		local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)&lt;br /&gt;
		local mirrorSummary = message(&amp;#039;mirror-edit-summary&amp;#039;, {makeWikilink(templatePage)})&lt;br /&gt;
		local mirrorPreload = message(&amp;#039;mirror-link-preload&amp;#039;)&lt;br /&gt;
		local mirrorUrl = sandboxTitle:fullUrl{action = &amp;#039;edit&amp;#039;, preload = mirrorPreload, summary = mirrorSummary}&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			mirrorUrl = sandboxTitle:fullUrl{action = &amp;#039;edit&amp;#039;, preload = templateTitle.prefixedText, summary = mirrorSummary}&lt;br /&gt;
		end&lt;br /&gt;
		local mirrorDisplay = message(&amp;#039;mirror-link-display&amp;#039;)&lt;br /&gt;
		local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)&lt;br /&gt;
		sandboxLinks = message(&amp;#039;sandbox-link-display&amp;#039;) .. &amp;#039; &amp;#039; .. makeToolbar(sandboxCreateLink, mirrorLink)&lt;br /&gt;
	end&lt;br /&gt;
	if testcasesTitle.exists then&lt;br /&gt;
		local testcasesPage = testcasesTitle.prefixedText&lt;br /&gt;
		local testcasesDisplay = message(&amp;#039;testcases-link-display&amp;#039;)&lt;br /&gt;
		local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)&lt;br /&gt;
		local testcasesEditUrl = testcasesTitle:fullUrl{action = &amp;#039;edit&amp;#039;}&lt;br /&gt;
		local testcasesEditDisplay = message(&amp;#039;testcases-edit-link-display&amp;#039;)&lt;br /&gt;
		local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)&lt;br /&gt;
		-- for Modules, add testcases run link if exists&lt;br /&gt;
		if testcasesTitle.contentModel == &amp;quot;Scribunto&amp;quot;  and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then&lt;br /&gt;
			local testcasesRunLinkDisplay = message(&amp;#039;testcases-run-link-display&amp;#039;)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			testcasesLinks = testcasesLink .. &amp;#039; &amp;#039; .. makeToolbar(testcasesEditLink, testcasesRunLink)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesLinks = testcasesLink .. &amp;#039; &amp;#039; .. makeToolbar(testcasesEditLink)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local testcasesPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			testcasesPreload = message(&amp;#039;module-testcases-preload&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesPreload = message(&amp;#039;template-testcases-preload&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local testcasesCreateUrl = testcasesTitle:fullUrl{action = &amp;#039;edit&amp;#039;, preload = testcasesPreload}&lt;br /&gt;
		local testcasesCreateDisplay = message(&amp;#039;testcases-create-link-display&amp;#039;)&lt;br /&gt;
		local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)&lt;br /&gt;
		testcasesLinks = message(&amp;#039;testcases-link-display&amp;#039;) .. &amp;#039; &amp;#039; .. makeToolbar(testcasesCreateLink)&lt;br /&gt;
	end&lt;br /&gt;
	local messageName&lt;br /&gt;
	if subjectSpace == 828 then&lt;br /&gt;
		messageName = &amp;#039;experiment-blurb-module&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		messageName = &amp;#039;experiment-blurb-template&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return message(messageName, {sandboxLinks, testcasesLinks})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeCategoriesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the text &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;doc-link-display&amp;#039; --&amp;gt; &amp;#039;/doc&amp;#039;&lt;br /&gt;
	-- &amp;#039;add-categories-blurb&amp;#039; --&amp;gt; &amp;#039;Please add categories to the $1 subpage.&amp;#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local docPathLink = makeWikilink(docTitle.prefixedText, message(&amp;#039;doc-link-display&amp;#039;))&lt;br /&gt;
	return message(&amp;#039;add-categories-blurb&amp;#039;, {docPathLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeSubpagesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the &amp;quot;Subpages of this template&amp;quot; link.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;template-pagetype&amp;#039; --&amp;gt; &amp;#039;template&amp;#039;&lt;br /&gt;
	-- &amp;#039;module-pagetype&amp;#039; --&amp;gt; &amp;#039;module&amp;#039;&lt;br /&gt;
	-- &amp;#039;default-pagetype&amp;#039; --&amp;gt; &amp;#039;page&amp;#039;&lt;br /&gt;
	-- &amp;#039;subpages-link-display&amp;#039; --&amp;gt; &amp;#039;Subpages of this $1&amp;#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	if not subjectSpace or not templateTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local pagetype&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message(&amp;#039;template-pagetype&amp;#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&amp;#039;module-pagetype&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&amp;#039;default-pagetype&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local subpagesLink = makeWikilink(&lt;br /&gt;
		&amp;#039;Special:PrefixIndex/&amp;#039; .. templateTitle.prefixedText .. &amp;#039;/&amp;#039;,&lt;br /&gt;
		message(&amp;#039;subpages-link-display&amp;#039;, {pagetype})&lt;br /&gt;
	)&lt;br /&gt;
	return message(&amp;#039;subpages-blurb&amp;#039;, {subpagesLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.addTrackingCategories(env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check if {{documentation}} is transcluded on a /doc or /testcases page.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &amp;#039;display-strange-usage-category&amp;#039; --&amp;gt; true&lt;br /&gt;
	-- &amp;#039;doc-subpage&amp;#039; --&amp;gt; &amp;#039;doc&amp;#039;&lt;br /&gt;
	-- &amp;#039;testcases-subpage&amp;#039; --&amp;gt; &amp;#039;testcases&amp;#039;&lt;br /&gt;
	-- &amp;#039;strange-usage-category&amp;#039; --&amp;gt; &amp;#039;Wikipedia pages with strange ((documentation)) usage&amp;#039;&lt;br /&gt;
	-- &lt;br /&gt;
	-- /testcases pages in the module namespace are not categorised, as they may have&lt;br /&gt;
	-- {{documentation}} transcluded automatically.&lt;br /&gt;
	--]]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not title or not subjectSpace then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
	if message(&amp;#039;display-strange-usage-category&amp;#039;, nil, &amp;#039;boolean&amp;#039;)&lt;br /&gt;
		and (&lt;br /&gt;
			subpage == message(&amp;#039;doc-subpage&amp;#039;)&lt;br /&gt;
			or subjectSpace ~= 828 and subpage == message(&amp;#039;testcases-subpage&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		ret = ret .. makeCategoryLink(message(&amp;#039;strange-usage-category&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Documentation</comments>
		</item>
		<item>
			<title>Module:Message box</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Module:Message_box&amp;diff=312&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Module:Message_box&amp;diff=312&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Message_box&quot; title=&quot;Module:Message box&quot;&gt;Module:Message box&lt;/a&gt; by file upload (1 revision)&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;
local getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
local CONFIG_MODULE = &amp;#039;Module:Message box/configuration&amp;#039;&lt;br /&gt;
local DEMOSPACES = {talk = &amp;#039;tmbox&amp;#039;, image = &amp;#039;imbox&amp;#039;, file = &amp;#039;imbox&amp;#039;, category = &amp;#039;cmbox&amp;#039;, article = &amp;#039;ambox&amp;#039;, main = &amp;#039;ambox&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getTitleObject(...)&lt;br /&gt;
	-- Get the title object, passing the function through pcall&lt;br /&gt;
	-- in case we are over the expensive function count limit.&lt;br /&gt;
	local success, title = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of two arrays.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, v in ipairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(ret)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args, prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = mw.ustring.match(tostring(k), &amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			table.insert(nums, tonumber(num))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Box class definition&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local MessageBox = {}&lt;br /&gt;
MessageBox.__index = MessageBox&lt;br /&gt;
&lt;br /&gt;
function MessageBox.new(boxType, args, cfg)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	local obj = {}&lt;br /&gt;
&lt;br /&gt;
	-- Set the title object and the namespace.&lt;br /&gt;
	obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set the config for our box type.&lt;br /&gt;
	obj.cfg = cfg[boxType]&lt;br /&gt;
	if not obj.cfg then&lt;br /&gt;
		local ns = obj.title.namespace&lt;br /&gt;
		-- boxType is &amp;quot;mbox&amp;quot; or invalid input&lt;br /&gt;
		if args.demospace and args.demospace ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			-- implement demospace parameter of mbox&lt;br /&gt;
			local demospace = string.lower(args.demospace)&lt;br /&gt;
			if DEMOSPACES[demospace] then&lt;br /&gt;
				-- use template from DEMOSPACES&lt;br /&gt;
				obj.cfg = cfg[DEMOSPACES[demospace]]&lt;br /&gt;
			elseif string.find( demospace, &amp;#039;talk&amp;#039; ) then&lt;br /&gt;
				-- demo as a talk page&lt;br /&gt;
				obj.cfg = cfg.tmbox&lt;br /&gt;
			else&lt;br /&gt;
				-- default to ombox&lt;br /&gt;
				obj.cfg = cfg.ombox&lt;br /&gt;
			end&lt;br /&gt;
		elseif ns == 0 then&lt;br /&gt;
			obj.cfg = cfg.ambox -- main namespace&lt;br /&gt;
		elseif ns == 6 then&lt;br /&gt;
			obj.cfg = cfg.imbox -- file namespace&lt;br /&gt;
		elseif ns == 14 then&lt;br /&gt;
			obj.cfg = cfg.cmbox -- category namespace&lt;br /&gt;
		else&lt;br /&gt;
			local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
			if nsTable and nsTable.isTalk then&lt;br /&gt;
				obj.cfg = cfg.tmbox -- any talk namespace&lt;br /&gt;
			else&lt;br /&gt;
				obj.cfg = cfg.ombox -- other namespaces or invalid input&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the arguments, and remove all blank arguments except for the ones&lt;br /&gt;
	-- listed in cfg.allowBlankParams.&lt;br /&gt;
	do&lt;br /&gt;
		local newArgs = {}&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				newArgs[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, param in ipairs(obj.cfg.allowBlankParams or {}) do&lt;br /&gt;
			newArgs[param] = args[param]&lt;br /&gt;
		end&lt;br /&gt;
		obj.args = newArgs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Define internal data structure.&lt;br /&gt;
	obj.categories = {}&lt;br /&gt;
	obj.classes = {}&lt;br /&gt;
	-- For lazy loading of [[Module:Category handler]].&lt;br /&gt;
	obj.hasCategories = false&lt;br /&gt;
&lt;br /&gt;
	return setmetatable(obj, MessageBox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addCat(ns, cat, sort)&lt;br /&gt;
	if not cat then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if sort then&lt;br /&gt;
		cat = string.format(&amp;#039;[[Category:%s|%s]]&amp;#039;, cat, sort)&lt;br /&gt;
	else&lt;br /&gt;
		cat = string.format(&amp;#039;[[Category:%s]]&amp;#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	self.hasCategories = true&lt;br /&gt;
	self.categories[ns] = self.categories[ns] or {}&lt;br /&gt;
	table.insert(self.categories[ns], cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addClass(class)&lt;br /&gt;
	if not class then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(self.classes, class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setParameters()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Get type data.&lt;br /&gt;
	self.type = args.type&lt;br /&gt;
	local typeData = cfg.types[self.type]&lt;br /&gt;
	self.invalidTypeError = cfg.showInvalidTypeError&lt;br /&gt;
		and self.type&lt;br /&gt;
		and not typeData&lt;br /&gt;
	typeData = typeData or cfg.types[cfg.default]&lt;br /&gt;
	self.typeClass = typeData.class&lt;br /&gt;
	self.typeImage = typeData.image&lt;br /&gt;
	self.typeImageNeedsLink = typeData.imageNeedsLink&lt;br /&gt;
&lt;br /&gt;
	-- Find if the box has been wrongly substituted.&lt;br /&gt;
	self.isSubstituted = cfg.substCheck and args.subst == &amp;#039;SUBST&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Find whether we are using a small message box.&lt;br /&gt;
	self.isSmall = cfg.allowSmall and (&lt;br /&gt;
		cfg.smallParam and args.small == cfg.smallParam&lt;br /&gt;
		or not cfg.smallParam and yesno(args.small)&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	-- Set the below row.&lt;br /&gt;
	self.below = cfg.below and args.below&lt;br /&gt;
	&lt;br /&gt;
	-- Add attributes, classes and styles.&lt;br /&gt;
	self.id = args.id&lt;br /&gt;
	self.name = args.name&lt;br /&gt;
	if self.name then&lt;br /&gt;
		self:addClass(&amp;#039;box-&amp;#039; .. string.gsub(self.name,&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plainlinks) ~= false then&lt;br /&gt;
		self:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if self.below then&lt;br /&gt;
		self:addClass(&amp;#039;mbox-with-below&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for _, class in ipairs(cfg.classes or {}) do&lt;br /&gt;
		self:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self:addClass(cfg.smallClass or &amp;#039;mbox-small&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(self.typeClass)&lt;br /&gt;
	self:addClass(args.class)&lt;br /&gt;
	self.style = args.style&lt;br /&gt;
	self.attrs = args.attrs&lt;br /&gt;
&lt;br /&gt;
	-- Set text style.&lt;br /&gt;
	self.textstyle = args.textstyle&lt;br /&gt;
&lt;br /&gt;
	-- Set image classes.&lt;br /&gt;
	self.imageRightClass = args.imagerightclass or args.imageclass&lt;br /&gt;
	self.imageLeftClass = args.imageleftclass or args.imageclass&lt;br /&gt;
&lt;br /&gt;
	-- Find if we are on the template page or not. This functionality is only&lt;br /&gt;
	-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory&lt;br /&gt;
	-- and cfg.templateCategoryRequireName are set.&lt;br /&gt;
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields&lt;br /&gt;
	if self.useCollapsibleTextFields&lt;br /&gt;
		or cfg.templateCategory&lt;br /&gt;
		and cfg.templateCategoryRequireName&lt;br /&gt;
	then&lt;br /&gt;
		if self.name then&lt;br /&gt;
			local templateName = mw.ustring.match(&lt;br /&gt;
				self.name,&lt;br /&gt;
				&amp;#039;^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$&amp;#039;&lt;br /&gt;
			) or self.name&lt;br /&gt;
			templateName = &amp;#039;Template:&amp;#039; .. templateName&lt;br /&gt;
			self.templateTitle = getTitleObject(templateName)&lt;br /&gt;
		end&lt;br /&gt;
		self.isTemplatePage = self.templateTitle&lt;br /&gt;
			and mw.title.equals(self.title, self.templateTitle)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Process data for collapsible text fields. At the moment these are only&lt;br /&gt;
	-- used in {{ambox}}.&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- Get the self.issue value.&lt;br /&gt;
		if self.isSmall and args.smalltext then&lt;br /&gt;
			self.issue = args.smalltext&lt;br /&gt;
		else&lt;br /&gt;
			local sect&lt;br /&gt;
			if args.sect == &amp;#039;&amp;#039; then&lt;br /&gt;
				sect = &amp;#039;This &amp;#039; .. (cfg.sectionDefault or &amp;#039;page&amp;#039;)&lt;br /&gt;
			elseif type(args.sect) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				sect = &amp;#039;This &amp;#039; .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == &amp;#039;string&amp;#039; and issue ~= &amp;#039;&amp;#039; and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == &amp;#039;string&amp;#039; and text or nil&lt;br /&gt;
			local issues = {}&lt;br /&gt;
			table.insert(issues, sect)&lt;br /&gt;
			table.insert(issues, issue)&lt;br /&gt;
			table.insert(issues, text)&lt;br /&gt;
			self.issue = table.concat(issues, &amp;#039; &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get the self.talk value.&lt;br /&gt;
		local talk = args.talk&lt;br /&gt;
		-- Show talk links on the template page or template subpages if the talk&lt;br /&gt;
		-- parameter is blank.&lt;br /&gt;
		if talk == &amp;#039;&amp;#039;&lt;br /&gt;
			and self.templateTitle&lt;br /&gt;
			and (&lt;br /&gt;
				mw.title.equals(self.templateTitle, self.title)&lt;br /&gt;
				or self.title:isSubpageOf(self.templateTitle)&lt;br /&gt;
			)&lt;br /&gt;
		then&lt;br /&gt;
			talk = &amp;#039;#&amp;#039;&lt;br /&gt;
		elseif talk == &amp;#039;&amp;#039; then&lt;br /&gt;
			talk = nil&lt;br /&gt;
		end&lt;br /&gt;
		if talk then&lt;br /&gt;
			-- If the talk value is a talk page, make a link to that page. Else&lt;br /&gt;
			-- assume that it&amp;#039;s a section heading, and make a link to the talk&lt;br /&gt;
			-- page of the current page with that section heading.&lt;br /&gt;
			local talkTitle = getTitleObject(talk)&lt;br /&gt;
			local talkArgIsTalkPage = true&lt;br /&gt;
			if not talkTitle or not talkTitle.isTalkPage then&lt;br /&gt;
				talkArgIsTalkPage = false&lt;br /&gt;
				talkTitle = getTitleObject(&lt;br /&gt;
					self.title.text,&lt;br /&gt;
					mw.site.namespaces[self.title.namespace].talk.id&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			if talkTitle and talkTitle.exists then&lt;br /&gt;
                local talkText&lt;br /&gt;
                if self.isSmall then&lt;br /&gt;
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == &amp;#039;#&amp;#039; and &amp;#039;&amp;#039; or &amp;#039;#&amp;#039;) .. talk)&lt;br /&gt;
                    talkText = string.format(&amp;#039;([[%s|talk]])&amp;#039;, talkLink)&lt;br /&gt;
                else&lt;br /&gt;
                    talkText = &amp;#039;Relevant discussion may be found on&amp;#039;&lt;br /&gt;
                    if talkArgIsTalkPage then&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &amp;#039;%s [[%s|%s]].&amp;#039;,&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talk,&lt;br /&gt;
                            talkTitle.prefixedText&lt;br /&gt;
                        )&lt;br /&gt;
                    else&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &amp;#039;%s the [[%s&amp;#039; .. (talk == &amp;#039;#&amp;#039; and &amp;#039;&amp;#039; or &amp;#039;#&amp;#039;) .. &amp;#039;%s|talk page]].&amp;#039;,&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talkTitle.prefixedText,&lt;br /&gt;
                            talk&lt;br /&gt;
                        )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
				self.talk = talkText&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get other values.&lt;br /&gt;
		self.fix = args.fix ~= &amp;#039;&amp;#039; and args.fix or nil&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.date == &amp;#039;&amp;#039; and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate(&amp;#039;F Y&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;span class=&amp;#039;date-container&amp;#039;&amp;gt;&amp;lt;i&amp;gt;(&amp;lt;span class=&amp;#039;date&amp;#039;&amp;gt;%s&amp;lt;/span&amp;gt;)&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
		self.info = args.info&lt;br /&gt;
		if yesno(args.removalnotice) then&lt;br /&gt;
			self.removalNotice = cfg.removalNotice&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the non-collapsible text field. At the moment this is used by all box&lt;br /&gt;
	-- types other than ambox, and also by ambox when small=yes.&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self.text = args.smalltext or args.text&lt;br /&gt;
	else&lt;br /&gt;
		self.text = args.text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- General image settings.&lt;br /&gt;
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv&lt;br /&gt;
	self.imageEmptyCell = cfg.imageEmptyCell&lt;br /&gt;
&lt;br /&gt;
	-- Left image settings.&lt;br /&gt;
	local imageLeft = self.isSmall and args.smallimage or args.image&lt;br /&gt;
	if cfg.imageCheckBlank and imageLeft ~= &amp;#039;blank&amp;#039; and imageLeft ~= &amp;#039;none&amp;#039;&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= &amp;#039;none&amp;#039;&lt;br /&gt;
	then&lt;br /&gt;
		self.imageLeft = imageLeft&lt;br /&gt;
		if not imageLeft then&lt;br /&gt;
			local imageSize = self.isSmall&lt;br /&gt;
				and (cfg.imageSmallSize or &amp;#039;30x30px&amp;#039;)&lt;br /&gt;
				or &amp;#039;40x40px&amp;#039;&lt;br /&gt;
			self.imageLeft = string.format(&amp;#039;[[File:%s|%s%s|alt=]]&amp;#039;, self.typeImage&lt;br /&gt;
				or &amp;#039;Information icon4.svg&amp;#039;, imageSize, self.typeImageNeedsLink and &amp;quot;&amp;quot; or &amp;quot;|link=&amp;quot; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Right image settings.&lt;br /&gt;
	local imageRight = self.isSmall and args.smallimageright or args.imageright&lt;br /&gt;
	if not (cfg.imageRightNone and imageRight == &amp;#039;none&amp;#039;) then&lt;br /&gt;
		self.imageRight = imageRight&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- set templatestyles&lt;br /&gt;
	self.base_templatestyles = cfg.templatestyles&lt;br /&gt;
	self.templatestyles = args.templatestyles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setMainspaceCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	if not cfg.allowMainspaceCategories then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for _, prefix in ipairs{&amp;#039;cat&amp;#039;, &amp;#039;category&amp;#039;, &amp;#039;all&amp;#039;} do&lt;br /&gt;
		args[prefix .. &amp;#039;1&amp;#039;] = args[prefix]&lt;br /&gt;
		nums = union(nums, getArgNums(args, prefix))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- The following is roughly equivalent to the old {{Ambox/category}}.&lt;br /&gt;
	local date = args.date&lt;br /&gt;
	date = type(date) == &amp;#039;string&amp;#039; and date&lt;br /&gt;
	local preposition = &amp;#039;from&amp;#039;&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		local mainCat = args[&amp;#039;cat&amp;#039; .. tostring(num)]&lt;br /&gt;
			or args[&amp;#039;category&amp;#039; .. tostring(num)]&lt;br /&gt;
		local allCat = args[&amp;#039;all&amp;#039; .. tostring(num)]&lt;br /&gt;
		mainCat = type(mainCat) == &amp;#039;string&amp;#039; and mainCat&lt;br /&gt;
		allCat = type(allCat) == &amp;#039;string&amp;#039; and allCat&lt;br /&gt;
		if mainCat and date and date ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local catTitle = string.format(&amp;#039;%s %s %s&amp;#039;, mainCat, preposition, date)&lt;br /&gt;
			self:addCat(0, catTitle)&lt;br /&gt;
			catTitle = getTitleObject(&amp;#039;Category:&amp;#039; .. catTitle)&lt;br /&gt;
			if not catTitle or not catTitle.exists then&lt;br /&gt;
				self:addCat(0, &amp;#039;Articles with invalid date parameter in template&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif mainCat and (not date or date == &amp;#039;&amp;#039;) then&lt;br /&gt;
			self:addCat(0, mainCat)&lt;br /&gt;
		end&lt;br /&gt;
		if allCat then&lt;br /&gt;
			self:addCat(0, allCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setTemplateCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Add template categories.&lt;br /&gt;
	if cfg.templateCategory then&lt;br /&gt;
		if cfg.templateCategoryRequireName then&lt;br /&gt;
			if self.isTemplatePage then&lt;br /&gt;
				self:addCat(10, cfg.templateCategory)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not self.title.isSubpage then&lt;br /&gt;
			self:addCat(10, cfg.templateCategory)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template error categories.&lt;br /&gt;
	if cfg.templateErrorCategory then&lt;br /&gt;
		local templateErrorCategory = cfg.templateErrorCategory&lt;br /&gt;
		local templateCat, templateSort&lt;br /&gt;
		if not self.name and not self.title.isSubpage then&lt;br /&gt;
			templateCat = templateErrorCategory&lt;br /&gt;
		elseif self.isTemplatePage then&lt;br /&gt;
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for i, param in ipairs(paramsToCheck) do&lt;br /&gt;
				if not args[param] then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = tostring(count)&lt;br /&gt;
			end&lt;br /&gt;
			if self.categoryNums and #self.categoryNums &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = &amp;#039;C&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self:addCat(10, templateCat, templateSort)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setAllNamespaceCategories()&lt;br /&gt;
	-- Set categories for all namespaces.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		local allSort = (self.title.namespace == 0 and &amp;#039;Main:&amp;#039; or &amp;#039;&amp;#039;) .. self.title.prefixedText&lt;br /&gt;
		self:addCat(&amp;#039;all&amp;#039;, &amp;#039;Wikipedia message box parameter needs fixing&amp;#039;, allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat(&amp;#039;all&amp;#039;, &amp;#039;Pages with incorrectly substituted templates&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setCategories()&lt;br /&gt;
	if self.title.namespace == 0 then&lt;br /&gt;
		self:setMainspaceCategories()&lt;br /&gt;
	elseif self.title.namespace == 10 then&lt;br /&gt;
		self:setTemplateCategories()&lt;br /&gt;
	end&lt;br /&gt;
	self:setAllNamespaceCategories()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:renderCategories()&lt;br /&gt;
	if not self.hasCategories then&lt;br /&gt;
		-- No categories added, no need to pass them to Category handler so,&lt;br /&gt;
		-- if it was invoked, it would return the empty string.&lt;br /&gt;
		-- So we shortcut and return the empty string.&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- Convert category tables to strings and pass them through&lt;br /&gt;
	-- [[Module:Category handler]].&lt;br /&gt;
	return require(&amp;#039;Module:Category handler&amp;#039;)._main{&lt;br /&gt;
		main = table.concat(self.categories[0] or {}),&lt;br /&gt;
		template = table.concat(self.categories[10] or {}),&lt;br /&gt;
		all = table.concat(self.categories.all or {}),&lt;br /&gt;
		nocat = self.args.nocat,&lt;br /&gt;
		page = self.args.page&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:exportDiv()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag(&amp;#039;b&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&amp;#039;,&lt;br /&gt;
				mw.text.nowiki(&amp;#039;{{&amp;#039;), self.name, self.name, mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	root:wikitext(frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = self.base_templatestyles },&lt;br /&gt;
	})&lt;br /&gt;
	-- Add support for a single custom templatestyles sheet. Undocumented as&lt;br /&gt;
	-- need should be limited and many templates using mbox are substed; we&lt;br /&gt;
	-- don&amp;#039;t want to spread templatestyles sheets around to arbitrary places&lt;br /&gt;
	if self.templatestyles then&lt;br /&gt;
		root:wikitext(frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = self.templatestyles },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box.&lt;br /&gt;
	local mbox = root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
	mbox:attr(&amp;#039;id&amp;#039;, self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		mbox:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	mbox&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		mbox:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local flex_container&lt;br /&gt;
	if self.below then&lt;br /&gt;
		-- we need to wrap the flex components (`image(right)` and `text`) in their&lt;br /&gt;
		-- own container div to support the `below` parameter&lt;br /&gt;
		flex_container = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		flex_container:addClass(&amp;#039;mbox-flex&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		-- the mbox itself is the parent, so we need no HTML flex_container&lt;br /&gt;
		flex_container = mw.html.create()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:addClass(self.imageLeftClass)&lt;br /&gt;
			:wikitext(self.imageLeft or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&amp;#039;mbox-text-span&amp;#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.talk and (&amp;#039; &amp;#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&amp;#039; &amp;#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&amp;#039; &amp;#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.info and (&amp;#039; &amp;#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;i&amp;#039;)&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:addClass(self.imageRightClass)&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mbox:node(flex_container)&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		mbox:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-text mbox-below&amp;#039;)&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-invalid-type&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&amp;#039;,&lt;br /&gt;
				self.type or &amp;#039;&amp;#039;&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:export()&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag(&amp;#039;b&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&amp;#039;,&lt;br /&gt;
				mw.text.nowiki(&amp;#039;{{&amp;#039;), self.name, self.name, mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	root:wikitext(frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = self.base_templatestyles },&lt;br /&gt;
	})&lt;br /&gt;
	-- Add support for a single custom templatestyles sheet. Undocumented as&lt;br /&gt;
	-- need should be limited and many templates using mbox are substed; we&lt;br /&gt;
	-- don&amp;#039;t want to spread templatestyles sheets around to arbitrary places&lt;br /&gt;
	if self.templatestyles then&lt;br /&gt;
		root:wikitext(frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = self.templatestyles },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box table.&lt;br /&gt;
	local boxTable = root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
	boxTable:attr(&amp;#039;id&amp;#039;, self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		boxTable:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	boxTable&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
		:attr(&amp;#039;role&amp;#039;, &amp;#039;presentation&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		boxTable:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	local row = boxTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageLeftCell so that the image&lt;br /&gt;
			-- is inside it. Divs use style=&amp;quot;width: 52px;&amp;quot;, which limits the&lt;br /&gt;
			-- image width to 52px. If any images in a div are wider than that,&lt;br /&gt;
			-- they may overlap with the text or cause other display problems.&lt;br /&gt;
			imageLeftCell = imageLeftCell:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image-div&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:addClass(self.imageLeftClass)&lt;br /&gt;
			:wikitext(self.imageLeft or nil)&lt;br /&gt;
	elseif self.imageEmptyCell then&lt;br /&gt;
		-- Some message boxes define an empty cell if no image is specified, and&lt;br /&gt;
		-- some don&amp;#039;t. The old template code in templates where empty cells are&lt;br /&gt;
		-- specified gives the following hint: &amp;quot;No image. Cell with some width&lt;br /&gt;
		-- or padding necessary for text cell to have 100% width.&amp;quot;&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-empty-cell&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&amp;#039;mbox-text-span&amp;#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.talk and (&amp;#039; &amp;#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&amp;#039; &amp;#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&amp;#039; &amp;#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.info and (&amp;#039; &amp;#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;i&amp;#039;)&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageRightCell so that the image&lt;br /&gt;
			-- is inside it.&lt;br /&gt;
			imageRightCell = imageRightCell:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image-div&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:addClass(self.imageRightClass)&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		boxTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, self.imageRight and &amp;#039;3&amp;#039; or &amp;#039;2&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
				:cssText(self.textstyle or nil)&lt;br /&gt;
				:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-invalid-type&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&amp;#039;,&lt;br /&gt;
				self.type or &amp;#039;&amp;#039;&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p, mt = {}, {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- For testing.&lt;br /&gt;
	return {&lt;br /&gt;
		MessageBox = MessageBox&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(boxType, args, cfgTables)&lt;br /&gt;
	local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))&lt;br /&gt;
	box:setParameters()&lt;br /&gt;
	box:setCategories()&lt;br /&gt;
	-- DIV MIGRATION CONDITIONAL&lt;br /&gt;
	if box.cfg.div_structure then&lt;br /&gt;
		return box:exportDiv()&lt;br /&gt;
	end&lt;br /&gt;
	-- END DIV MIGRATION CONDITIONAL&lt;br /&gt;
	return box:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mt.__index(t, k)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		if not getArgs then&lt;br /&gt;
			getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
		end&lt;br /&gt;
		return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return setmetatable(p, mt)&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Module_talk:Message_box</comments>
		</item>
		<item>
			<title>Template:Yesno-no</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Yesno-no&amp;diff=310&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Yesno-no&amp;diff=310&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Yesno-no&quot; title=&quot;Template:Yesno-no&quot;&gt;Template:Yesno-no&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{safesubst:&amp;lt;noinclude /&amp;gt;yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|Template:Yesno/doc}}&lt;br /&gt;
&amp;lt;!--Categories go in the doc page referenced above; interwikis go in Wikidata.--&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Yesno-no</comments>
		</item>
		<item>
			<title>Template:Yesno</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Yesno&amp;diff=308&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Yesno&amp;diff=308&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Yesno&quot; title=&quot;Template:Yesno&quot;&gt;Template:Yesno&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#switch: {{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;lc: {{{1|¬}}} }}&lt;br /&gt;
 |no&lt;br /&gt;
 |n&lt;br /&gt;
 |f&lt;br /&gt;
 |false&lt;br /&gt;
 |off&lt;br /&gt;
 |0        = {{{no|&amp;lt;!-- null --&amp;gt;}}}&lt;br /&gt;
 |         = {{{blank|{{{no|&amp;lt;!-- null --&amp;gt;}}}}}}&lt;br /&gt;
 |¬        = {{{¬|}}}&lt;br /&gt;
 |yes&lt;br /&gt;
 |y&lt;br /&gt;
 |t&lt;br /&gt;
 |true&lt;br /&gt;
 |on&lt;br /&gt;
 |1        = {{{yes|yes}}}&lt;br /&gt;
 |#default = {{{def|{{{yes|yes}}}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Yesno</comments>
		</item>
		<item>
			<title>Template:Weather Color</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Weather_Color&amp;diff=306&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Weather_Color&amp;diff=306&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Weather_Color&quot; title=&quot;Template:Weather Color&quot;&gt;Template:Weather Color&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;infobox accent-color-source=&amp;quot;BGColor&amp;quot; theme-source=&amp;quot;BorderColor&amp;quot; accent-color-text-source=&amp;quot;FontColor&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title source=&amp;quot;Name&amp;quot;&amp;gt;&amp;lt;default&amp;gt;&amp;lt;center&amp;gt;{{PAGENAME}}&amp;lt;/center&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;image source=&amp;quot;Image&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Titles&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Titles(s)&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Nickname&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Nickname(s)&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Alias&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Alias&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Symbol&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Symbol&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;header&amp;gt;Physical Information&amp;lt;/header&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;gender&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Gender&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;age&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Age&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;pronouns&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Pronouns&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;labels&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Extra Labels&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;species&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Species&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;subspecies&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Subspecies&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;variety&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Variety&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;feature&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Special Feature&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;clothes&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Clothes&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;glasses&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Needs Glasses?&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;weather&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Weather/Phenomena Based Off of&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;header&amp;gt;Societal Information&amp;lt;/header&amp;gt;&lt;br /&gt;
 &amp;lt;group layout=&amp;quot;horizontal&amp;quot; show=&amp;quot;incomplete&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;friends&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;enemies&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;aesthetic&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Aesthetic&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ed&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Encyclopedia Definition&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;powers&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Powers&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;dad&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;mom&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;siblings&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;cousins&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
         &amp;lt;group layout=&amp;quot;horizontal&amp;quot; show=&amp;quot;incomplete&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;aunts&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;uncles&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;data source=&amp;quot;children&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
	&amp;lt;data source=&amp;quot;birthday&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Birthday&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;occupation&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Occupation&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;so&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Sexual Orientation&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Education Level&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;alignment&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Alignment&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;sanity&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Sanity&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;status&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Status&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ao&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Alternate Outfit&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;fe&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Favorite Events&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Event Made For/During&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;disorder&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Disorder&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;team&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Team&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;header&amp;gt;Statistics&amp;lt;/header&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;strength&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Strength&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;agility&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Agility&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;iq&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Intelligence&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;stamina&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Stamina&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;vitality&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Vitality&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;charisma&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Charisma&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;accuracy&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Accuracy&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;luck&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Luck&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ability&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Ability&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
		&amp;lt;data source=&amp;quot;ability2&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Second Ability&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;rarity&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Rarity&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/infobox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Weather_Color</comments>
		</item>
		<item>
			<title>Template:Weapon Color</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Weapon_Color&amp;diff=304&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Weapon_Color&amp;diff=304&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Weapon_Color&quot; title=&quot;Template:Weapon Color&quot;&gt;Template:Weapon Color&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;infobox accent-color-source=&amp;quot;BGColor&amp;quot; theme-source=&amp;quot;BorderColor&amp;quot; accent-color-text-source=&amp;quot;FontColor&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title source=&amp;quot;Name&amp;quot;&amp;gt;&amp;lt;default&amp;gt;&amp;lt;center&amp;gt;{{PAGENAME}}&amp;lt;/center&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;image source=&amp;quot;Image&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Titles&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Titles(s)&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Nickname&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Nickname(s)&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Alias&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Alias&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Symbol&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Symbol&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;header&amp;gt;Physical Information&amp;lt;/header&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;gender&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Gender&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;age&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Age&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;pronouns&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Pronouns&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;labels&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Extra Labels&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;species&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Species&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;subspecies&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Subspecies&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;variety&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Variety&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;feature&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Special Feature&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;clothes&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Clothes&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;glasses&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Needs Glasses?&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;character&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Character Based Off of&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;header&amp;gt;Societal Information&amp;lt;/header&amp;gt;&lt;br /&gt;
 &amp;lt;group layout=&amp;quot;horizontal&amp;quot; show=&amp;quot;incomplete&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;friends&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;enemies&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;aesthetic&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Aesthetic&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ed&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Encyclopedia Definition&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;powers&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Powers&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;dad&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;mom&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;siblings&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;cousins&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
         &amp;lt;group layout=&amp;quot;horizontal&amp;quot; show=&amp;quot;incomplete&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;aunts&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;uncles&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;data source=&amp;quot;children&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
	&amp;lt;data source=&amp;quot;birthday&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Birthday&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;occupation&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Occupation&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;so&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Sexual Orientation&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Education Level&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;alignment&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Alignment&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;sanity&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Sanity&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;status&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Status&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ao&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Alternate Outfit&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;fe&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Favorite Events&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Event Made For/During&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;disorder&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Disorder&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;team&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Team&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;header&amp;gt;Statistics&amp;lt;/header&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;strength&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Strength&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;agility&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Agility&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;iq&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Intelligence&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;stamina&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Stamina&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;vitality&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Vitality&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;charisma&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Charisma&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;accuracy&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Accuracy&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;luck&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Luck&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ability&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Ability&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
		&amp;lt;data source=&amp;quot;ability2&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Second Ability&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;rarity&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Rarity&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/infobox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Weapon_Color</comments>
		</item>
		<item>
			<title>Template:WIP</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:WIP&amp;diff=302&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:WIP&amp;diff=302&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:WIP&quot; title=&quot;Template:WIP&quot;&gt;Template:WIP&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background: #F3E5F5; border: 1px solid #AB47BC; border-left: 4px solid #6A1B9A; border-radius: 4px; padding: 12px 15px; margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; align-items: flex-start;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 22px; margin-right: 12px;&amp;quot;&amp;gt;✏️&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; color: #6A1B9A; margin-bottom: 4px;&amp;quot;&amp;gt;Work in Progress&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: #4A148C; line-height: 1.5;&amp;quot;&amp;gt;This page is being actively edited{{#if:{{{user|}}}| by &amp;#039;&amp;#039;&amp;#039;[[User:{{{user}}}|{{{user}}}]]&amp;#039;&amp;#039;&amp;#039;|}}. Please avoid making major changes until this notice is removed.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:WIP</comments>
		</item>
		<item>
			<title>Template:View</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:View&amp;diff=300&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:View&amp;diff=300&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:View&quot; title=&quot;Template:View&quot;&gt;Template:View&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#invoke:navbar|navbar|plain = 1|template = {{{template|{{{1|}}}}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|Template:Navbar/doc}} &lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:View</comments>
		</item>
		<item>
			<title>Template:Userbox</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Userbox&amp;diff=298&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Userbox&amp;diff=298&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Userbox&quot; title=&quot;Template:Userbox&quot;&gt;Template:Userbox&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#invoke:userbox|userbox}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Userbox</comments>
		</item>
		<item>
			<title>Template:Underlinked</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Underlinked&amp;diff=296&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Underlinked&amp;diff=296&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Underlinked&quot; title=&quot;Template:Underlinked&quot;&gt;Template:Underlinked&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{ safesubst:&amp;lt;noinclude/&amp;gt;#invoke:Unsubst||date=__DATE__ |$B=&lt;br /&gt;
&amp;lt;!--{{Underlinked}} begin--&amp;gt;{{Ambox&lt;br /&gt;
| name  = Underlinked&lt;br /&gt;
| type  = style&lt;br /&gt;
| image = [[File:Ambox wikify.svg|50x40px|link=|alt=]]&lt;br /&gt;
| issue = This {{{1|article}}} &amp;#039;&amp;#039;&amp;#039;needs more [[Wikipedia:Manual of Style/Linking|links to other articles]] to help [[Wikipedia:Manual of Style/Linking#Principles|integrate it into the encyclopedia]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
| fix   = Please help [{{fullurl:{{FULLPAGENAME}}|action=edit}} improve this article] by adding links [[Wikipedia:Manual of Style/Linking#Overlinking and underlinking|that are relevant to the context]] within the existing text.&lt;br /&gt;
| removalnotice = yes&lt;br /&gt;
| date  = {{{date|}}}&lt;br /&gt;
| cat   = Articles with too few wikilinks&lt;br /&gt;
| all   = All articles with too few wikilinks&lt;br /&gt;
| cat2  = Articles covered by WikiProject Wikify&lt;br /&gt;
| all2  = All articles covered by WikiProject Wikify&lt;br /&gt;
}}&amp;lt;!--{{Underlinked}} end--&amp;gt;&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Underlinked</comments>
		</item>
		<item>
			<title>Template:Under Construction</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Under_Construction&amp;diff=294&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Under_Construction&amp;diff=294&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Under_Construction&quot; title=&quot;Template:Under Construction&quot;&gt;Template:Under Construction&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFF9C4; border: 1px solid #F9A825; border-left: 4px solid #F57F17; border-radius: 4px; padding: 12px 15px; margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; align-items: flex-start;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 22px; margin-right: 12px;&amp;quot;&amp;gt;🚧&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex: 1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; color: #F57F17; margin-bottom: 4px;&amp;quot;&amp;gt;Under Construction&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: #7A5C00; line-height: 1.5;&amp;quot;&amp;gt;This page is currently under construction. Information may be incomplete or subject to change.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Under_Construction</comments>
		</item>
		<item>
			<title>Template:Tyler Navbox</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Tyler_Navbox&amp;diff=292&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Tyler_Navbox&amp;diff=292&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Tyler_Navbox&quot; title=&quot;Template:Tyler Navbox&quot;&gt;Template:Tyler Navbox&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Navbox&lt;br /&gt;
|name       = Tyler, the creator Navbox&lt;br /&gt;
|title      = Tyler, the creator Navbox&lt;br /&gt;
|basestyle = background: #006400;&lt;br /&gt;
|imageleft  = &lt;br /&gt;
|above      = &lt;br /&gt;
|group1     = Songs&lt;br /&gt;
|list1      = [[St. Chroma(song)]] • [[Rah Tah Tah]] • [[Noid]] • [[Darling, I]] • [[Hey Jane]] • [[I Killed You]] • [[Judge Judy]] • [[Sticky]] • [[Take Your Mask Off]] • [[Tomorrow]] • [[Thought I Was Dead]] • [[Like Him]] • [[Balloon]] • [[I Hope You Find Your Way Home]] •  [[Goblin (song)|Goblin]] • [[Yonkers]] • [[Radicals]] • [[She]] • [[Transylvania]] • [[Nightmare]] • [[Tron_Cat_(song)|Tron Cat]] •  [[Her]] • [[Sandwitches]] • [[Fish]] • [[Analog]] • [[B*tch Suck D*ck]] • [[Window]] • [[AU79]] • [[Golden]] • [[Burger]] • [[Untitled 63]] • [[Steak Sauce]] • [[Wolf_(song)|Wolf]] • [[Jamba]] • [[Cowboy]] • [[Awkward]] • [[Domo23]] • [[Answer]] • [[Slater]] • [[48]] • [[Colossus]] • [[PartyIsntOver / Campfire / Bimmer]] • [[IFHY]] • [[Pigs]] • [[Parking Lot]] • [[Rusty]] • [[Trashwang]] • [[Treehome95]] • [[Tamale]] • [[Lone]] • [[Deathcamp]] • [[Buffalo]] • [[Pilot]] • [[Run]] • [[Find Your Wings]] • [[Cherry Bomb (song)]] • [[Blow My Load]] • [[2Seater]]  • [[The Brown Stains of Darkeese Latifah Part 6-12 (Remix) ]] • [[Fucking Young / Perfect]] • [[Smuckers]] • [[Keep Da O’s]] • [[Okaga, CA]] • [[Foreword]] • [[Where This Flower Blooms]] • [[Sometimes…]] • [[See You Again]] • [[Who Dat Boy]] • [[Pothole]] • [[Garden Shed]] • [[Boredom]] • [[I Ain’t Got Time!]] • [[911 / Mr. Lonely]] • [[Droppin’ Seeds]] • [[November]] • [[Glitter]] • [[Enjoy Right Now, Today]] • [[Igor&amp;#039;s Theme]] • [[Earfquake]] • [[I Think]] • [[Exactly What You Run from You End Up Chasing]] • [[Running Out of Time]] • [[New Magic Wand]] • [[A Boy Is a Gun]] • [[Puppet]] • [[What&amp;#039;s Good]] • [[Gone, Gone / Thank You]] • [[I Don&amp;#039;t Love You Anymore]] • [[Are We Still Friends?]] • [[Boyfriend]] •  [[Sir Baudelaire]] • [[Corso]] • [[Lemonhead]] • [[WusYaName]] • [[Lumberjack]] • [[Hot Wind Blows]] • [[Massa]] • [[RunItUp]] • [[Manifesto]] • [[Sweet / I Thought You Wanted to Dance]] • [[Momma Talk]] • [[Rise!]] • [[Blessed]] • [[Juggernaut]] • [[Wilshire]] • [[Safari]] •  [[Everything Must Go]] • [[Stuntman]] • [[What a Day]] • [[Wharf Talk]] • [[Dogtooth]] • [[Heaven to Me]] • [[Boyfriend, Girlfriend (2020 Demo)]] • [[Sorry Not Sorry]]&lt;br /&gt;
|below=&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Tyler_Navbox</comments>
		</item>
		<item>
			<title>Template:Tribecolor</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Tribecolor&amp;diff=290&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Tribecolor&amp;diff=290&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Tribecolor&quot; title=&quot;Template:Tribecolor&quot;&gt;Template:Tribecolor&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://animalcookie.trumpetz.com/index.php?title=Template:Tribecolor&amp;amp;diff=290&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Tribecolor</comments>
		</item>
		<item>
			<title>Template:Toy Color</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Toy_Color&amp;diff=288&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Toy_Color&amp;diff=288&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Toy_Color&quot; title=&quot;Template:Toy Color&quot;&gt;Template:Toy Color&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;infobox accent-color-source=&amp;quot;BGColor&amp;quot; theme-source=&amp;quot;BorderColor&amp;quot; accent-color-text-source=&amp;quot;FontColor&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title source=&amp;quot;Name&amp;quot;&amp;gt;&amp;lt;default&amp;gt;&amp;lt;center&amp;gt;{{PAGENAME}}&amp;lt;/center&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;image source=&amp;quot;Image&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Titles&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Titles(s)&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Nickname&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Nickname(s)&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Alias&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Alias&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;data source=&amp;quot;Symbol&amp;quot;&amp;gt;&amp;lt;label&amp;gt;Symbol&amp;lt;/label&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;header&amp;gt;Physical Information&amp;lt;/header&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;gender&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Gender&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;age&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Age&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;pronouns&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Pronouns&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;labels&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Extra Labels&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;species&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Species&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;subspecies&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Subspecies&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;variety&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Variety&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;feature&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Special Feature&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;clothes&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Clothes&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;glasses&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Needs Glasses?&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;toy&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Toy Based Off of&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;header&amp;gt;Societal Information&amp;lt;/header&amp;gt;&lt;br /&gt;
 &amp;lt;group layout=&amp;quot;horizontal&amp;quot; show=&amp;quot;incomplete&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;friends&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;enemies&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;aesthetic&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Aesthetic&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ed&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Encyclopedia Definition&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;powers&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Powers&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;dad&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;mom&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;siblings&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;cousins&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
         &amp;lt;group layout=&amp;quot;horizontal&amp;quot; show=&amp;quot;incomplete&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;data source=&amp;quot;aunts&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;	&lt;br /&gt;
        &amp;lt;data source=&amp;quot;uncles&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;data source=&amp;quot;children&amp;quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
	&amp;lt;data source=&amp;quot;birthday&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Birthday&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;occupation&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Occupation&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;so&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Sexual Orientation&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Education Level&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;alignment&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Alignment&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;sanity&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Sanity&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;status&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Status&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ao&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Alternate Outfit&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;fe&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Favorite Events&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Event Made For/During&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;disorder&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Disorder&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data source=&amp;quot;team&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Team&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;header&amp;gt;Statistics&amp;lt;/header&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;strength&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Strength&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;agility&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Agility&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;iq&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Intelligence&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;stamina&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Stamina&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;vitality&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Vitality&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;charisma&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Charisma&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;accuracy&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Accuracy&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;luck&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Luck&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;ability&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Ability&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
		&amp;lt;data source=&amp;quot;ability2&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Second Ability&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;data source=&amp;quot;rarity&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label&amp;gt;Rarity&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/infobox&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Toy_Color</comments>
		</item>
		<item>
			<title>Template:Tlx</title>
			<link>https://animalcookie.trumpetz.com/index.php?title=Template:Tlx&amp;diff=286&amp;oldid=0</link>
			<guid isPermaLink="false">https://animalcookie.trumpetz.com/index.php?title=Template:Tlx&amp;diff=286&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Buildababe&quot; class=&quot;mw-userlink&quot; title=&quot;User:Buildababe&quot;&gt;&lt;bdi&gt;Buildababe&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Tlx&quot; class=&quot;mw-redirect&quot; title=&quot;Template:Tlx&quot;&gt;Template:Tlx&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Template link expanded]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 09 Apr 2026 23:40:45 GMT</pubDate>
			<dc:creator>Buildababe</dc:creator>
			<comments>https://animalcookie.trumpetz.com/index.php/Template_talk:Tlx</comments>
		</item>
</channel></rss>